Crónica de la Grails Exchange 2010 en Londres

Durante hoy jueves 16 y mañana 17 se está celebrando en Londres la Grails Exchange 2010.

Dos días llenos de ponencias interesantes en el edificio de Skillmater, donde se puede ver en directo hablar a las primeras figuras del ecosistema Groovy y hacer contactos interesantes.

Gran ambiente, comida regular (lo siento, todos sabemos que el Reino Unido no es famoso por su gastronomía) y una conexión wi-fi estupenda es una buena definición de la Grails Exchange en pocas palabras. Para las ponencias me tendré que alargar un poco más, pues fueron muchas y todas bastante interesantes. Aquí va un resumen de las principales:

Keynote – Groovy, State of the Union

Como ceremonia de apertura, Guillaume Laforge hace una introducción a la historia de Groovy. Comentando un gráfico con la evolución del número de descargas de Groovy al mes, nos enseña como la adquisición de G2One y la liberación de la versión 1.6 de Groovy tuvieron los mayores picos de descargas. Pero el record sin duda han sido las 185000 descargas en un solo mes durante la salida de Groovy 1.7. Toda esta evolución da bastante confianza y presagia un gran futuro para Groovy y todo su ecosistema para las siguientes versiones.

Después repasa las mejoras que se han añadido a la versión 1.7 como:

  • Multiple asignements (a,b) = [b,a] para hacer swapping, por ejemplo.
  • Soporte para clases anónimas y anidadas. Aunque con algunas pequeñas mejoras, como que las clases anónimas no necesitan que las variables externas sean final y la creación automáticas de clases o interfaces con un solo método a partir de Closures.
  • Los power asserts, gracias al creador de Spock.
  • Anotaciones en imports, packages y la posibilidad de incluir Closures como parámetros en cualquier anotación.
  • Grab, que permite la descarga de clases desde repositorios de jars, como Maven, durante la compilación y ejecución de clases o scripts.
  • La personalización de la coerción a boolean con solo sobreescribir el método boolean asBoolean()

Después explica cual es el plan para las siguientes versiones:

  • Optimización en el rendimiento.
  • Soporte para JSON nativo.
  • GContracts: @Invariant, @Requires, @Ensures
  • Closure composition, crear closures con otros. Por ejemplo, closure1 << closure2 supone que una llamada a closure1(x), se ejecute realmente closure1(closure2(x))
  • Closure memoization o caché de resultados para Closures. Dado un mismo conjunto de parámetros de entrada, guarda la salida y la devuelve sin ejecutar otra vez el codigo.
  • Trampoline, idea sacada de los lenguajes funcionales (Clojure y Scala tambien la tienen), sirve para evitar los StackOverflowException en las llamadas recursivas a closures y métodos cuando se llaman demasiadas veces (más información sobre trampoline en el blog de Václav Pech)
  • Nuevas transformaciones AST: @Log, @Field, @PackageScope, @InheritConstructor, @IndexedProperties, @AutoClone, @AutoExternalize, @ThreadInterrupt
  • Modularizar groovy.
  • Mejorar soporte para DSLs con GEP-3, eliminando puntos y parentesis totalmente. Ver un ejemplo en el blog de Guillaume.

Sobre la optimización: Groovy es particularmente lento en manipulaciones aritméticas y manejo de primitivos debido a lo conversión automática de tipos (BigDecimal), boxing/unboxing y la sobrecarga de operadores matemáticos. El peor caso conocido es la función de fibonacci, que en Groovy 1.7.5 tarda 25131 ms, y su equivalente en Java 1110 ms, esto es hasta 22x mas lento. Debido a las optimizaciones con enteros que se han hecho en la versión 1.8-beta3, esta misma función tarda en calcularse 1871 ms, solo un 68% más lento (es decir, antes 22.64x y ahora 1.68x), lo cual supone un gran avance.
Lo siguiente será optimizar los doubles y mejorar el acceso a los arrays. La alineación de Groovy con JDK7 no será hasta la versión Groovy 1.9 (todavía queda bastante…), y los Closures hasta JDK8

Ver vídeo de la ponencia y presentación.

Rich Grails UIs with Canoo RIA Suite

Dierk Koenig, de Canoo, nos muestra en directo como funciona su suite para creación de aplicaciones RIA ligeras. Ultra Light Client es un framework para crear aplicaciones Swing en el que todo se programa y se ejecuta en el servidor. Y gracias a esto podemos usar Grails y Groovy para crear aplicaciones Swing, lo cual lo hace muy interesante. Las aplicaciones generadas se pueden ejecutar como un Applet o desde Java web start. Arrancan muy rápido, pues el cliente tiene siempre el mismo código: lo necesario para conectarse al servidor y que éste le diga que componentes Swing se deben crear y que eventos se deben propagar. El funcionamiento después es simple: una vez generados los componentes en cliente, cada evento generado invoca código en el servidor. Desde ahí, los posibles cambios se propagan de nuevo en la capa cliente.
El ejemplo empieza creando una aplicación muy básica en Grails con 4 clases de dominio. Despues instala el plugin para Grails ULC Plugin y genera un scaffolding de solo lectura para acceder a todas las entidades en un applet con Swing. Es interesante ver como la carga de datos se hace bajo demanda (se nota sobre todo cuando hay un listado con 2000 elementos: según se va desplazando se van cargando poco a poco los resultados)
ULC es una herramienta de pago en la que trabajan Hamlet D’arcy (committer de Groovy, autor del capítulo “AST Transformations” de la segunda edición de “Groovy in Action”), Andres Almiray (committer de Groovy y creador de Griffon) y el propio Dierk Koenig, autor principal del libro Groovy in Action. Menudo pedazo de equipo que tiene Canoo.

Ver vídeo de la ponencia

Enter the Gradle

El creador de Spock, Peter Niederwieser, da una charla práctica sobre Gradle. Gradle es un sistema para construir aplicaciones Java (además de Groovy, Scala, Web apps y OSGi). Proporciona un DSL y una librería Java que se pueden usar para crear scripts. Comenta que no es un framework de builds, es un lenguaje extensible para construir builds, que no es lo mismo (a diferencia de Ant, con Gradle puedes programar), y es declarativo (le dices qué hacer y el se encarga del cómo). Finalmente acaba la demo creando, a partir de varios scripts Ant, sus equivalentes en scripts Gradle, y su integración con Maven.

Ver vídeo de la ponencia.

Testing dynamic websites with GEB: a newbie’s perspective

Tomas Lin (@tomaslin), que se casa el próximo martes (felicidades!), nos explica en su charla su experiencia haciendo tests funcionales sobre sites con Geb. Este tipo de tests se encargan de navegar, hacer clicks en enlaces y submit de formularios para testear aplicaciones web, incluso con Ajax. Durante la charla nos explica como simular las acciones de un usuario con Webdriver, y después procesar el DOM resultante para ver si es válido. Para esto Geb proporciona un DSL una sintaxis igual que la de jQuery. Una ponencia bastante entretenida e interesante, sin duda GEB parece muy potente, incluso para hacer crawling y bots.

Ver vídeo de la ponencia.

High volume and scalable Ajax with Grails

David Dawson en su charla nos explica como hacer que nuestras aplicaciones con un refresco intensivo vía Ajax sean escalables usando long polling. Para esto nos enseña varios ejemplos con jQuery en la parte cliente y en la parte servidor Continuations (sólo para Jetty), Comet (Tomcat) y Atmosphere (para cualquier contenedor de Servlets). La idea es bastante simple: si un cliente tiene que refrescar su estado y hace una petición al servidor cada 10 segundos ¿porque no mantener solo una conexión abierta contra el servidor esperando ese resultado? de cara al cliente el resultado es el mismo o incluso más rápido, ya que la información llega inmediatamente. Y en el servidor solo tenemos que mantener las conexiones abiertas en un pool y enviar el resultado a todas en cuanto se reciba. El cliente, cuando reciba el resultado (al segundo o al cabo de una hora), lo mostrará y abrirá una nueva petición. Los ejemplos y el código mostrados en la charla son completamente prácticos, sencillos y, sobre todo, que funcionan (se ve la conexión Ajax que abre jQuery esperando indefinidamente en Firebug).

Ver vídeo de la ponencia.

Los chicos de skillmater son unas máquinas y los vídeos están listos apenas acaban las ponencias, por lo que ya podéis verlos todos aquí. Mañana el resto.