GSoC: Estado del Grails Include Plugin

Desde que empezó el Google Summer of Code no he explicado exáctamente qué es y el por qué de mi proyecto, ahora que veo cerca la primera versión (a falta de un problema con las urls que mapean a vistas) ya empieza a ser hora de hacerlo.

La cuestión es que Grails no tiene el comportamiento típico de include, tiene el tag render que es parecido(para el caso de un template estático sería igual) pero se orienta al principio Don't Repeat Yourself en la vista, por lo que al render hay que pasarle los objetos o colecciones de objetos que se utilizarán para renderizar el template.

Esto puede llevar a un problema de repetición de código en los controllers, por lo que aquí rompemos el Don't Repeat Yourself, siendo sensibles a futuros cambios. Ésto no quiere decir que el render no valga, en mi opinión para conseguir no repetir código dependiendo de los casos, lo mejor es combinar ambos comportamientos. Aunque el problema de la repetición de código se puede solucionar con nuestras propias librerías de tags, que con Grails son sencillas de crear, pero pienso que debería ser todavía más sencillo y limpio utilizando una acción de un controller que además podríamos reutilizar para por ejemplo peticiones XMLHttpRequest.

Metiéndonos ya en el uso del plugin, existen dos formas de hacer el include, la forma clásica con el tag includeURL:

<g:includeUrl url="/prueba/show?param=value"/>

Los posibles valores de url pueden ser tanto urls que mapean a controllers/acciones/vistas de nuestra aplicación grails, como a recursos estáticos como puede ser un html plano o un fichero de texto que se encuentren en el mismo contexto. Para el caso de las urls mapeadas, los parámetros se pueden pasar por los posibles valores de la url mapeada tipo REST como con parámetros de la request de los de siempre.

Y la segunda forma es para mi es la forma recomendada para los caso de hacer un include a acciones de nuestros controllers, includeController:

<g:includeController controller="prueba" action="show" params="[param:'value']"/>

Al que se le pasa el nombre del controller, acción y mapa de parámetros. Hay que decir que por la convención de nombres, en el caso de prueba buscará en controlador PruebaController. La recomendación es simplemente por la probabilidad mucho mayor de una cambio de mapeo de url que del nombre de un controller, cada uno verá de qué manera prefiere hacerlo ;).

Hablando ya sobre la experiencia desarrollando éste plugin, la verdad que me esperaba que fuera más sencillo de desarrollar, estaba claro que sería necesario un wrapper del response para hacer el include con el RequestDispatcher. Al final he tenido que escribir también un wrapper para el request y re-escribir parte del filtrado del mapeo de urls de grails, al ser la misma petición y no estar contemplado este comportamiento anteriormente, ha habido que hacer un poco de trabajo extra investigando el código del framework en cuanto a mapeo de urls y hacer mucho debug por no conocer el código (gracias IDEA + JetGroovy! :)).

A ver si dejo una versión estable de éste plugin en las próximas semanas, y comienzo a colaborar con el plugin de Java Content Repository para poder trabajar con ésta especificación de una forma más o menos parecida a como se usa GORM con Hibernate por debajo.

Añadir entornos de ejecución a una aplicación Grails

En la sesión del openjavaday sobre grails, surgió la pregunta de si se podían añadir entornos además de los que vienen por defecto: development, test y production.

Me quedé con la duda si era posible o no, convencido que eso no se les habría pasado por alto a los desarrolladores y se podría hacer de alguna forma, casualmente he tenido que hacer unas pruebas con bases de datos desde cero y no tenía ganas de andar haciendo backups de la base de datos para recuperar el estado inicial (uno que es vago :P), por lo que me venía como anillo al dedo.

En fin que, tal y como pone en la documentación, en este caso sólo he tenido que añadir al DataSource.groovy el entorno con su respectiva configuración, pero si lo necesitamos, también podemos añadir otros parámetros de configuración en el Config.groovy. Para arrancar la aplicación en nuevos entornos, deberemos ejecutar:

grails -Dgrails.env=mientorno run-app

Por ponerle una pega, estaría muy bien que fuera sólo con el nombre del entorno.

Resumen del Open Java Day 2008

Llevo unos días tratando de poner en orden las sensaciones que me ha dejado el Open Java Day mientras he ido leyendo otras opiniones sobre el evento. Aunque la organización me parece que podría haber sido mejorable, a niveles generales me llevo una buena sensación de estos dos días en Madrid.

En mi opinión hubo algunas ponencias que no tenían muy claro hacia qué tipo de público se dirigían, no pegaban demasiado en un evento de desarrolladores. Tampoco hubiera estado mal que se hubiese dado una identificación a los asistentes, aunque fuera por poder reconocerse entre la gente que ya se conoce pero no físicamente, o simplemente por poner nombre con quién hables.

Día 1:
Empezó la mañana con la ponencia High Performance Web Server: Cherokee de Álvaro Lopez, que sin ser una charla sobre java, resultó muy interesante que esplicara desde sus razones para crear el proyecto hasta ver lo amigable de la interfaz web de configuración del servidor.

Siguió la ponencia Sun, impulsando las Comunidades Abiertas y la Social Media de Joan Carles Agustí, sobre redes sociales y sobre aplicaciones dentro de facebook, que personalmente me dejó frío.

Luego con otra sobre Software Quality Assurance, dónde Francisco Moreno Peyrona nos habló de su trabajo en Sun en materia de aseguramiento de la calidad y de la herramienta que ha creado, CATI, para la trazabilidad entre la fase de diseño de software con la de implementación.

Después del descanso, vino la charla sobre Java Content Repsotory de Alfredo Casado, que se quedó corta, para los que ya supiéramos de qué va esta especificación nada nuevo, pero estuvo bien como introducción. A mi me hubiese encantado ver por ejemplo algo sobre el módulo de Spring o sobre Jackrabbit OCM.

La siguiente fué la charla sobre Struts 2 de Álvaro Sánchez Mariscal, dónde se habló de la muerte de Struts 1 y de que está basado en WebWork tomando la marca Struts. Con los problemas que hubieron al hacer la demo, no se pudo enseñar prácticamente nada de éste framework.

La última antes de comer fué Lecciones prácticas de capa web con Java de Ignacio Coloma, para mi una de las mejores del Open Java Day. Aunque tampoco fué nada novedoso creo que una charla así es importante cuando java se usa mayoritariamente en desarrollo web y que de los programadores java no se habla demasiado bien en el mundillo web, viendo las macro-aplicaciones de muchas AAPP y grandes empresas, con razón. Se tocaron temas de usabilidad, accesibilidad y javascript no intrusivo, frameworks javascript, frameworks CSS...

La tarde empezó con Desarrollo JavaME sin necesidad de portabilidad de Curro Rueda, dónde vimos formas de solucionar el infierno de la compatibilidad en el desarrollo de aplicaciones móviles con J2ME que han utilizado para el desarrollo de TagsME, como nunca he desarrollado para móviles algunas soluciones me sorpredieron mucho y otras muchísimo.

La última fué la sesión sobre Grails: desarrollo web con Java como siempre debió ser de Nacho Brito, que también se hizo corta, habló de forma general sobre Grails y groovy, y en la demo sólo dió tiempo de llegar hasta el scaffolding dinámico y al sistema de layouts, sin poder verse otras de las bondades de este frameworks. Eso sí, hubo quien vió el parecido con Ruby on Rails enseguida ;).

Para finalizar el primer día, habían tres talleres a elegir(Spring, Trails y OpenCMS), asistí al de Spring 2.5. Primero hubieron problemas con la red Wi-Fi, por lo que cambiamos de aula, y depués nos encontramos con que no habían regletas suficientes para los portátiles, lo que retrasó el inicio del taller. Por estos problemas Erick Camacho y Sergi Almar tuvieron que acelerar y acabó pareciendo una sesión más, de cualquier forma resultó interesante conocer Spring 2.5 e ir viendo el código de la aplicación de ejemplo.

El día acabó redondo con el España-Rusia :P

Día 2:
El segundo día llegué tarde y no vi prácticamente nada de la charla Proyectos de la Fundación I+D del Software Libre de Máximo Martín, de la que me dieron opiniones encontradas :).

Luego comonezó la sesión Developing Rich Internet Applications - A New Step Ahead de Jose María Corsino, de la que esperaba una charla mucho más técnica y finalmente no fue mucho más que nombrar las diferentes posibilidades que se pueden encontrar en el mercado.

Tras ésta, la siguiente sesión fue Introducción a Netbeans Rich Client Platform de Ibon Urrutia, que nos explicó su experiencia a raíz del desarrollo del IDE, basado en esta plataforma, para desarrollar aplicaciones con TagsME y nos enseñó la herramienta.

De la charla que seguía tras el descanso Infraestructuras Abiertas para un Mundo Abierto de Francisco Moreno Peyrona, tampoco puedo dar opinión ya que entramos bastante tarde.

Siguió la Introducción a Maven de Antonio María Sánchez Berrocal, tal y como indica el título de la sesión se quedó en una introducción, por cierto, que Antonio dijo la que para mi fue la frase del evento "Si sientas a un burro delante de un ordenador, sigue siendo un burro" XD.

Después vimos el video de la final de la Java Cup 2008, con un repaso de 1A a Laponia quedando 21-2, con ovación incluida en el primer gol de Laponia :).

Después de comer, se retrasó la Mesa redonda sobre frameworks web por una charla que se tuvo que pasar del Open Solaris Day a la sala dónde se celebraba el Open Java Day. En cuanto a la mesa, me pareció que no se aprovechó la oportunidad de que se hablara sobre las ventajas o puntos fuertes de los frameworks de los que los miembros de la mesa son creadores o están especialicados, que al menos era lo que yo esperaba. Se habló de frameworks orientado a acciones o a componentes, para desarrollo de RIAs o web tradicional, si struts está muerto o no, frameworks surgidos de empresas o desde la comunidad open source... Y como era de esperar, acabaron surgiendo los innombrables ASP.NET y Ruby on Rails, que no salieron muy bien parados de los comentarios de los ponentes.

El día finalizó con otros tres talleres(OpenXava, Glassfish y ItsNat). Esta vez entré al de Glassfish que impartía David Bonilla. Me quedé sin batería en el portátil y no encontré dónde enchufar el caragador, además tuvimos que irnos antes de acabar por coger el tren de vuelta, de todas formas me estaba pareciendo un taller interesante sobre el que tendré que repasar la documentación que nos pasaron a los asistentes.

Como suele pasar en estos eventos, casi es más interesante lo que se mueve en los pasillos que el evento en sí, intercambiando impresiones sobre las charlas o sobre temas fuera de ellas. Un placer estar y charlar con gente como Alberto Gimeno(que me hizo un hueco en su casa :)), Jesús Navarrete, Erick Camacho, Sergi Almar, Dani López, Nacho Brito... aunque me quedé con las ganas de coincidir un rato con gente como Manuel Recena y alguno más.

Ahora toca esperar a que se publiquen las presentaciones y los vídeos de las ponencias, tanto para los que queremos repasarlas como para los que no pudieron asistir.

Recopilación de blogs de ex-compañeros

Hoy he empezado a hacer algo de limpieza en mi lector de feeds, básicamente por eso de no dar para consumir tanta información, y me he dado cuenta de la cantidad de blogs que sigo de ex-compañeros, de la última empresa en la que trabajé, unos siguen allí y otros se fueron antes que yo. También me servirá para que la próxima vez que me pregunte alguien sobre "los blogs de los del curro", remitirlo aquí mismo.

Imagino que tendrá algo que ver el que, vete tú a saber porqué, Zaragoza sea una de las ciudades que más blogs tiene per cápita de España. Las temáticas son para gustos variados, hay de todo; algunos andan desactualizados o escriben de vez en cuando, otros llevan poco tiempo en marcha y otros llevan bastante tiempo. Por orden alfabético (no se me enfade nadie :P):

7recursos, es un blog colaborativo de 7 compañeras(Mari Carmen, Patricia, Noemi, Carla, Mamen, Vanessa e Isa). Se puede encontrar desde recetas a algún post de diseño o programación :).
calcolea, de Carlos Alcolea. Mezcla algún post de gestión de proyectos con experiencias de viajes y algunos personales.
Custodis Somne, de Jesús García. Es un espacio personal.
EX7, lo mantiene Ernesto Frías. No es un blog, es una revista, imprescindible si te interesa ver exposiciones y entrevistas a gente del mundo del diseño.
Inf-o-matic, de Juan Luis Belmonte. Que ha reactivado el blog desde que ha empezado también con su proyecto para el Google Summer of Code. Suele hablar sobre programación, sistemas y cabreos ;).
Me voy de viaje, de Marcos Gil. De temática de viajes claro, atentos a la vuelta al mundo :)
Pensieve, de Mamen Pradel. Habla sobre temáticas entorno al arte, diseño e internet y muestra algunos de sus diseños.
Programeta, de Oscar Embún. Que toca temas personales y variados, pero hace tiempo que no lo actualiza.
The Stromboli Project, de Javier Ferraz y Elisa Bellosta. Ellos tocan temas interneteros.
TorresBurriel, de Dani Torres. No creo que necesite demasiada presentación :), pero él escribe sobre todo de temas relacionados con la usabilidad.
Un maño entre gaúchos, de Luis Bosque. Que mezcla temas de programación, sistemas y personales.
UnClick, de Isa Casanova. Toca temas de usabilidad y algunos más personales, últimamente parece que ha bajado el ritmo, quizás tenga parte de culpa su nueva web isabl.
Voxelizer, de José Félix Lucía. Al final algunos le convencimos a que enseñara algunas de esas cosillas que desarrolla en sus ratos libres, sobre desarrollo gráfico la verdad que poco he leído en español.
Z Ziudad, de Jose Antonio Tebar. Dónde enseña algunos diseños que va haciendo.
</sin>, de Pau Rivera. Es un blog de temática personal aunque ya lleva un tiempo parado.

Espero no dejarme a nadie (que va a ser que sí ;)), sino que alguien comente por aquí.

Lo curioso es que muchos empezamos a escribir nuestros propios blogs trabajando allí (yo incluido), sin que en ningún momento la empresa lo promoviera. Soy de la opinión que al tener cerca a alguien que empezó hace bastante ayuda a quitarse miedos y vergüenzas, luego empieza a notarse un efecto dominó.