Sobre el Innovate!Europe 2009

Esta semana, del 4 al 6 de Mayo, se ha celebrado la final del Innovate!Europe en Zaragoza. Para quien no lo conozca, es una mezcla de mentorización y competición de startups tecnológicas europeas.

Las master classes eran todas cerradas, excepto la del 4 (junto a la inauguración) que era abierto al público. Ahí tuvimos la oportunidad de ver a David Sifry, Marten Mickos, Yoav Leitersdorf, Maximilian Niederhofer, Barak Berkowitz, Madeline Duva y Mike Rogers en una mesa redonda moderada por Ignacio de la Vega.

La verdad es que no dijeron nada que sonara especialmente nuevo para los que estamos emprendiendo y leemos sobre el tema (foco, pasión, no tener miedo al fracaso, pensar en monetizar y no en inversiones, estar un poco loco...); y sobre los nuevos negocios relacionados con innovación y tecnología, sólo llamó mi atención Marten Mickos cuando nombró Open Data (ojalá llegue a poder hacerse negocio, pero el camino tiene pinta de que será muy largo), el resto era un poco "lo de siempre" Saas, Cloud computing, tecnologías limpias... De todas maneras, se notaba que los miembros de la mesa estaban muy acostumbrados a este tipo de eventos, se les veía muy profesionales :)

Ayer también estaban abiertas al público las presentaciones de los últimos 10 finalistas, dónde hubo quien nos convenció más y menos a los que intercambiamos opiniones, pero por algo estarían entre los 10 elegidos XD. Al final, tras una larga y un tanto fuera de lugar intervención de Juan Tomás Hernani (secretario general de Innovación), se anunció la startup ganadora que fué Nomadesk.

Es el primer año que he podido asistir a este evento y, aunque creo que la asistencia de público al evento era más bien baja y que se haya notado un poco que las elecciones europeas están cerca XD, lo he visto bastante interesante. Sobre todo que sea en Zaragoza y Aragón, donde se encuentran pocos eventos relacionados con tecnología e innovación, a excepción de los pequeños eventos que se mueven de forma independiente.

A remix Manifesto

Vía un post de Ricardo Galli, me encuentro el documental A remix Manifesto (que es un proyecto open source), que se emitió en TV3 doblado al catalán.

El documental habla sobre los actuales problemas que sufrimos gracias a las leyes de copyright, muy centrado en el caso de la creación de remixes o mashups a partir de otras obras, aunque se muestra también el punto de vista de consumidor.

Y seguirán tratando de ponerle puertas al mar...

Por cierto, no conocía Girl Talk, está bastante bien :)

Jobsket en el podcast de debug_mode=on

Han publicado ya en debug_mode=on, la entrevista que nos hicieron para su primer podcast a Jordi y a mi para hablar de Jobsket.

Para grabar la charla-entrevista, aprovechamos que yo tenía previsto un viaje a Barcelona y lo grabamos en las oficinas del SeedRocket, que es donde está trabajando actualmente el equipo de debug_mode=on. El estar todos en la misma sala, excepto Jorge Rubira, hizo que poco a poco fuera más distendida la grabación(creo que se nota que también había confianza :)).

Hablamos bastante de qué es Jobsket como proyecto, y mucho también de cuáles son nuestras herramientas de desarrollo: Java, Grails, Groovy, Lucene, Hudson, Eclipse... incluso un poco sobre microformats y, aunque fue muy por encima, hasta sobre Grails vs Ruby on Rails.

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 :).