martes, octubre 23, 2012

Programadores en rebajas

Nubleo es un "portal" para poner en contacto a profesionales de la informática, diseño y sistemas con personas/negocios con necesidades en esas áreas.

No recuerdo cómo llegué hasta ellos, pero el caso es que me cree una cuenta para poder ver qué se cocía por ahí dentro.

La mecánica es fácil. Un cliente publica un proyecto donde describe con más o menos detalle sus necesidades. También indica el presupuesto que está dispuesto a destinar en su creación. Por otro lado, los profesionales se dan de alta indicando sus habilidades y conocimientos.

Bien... hasta aquí, parece incluso buena idea. Pero el problema llega con propuestas como esta. Como se puede ver, se solicita una aplicación que gestione un comedor escolar. Incluida la gestión de clientes (alumnos), una pequeña contabilidad e incluso funcionalidad específica para un puto de venta.

Y lo mejor... todo esto por la increíble cantidad de "entre 500 y 1000€". Toma ya. Y no os lo perdáis... tienen 29 ofertas con una media por oferta de 900€. ¿Alguien en su sano juicio piensa que puede obtener una aplicación profesional de ese tipo por ese precio?

Yo calculo que parir esto supondrían unas 200 horas de trabajo. Sin contar "consultoría", maquetación ni instalación en cliente. O sea que,  teniendo en cuenta la oferta media,  saldría a 4,5€/hora. Sinceramente, se gana más dinero recogiendo tomates en invernaderos.

Está claro que en estos tiempos hay mucha gente con necesidad, pero tengo muy claro que un trabajo que no se paga (o se hace de forma insuficiente), no puede ser un buen trabajo ni un buen profesional. No era mi intención criticar el negocio de Nubelo, pero quizás si deberían dar un asesoramiento a sus clientes en este sentido.

Hay un artículo muy bueno de David Bonilla sobre el sueldo de los programadores (y por ende, del precio de las aplicaciones) que yo considero de imprescindible lectura.

En fins...

sábado, octubre 20, 2012

Tomcat, una instalación, varias instancias

Existen varias razones por las que se querría tener una única instalación de Tomcat y varias instancias.

Una de ellas puede ser simplemente por higiene... Tener separados los archivos de la distribución de los propios de las Webs que alojan permiten unas actualizaciones mucho más rápidas y sobre todo, seguras.

Otra ventaja es que que puede alojar distintos sitios de forma independiente, esto es, que pueden pararse y arrancarse instancias sin que el resto de sitios alojados sufra esos parones. O también mantener distintas configuraciones para esos mismos sitios.

Pero la que más me gusta a mi, es la de tener la posibilidad de tener a un equipo de desarrollo compartiendo una misma distribución de Tomcat, usando cada miembro del equipo una instancia distinta.

Sea cual sea el motivo, creo que es una muy buena idea tener separada la distribución de Tomcat de sus aplicaciones desplegadas. Veamos cómo hacerlo.

Durante el uso de Tomcat, el servidor lee la configuración de dos directorios (conf y webapp) y escribe archivos en otros tres (log, temp y work). Además puede cargar algunos ficheros .jar y .class de otros directorios (shared, server y common) del árbol de instalación.

Para conseguir esta separación, usaremos las variables de entorno CATALINA_HOME, que apuntará a los binarios de la distribución Tomcat, y CATALINA_BASE, que apuntarán a los directorios de la instancia. Lo primero que hay que hacer es crear un lugar para albergar los directorios de la instancia.
    cd /opt
    mkdir instancias-tomcat
    cd instancias-tomcat
Después creamos un directorio por cada instancia de Tomcat que vayamos a albergar
    mkdir misite.com
    cd misite.com
Copiaremos ahora el directorio config de la distribución Tomcat a este nuevo directorio, y creamos el resto de directorios de la instancia:
    cp -a $CATALINA_HOME/conf .
    mkdir common logs temp server shared webapps work
Por último, colocaremos el contenido de la aplicación Web para esta instancia en el subdirectorio de CATALINA_BASE, como haríamos en cualquier otra configuración de Tomcat. Ahora necesitamos editar el fichero conf/server.xml de la instancia para asegurarnos que no intentamos abir los mismos puertos que los usados en otras instancias. Cambiaremos el puerto de cierre por un número de puerto diferente para cada instancia de Tomcat:
    <Server port="8007" shutdown="SHUTDOWN">
Y los puertos del conector HTTP:
    <Connector port="8087" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8743" />
Es buena idea limpiar este fichero de todo lo que no sea necesario (conectores para los ejemplos que vienen con Tomcat, configuraciones comentadas...) y realizar una búsqueda en el texto por port= y cambiar el valor del puerto de ese atributo si su elemento no está comentado.

Ahora sólo faltaría crear un script de arranque y otro de parada para cada instancia creada. El de arranque podría ser parecido a esto:

#!bash/sh/
export CATALINA_HOME="/opt/instancias-tomcat/misite.com"
export CATALINA_BASE="/opt/tomcat"
service tomcat start
Y para la parada:

#!bash/sh/
export CATALINA_HOME="/opt/instancias-tomcat/misite.com"
export CATALINA_BASE="/opt/tomcat"
service tomcat stop
Con esto, ya tendríamos disponible nuestras nuevas instancias.