SQLite, booleanos y buenas prácticas

Hace unas semanas estuve implementando un sencillo sistema de votaciones con la ayuda del plugin acts_as_voteable, para un proyecto con Rails, donde me surgió un problemilla que gracias a los tests resultó menos doloroso.

Tras tener ya prácticamente escrita la acción para votar, implementé el test para el controlador con sus diferentes contextos(que sí, que TDD, pero uno todavía está en la fase de acostumbrarse :P). Cuando ejecuté el test por primera vez, esperando que me diera algunos fallos en mi código, me llevé la sopresa de un error SQL con origen en el plugin, que no existía la columna TRUE ¿¿en el where vote = TRUE??.

Lo primero fue pensar que no era posible, con ActiveRecord de por medio eso era un poco raro, por lo que las sospechas fueron para SQLite, que era el gestor de bases de datos en el entorno de tests. Probando a ejecutar los tests con una base de datos MySQL, fallaba mi código y no el del plugin, se confirmó la sospecha.

Una vez implementada completamente la funcionalidad y los tests pasando, tocó perder unos minutos para ver qué estaba pasando y google contesta rápido. Resulta que para utilizar booleanos en queries con SQLite debe utilizarse 'true' y 'false', al mirar el código del plugin se confirmaba el problema:


votes = Vote.find(:all, :conditions => [
"voteable_id = ? AND voteable_type = ? AND vote = TRUE",
id, self.type.name
])

El valor de vote estaba hardcoded, pues como tocaba cambiar el código, aproveché a cambiar self.type que está deprecated, por self.class:


votes = Vote.find(:all, :conditions => [
"voteable_id = ? AND voteable_type = ? AND vote = ?",
id, self.class.name, true
])

Y al ejecutar los tests con SQLite, los pasó. Pero luego resulta que había alguien que ya había solucionado el problema, como era de esperar en la comunidad Rails, en el plugin vote_fu (llegando a combinar funcionalidades complementarias de tres plugins distintos).

Después de crear la migración para eliminar la tabla de acts_as_voteable y crear la de vote_fu, ejecuté los tests del controlador para ver si tocaba cambiar algo, pero pasaban correctamente.

Conclusiones, además de lo aprendido con los booleanos de SQLite:

  • Aprovechar (en la medida de lo posible) la independencia de bases de datos que aportan ActiveRecord u otros ORMs, sobre todo si estamos desarrollando componentes reutilizables.
  • Y a procurar seguir mejorando en cuanto a la automatización de tests. Desde que empecé a escribir tests, hago commits con la conciencia más tranquila :).

Abierto el plazo de envío de propuestas para el GSoC

Desde hace unos días que se ha abierto el plazo de envío de propuestas, de estudiantes a organizaciones, para participar en el Google Summer of Code 2009(hasta el 3 de Abril).

Si eres estudiante universitario(también de master y doctorado), te gusta programar y el mundo Open Source, esta es una oportunidad inmejorable para colaborar en algunos los proyectos y organizaciones conocidas mundialmente, como Apache, Mysql, Eclipse, Debian, PHP, Ruby on Rails... Para quien le interese participar, plunchete ha escrito un artículo en debugmodeon con mucha información y consejos para presentar la propuesta

En mi caso este año no voy a participar, no me matriculé para seguir estudiando, aunque sí me planteé hacerlo con el único objetivo de poder participar en el GSoC, finalmente preferí no hacerlo por tener ya demasiados frentes abiertos ;)

Una semana de Jobsket

La semana pasada anunciamos en el blog de jobsket que empezábamos a enviar las invitaciones, Martín también lo hizo. Si todavía no has recibido la invitación para registrarte, hay una introducción de qué es jobsket.

Después de bastante tiempo trabajando, haciendo y deshaciendo, ya teníamos ganas de poder presentar jobsket bajo los focos, y de ver la respuesta que nos encontrábamos. Y hasta el momento estamos muy contentos con el feedback recibido, aunque todavía nos falta mejorar muchas cosas.

Es un proyecto que parece que está gustando a los primeros usuarios, de los que además estamos recibiendo ánimos para seguir trabajando, ideas para implementar nuevas funcionalidades, mejoras y avisos de bugs; ya sea vía uservoice, email, gtalk, twitter... o delante de una cerveza ;). Muchas gracias a todos!

Nosotros seguiremos trabajando para que llegue a ser el mejor servicio posible y disfrutando del camino :)

Un poco sobre Open Web

Ayer me pasé por el Teatro Romano de Zaragoza a ver que se contaba en la conferencia de Tuenti. Siempre se saca aglo interesante de estas charlas, otros puntos de vista o al menos alguna curiosidad.

Cuando llegó la ronda de preguntas, hubo algunas respuestas se fueron un poco por las ramas, pero hubo un momento en el que se preguntó sobre Open Web(aunque sin llamarlo así), exáctamente sobre compartir/exportar contactos a otras redes, que me dejó un poco mosqueado, parece que en Tuenti están bastante lejos de ponerse por la labor.

Para conocer una muy buena explicación sobre Open Web, hay una ponencia de Aitor durante la Conferencia Rails 2008, en la que explica muy bien qué es y qué posibilidades hay actualmente(entre otras cosas). Aunque recomendaría ver el vídeo entero, donde habla sobre Open Web es a partir del minuto 6:30.


tog: Open Web, Social Networks y cintas de video from Linking Paths on Vimeo.