La última semana de Noviembre estuve en Fort Lauderdale, Florida, en la conferencia G3 Summit en la que dí dos charlas. Se trata de la primera edición de una conferencia centrada en Groovy, Grails y Gradle, y organizada por el mismo equipo que se encargaba de la SpringOne 2GX. Debo admitir que Miami es un muy buen lugar para organizar una conferencia a finales de Noviembre. Pasar de los 8ºC y la lluvia de Madrid a los más de 25ºC y el sol de Miami es algo de agradecer.
La agenda incluía más de 50 charlas y a los principales líderes de los distintos proyectos del ecosistema Groovy. En G3 Summit estuvieron presentes tanto Graeme Rocher, líder del proyecto Grails como Jeff Brown, co-fundador del mismo framework; Guillaume Laforge líder de Groovy o Ken Kousen de Groovy Podcast y autor del libro _Making Java Groovy_.
Talleres y charlas
Durante la conferencia asistí a un workshop, tres keynotes y ocho charlas y en general todas fueron buenas. De ellas, mis favoritas son:
Build Web Applications with Ratpack
Empecé la conferencia con el workshop de Dan Woods sobre _Build Web Applications with Ratpack_. Dan, además de ser miembro del equipo de Ratpack ha escrito el primer libro sobre el framework: Learning Ratpack.
El workshop me encantó: muy bien estructurado con pequeños fragmentos de código que había que completar y tests ya preparados que servían para probar que todo era correcto. Además de muy buenas explicaciones por parte de Dan y también buena gestión del tiempo entre los distintos ejercicios. La verdad es que en ocho horas de workshop dio tiempo a ver muchos aspectos distintos de Ratpack y probar en profundidad distintas opciones y formas de resolver los problemas.
Si alguien está interesado en el workshop está disponible en el github de Dan.
High Performance Groovy
Una de las mejores charlas que he visto en mucho tiempo sobre problemas de rendimiento, pitfalls y gotchas a evitar cuando se trabaja con Groovy y, en algunos casos, también con Java. David Clark hizo un gran trabajo explicando con muchos ejemplos y con gran detalle distintos aspectos que debemos tener en cuenta cuando desarrollamos aplicaciones Groovy. Me quedo con:
- Utiliza Java 8 si puedes. El rendimiento de Groovy en Java 8 ha mejorado mucho.
- Cuidado con el boxing/unboxing, puede afectar mucho al rendimiento. En este caso se trata de un problema de Java y no sólo de Groovy.
- Abuso de dispatch dinámico. Si tu código realmente no es dinámico es mejor anotarlo con
@CompileStatic
, la diferencia de rendimiento puede ser muy grande, especialmente si el código es _CPU-bound_. - Si tu código tiene IO (acceso a disco, base de datos, red,...) da igual que sea dinámico o no, apenas se va a notar la diferencia de rendimiento porque todo el tiempo lo vas a gastar esperando por la latencias del disco o la red.
Finalmente terminó la charla mostrando algunas herramientas que podemos utilizar para diagnosticar problemas de rendimiento. Comentó que la mejor con diferencia es YourKit aunque VisualVM también ofrece buenos resultados.
Todo el código mostrado en la charla está disponible en este repositorio de Github en el que también se incluyen las slides
Functional Programming for Groovy Programmers
Si alguna vez estás en una conferencia y tienes la oportunidad de ver a Venkat Subramaniam no lo dudes, no te defraudará. Venkat es un gran speaker que sabe cómo mantener la atención de los asistentes durante toda la charla y tiene una gran facilidad para explicar y transmitir sus conocimientos.
En esta ocasión hizo una introducción a la programación funcional, las ventajas, distintas aproximaciones que tenemos en Groovy,... La charla fue realmente buena y fiel al estilo que Venkat nos tiene acostumbrados: sin utilizar slides, sólo una lista de temas de los que hablar y código, muchos ejemplos de código con los que dejó muy claros todos los conceptos.
Es una pena que no se grabara porque merecería la pena verla de nuevo con más calma.
Groovy Puzzlers S03 – The Unstoppable Puzzlers Hit Again!
La charla más divertida de la conferencia. En esta ocasión Baruch Sadogursky con ayuda de Guillaume Laforge presentaron la tercera edición de los _Groovy Puzzlers_. Para el que no lo conozca la idea surgió hace tiempo con una charla en la JavaOne por Joshua Bloch y Neal Gafter en la que mostraban fragmentos de código Java y daban diversas opciones a la audiencia sobre cual era la respuesta o comportamiento correcto.
En este caso se trataba del mismo planteamiento pero con Groovy en lugar de Java. Para cada fragmento de código había cuatro posibles opciones y una vez que los asistentes votaban se mostraba la solución correcta. Entre los que habían acertado la respuesta debían tratar de explicar el por qué para ganar una camiseta.
Debo admitir que esta era la tercera vez que veía la charla pero fue igual de divertida y entretenida que las veces anteriores ya que nunca logro recordar las respuestas de una vez para otra.
Dockerize your Grails!
Esta fue mi primera charla. En ella hablé de los distintos problemas que tenemos al desarrollar aplicaciones Java, en particular centrándome en Grails, y expuse tres problemas:
- El entorno de desarrollo no es el mismo para todo el equipo de desarrollo.
- Los entornos de desarrollo y producción son muy diferentes.
- Los problemas cuando tenemos un nuevo miembro en el equipo y el tiempo que tarda esta persona en empezar a ser productiva.
Después de esta introducción presenté Docker como la solución a estos problemas. Di un repaso a los conceptos básicos, expliqué las diferencias entre una máquina virtual y Docker y enseñé pequeños ejemplos de cómo se puede utilizar Docker.
Finalmente llegó el momento de las demos. Había preparado una aplicación muy sencilla pero que tenía diversas _partes móviles_ en la arquitectura. La aplicación tenía una aplicación Grails que se encarga de producir un mensaje de texto, otra aplicación Grails que recibía dicho mensaje de texto por medio de RabbitMQ y finalmente daba la vuelta al mensaje y lo almacenaba en una base de datos Postgresql. Con esta sencilla aplicación pude mostrar cómo podíamos utilizar Docker para resolver los tres problemas comentados anteriormente.
Todo el código se encuentra en este repositorio y las slides son:
Taking advantage of Groovy Annotations
Para mi segunda charla me centré en todas las tranformaciones que nos ofrece Groovy. Como desarrolladores debemos aprovecharnos de todas las características y ventajas de nuestro lenguaje de programación y Groovy proporciona una gran cantidad de anotaciones que nos hacen la vida más fácil al desarrollar. Después de explicar las distintas categorías y numerosas transformaciones hice una demo creando desde cero una sencilla transformación AST para añadir un campo VERSION
a una clase. La idea era demostrar cómo es posible crear nuestras propias anotaciones para poder solucionar ciertos problemas que de otra forma serían más complicados de resolver.
El código de esta transformación así como los tests están disponibles en este repositorio y las slides aquí:
La comunidad Groovy
La comunidad Groovy no es demasiado grande por lo que después de haber asistido a unas cuantas conferencias de Groovy y haber dado charlas en ellas conozco a mucha gente. Esta conferencia me ha servido para reencontrarme con viejos amigos que hacía tiempo que no veía y conocer gente nueva. Además también ha servido para que todo el equipo de Grails de OCI nos reuniéramos por primera vez :)
Me gustaría agradecer a los organizadores de la conferencia por su trabajo porque ésta ha sido estupenda. Se notaba que el equipo de NFJS se había encargado de todos los detalles: comidas, salas, breaks, wifi,... Todo funcionó sin ningún problema.
En cuanto a las charlas, además de las que he destacado todas me parecieron buenas y con un muy buen nivel por parte de los speakers. El único aspecto negativo (por comentar algo) son las 9 horas y 30 minutos de avión desde Madrid a Miami, aunque eso es algo que no tiene fácil solución... ;-)
Conclusión
Me llevo tres ideas y cosas a mirar con más detalle para el futuro porque seguro que en el ecosistema Groovy van a seguir dando de que hablar:
- Grails: Obviamente conozco Grails en detalle pero no deja de sorprenderme todo lo que ha avanzado el framework durante el último año: grandes mejoras de rendimiento, distintos perfiles para integrarse con Angular 2 o React, GORM 6 con soporte para Hibernate 5, MongoDB, Neo4j y Cassandra, y un largo etcétera de mejoras. Merece la pena seguir todas las novedades para no quedarse atrás.
- Ratpack: Después de haber estado un día completo en el workshop me parece una pasada lo que el equipo de desarrollo de Ratpack está haciendo. Ahora que todo parece que tiene que ser _microservices_, _reactive_ y _asíncrono_ creo que Ratpack va a tener mucho que decir y aportar durante el próximo año a la hora de desarrollar ciertos proyectos en la JVM.
- Groovy: Por supuesto el tema central de la conferencia era Groovy ya que en la mayoría de los casos es el nexo común que tienen el resto de herramientas y frameworks. Groovy sigue evolucionando y ya se está trabajando en Groovy 3.0 con su nueva gramática, el nuevo Meta Object Protocol (MOP), soporte para Java 9 y gran cantidad de mejoras.
Hay gente que dice que Groovy está muerto pero conferencias como está no hacen más que demostrar que se equivocan.