Archive for the ‘Programación’ Category
Enero 12th, 2010

Bueno, hoy se ha hecho el anuncio oficial de que el próximo 7 y 8 de mayo tendrá lugar en Madrid (España) el primer congreso/reunión de programadores, usuarios e interesados por mi servidor web favorito.
El evento coincidirá con la liberación de la versión 1.0 de Cherokee, y además se hablará del roadmap de la versión 2.0
Dentro de unos meses cogeré mis bártulos para acudir a la cita, porque además de poder conocer en persona al resto de miembros del equipo de desarrollo y usuarios activos, podré asistir y/o participar en varias charlas sobre infraestructuras web de alto rendimiento. Seguro que aprenderé bastante… ya estoy deseando. :-)
En la página web del Cherokee Summit 2010 podréis encontrar más información sobre el evento, las charlas que se darán, cómo llegar, etc… y lo más importante: cómo apuntaros para asistir. Las plazas están limitadas a 80 asistentes, así que si estáis interesados ¡daos prisa!
Por cierto, la asistencia es gratuita.
Octubre 1st, 2009
Mi amigo David y yo estamos desarrollando una aplicación para el control de acceso a instalaciones, y la gestión de turnos de trabajo. Básicamente se trata de que cada trabajador tenga una tarjeta RFID con sus datos y foto, y que esa tarjeta la sirva para entrar a las instalaciones abriendo las barreras, para abrir puertas, para picar el comienzo de su jornada laboral, para poder comer en el comedor, etc… En fin, muchas cosas que ya contaré en profundidad cuando la terminemos, y si es que nos proponemos venderla a otros clientes además de para el que inicialmente la estamos haciendo, que será lo más probable, ya que su diseño es totalmente abierto.
El caso es que para implementar nuestra solución optamos por usar lectores de la empresa Kimaldi, concretamente el Biomax2, que tenía muy buena pinta. El problema es que el SDK que provee la empresa es sólo para Windows, así que tuvimos que coger el manual del aparato, mirar el protocolo de comunicaciones para intentar hacernos “algo” y así poder interactuar con él desde cualquier sistema operativo, pero principalmente desde Linux, que es el que nos interesaba.
Aprovechando que había descubierto las cualidades de Python colaborando en el desarrollo del Cherokee-Admin, propuse que usásemos Python. Es un lenguaje que te da muchas facilidades para programar cualquier cosa y es muy portable. Hacer eso en C no nos daría más que dolores de cabeza y mucho más tiempo de programación.
Así que nada, puestos manos a la obra, pensamos que lo mejor sería hacer una librería que intentase emular el comportamiento del componente OCX que proporciona Kimaldi, incluyendo los mismos nombres de funciones de éste. ¿Qué conseguíamos con esto? pues que el que estuviese habituado a ese API tuviese más facilidad para programarlo, ya que nuestra idea era liberar esa librería con algún tipo de licencia de código abierto.
Después de un tiempo de desarrollo inicial y de que todo lo básico funcionase, la liberamos, y está disponible en la página del proyecto Pymaldi en Google Code. Desde entonces hemos ido añadiendo nuevos métodos y hemos mejorado algunas cosas.
La librería funciona en base a eventos, es decir, el programa que usa la librería puede enviarle comandos al lector en plan: “pon esto en el display”, “activa el relé 1 durante 2 décimas de segundo”, etc… pero además puede recibir eventos que se produzcan en el lector, como cuando una tarjeta se pasa por él, cuando se pulsa una tecla del teclado, cuando se reinicia el lector, etc. Todo esto de una forma muy simple, como se puede ver en el ejemplo adjunto:
from pymaldi import Pymaldi
class MyPymaldi (Pymaldi):
def __init__(self):
Pymaldi.__init__(self)
def onReadCard (self, card_id):
if card_id:
msg = 'Card ID: %s' % (card_id)
else:
msg = 'Error reading card'
rc = self.WriteDisplay(msg)
if rc:
print "ERROR (WriteDisplay): %d" % rc
reader = MyPymaldi()
reader.OpenPortUDP('192.168.2.22')
rc = reader.SetUpBIOMAX2()
if not rc:
print "BIOMAX2 ready!"
else:
print "ERROR (SetUpBIOMAX2): %d" % rc
raise SystemExit
while True:
try:
reader.wait_events()
except KeyboardInterrupt:
raise SystemExit
Este código lo que haría es conectar con el lector que tiene la IP 192.168.2.22 y se queda a la espera de que pasen una tarjeta por él. En cuanto se pasa una tarjeta, se ejecuta una función que lo que hace es decirle al lector que ponga en el display el texto: “Card ID: ” seguido del número de tarjeta. ¿A que es fácil? :-)
Si sólo queremos pintar algo en la pantalla, nada más simple que:
from pymaldi import Pymaldi
class MyPymaldi (Pymaldi):
def __init__(self):
Pymaldi.__init__(self)
reader = MyPymaldi()
reader.OpenPortUDP('192.168.2.22')
rc = reader.SetUpBIOMAX2()
if not rc:
print "BIOMAX2 ready!"
else:
print "ERROR (SetUpBIOMAX2): %d" % rc
raise SystemExit
rc = reader.WriteDisplay("Hola SKaRCHa ;)")
if rc:
print "ERROR (WriteDisplay): %d" % rc
raise SystemExit
Y este sería el resultado:

¿Se puede hacer más fácil? :D
Bueno, pues termino ya, que sólo pensaba hacer un comentario para anunciar la liberación de la librería y ha salido una entrada más larga de lo esperado. Si has llegado hasta aquí es porque te interesa la programación y/o el cacharreo, si no, no te entiendo… :D
Librería Pymaldi.
Septiembre 1st, 2009
Como mi amigo JLuis me preguntó si podía usar Cherokee con rTorrent, me puse a preparar una entrada explicando cómo configurarlo todo; pero hablando con Álvaro llegué a la conclusión de que iba a ser mejor invertir ese tiempo en escribir un asistente para Cherokee-Admin, así que ayer subí un parche que implementa el asistente que permite configurar Cherokee para conectar con rTorrent.
Tan sólo tendríais que configurar rTorrent poniendo algo como esto en vuestro rtorrent.rc:
scgi_port = localhost:5000
La parte de Cherokee la hará el asistente. Disponible ya en la versión 0.99.24.
¿Cómo? ¿que todavía no usas Cherokee? ¡¿A qué estás esperando?! :D
Marzo 11th, 2009
Esta mañana me comentaba un amigo que tenía problemas a la hora de añadir nuevos campos en su aplicación de facturación en PHP.
Después de muchas pruebas, descubrimos que la variable $_POST de PHP contenía sólo las primeras 200 variables que se le enviaban al PHP.
Me puse a buscar y el problema estaba en que la versión de PHP que está usando su proveedor de hosting está parcheada con Suhosin, y este parche por defecto limita el número de variables enviadas por POST a 200.
La solución, poner esta directiva en el php.ini:
suhosin.post.max_vars = 2048
Por supuesto, se puede poner más, pero con eso nos era suficiente.
Más información sobre las opciones de configuración de este parche.
Octubre 30th, 2008
Trabajo por las mañanas, de 8:00 a 15:00, y las tardes las puedo dedicar a lo que quiera; pero estaba desperdiciando el tiempo más que nada leyendo blogs en Google Reader, aunque también me servía para aprender muchas cosas que nunca llevaba a la práctica; o pensando que tenemos muchos proyectos en mente (proyectos de negocios) que podemos hacer y que no hacemos.
Es por esto que hace unos meses le comenté a David que me gustaría involucrarme y colaborar en algún proyecto Open Source. Ya estaba harto de pensar “hay que ver lo que podría hacer y no hago nada”, pero es de estas cosas que las piensas y ya las harás.
Un día me harté de mi anterior empresa de hosting (Webhostingbuzz) y decidí buscarme otra. Contraté un servidor dedicado y como me dejaban elegir el sistema operativo, les dije que un Linux a pelo y yo me encargaría de montar el servidor web.
El caso es que ya que tenía que cambiar de servidor, pensé en cambiar también de servidor web en sí y abandonar Apache, que consume bastante memoria. No sé si fue el día anterior, pero coincidió el cambio de servidor con la publicación en Barrapunto de la noticia del lanzamiento de la versión 0.8.0 de Cherokee. Ya había leído en el pasado sobre Cherokee, el servidor web libre más rápido, programado desde cero por Álvaro López Ortega, un español que trabajaba en Irlanda para Sun Microsystems.
Tengo que reconocer que al principio todo fueron problemas:
- Para empezar, el programa se configura usando una interfaz por web, que me pareció más un estorbo que una ayuda.
- La filosofía de funcionamiento era totalmente distinta a la que yo estaba acostumbrado en Apache. Nada ficheros .htaccess, por ejemplo.
- No había forma de hacer andar WordPress, y me hacía falta para hacer andar este blog sobre Cherokee.
Estuve a nada de pasarme a usar Nginx, pero después de unos correos en la lista de distribución de Cherokee, y otros cuantos correos con Álvaro, me encabezoné en apoyar el proyecto de un español. Sin duda la ayuda que me dieron en la lista, y la ayuda personal que me dio Álvaro, sirvieron de mucho para decidirme a usar el programa.
Conforme iba configurando cosas, a la vez reportaba los errores que me iba encontrando tanto en el servidor en sí como en el configurador. Una cosa llevó a la otra y un día detecté un error y me puse a intentar arreglarlo yo. Después de pelearme con el C que ya lo tenía bastante oxidado, le mandé un parche a Álvaro y me ayudó a pulir un par de cosillas más.
Después de unos días ya le había enviado unos cuantos parches, y supongo que se hartó de recibir correos míos, porque me propuso el crearme una cuenta en el repositorio de Subversion donde están los fuentes del programa. Al principio le dije que no, que no me atrevía a meter la pata enviando parches yo directamente, pero insistió y me dio una cuenta. Este es el primer parche que envié yo. Aunque no empecé muy bien, porque me cargué el fichero de log de cambios por culpa del UTF-8. :D
Del parche que estoy más orgulloso es del que permite hacer funcionar perfectamente WordPress en Cherokee. El que no sea programador a lo mejor no lo entiende, pero saber que algo así funciona gracias a ti, pues la verdad, te hace sentir muy bien. ;)
En fin, poco a poco he ido colaborando, más que nada puliendo cosillas pero sobre todo APRENDIENDO. Estoy aprendiendo un montón de Python, que tenía ganas de meterle mano desde hace mucho, y ahora poco a poco voy aprendiendo. También estoy refrescando mucho mi C, que ya casi ni me acordaba; y sobre todo en técnicas de programación: se aprende mucho viendo el código de otros, y el de Cherokee a mi me parece muy bueno.
Hace unos días recibí un correo electrónico de Álvaro diciéndome que por haber colaborado bastante, desde Octality me iban a enviar una camiseta, y es la que podéis ver en la foto de esta entrada cubriendo mi pedazo de cuerpo serrano. :D La camiseta es guapísima, y me llegó también con 5 pegatinas, una de las cuales ya ha ido directamente a la parte trasera de la pantalla del portátil. :-)
Octality es la empresa que ha fundado Álvaro al dejar Sun, y se dedica a montar infraestructuras web de alto rendimiento para sitios que tengan mucho tráfico. Evidentemente sus soluciones están basadas en Cherokee, de ahí que últimamente su desarrollo esté avanzando tanto.
Así que sin haberlo planeado he hecho lo que pretendía: meterme en la comunidad de desarrollo de un proyecto Open Source, ¡y muy contento que estoy!. La última versión de Cherokee, la 0.10.0, es la más estable hasta ahora. Y se nota.