Programación, usabilidad y el IV aniversario de Cadius Zaragoza

Como programador que soy, la parte del desarrollo de software que siempre me ha llamado más la atención es el trabajo dentro de las tripas: lenguajes, frameworks, librerías, arquitecturas, metodologías de trabajo... que permitan mejorar el rendimiento, la calidad, etc. de un desarrollo y por otro lado la productividad como desarrollador, como creo que a la mayoría de programadores(bueno... si no contamos a los muchos que sólo les importa la nómina y la comodidad de lo que ya saben).

Por otro lado, percibo como un pensamiento bastante generalizado entre programadores nóveles(y a veces no tan nóveles), que la interfaz de usuario no es importante porque será sólo el "cascarón" de una super-mega-chachi-aplicación. Nada más lejos de la realidad, es un elemento diferencial en la calidad de un desarrollo, como escribía Isaac Ruiz (alias RuGI ;)) esta misma semana: Para el usuario final, la IU es el sistema.

Quien no ha pensado alguna vez al entrar por ejemplo a una web, que ha podido costar varios millones de euros y tenga mucho trabajo en las tripas, "menuda mierda" o "debo ser tonto"... ahora mismo me vienen a la mente unas cuantas...

Con esto no quiero decir que yo tenga grandes conocimientos de usabilidad, es una especialidad en la que me considero un aprendiz. Pero me interesa mucho y es algo sobre lo que procuro ir aprendiendo poco a poco a base de ver(o que me hagan ver) mis errores y los de otros, procurar leer a la gente que sabe sobre el tema, y desde hace un tiempo acudir habitualmente a las reuniones de Cadius Zaragoza.

Bueno, este post viene a cuento de que supongo que la mayoría de gente que pasa por aquí también seréis programadores y quizás, por un casual, aún hay que convenceros de que la usabilidad es importante :). Por esto, quería anunciar y animar a asistir al IV aniversario de Cadius Zaragoza (auspiciado por Hispalinux y el Ayuntamiento de Zaragoza), que viendo el programa tiene muy buena pinta, con la presencia de Javier Cañada que es el fundador de la comunidad Cadius:

  • 19:00 horas. Acto de bienvenida, a cargo de Daniel Torres Burriel, coordinador de Cadius Zaragoza
  • 19:10 horas. Ponencia: “Hispalinux y la defensa de los estándares abiertos”, a cargo de Jorge Fuertes (Hispalinux)
  • 19:30 horas. Ponencia: “Lectura y prensa online: diseñando para el ratito del café”, a cargo de Javier Cañada (vostok.es)
  • 20:15 horas. Debate
  • 20:30 horas. Networking

El aniversario se celebrará en el Digital Water Pavilion(al lado del Pabellón Puente en el margen del barrio de La Almozara) el jueves 21 de Mayo a partir de las 19:00. Si quieres confirmar tu presencia(que no es necesario para asistir), hay un evento en facebook.

Yo iré, sin duda.

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