Primera versión de Grails Localizable Plugin

Hacía un par de meses que tenía medio terminado un plugin de grails llamado localizable, y al fin he limpiado un poco las dependencias para que cumpla unos mínimos antes de hacerlo público.

Es una pequeña utilidad para facilitar la integración con el API del servicio de Geocoding de Google Maps para los proyectos desarrollados con grails.

Se puede obtener la latitud y longitud a raíz de una dirección, o las direcciones a partir de la latitud y longitud.

Para instalarlo:
grails install-plugin localizable

Tras haberlo instalado, tendremos a nuestra disposición un servicio de grails(geocodingService) que nos facilitará el trabajo de geolocalización a partir de un puñado de métodos:

findLatLngsByAddress(address) //Devuelve un array con las posiciones encontradas a partir de una posición.

findLatLngByAddress(address) //Devuelve sólo la primera posición encontrada a raíz de una posición.

findAddressesByLatLng(lat, lng) //Devuelve un array con las diferentes direcciones coincidentes con una latitud y longitud.

findAddressByLatLng(lat, lng) //Devuelve la dirección más completa que coincida con la latitud y longitud.

findPointsByAddress(address) //Devuelve un array de JSONObject que representan los puntos coincidentes con la dirección.

findPointsByLatLng(lat, lng) //Devuelve un array de JSONObject que representan los puntos coincidentes con la latitud y longitud.

Podéis ver un pequeño ejemplo de uso en el código que utilizamos para un taller de hace unas semanas con primerviernes

Próximos pasos: Preparar la documentación de uso del plugin en inglés, espero que me cueste menos tiempo :P.

No entra en mis planes añadirle más funcionalidades, pero por supuesto que estoy abierto a sugerencias y/o contribuciones.

Desarrollando UniversalPlaces

Ando metido en un proyecto muy chulo llamado UniversalPlaces, TorresBurriel ya publicó un post hablando sobre el lanzamiento inicial y el equipo(equipazo!).

UniversalPlaces es una web donde se pueden reservar estancias en hoteles. A día de hoy todavía en fases iniciales de lo que se pretende que llegue a ser, pero seguro que en los próximos meses dará mucho que hablar :)

Si indagáis un poco, veréis que el equipo es de todo menos convencional. Y no me refiero a que el equipo esté por encima de la media(que lo está!), si no a que es un equipo "a medida" para el proyecto. Cada miembro del equipo trabajamos independientemente a los demás, y aunque alguna vez hayamos podido/podemos/podamos coincidir, tenemos otros jaleos :). Una apuesta diferente a la habitual por parte de Javier Mcallan, para entrar a competir en un sector tan duro como es el del turismo en internet.

Mi rol dentro del equipo ha resultado ser programador y algo así como el responsable(o irresponsable :P) de la parte técnica. Nuestro objetivo desde la parte técnica, es que la tecnología existente resulte la menor limitación posible para ofrecer una mejor experiencia de usuario, y os aseguro que está siendo todo un reto!

UniversalPlaces

Bueno, y cómo imagino que no esperaríais otra cosa de mi, os voy a contar un poco acerca de que tecnologías estamos utilizando(por ahora nada excesivamente especial):

  • Es una aplicación web hecha con Grails. Es el framework que más domino a día de hoy, y para este proyecto encaja perfectamente. Como se puede suponer, también hay un trabajo muy importante de integración, y la plataforma Java tiene multitud de herramientas para ello.
  • Corre sobre un Apache Tomcat 6 en producción.
  • Usamos MySQL y MongoDB para las bases de datos. La primera para guardar lo relacionado con reservas, clientes... Y la segunda a día de hoy es poco más que una caché de búsquedas de estancias, para lo que podríamos estar utilizando otras muchas herramientas tipo clave/valor, pero mientras ganamos experiencia para experimentar con algunas características de Mongo que pueden encajar muy bien con funcionalidades que están en el roadmap.
  • El servidor es un dedicado bastante resultón, que ahora mismo va bastante sobrado.
  • También estamos utilizando Amazon S3 para servir las imágenes y Postmark para mandar por email la confirmación de las reservas. Son servicios que hemos externalizado desde ya.

Y como curiosidad una métrica, a día de hoy, con la funcionalidad que se puede ver, tenemos poco más de 2200 líneas de código groovy y java.

No todos los programadores son iguales

Leía anoche el post de mi amigo (y gran profesional :)) Carlos Ble, ¿Todavía crees en los mitos?. La verdad que mientras lo leía me encontraba con sentimientos encontrados, en cierto modo entiendo por donde van los tiros respecto al exceso de expectativas que a veces generan las celebrities del software (entiéndase por desarrolladores, que por alguna razón, son conocidos en algunos círculos) a su alrededor de forma voluntaria o involuntaria.

Me viene a la mente una conversación que tuve hace 2 o 3 años con Alberto Molpeceres, que se hizo muy conocido por ser fundador de javaHispano. De algo parecido a lo que comenta Carlos en su post, que por la visibilidad que había conseguido por ser el fundador de esa gran comunidad de desarrolladores, se había encontrado por parte de algunos programadores un trato de algo parecido a un gurú/celebrity, cosa con la que él tampoco se sentía nada identificado.

Sé que conversaciones de este tipo las he tenido con más gente además de con Carlos y Alberto, pero disculpad que ahora mismo no recuerde nombres concretos :P

Está claro que por el hecho de alguien sea conocido, no quiere decir que sea un guía espiritual que va a resolver todos tus problemas como por arte de magia, igual que tampoco tiene que ser necesariamente mejor que otro que no sea conocido (sí, como en cualquier otra profesión). Aunque hay que tener en cuenta que si alguien se expone ante gente de su gremio, a las críticas o alagos que puede suponer eso, seguramente un paquete tampoco será :D

Pero hay una cosa que se desprende del post de Carlos, hablando de que todos somos iguales, cosa con la que no podría estar nunca de acuerdo. Se suele decir que 1 buen programador es unas 10 veces más productivo que uno mediocre(no recuerdo quién es el autor de esta afirmación cita del libro The Mythical Man-Month), y si el programador bueno resulta ser un fuera de serie la diferencia puede ser aún más exagerada! Mi humilde experiencia también me dice que los proyectos salen mejor de pequeños equipos con gente buena y motivada(o no-desmotivada).

Code Ninja

Como podéis ver, también creo que entre buenos programadores hay algunos que están por encima de otros. Aunque no me sienta capaz de ponerme a hacer rankings ni nada por el estilo, sí que hay gente con la que he trabajado que tengo la sensación de que están por encima de otros, que son auténticos cracks(algunos los llamarían ninjas).

Eso sí, todos los buenos programadores que conozco a los que admiro y tomo de algún modo como referencias, lo son porque además de atesorar mucho talento, se han ido preocupando de mejorar sus conocimientos y habilidades con el tiempo... y eso que casi todos son conscientes de que son buenos! :D

En fin, que ni por ser una celebrity vas a saber de todo y solucionarás los problemas mágicamente; ni todo el mundo tiene el mismo talento, capacidad de trabajo y de cintura para ser mejores programadores (cámbiese programadores por cualquier otro oficio).

Taller de Grails en Madrid On Rails

Supongo que algunos ya lo sabréis, este Viernes 11 de marzo a partir de las 16:00 voy a impartir un taller de Grails que ha organizado primerViernes.

El taller durará 4 horas, tiene un coste de 100€ y lo llevaremos a cabo en las instalaciones de Madrid On Rails.

El taller está enfocado a gente que ya conoce el framework y quiere acelerar su aprendizaje. En el taller veremos ejemplos en código y trabajaremos sobre distintos tipos de caché, plugins propios y de terceros, sistemas de colas... vamos, que NO va a ser introductorio.

¿Que aún no conoces primerViernes?

primerViernes es un grupo organizado para el lanzamiento de proyectos en Internet que se basa en la idea de "más hacer y menos hablar".

Logo de Primer Viernes

Con esa declaración de intenciones, ya supondréis que soy simpatizante de este grupo que se concentra en Madrid, y con el que vemos un espíritu muy similar al que nos ha empujado a mover la iniciativa CachiruloValley en Aragón.

Además, habiendo estado en uno de los primerViernes, tengo la sensación que del grupo saldrán algunas empresas interneteras que van a dar guerra :)

Configuración de Tomcat para trabajar con UTF8

Me ha vuelto a pasar... otra vez! La configuración por defecto de Apache Tomcat 6 me ha dado problemas con la codificación de carácteres.

encoding

Mientras que en el servidor embebido de Grails funciona todo perfectamente con UTF8, siempre que no la líes gracias a a causa tu IDE/editor favorito, claro. Al poner en una instalación de tomcat el war que quería desplegar, los carácteres no-ascii(eñes, tildes, etc) no se pasaban con la codificación correcta cuando los parámetros iban por GET.

La solución es bastante simple.

A la línea del server.xml de la configuración de nuestro/s tomcat/s:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>

Añadirle URIEncoding="UTF-8", para que quede algo como esto:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>

Y ya :)