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.

miércoles, 29 de febrero de 2012

Plugin de Eclipse para Diagramas ER (DER)

ERMaster permite hacer diagramas ER mediante un plugin del eclispe. Genera DDL, se puede editar el modelo, visualizar las relaciones, y también hacer ingeniería reversa de una base de datos por medio de una conexión JDBC.

Descargar el archivo del plugin

http://sourceforge.net/projects/ermaster/

Copiar al directorio dropins del eclipse.
Para probar en un proyecto cualquiera, darle click derecho New/Other/ERMaster/ERMaster
Completamente funcional para PostgresSQL y MySQL, en desarrollo para otras BD. Más información en Bases de Datos compatibles
Probado en el eclipse-helios-SR2, Linux Mint 12/Ubuntu 11.10 de 64 bits.

jueves, 23 de febrero de 2012

El paradigma de la economía emergente del Open Source

El artículo completo de Bruce Perens: "The Emerging Economic Paradigm of Open Source" está en este enlace

http://perens.com/works/articles/Economic.html

Unas porciones que traduje que pueden ser de interés y "gancho" para que leas todo el artículo.

Al terminar de leer, trata de responder esta pregunta, ¿Para qué el estado necesita tecnologías diferenciadoras, si no está compitiendo con nadie? Sólo está brinando servicios a los ciudadanos, sin importar la cadena de intermediarios, la finalidad es servir a la población en general, de la mejor manera posible y optimizando costos del dinero de los contribuyentes.


...
La tecnologías facilitadoras son escenciales para su negocio, pero no es lo que Ud. vende. Si usted vende libros, los libros son el centro de sus utilidades, y la informática es una herramienta importante y muchas veces un costo inevitable para hacer negocios. El que quiere polemizar dirá "No es importante la informática" pero lo que realmente nos está diciendo es que no es su centro de ganancias, al menos no todavía por la forma en como funciona su empresa.

Hay dos formas principales de tecnologías facilitadoras, vinculados a los costos: las diferenciadores y las no diferenciadores.
Las tecnologías diferenciadoras  son las que hacen que su negocio sea más conveniente a su cliente que el negocio de su competidor. Por ejemplo, si usted visita el sitio web de Amazon.com y buscar un libro, Amazon también le informará acerca de otros libros que fueron comprados por personas que compraron el libro en que usted está interesado. Y a menudo los libros que sugiere son lo suficientemente interesantes como para que vaya a comprar uno de esos libros. Si usted va a la librería Barnes & Noble, que no tiene esta característica, no es de extrañar que Amazon venda más libros en línea. Por lo tanto, de Amazon, la tecnología de "recomendación" es una tecnología diferenciadora. Obviamente, sería un error  abrir sus tecnologías diferenciadoras, porque entonces el negocio de su competidor podría utilizarlas para llegar a ser tan conveniente para el cliente como su propio negocio.

Pero por el contrario, puede ayudar a su negocio y al de su competidor, entender cómo cada pedacito de sus obras de tecnologías no diferenciadoras, funcionan. De hecho, el competidor podría ser el mejor colaborador de usted podría tener, si la sociedad se limita a trabajar en las porciones no diferenciadoras del software que ambos necesitan. Este hecho se demuestra cada día en el mundo Open Source, por ejemplo en el que HP e IBM son socios en el desarrollo de software que ayuda a vender los sistemas de ambos proveedores, y siguen siendo feroces competidores en los niveles superiores de la pila de software donde la diferenciador entre ellos es posible y eficaz.

Quizás el 90% del software en cualquier negocio es no diferenciador. Mucho de lo que se conoce como la infraestructura, la base sobre la cual se construye la tecnología diferenciadora. En la categoría de la infraestructura están las  cosas tales sistemas operativos, servidores web, bases de datos, servidores de aplicaciones Java y otros middleware, equipos de escritorio con interfaz gráfica de usuario, y las herramientas generales utilizadas en los escritorios del usuario, tales como navegadores web, clientes de correo electrónico, hojas de cálculo, procesadores de texto y aplicaciones de presentación. Cualquier software que proporciona un valor diferenciador a una empresa de software no se construye sobre uno o más de los componentes de la infraestructura.
...
Pero, ¿cómo podemos desarrollar productos que todo el mundo tiene la libertad de seguir su propio camino y no hay un verdadero jefe? Esto parecerá extraño a la gente de negocios, hasta que se den cuenta de que esto es exactamente como funciona el capitalismo en los países democráticos. En la economía en general de una nación capitalista, muchas empresas se proponen desarrollar productos sin ningún tipo de orientación central del gobierno. Todos ellos compiten entre sí, y algunos productos tienen éxito y construyen un mercado, mientras que otros productos no. Colaboraciones sueltas pueden surgir entre las empresas con el propósito de la creación de mercados para nuevos productos. El papel del gobierno, la única entidad que podría guiar a la economía, es en general limitada a la inyección o retiro de capitales de la economía, los incentivos fiscales y programas de financiación, y la aplicación de las leyes destinadas a crear mercados justos.
...

Hay varios tipos principales de contribuyentes al open source:

    Voluntarios.
    Empresas de distribución de Linux.
    Las empresas con un programa de código abierto como único producto principal.
    Las empresas de software de código abierto que venden hardware o soluciones.
    Empresas de servicios.
    Empresas consumidoras finales y sus contratistas.
    Gobiernos
    Académicos e investigadores científicos.

jueves, 9 de febrero de 2012

Conectar a una VPN Cisco desde Linux Mint 12 (Ubuntu 11.10)

Realizé estos pasos desde una instalación de Linux Mint 12 (Lisa). En teoría debería funcionar también en el Ubuntu 11.10 Oneric Ocelot.

Instalar el paquete network-manager-vpnc


sudo apt-get install network-manager-vpnc

A continuación, siguiendo los pasos normales para agregar una conexión desde el "Network Connections", con los parámetros por default, ya pude conectarme a una VPN Cisco.



miércoles, 1 de febrero de 2012

Agregar diccionario de castellano (español) al LibreOffice (Open Office)

1) Descargá el diccionario:

http://extensions.libreoffice.org/extension-center/diccionario-espanol

2) En el menú Tools/Extension Manager, instalar el archivo descargado: spanish-dictionary.oxt






3) En Tools/Options/Language Settings/Languages elegir las opciones para Locale setting y Default Lenguages for documents. Si el diccionario se instaló correctamente, verás la tilde con el "ABC" al lado del lenguaje, como en la figura.