lunes, 4 de agosto de 2014

Ley 5189/14 - La Ley que puede cambiar el futuro del Paraguay

“QUE ESTABLECE LA OBLIGATORIEDAD DE LA PROVISIÓN DE INFORMACIONES EN EL USO DE LOS RECURSOS PÚBLICOS SOBRE REMUNERACIONES Y OTRAS RETRIBUCIONES ASIGNADAS AL SERVIDOR PÚBLICO DE LA REPÚBLICA DEL PARAGUAY”.

Marcelo Elizeche @melizeche hizo un trabajo muy útil e interesante de pasar a CSV los archivos que las bi-nacionales (y  otras instituciones del gobierno) colocan en pdf, flash, jpg, ere erea, todo lo que lleve más tiempo procesar y dificulte el acceso.
Yo colaboré un poco, empezando una BD utilizando la base de datos h2, motivo principal por el que quería compartir con Uds. esto:

Estos son los CSV originales

http://melizeche.com/eby/permanentesycontratados.csv
http://melizeche.com/itaipu/itaipu.csv

Aquí están ya en formato backup de H2

https://github.com/alefq/ley_5189_2014

Lo interesantísimo del H2, es que ahora viene con una aplicación web para DBA, que así como está ya le hace un 6-0 al pgadmin (cosa que no es muy difícil de lograr :D ).
En fin, H2 está hecho en Java y puede ser interesante de seguir para quiénes necesiten un GUI WEB básico para operaciones SQL.
http://www.h2database.com/html/main.html

Otra cosa interesante de esta BD, es que tienen "Compatibility Modes" para los motores más famosos, lo cual facilita el uso del SQL para gente que viene de otras marcas.
Colaboraciones, son bienvenidas.

Ale

viernes, 14 de junio de 2013

To cloud or not to cloud

Hace unos meses, un cliente nos pidió que realicemos un estudio de factibilidad  para pasar algunos de sus servicios a hosting en la nube (cloud services: SaaS. PaaS, IaaS), de ese análisis y una sugerencia de @danicricco (Gracias Dani), surge este post.
Es notorio el auge que tienen estos servicios en el primer mundo, y uno de los principales motivos argumentados es el ahorro de costos de mantenimiento, tanto de hardware, como operativos y de servicio técnico, lo cual es relativo, sobre todo cuando lo trasladamos a la realidad de Paraguay, y países con economías, calidad/precio de internet y avances en infraestructura del país en general similares.
Al calcular el costo para tus cloud services, debes hacerlo a 4 o 5 años, la cual es la vida promedio de un servidor físico con garantía del fabricante o proveedor. Además debes tener en cuenta también que hoy en día con la virtualización, la "obsolescencia" o fin de la garantía de tu equipo hardware no significa que tus aplicaciones se vayan con el servidor; a los 5 años puedes adquirir un nuevo equipo, con una nueva garantía y mover tus máquinas virtuales al nuevo host.
Como leí en una discusión de Slashdot al respecto, para el tercer mundo y un servidor de correo hosteado por ejemplo en Google Apps, esto se traduciría en:
"Si estás en la nube y te quedas sin internet no perderás correo y el mundo podrá enviarte comunicaciones, pero no podrás acceder a ellas mientras estés sin conexión. Si tienes un servidor propio, tendrás acceso a los correos que ya llegaron a tu servidor, podrás escribir nuevos; pero el mundo no los recibirá ni podrá enviarte nuevos hasta que vuelvas a estar en línea".
Es obvio que para un sistema de gestión de una empresa, esto es aún más crítico, imagina que el único ingreso de dinero para el negocio, sea la venta por caja y esto lo tengan hosteado en cloud services y a una hora pico se queden sin internet, el panic button estará conectado a un piso falso que te hundirá cuando el dueño del negocio lo presione después de que tu recomendación para hosting in the cloud le haga perder un montón de dinero, ya que probablemente  le importará poco  su "ahorro" en cosas que él poco o nada entiende, si eso le cuesta clientes insatisfechos y le resta ingresos.
O si concretar un negocio, a nivel local donde no necesitás más que conexiones dentro del backbone nacional, dependa de un informe que te envíen por correo. Si tu correo está en la nube, sin salida a internet, pierdes el negocio o tomarías una mala decisión que te haría perder un vagón de dinero.
O el caso en el que el dueño de un cine decida que ya no adquirirá copias de películas para exhibirlas en su sala, sino que usará Netflix y hará streaming HD o 4K UHD (videos de 4K). Sin internet o con un internet de mala calidad, se queda sin negocio al mes de malos episodios con su clientela.
Si introducimos el factor de "calidad asegurada" (Quality Assured/QA) de los proveedores de Internet en Paraguay, la respuesta al título de este post queda aún más obvia.
Copaco uno de los principales proveedores de internet del país, con la tecnología de Fibra Óptica (F.O.) en uno de los mejores paquetes comercial y popularmente disponibles para la mayoría, garantiza apenas un 17% del ancho de banda real.  !DIECISIETE PORCIENTO! Leíste bien, aquí la info del sitio:
MIR: Máximo ancho de banda disponible [Esto sería lo que te venden]
Ancho de banda comprometido CIR:17% del MIR [Esto es lo que te pueden asegurar]


Es decir que 1 Mbps de su salida internacional, se comparte aprox. entre 6 clientes. Eso significa que si todos los clientes de copaco con quienes compartes tu ancho de banda, están usando todo lo que pueden disponer para descargar, obtendrás aproximadamente ese 17% de 1Mbps de rendimiento.
Esto no es exclusividad de Copaco, es parte del negocio, si averiguás cuanto cuesta 1Mbps de salida a algún backbone internacional, te puedo asegurar que costará mucho más que los 20 a 30 USD que sale en promedio en Paraguay. De hecho, tendrías que comprar miles de MBps. porque esos proveedores no son minoristas, así que estamos estancados con lo que Copaco, Tigo, Personal y los demás retail ISPs pueden ofrecernos.
Tigo Cable Hogar, es como su nombre lo dice "para el hogar", a pesar de que los vendedores te dicen que es "internet por fibra y de mejor calidad que el ADSL", la realidad es que es más por cable que por fibra y funciona peor que el ADSL. El estándar que utilizan son de tipo DOCSIS http://en.wikipedia.org/wiki/DOCSIS (algunos modelos de los cable modems Motorola que vi, usan este protocolo, si bien hay versiones propietaras también que hacen transporte de datos a altas velocidades por el cable coaxial); sus velocidades son mejores que wimax pero inferiores a fibra pura. El DOCSIS es de por sí, un híbrido, parte en fibra y la mayor parte por cable.
En particular, tuve malas experiencias con el rendimiento de Tigo Internet Hogar, he aquí algunos resultados de http://speedtest.net alternando servidores para las pruebas: http://goo.gl/l9aam
Para finalizar, les comparto una planilla, con los tiempos reales que tendrían si quieren garantizar algún servicio (comprometer calidad con contratos), en base a lo que Copaco o un proveedor similar que les dé 17% de ancho de banda asegurado, les permita.
Para que tengas una idea:

Con una calidad asegurada de 17%, si tienes contratado 20 MBbps, para descargar un video de 1080p (Full HD), que aproximadamente tendría 2GB, necesitás 1.40 horas, es decir 1h 24 min.



Los canales de Tigo HD a la fecha (2013/06) son de 720p.


Anális de tiempos de descarga por ancho de banda: http://goo.gl/pVQ7n  


Necesitarías 4Mbps en el caso de que algún proveedor pueda ofrecerte una garantía de ancho de banda cercano al 100% (100% es en la teoría, en la realidad el rendimiento óptimo que obtendrás será cercano a eso).  2GB es una "regla de pulgar", es aproximadamente el tamaño en streaming de 1 hora. La dimensión real depende del algoritmo de codificación utilizado para la compresión.

Para poder ver tranquilo un video a 1080p (es decir poder descargar 2GB en 1 hora o menos), necesitas una conexión de 20Mbps con una garantía de calidad de al menos 25%.



Ningún proveedor de internet podrá mantener sus precios y su calidad percibida a la actualidad, si todos los usuarios están descargando a todo lo que dé su ancho de banda todo el tiempo.
En 17 años de internet en el país, con más o menos 12 años de conexiones "banda ancha", hasta hoy no he visto que se pueda mantener la descarga a full ancho de banda, 24 x 7.
Si bien los análisis fueron orientados a video para este artículo, en el archivo encontrarás también lo que tenga que ver con datos en términos de Bytes simplemente.
Un sistema de gestión tradicional Cliente/Servidor, dependiendo de cómo esté construido puede generar mucho tráfico de y hacia el servidor. Una VPN de 1Mbps. suele ser suficiente para unas pocas terminales clientes, pero ¿qué pasaría si las lleváramos a un cloud server? Con un servicio que nos garantiza 17%, necesitaríamos contratar 6Mbps. en lugar de 1Mbps. para que nuestro sistema funcione "igual de bien" .  
Utilizar cloud services, debe ser una decisión tomada por expertos, que conozcan al detalle el tráfico de red generado por el funcionamiento de tu empresa y que puedan medir efectivamente la calidad real de tus proveedores de internet, de lo contrario la medicina puede ser peor que la enfermedad.

miércoles, 9 de mayo de 2012

Como tener control de versiones a cambios en el Jboss en GNU/Linux



Como tener control de versiones a cambios en el Jboss en GNU/Linux

Mediante el GIT, uno puede tener repositorios de versiones de archivos en forma local, sin necesidad de tener un servidor. Esta funcionalidad es una utilidad extraordinaria para los desarrolladores.
En el caso del proyecto en el que estoy trabajando, estoy investigando sobre funcionalidades de auditoría para el Jboss, lo que implica varios cambios y pruebas que hacer, a las configuraciones.
En lugar de la tradicional copia de seguridad del directorio completo, decidí usar el GIT, con eso gano muchas nuevas funcionalidades, propias de la mayoría de los sistemas de manejo de versiones, como el CVS, SVN, GIT, etc.
Un archivo clave para iniciar el versionamiento, es el .gitignore
Comparto un archivo que utilizamos para proyectos JEE, y que lo modifiqué para que sirva también para versionado del JBOSS


# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
*.lo
*.Plo
*.Po
*.la
*.pc
*Makefile

# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip

# Logs and databases #
######################
*.log
*.sqlite

# OS generated files #
######################
.DS_Store*
ehthumbs.db
Icon?
Thumbs.db

# Cuestiones de projectos Java, Eclipse y Maven
######################
target/
.externalToolBuilders
.metadata
.factorypath
Servers/
RemoteSystemsTempFiles/
build/
.project
.classpath
.settings
.externalToolBuilders
#
# recursos no versionados del JBOSS
#
server/default/data
#El directorio del proyecto principal en el que se esta trabajando
server/default/deploy/mbohape.war
server/default/log
server/default/tmp
server/default/work
Ese archivo tienes que colocarlo en el directorio principal de tu jboss, en nuestro caso es:

guest-9207Ug@kate /tmp/jboss-6.0 $ ls -l .gitignore
-rw-rw-r-- guest-9207Ug guest-9207Ug 877 2012-05-09 10:47 .gitignore

En el siguiente video, puedes ver los pasos para inicializar el repositorio, realizar el primer commit, hacer un cambio y su respectivo commit y como ver el historial de cambios realizados.



jueves, 5 de abril de 2012

Contar líneas de código de un proyecto (SLOC) JEE

 Una forma de medir el tamaño o la complejidad de un proyecto es por la cantidad de líneas de código. (SLOC - Wikipedia)
Existen muchos debates sobre la utilidad real de esta medida, por ej: Cuánta cantidad de esas líneas fueron autogeneradas por wizzards, o cuánto se refactoreó (¿Qué pasa con la cantidad de líneas de código escritas pero reemplazadas?), o cuántas se trajo de otro proyecto, en el caso de proyectos de Software Libre, etc. Como verán, existen varios factores que considerar, por lo que no voy a entrar en demasiados detalles al respecto.
Como tantas cosas en la informática, es una herramienta más, cada proyecto le encontrará su utilidad, según su ambiente.
Comparto un script muy sencillo, que hace uso de herramientas clásicas de un shell Unix, lo desarrollé en Ubuntu 11.04, pero debería funcionar sin muchos cambios en cualquier ambiente tipo Unix.
Como me dedico casi exclusivamente a proyectos de tipo JEE, está orientado a contar los principales tipos de archivos utilizados en dicho desarrollo.
Este script cuenta el total de líneas de código por tipo de archivo, muestra los 10 más extensos y un total general por cada tipo.

-- inicio de  lineas-de-codigo.sh --
#!/bin/bash
#
# Cuenta lineas de codigo de un proyecto JEE
#
# consultas o sugerencias: alefeltes [ en ] gmail [punto] com
#
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see .
#

#Mostrar como maximo este numero de lineas
MAX_RANKING_TO_SHOW=10
#el primer parametro recibido ó el directorio de los codigos fuentes harcoded
DIR_SOURCE_CODE=${1:-"/home/usuario/svn"}
echo "Directorio: $DIR_SOURCE_CODE"
echo "Mostrando la cantidad de lineas de codigo por archivo y los  \
    $MAX_RANKING_TO_SHOW mas extensos"
echo  "Contamos la cantidad de lineas JAVA"
find $DIR_SOURCE_CODE -name "*.java" | xargs wc -l | sort -n | \
    tail -$MAX_RANKING_TO_SHOW
echo "FIN TOTAL_JAVA"
echo ""
echo  "Contamos la cantidad de lineas XHTML"
find $DIR_SOURCE_CODE -name "*.xhtml" | grep -v .metadata | xargs wc -l | \
    sort -n | tail -$MAX_RANKING_TO_SHOW
echo "FIN TOTAL_XHTML"
echo ""
echo  "Contamos la cantidad de lineas CSS, excluimos los javascript de otros \
    proyectos como el birt, y cia. y también los del Eclipse"
find $DIR_SOURCE_CODE -name "*.css" | grep -v birt | grep -v scriptacu | \
    grep -v bigdecimal | grep -v proto | grep -v .metadata | grep -v platform | \
    xargs wc -l | sort -n | tail -$MAX_RANKING_TO_SHOW
echo "FIN TOTAL_CSS"
echo ""
echo  "Contamos la cantidad de lineas JAVASCRIPT, excluimos los javascript de \
    otros proyectos como el birt, y cia. y también los del Eclipse"
find $DIR_SOURCE_CODE -name "*.js" | grep -v birt | grep -v scriptacu |
    grep -v bigdecimal | grep -v proto | grep -v .metadata | xargs wc -l |
    sort -n | tail -$MAX_RANKING_TO_SHOW
echo "FIN TOTAL_JS"
echo ""

 -- fin de  lineas-de-codigo.sh --

Un ejemplo de la ejecución
afeltes@kate ~ $ ./lineas-de-codigo.sh /opt/desarrollo/sources/mbohape/ 
Directorio: /opt/desarrollo/sources/mbohape/
Mostrando la cantidad de lineas de codigo por archivo y los   10 mas extensos
Contamos la cantidad de lineas JAVA
   694 /opt/desarrollo/sources/mbohape/generador-entities/src/org/ticpy/intercambio/Defunciones.java
  1077 /opt/desarrollo/sources/mbohape/mbohape/src/main/java/org/ticpy/util/BeanUtil.java
  1095 /opt/desarrollo/sources/mbohape/mbohape/src/main/java/org/ticpy/util/GenericUtil.java
  1139 /opt/desarrollo/sources/mbohape/mbohape/src/main/java/org/ticpy/ws/Nacimientos.java
  1308 /opt/desarrollo/sources/mbohape/RemoteWSTestClient/src/org/ticpy/ws/Nacimientos.java
  1364 /opt/desarrollo/sources/mbohape/RemoteWSTestClient/src/org/ticpy/ws/Personas.java
  1371 /opt/desarrollo/sources/mbohape/mbohape/src/main/java/org/ticpy/ws/Personas.java
  1848 /opt/desarrollo/sources/mbohape/RemoteWSTestClient/src/org/ticpy/ws/Defunciones.java
  1854 /opt/desarrollo/sources/mbohape/mbohape/src/main/java/org/ticpy/ws/Defunciones.java
 19590 total
FIN TOTAL_JAVA

Contamos la cantidad de lineas XHTML
  20 /opt/desarrollo/sources/mbohape/mbohape/src/main/webapp/WEB-INF/templates/default.xhtml
  46 /opt/desarrollo/sources/mbohape/mbohape/src/main/webapp/index.xhtml
  60 /opt/desarrollo/sources/mbohape/mbohape/src/main/webapp/persona.xhtml
 126 total
FIN TOTAL_XHTML

Contamos la cantidad de lineas CSS, excluimos los javascript de otros  proyectos como el birt, y cia. y...
40 /opt/desarrollo/sources/mbohape/mbohape/src/main/webapp/resources/css/screen.css
FIN TOTAL_CSS

Contamos la cantidad de lineas JAVASCRIPT, excluimos los javascript de  otros proyectos como el birt, y cia. y...
0
FIN TOTAL_JS

domingo, 25 de marzo de 2012

Historial de historiales de líneas de comando en el Bash

En Unix (Linux,*BSD, etc), sobre todo si eres un administrador de sistemas, y estas constantemente ejecutando líneas de comando en una terminal, ya sea localmente o con una conexión ssh, recordar todas las líneas de comando que ejecutaste alguna vez en tu vida, puede ahorrarte mucho tiempo y muchas leídas del man.
El BASH es uno de los shell más comunes hoy en día, y tiene su funcionalidad propia para recordar una cantidad de líneas ejecutadas, o una cantidad de KB de tamaño, para el archivo de historial.
Este por lo general se encuentra en

$HOME/.bash_history

Lo primero que había hecho, un tiempo atrás, fue aumentar la capacidad del historial, pero esto a la larga hacía que mi sesión de shell tardara más en ejecutarse, ya que el bash carga el historial en memoria, con lo cual es rápidamente accesible mediante el shorcut para el buscador: CLTR-R.
Esto me permitía buscar entre los comando recientemente ejecutados, todos aquellos que estaban en el history actual.
El problema se presentaba cuando este archivo llegaba a su máxima capacidad y se empezaba a peder el historial de los comandos más antiguos.
Fue entonces cuando decidí crear esta pareja de scripts, que guardan un historial de historiales.
Te recomiendo colocarlos en una ruta bajo tu path de ejecución. Yo lo tengo en  /usr/local/bin

-- inicio de  /usr/local/bin/backup-historial.sh --

#!/bin/bash
#
# Copia el historial y luego crea un archivo sin duplicados
# desde donde luego se puede consultar con el comando Buscar.sh
#
# Se recomienda colocar la ejecucion de este script al final del\
# $HOME/.bashrc y al final  del $HOME/.bash_logout de esa forma,
# se persisten la mayor cantidad de comandos
#
# Este es un shell script gratuito distribuido bajo la licencia
# GNU GPL version 3.0
# Copyright (C) 2012 Ale Feltes
#
# alefeltes \en\ gmail \punto\ com
#

#la fecha en formato AAAA-mm-dd
STAMP="`date +%F`"

#el directorio bajo el $HOME donde se guardan los historicos
DIR="$HOME/sysadmin/historicos-bash"
if [ ! -d $DIR ]; then
    mkdir -pv $DIR
fi

#copiamos el historial actual, con la fecha actual
cp -vf $HOME/.bash_history $DIR/history-${STAMP}
cd $DIR

#concatenamos todos los historiales, ordenamos y eliminamos
#duplicados
cat history-* | sort | uniq   > /tmp/history-global-$UID

#finalmente movemos al archivo unico con el $UID
mv -vf /tmp/history-global-$UID .

-- fin de  /usr/local/bin/backup-historial.sh --

Para el script que consulta los historiales, utilizo la primera letra en mayúscula, para facilitarme el autocompletado con el TAB

-- inicio de  /usr/local/bin/Buscar.sh --

#!/bin/bash
#
# Busca en el history del bash una cadena
#
# Este es un shell script gratuito distribuido bajo la licencia
# GNU GPL version 3.0
# Copyright (C) 2012 Ale Feltes
#
# alefeltes \en\ gmail \punto\ com
#

#buscamos en el historial actual y en el historial general guardado
#con el script /usr/local/bin/backup-historial.sh
cat $HOME/.bash_history $HOME/sysadmin/historicos-bash/history-global-$UID \
    | grep $1 | sort | uniq
-- fin de  /usr/local/bin/Buscar.sh --

Como se puede leer en el primer script, es recomendado que lo coloques en los archivos  

$HOME/.bashrc : para que se ejecute cada vez que abras un shell, y en el $HOME/.bash_logout : para que se ejecute y haga la copia del historial, cada cierre de sesión de un shell.


sábado, 3 de marzo de 2012

Velocidad real de un Pen Drive USB 3.0

Hace poco perdí la paciencia con un pen drive que ya tiene sus años. Los tamaños de las cosas que copiamos, han crecido. Es normal copiar varios cientos de megas, a diario, o si tenés que mover un disco duro de una máquina virtual, estamos hablando incluso de gigas que copiar o mover.
La velocidad de la que hablan los fabricantes, en términos de ancho de banda, tiene algo que ver con la velocidad real, la que a la mayoría nos interesa. Como cualquier velocidad de transferencia, hay varios factores que considerar, algunos relacionados con la calidad de los materiales del dispositivo y de la calidad del equipo que lo va a leer.
Si los equipos son de mala calidad, pueden tener el sello de USB 3.0, pero si su tasa de error es alta o el tiempo de respuesta de las operaciones de E/S es muy lento, la velocidad que publicita el fabricante sirve sólo "para la foto". Me viene a la memoria, esos teléfonos inalámbricos de principios de los 90, que decían tener un alcance de 100m., pero en ningún lado decía que eso era sólo en caso de que estés usando el teléfono en una sabana.  
En el ancho de banda también hay algo "escondido", ningún fabricante aclara que dentro de ese ancho de banda, hay un porcentaje que se destina a la comprobación de lo que se transfiere. No te están mintiendo, pero tampoco te están diciendo toda la verdad.
¿Alguna vez calculaste en una planilla electrónica la velocidad teórica de tu conexión de internet, y te preguntaste por qué nunca obtienes lo que dice la teoría?
Uno de los motivos, es por la comprobación/correción de errores, una funcionalidad básica de cualquier protocolo de transferencia de datos.
Si sólo estás descargando algo, y tienes 1Mbit. la teoría dice que deberías obtener aprox. 122KBytes/s, pero la realidad dice otra cosa. Ese porcentaje "perdido", se utiliza en realidad para la comprobación/detección/corrección de errores. Por eso es que aunque sólo estés descargando algo, siempre hay un tráfico de subida, de todos los acknowledgement de recepción que tienen que enviarse, durante la transferencia  (aún en el siguiente escenario teórico, en el que no tengas errores de transferencia o estos sean insignificantes).
El USB 2.0 estándar, puede tardar hasta 5 minutos para llenar un pen drive de 1GB.
Eso es aprox. 30Mbit/s, si le sumamos un porcentaje aprox. de 5% utilizado para la comprobación de errores.
Eso es más que el USB Full Speed (12Mbit/s) y bastante menos que el USB 2.0 Hi-Speed (480 Mbit/s), cuyo ancho de banda se supone de 60MB/s. Más información en : http://en.wikipedia.org/wiki/List_of_device_bit_rates#Peripheral 
La última notebook que compré, ya viene equipada con un puerto USB 3.0, que lo puedo experimentar a diario porque tengo un disco duro externo USB 3.0. En la búsqueda por un pen drive USB 3.0, que me dé una relación interesante de costo/beneficio, investigué las opciones.
De las marcas que encontré, con buenos reviews las opciones eran: Patriot, LaCie, Corsair, Kingston y Transcend.
La característica principal, que me hizo decidir por uno u otro, fue el tamaño. Al ver las fotos en los reviews, los únicos que tenían las dimensiones para no obstaculizar los puertos aledaños que quedaron de la lista fueron dos: Patriot y Trascend. Los demás eran o muy anchos, o muy gordos para que pueda ser ocupado el puerto usb, en la posición que fuera este ubicado horizontales o verticales, lo cuál me hubiera obligado a tener que usar con un cable de extensión.
Finalmente me decidí por un Transcend TS16GJF760 JetFlash 760 16GB USB 3.0 Flash Drive.
La otra opción era un Patriot Supersonic 32 GB USB 3.0 High Performance Shock Resistant Flash Drive PEF32GSUSB , de aluminio, bastante más costoso, pero no tenían en stock para la venta en Amazon, y el tiempo de espera era de 1 a 4 semanas.
Aquí están los resultados de los benchmarks en el puerto USB 3.0:


Aprox. 54MBytes/s para lectura; y para escritura 22.7MBytes/s como máximo y  un promedio de 7.4 MBytes/s.
Este es el gráfico de rendimiento del mismo pen drive, en un puerto USB 2.0

Pero lo más interesante, fue una prueba de la vida real.
Lo que te muestra el programa que copia, es una cosa, pero el tiempo en que tarda realmente en hacer toda la copia al dispositivo, es otra.
Para eso, en linux se puede hacer la copia, y luego desmontar el dispositivo, y recién cuándo el comando de "umount" termina, es que la copia fue terminada.
Para eso hice este pequeño script:

--inicio script--

cp -v disk1.vdi /media/pen-16G
umount /media/pen-16G

--fin script--

Tamaño del archivo: 2185252864 bytes (2084 MB)

user@host ~/prueba $ sudo time sh -x test
+ cp -v disk1.vdi /media/pen-16G
`disk1.vdi' -> `/media/pen-16G/disk1.vdi'
+ umount /media/pen-16G
0.01user 6.85system 2:11.39elapsed 5%CPU (0avgtext+0avgdata 4272maxresident)k
1234608inputs+4272288outputs (0major+923minor)pagefaults 0swaps

Velocidad real. 2min. 11 seg. para copiar 1 Archivo de 2G:  15.86 MB/s

jueves, 1 de marzo de 2012

PostgreSQL vs. Oracle

PostgreSQL vs. Oracle(TM) - Bases de Datos Cerradas vs. Bases de Datos de Software Libre
Le titulé de esa forma, por una cuestión de prensa :), aunque puede parecer una comparación de potencias, intentaré presentar los argumentos necesarios como para que vos puedas tomar la decisión por tu cuenta. Mencionaré también algunas experiencias con Firebird, que es una excelente base de datos, de software libre. Cuándo me refiero a Software Libre, me refiero a un programa distribuído bajo una licencia aprobada por la Free Software Foundation. http://www.gnu.org/licenses/license-list.html#SoftwareLicenses
Tampoco voy a hablar de performance, porque existen múltiples formas de lidar con problemas de performance, y en mi experiencia la mayoría de las veces, el problema principal no es el motor o el server de la base de datos, sino el diseño y la programación del sistema que utiliza el servicio. Pero no voy a entrar en muchos detalles sobre eso.
Oracle es probablemente la mejor base de datos del mundo (por ahora), no estoy contando nada nuevo con eso. Pero la pregunta que debes hacerte es ¿Realmente necesito Oracle? o mejor aún ¿Para el uso que voy a darle a la base de datos, mi presupuesto justifica que yo gaste en las funcionalidades extraordinarias del Oracle (que por cierto tiene también un precio extraordinariamente alto)?
La respuesta corta y rápida, que me animo a decir es que en la gran mayoría de los casos, no existe una justificación para pagar decenas de miles de dólares de licencia, cuándo hay alternativas gratuitas de excelente calidad y muy confiables.  
Citando a Bruce Perens, un ícono del movimiento Open Source:
"Un orador que emplea el término "comercial" como antónimo de software libre es probablemente alguien que no entiende lo suficiente aún de cómo funciona el software libre. Y alguien que no entiende los fundamentos de cómo se rige el software, estará constantemente confundido acerca de lo que controla tantos dispositivos en el planeta. Tenga cuidado con esas personas que tienen una falta entendimiento básico; es muy poco probable que le den un buen consejo de cómo elegir un software o para tomar buenas decisiones a cuestiones relacionadas con software. " http://www.dwheeler.com/essays/commercial-floss.html
Existen múltiples ejemplos de software libre con éxito comercial.
Cuándo tu única herramienta es un martillo, todos los problemas parecen clavos. Si vas a tomar una decisión empresarial importante, debes estar bien informado, y no escuchar sólo al dueño del martillo.
El hecho de que PostgreSQL o Firebird sean software libre, no significa que sean exclusivamente gratis, o porque se puede conseguir gratis, sean un producto con poca seriedad. Hecha la aclaración, y para no desviar demasiado el tema hacia Software Libre vs. Software Cerrado/Privativo. Sigo con el discurso sobre las bases de datos.
Siguiendo parte del análisis que propone Perens en http://www.dwheeler.com/oss_fs_eval.html
Aquí hay una buenísima comparación de funcionalidades entre Oracle y PostgreSQL: http://www.scriptol.com/software/oracle.php
 
1) Identifica los candidatos
Oracle, DB2
PostgreSQL, Firebird


2) Lee reviews existentes de los productos, de sitios, proyectos o empresas que tengan un negocio parecido al tuyo o al de tu cliente.

3) Brevemente compara las características principales que necesitás de la Base de Datos.
3.1) Funcionalidades
Si eres una empresa que pagará por una solución, pide a tu consultor informático que te detalle específicamente que funcionalidades espera del motor de base de datos. Si lo utilizará sólo de repositorio, para almacenar y recuperar datos, y no precisa de lujosas o complicadas funcionalidades, es probable que puedas ahorrarte dinero en licencias del motor, y puedas invertirlo en otras cosas que mejoren la calidad de los servicios de los que depende tu negocio o el de tu cliente. Por ej. un Data center alternativo, o un backup remoto, o profesionales reconocidos y con experiencia, por citar algunas.
En el caso de los productos cerrados, como Oracle, asegurate bien del costo que tendrá la licencia que debes adquirir, y cuánto te costará ampliar cuándo tu negocio crezca y tengas que ampliar la capacidad. No te dejes engañar por las versiones "Express" o "Embedded" o cualquiera que te cueste poco o nada inicialmente, porque vienen con muchas restricciones de tamaño de la base de datos, cantidad de procesadores que puede utilizar y por lo general tiene un montón de funcionalidades recortadas, que nadie te cuenta al inicio.Y si te salen con el cuento de que "no vas a necesitar más que eso" te está queriendo vender un caballo de troya. Hoy en día es moneda corriente los procesadores de múltiples cores, tener un motor de base de datos que no los aproveche es como tener una aire acondicionado de múltiples compresores y sólo usarlo en modo ventilador.


3.2) Costo
Los productos cerrados comerciales (Oracle, DB2(TM), etc. ) utilizan una conocida técnica de las grandes empresas, de hacer tan complicado su esquema de licencias como para que uno no pueda fácilmente determinar el costo real que necesita para su solución.
Asegurate de conocer el precio para la solución completa, incluso antes de aceptar el "regalo" de una versión demo o lite o express, para que "ya puedas iniciar tu desarrollo". El precio de Oracle, es lineal a la cantidad de procesadores.  http://www.oracle.com/us/corporate/pricing/price-lists/index.html
En el caso de las bases de datos de Software Libre (PostgreSQL, Firebird, etc.), siempre tendrás una opción de descargarlas y utilizarlas sin costo. Y también tendrás las opciones de  contratar soporte comercial para algunos de los motores. 

3.3) Market share
Oracle tiene un mercado muy grande, pero como leí en una discusión http://www.developers.slashdot.org/story/06/04/06/1828206/Oracle-and-PostgreSQL-Debate
"90% de la gente que lo usa, no lo necesita. 100% de ese 90% están o le han convencido de que sí lo necesitaban"
PostgreSQL, es probablemente la base de datos más completa, de las que tienen licencia de Software Libre, y por ello, su mercado está creciendo cada día. Más aún luego de que Oracle se hizo dueño de MySQL, la otra que tenía también un mercado muy grande, pero que cada vez más apunta a convertir su modelo de licenciamiento, hoy en día ya hay versiones community, developer, enterprise, etc..
Firebird tiene también una comunidad muy importante de usarios en el país, conozco dos consultoras nacionales exitosas, que lo utilizan desde hace al menos 8 años, con múltiples clientes en el sector privado, y hablan maravillas sobre todo de su lenguaje para elaborar procedimientos almacenados. Además en el Brasil está una de las comunidades más grandes de usuarios, y el motor tiene un activo desarrollo y hay disponible mucha documentación y libros al respecto.
3.4) Soporte. Posiblemente el punto más delicado a evaluar.
  • Soporte puede referirse a personas en el ámbito local con conocimientos.
  • Cantidad de documentación en línea o en libros.
  • Cantidad de tutoriales de puesta en marcha rápida.
  • Cantidad de sistemas operativos en los que puedo ejecutar, etc.
  • Empresas que puedan vender soporte profesional. Ojo con este punto, he tenido muy malas experiencias con ciertas marcas de productos, porque a pesar de tener representación local, no tienen técnicos bien preparados disponibles, y te terminan derivando por teléfono a alguien fuera del país, o te dan acceso al sistema de tickets de la empresa. En el 90% de los casos, terminabamos resolviendo el problema antes de que el ticket fuera resuelto, gracias a investigaciones y consultas en foros o listas de correo en internet. Evalúa bien si lo que necesitas es alguien que te resuelva problemas o alguien a quién hechar la culpa si algo pasa. Si es lo segundo, lee detenidamente la licencia, porque casi ninguna empresa se hace responsable por pérdida de datos en casos excepcionales. El representante vendedor, rara vez es también quién te vende la solución, o sea el desarrollo. Si vas a dejarte convencer por el vendedor, de que si querés calidad, tenés que pagar por eso, y especialmente si  viste  a programadores de un sistema, con menos de 25 años haciendo todo el trabajo pesado y al personal de experiencia aparecer sólo cuándo las papas queman y hay problemas graves que arreglar, sabrás de lo que te estoy hablando. Si vas a pagar mucho dinero por una Base de Datos, asegurate de que tu proveedor también pague mucho dinero por su equipo de desarrollo, de lo contrario es como tirarle perlas a los chanchos. Pide gente con título universitario de ser posible de una universidad reconocida por su calidad, y EXIGE gente certificada en la herramienta, por algo te están haciendo comprar algo caro y de calidad muy superior (según el vendedor), y asegurate de que trabajen en el proyecto, es muy común poner nombres en la planilla y luego nunca verles la cara en los momentos de desarrollo. Si comprarás un auto de lujo, ¿dejarías que gente no autorizada por el fabricante, trabaje por tu vehículo? 
No estoy diciendo de que sea la única forma de trabajar, he visto muchos proyectos exitosos con Software Libre y jóvenes trabajando en ellos, pero si vas a entrar en la temática de que "sólo si es caro, es de buena calidad", al menos exige a tu consultora o proveedor que sea coherente, y tenga personal certificado en las herramientas y productos por el que te está haciendo pagar licencias.

PostgreSQL tiene sponsors de la talla de Red Hat, HP, Skype, Fujitsu, por citar algunas de las empresas más conocidas. Más información en http://www.postgresql.org/about/sponsors/

PostgreSQL es un proyecto que tuvo un progreso asombroso desde la versión 8.x en adelante. Basta mirar con las funcionalidades nuevas que fueron incorporando, para comprobarlo:
http://www.postgresql.org/about/featurematrix/

Algunos usuarios de PostgreSQL (http://en.wikipedia.org/wiki/PostGres#Prominent_users)

Aquí hay una presentación hecha en  el Free Software Asunción 2011: "El Elefante de las Grandes Ligas" , realizada por Pablo Santa Cruz, una de las personas que más sabe de PostgreSQL en el Paraguay, hay un apartado dónde habla de los casos de éxito en nuestro país. http://blog.roshka.com/2011/09/postgresql-el-elefante-de-las-grandes.html

Firebird puede manejar bases de datos de Terabytes de tamaño http://www.ib-aid.com/articles/item104

Firebird on large big iron servers : 512G-2TB of ram 100.000 concurrent users http://www.firebirdnews.org/?p=6797  

"Bases de datos de juguete", "escarabajo vs. mercedes", yo que vos consideraría seriamente cambiar de consultor informático, si te sale con argumentos tan poco profesionales como esos o por lo menos enviarle a su cucha a investigar un poco más de la realidad actual de las alternativas de Software Libre.


Oracle es una marca registrada de de Oracle Corporation.

DB2 es una marca registrada de International Business Machines Corp.