domingo, 7 de abril de 2013

Leído: Seven Databases in Seven Weeks



Con este artículo empiezo una serie en el blog en los que iré contando mi opinión sobre distintos libros técnicos que voy leyendo. Uno de mis propósitos para este año es lograr sacar tiempo para leer 5 ó 6 libros técnicos y, a ser posible, que no estén relacionados unos con otros ni estén centrados en un campo específico.

Así, empezamos con Seven Databases in Seven Weeks: A Guide to Modern Databases and the NoSQL Movement. A lo largo del libro hemos visto distintas bases de datos de distintos paradigmas. Desde las clásicas relacionales, hasta las modernas NoSQL con sus distintas variantes: orientadas a documentos, clave-valor, basada en columnas hasta las orientadas a grafos.

El libro no pretende ser una guía del DBA para cada una de esas bases de datos ni tampoco un manual de instalación de cada una de ellas, sino que directamente nos va mostrando distintas características de cada una a través de diversos ejemplos. También se centra en los distintos criterios que debemos tener en cuenta a la hora de elegir una u otra y destaca sus puntos fuertes y deficiencias.

Las bases de datos que se muestran, en el mismo orden de aparición son:
- PostgreSQL: Se trata de una de las base de datos opensource relacionales más potentes que existen en la actualidad. Aunque personalmente llevo utilizándola varios años, aprendí muchas cosas de tipos nativos, array n-dimensionales y búsquedas full text search.
- Riak: Entra dentro de la categoría de clave-valor aunque añade conceptos muy interesantes como un completo interfaz REST y enlaces entre campos de distintas relaciones.
- HBase: Es una base de datos orientada a columnas. Aunque inicialmente parece una base de datos relacional tal cual, ya en la introducción nos indican claramente que no es la típica base de datos que utilizaremos para nuestro pequeño catálogo de productos, sino que debemos tener muchos gigabytes o terabytes de datos para aprovecharla realmente. Al estar diseñada para un gran volumen de datos, el escalado es muy fácil de implementar. Otras cosas interesantes son el versionado automático de columnas y la compresión nativa de datos.
- MongoDB: Probablemente sea una de las bases de datos NoSQL más conocidas en la actualidad. El hecho de que sitios como Foursquare estén implementados con MongoDB le ha dado mucha fama. MongoDB encaja en la categoría de bases de datos orientadas a documentos, donde su principal característica es ser schemaless, es decir, no obligar a tener un esquema definido en las colecciones. Los documentos son JSON y entre sus principales características destacan la replicación de los datos y el sharding de grandes colecciones.
- CouchDB: Al igual que MongoDB, CouchDB es una base de datos orientada a documentos JSON y con interfaz REST. Una de sus principales características es que está diseñada para funcionar desde en un teléfono Android, en un pc hasta en un Datacenter.
- Neo4J: Se trata de una base de datos orientada a grafos. Es ideal para modelar tipos de relaciones de amistad, gustos,... Su principal lema es "si puedes dibujarlo como cajas y líneas en una pizarra, entonces puedes almacenarlo en Neo4J". Me ha impresionado porque es un nuevo paradigma de bases de datos para mí y sirve para cambiar el chip.
- Redis: La base de datos clave-valor por excelencia. Además posee numerosas operaciones para realizar todo tipo de operaciones: rankings ordenados, listas,...

Para terminar, añadiré que la lectura del libro es amena y cómoda. Cada capítulo está dividido en "3 días" y al final de cada día se incluyen una serie de ejercicios para practicar y afianzar lo aprendido. En mi caso, los ejercicios no los he podido hacer porque me llevarían demasiado tiempo (del que no dispongo). Aún así, estoy contento con lo aprendido a lo largo del libro que me ha servido para conocer otro tipo de bases de datos para utilizar en el futuro si los problemas a resolver lo requieren.

sábado, 2 de marzo de 2013

Descargando torrents desde un QNAP (y II)

Este artículo continua justo donde acabó el anterior. Como comentaba al final del mismo, el principal problema de TV Torrent RSS es la gestión de filtros. Por cada nueva serie que añado en la web Show RSS tengo que entrar en el NAS y añadir el nuevo filtro en el archivo de properties de TvRss.
Por suerte, se trata de un proyecto open source en el que el código fuente se encuentra disponible. Está desarrollado en Java, así que por este lado no tenía ningún problema adicional.
Me puse manos a la obra, lo descargué, empecé a analizarlo y hacer algunas pruebas y lo modifiqué para eliminar toda la funcionalidad de los filtros que no necesitaba. De paso me decidí por aligerar ("bamedizar" que decimos por Kaleidos) el código. Así, bajé de las 22 clases Java iniciales a sólo 7 :-), eliminando el soporte de envío de emails y toda la lógica para poder utilizar los filtros que ya no es necesaria. Además, al no tener que comprobar para cada .torrent todos los filtros para ver si hay que descargarlo o no, la ejecución ahora es mucho más rápida.
También aproveché para añadir la librería log4j ya que el logging se estaba haciendo simplemente con println, eliminé las librerías que no eran necesarias y reorganicé el resto. Finalmente actualicé el archivo ant que se utiliza para la construcción del proyecto.

El resultado está publicado en mi cuenta de Github junto con las instrucciones para ejecutarlo. Ahora simplemente lanzo un script todos los días por medio del crontab y mi nueva versión de TvRss se descarga todos los archivos incluyendo versiones proper, repacks, en 720p, en calidad normal y todo sin tener que hacer nada adicional.

domingo, 27 de enero de 2013

Ponente en Greach 2013 e impresiones

El pasado viernes 25 de Enero empezó la 2ª Edición de Greach que en esta ocasión ha durado dos días. Este año he tenido la suerte de asistir como ponente y dar una charla con el título Todo lo que me hubiera gustado saber cuando empecé a desarrollar con Grails. Al principio estaba muy nervioso pero al final todo salió muy bien. De hecho, mucha gente me comentó después que les había gustado mucho la charla y que habían aprendido unas cuantas cosas. ¡Muchas gracias a todos!

Respecto al resto de las charlas, mis comentarios:
1.- Keynote Groovy 2.0 update: Cedric Champeau fue el encargado de la Keynote de apertura. En esta ocasión Guillaume Laforge no pudo venir aunque conectamos con él via chat y anunció la publicación de Groovy 2.1.0 en la Keynote. La keynote fue muy parecida a la que vi en diciembre en el Grails Exchange de Londres.
2.- Road to Grails 3.0: Graeme Rocher fue el encargado de contarnos la novedades que vendrán en las próximas versiones de Grails.
3.- Hybrid mobile app in minutes, not days: Charla por Fabrice Matrat, Sebastien Blanc y Corinne Krych que crearon en 45 minutos un pequeño clon de Foursquare con el plugin html5 mobile scaffolding. La charla fue muy interesante y la parodia que hicieron durante la presentación fue muy divertida. "Hello, Mr.very-very-rich man" :-P
4.- Test motherFucker... Test!!!: Mario García nos contó qué plugins utiliza él durante los tests de sus aplicaciones Grails y cual es la aproximación que realiza a la hora de testear la aplicación.
5.- Cómo crear una plataforma de libros electrónicos: Roberto Martin y Alberto Vilches nos contaron su experiencia real en una plataforma de libros electrónicos, los problemas que han ido encontrando y cómo los han superado.
6.- vert.x - Effortless asynchronous application development for the modern web and enterprise: Aunque inicialmente la charla la iba a dar Stuart Williams, al final no pudo asistir y fue su compañero Stéphane Maldini el que la dio. No estuvo mal aunque me esperaba un poco más.
7.- Buscando (y encontrando) la pareja ideal. Taller de desarrollo de aplicaciones Web con Grails 2: Taller para el desarrollo de una aplicación Grails por parte de Fernando Redondo. Aunque muchas cosas ya las sabía, aprendí algún pequeño truco.
8.- A GPars Programming Workshop: Taller de lujo con Russel Winder sobre GPars. Aunque fue un taller la verdad es que no hubo demasiado tiempo para programar.
9.- From big-GORM-centered into a cloud of fast nodes: Jorge Uriarte nos contó cómo han adaptado la plataforma TicketBis desde una "simple" aplicación Grails con tomcat, mysql, terracotta,... a una más moderna con Redis y nodos "ligeros" para poder seguir creciendo y soportando la carga.
10.- Testing the Grails Spring Security Plugins: Interesante charla de Burt Beckwith en la que nos mostraba distintas alternativas para probar Spring Security.
11.- Building a scalable API with Grails: Tanausú Cerdeña nos contó cual fue el proceso de creación y las distintas decisiones de diseño que tomaron en la creación del API de Geosophic.

Como veis, dos días muy intensos llenos de Groovy/Grails y demás tecnologías.

No quiero terminar sin dar la enhorabuena a Alberto Vilches por el gran trabajo de estos últimos meses y por arriesgar tanto para dar lo mejor a todo el mundo: Cambio de ubicación a un hotel en pleno centro de Madrid en lugar de en las afueras, dos días de conferencias en lugar de uno, aumento del precio de 10€-20€ a 90€-120€ (si compraba en early-bird o no), comida excelente en el restaurante del hotel,... Creo que ha sido magnífico y todos hemos quedado encantados. ¡Kudos!

Ah, y finalmente, por si hay algún interesado, las slides de mi charla:

ACTUALIZADO: Ya está disponible el video, aunque es una pena que los primeros 2-3 minutos de la presentación no estén.

miércoles, 16 de enero de 2013

Descargando torrents desde un QNAP (I)

Hace tiempo conté mi estrategia de backup en casa. Tengo montado un servidor debian con un raid 1 y unos scripts personalizados de rsync para realizar la sincronización y copia de los datos.

Adicionalmente tenía un portátil un tanto antiguo con ubuntu con el que descargaba series por medio de bittorrent y alguna otra cosa con amule. Hace unos meses decidí que quería mejorar un poco toda esta infraestructura con un NAS. Así, después de mucho mirar compré un Qnap TS-412 y un par de discos de 2 TB. Con los dos discos he creado un raid 1 y ahora tengo ahí toda mi información, fotos, series, música,...

El qnap tiene un linux embebido con mucha funcionalidad y que es fácilmente ampliable y personalizable. Para las descargas utilizo Transmission que se puede instalar desde el gestor de software incluído. Transmission funciona perfectamente pero tiene un pequeño problema, no permite configurar un feed rss desde el que descargar los torrents. Esto es un gran problema para mí porque para descargar mis series favoritas utilizo Show RSS. Una vez registrado en la web eliges tu series de la lista y puedes generar un feed rss personalizado en donde se publicarán automáticamente los torrents de las series según estén disponibles.

Así que con este problemilla me puse a buscar una solución. Como no soy el único que tiene estos problemas estuve probando distintas alternativas que encontré en diversos foros, pero o no funcionaban correctamente o no me terminaban de convencer. Finalmente encontré TV Torrent RSS Downloader que casi cubre mis necesidades. Es una pequeña aplicación hecha en Java en la que configuras uno o varios feeds rss y unos filtros y descarga los archivos adjuntos. Después de hacer una pruebas en local todo funcionó a la perfección, pero hay había un problema ¿cómo instalo java en el qnap?

Después de bucear un poco por la web de Sun Oracle llegué a la web de descargas del JRE para Linux ARM y tras unas pruebas de ensayo-error descargué la versión correcta para mi arquitectura: ARMv5 Linux – Headless EABI, SoftFP, Little Endian. La instalación es tan sencilla como descomprimir el archivo y configurar el path correctamente y comprobar que el ejecutable funciona:
$ ./java -version
java version "1.6.0_38"
Java SE Embedded Runtime Environment (build 1.6.0_38-b05, headless)
Java HotSpot(TM) Embedded Client VM (build 20.13-b02, mixed mode)

Ahora con java instalado es tan sencillo como ejecutar:
$ java -jar tvrss.jar

Y los .torrents de cada serie se iran descargando automáticamente al directorio que hayamos especificado en el archivo de configuración. Una vez funcionando las descargas de los .torrents de cada serie, si configuramos la ruta de descarga al directorio watched de transmission, los archivos se añadirán y se pondrán a descargar automáticamente.

Con todo funcionando podemos configurar un script .sh que se ejecute a la hora que queramos y descargue automáticamente todos los torrents. Por ejemplo:

$ cat tvrss.sh 
#!/bin/bash

JAVA_HOME=/share/MD0_DATA/software/java/ejre1.6.0_38
APP_DIR=/share/MD0_DATA/software/transmission_scripts/tvrss
LOG_FILE=$APP_DIR/torrents.log

cd /share/MD0_DATA/software/transmission_scripts/tvrss
$JAVA_HOME/bin/java -jar $APP_DIR/tvrss.jar >> $LOG_FILE

Con esto solucionamos el problema de la descarga de los archivos .torrent y el añadirlos a Transmission, pero como comenté antes, la versión original de TV Torrent tiene un pequeño problema: los filtros. Por cada serie que queramos descargar es necesario añadir un filtro nuevo en el archivo de configuración para que ésta se descargue. Además, si en el feed rss publican una nueva versión, las típicas versiones PROPER o REPACK que corrigen problemas de sincronización o similar, éstas tampoco serán descargadas.

La solución en el siguiente artículo :-)

jueves, 27 de diciembre de 2012

Pusheame: Notificaciones push al navegador

Esta semana pasada, en Kaleidos hemos celebrado la 3ª Edición de nuestra PiWeek. Aunque en la web viene explicado lo que es, la PiWeek es la Personal Innovation Week y básicamente consiste en que cada 6 meses, "cerramos" una semana para hacer proyectos de innovación. Existen únicamente dos reglas, sólo se permite usar software libre para el desarrollo y al final de la semana hay que hacer una demo funcional.

En esta ocasión he aprovechado la semana para probar los plugins de grails platform-core y events-push de los que ya hablé en mi anterior artículo sobre la Groovy & Grails eXchange.

La idea que hay detrás de "notificaciones push" del servidor al cliente es enviar información en tiempo real al navegador justo en el momento en que se obtiene. Normalmente, cuando desde una aplicación web queremos actualizar un contador, número de mensajes,... lo que solemos hacer es preguntar cada cierto tiempo (10-30 segundos) al servidor si hay mensajes nuevos. Esto implica estar constantemente haciendo llamadas al servidor y además tener un pequeño retraso en la obtención de los mensajes. Con el paradigma push es el servidor el que envía los datos al cliente sin que éste tenga que estar preguntando constantemente.

Mi idea era hacer una pequeña prueba de concepto haciendo push de números aleatorios desde el servidor al cliente. Una vez conseguido, he utilizado el API en tiempo real de Instagram para obtener fotos geolocalizadas e irlas mostrando en un mapa y en un muro.

El resultado es Pusheame, que se encuentra desplegado en http://pusheame.cloudfoundry.com.
Una vez ahí existen dos páginas de pruebas, el mapa, que muestra fotos geoetiquetadas de 28 ciudades de Estado Unidos.



y el muro, que muestra esas mismas fotos en formato muro o album de fotos:



Lo único que tenéis que hacer es abrir el navegador y esperar a que vayan apareciendo las fotos automáticamente.

Si no quieres esperar también puedes ver este pequeño vídeo que he hecho.

Pusheame: Instagram Real-Time pictures from Iván López on Vimeo.


Como indico en la página, para los curiosos, el código fuente del proyecto se encuentra disponible en mi cuenta de github: https://github.com/lmivan/pusheame.

Si perteneces a una empresa tecnológica y te gustaría participar en la próxima edición de la PiWeek, no dudes en contactar con nosotros.
En la primera edición celebrada en diciembre de 2011 sólo participamos Kaleidos. En la segunda edición de julio de 2012 participaron junto con nosotros Secuoyas y Yaco, y finalmente, en esta tercera edición se han apuntado de nuevo Secuoyas y también Wadobo.

martes, 18 de diciembre de 2012

Groovy & Grails eXchange 2012 en Londres

El pasado jueves y viernes (13 y 14 de diciembre) estuve en el Groovy & Grails eXchange 2012 en Londres (GGX). Se trata de una de las conferencias más importantes en torno a Grails, Groovy, Griffon,... de Europa.

Las charlas estaban divididas en dos tracks y en casi todas elegí las de Grails.

1.- Keynote on Groovy: Guillaume Laforge abrió la keynote contando novedades de la versión 2.0 de Groovy: Un core más modular, uso de invokeDynamic, las nuevas transformaciones para comprobación de errores de compilación... Interesante saber hacia dónde se dirige el lenguaje en las próximas versiones.

2.- Grails for Hipsters: Espectacular charla de Robbert Fletcher en la que usando Grails, Vertx, Handlebars, Backbone y un montón de tecnologías hacía un clon de Instagram con publicaciones push, ajax,... Realmente instructiva y con el código fuente disponible en github.

3.- Using Grails Platform Core: Marc Palmer nos contó el nuevo plugin Platform-Core que ha desarrollado junto a Stephane Maldini y que pretende sentar las bases de un nuevo API sobre el que desarrollar nuevos y potentes plugins. Incluye abstracciones de Seguridad, Navigación, UI, y, para mí la parte más interesante, Events.

4.- Under the hood: Using Spring in Grails: Desde hacía tiempo tenía ganas de asistir a una charla de Burt Beckwith y no me decepcionó. Contó cómo integrar Spring clásico en Grails, Inyección de Dependencias, distintas formas de interactuar y engancharnos al ciclo de vida de los beans,... Muy útil y formativa.

5.- Theming & UIs with Grails Platform UI: De nuevo Marc Palmer no habló sobre Platform Core, pero está vez centrado en la parte de UI. Las distintas abstracciones, taglibs,... que ha desarrollado para poder hacer interfaces en las que cambiar el diseño sea tan sencillo como descargar e instalar un nuevo tema de manera similar a como se hace con Wordpress.

6.- Leveraging Social Media in Grails: Para terminar el día, Bobby Warner nos contó los distintos plugins y librerías que existen en la actualidad para integrar nuestras aplicaciones Grails con las distintas redes sociales: Facebook, Twitter, Google+, LinkedIn.

7.- Grails Keynote: El 2º día comenzó con la Keynote de Grails por parte de su project leader Graeme Rocher. Se centró en las novedades introducidas desde Grails 2.0 y para mi gusto se detuvo demasiado en ellas y no le dio tiempo a entrar en profundidad en lo que se incluirá en las siguiente versiones 2.3 y 3.0

8.- Debugging Grails Database Performance: Interesante charla de Tom Dunstan sobre un plugin que había desarrollado para mostrar de manera muy visual en cada vista que renderizamos el tiempo total que ha llevado incluyendo el desglose en los distintos servicios, el número de consultas sql que se han realizado, el tiempo de las mismas e incluso la propia consulta. Hay que prestar atención a este plugin porque tiene pinta de ser muy útil durante el desarrollo.

9.- Groovier testing with Spock: En esta ocasión Robert Fletcher nos mostraba código Java con sus correspondientes tests en Junit e iba explicando de una manera muy sencilla cómo convertir estos tests a Spock y por qué deberíamos usar Spock para probar en lugar del clásico Junit. Por suerte yo ya lo llevo usando desde hace tiempo :-)

10.- Reactive Grails - Event Oriented Architecture: Para mí la mejor charla de todas. Stephane Maldini explicó la parte de Events de platform-core junto con un par de plugins que había desarrollado y que complementaban al anterior. El mejor sin duda events-push, que sirve para poder recibir en el navegador notificaciones push en tiempo real desde el servidor de una manera muy sencilla. Hizo dos demos a cual más espectacular, una de video en tiempo real y la otra de un juego multijugador.

11.- Securing Grails Applications: Burt Beckwith comentó los 10 problemas más importantes de seguridad de las aplicaciones web, cómo estos pueden afectar a nuestras aplicaciones grails y cómo prevenirlos. Además contó un nuevo plugin que está desarrollando y que estará disponible junto con la versión 2.3 de Grails.

12.- Building an ecommerce business with gr8 technologies in Latin America: Domingo Suarez contó su experiencia desarrollando clickonero y cómo evolucionó la plataforma. Es una continuación de la charla que dio en el pasado Spring IO 2012 en Madrid. Muy interesante la peculiar forma en la que han diseñado la nueva arquitectura para poder soportar una gran carga de usuarios.

Y con esto acabaron las charlas. Hubo sorteo de ebooks de grails pero esta vez no me tocó ninguno.

La verdad es que ha sido una gran experiencia estar rodeado de dos días de tantos "cracks" del entorno Groovy y Grails. Tengo muchas ideas en el cuaderno y cosas que quiero probar y que haré haciendo poco a poco.

Si no has podido asistir pero te interesan estos temas, ya están todos los videos de las charlas publicados por lo que no hay excusa para no ir viéndolas poco a poco a ratos.

domingo, 13 de noviembre de 2011

Crónica de Greach: Conferencia de Groovy

El pasado viernes 4 de noviembre acudí a Greach, una conferencia sobre el lenguaje Groovy y los frameworks en torno a él: Grails, Griffon,... celebrada en la Universidad San Pablo CEU de Madrid. La conferencia estuvo muy bien y las charlas a las que asistí me gustaron casi todas.

Después del registro y la presentación empezaron las charlas en sí:

1.- Groovy 1.8 and beyond!: Guillaume Laforge, project manager de Groovy nos contó las novedades de la versión 1.8 y nos adelantó algunas de las nuevas características que tendremos disponibles en groovy 1.9 como grandes mejoras en el rendimiento o un compilador más estricto que permitirá detectar más errores en tiempo de compilación en lugar de retrasarlos hasta la ejecución.
2.- Novedades de Grails 2.0: Álvaro Sánchez-Mariscal, después de una presentación con un video con la intro de "The Day of the Tentacle", nos contó las novedades que incluye la versión 2.0 de Grails respecto a la 1.3.7: Scaffolding en HTML5, uso por defecto de jQuery en lugar de prototype, muchas mejoras en la parte de tests,...
3.- Deconstructing i18n-fields. Nacimiento y evolución de un power-plugin de Grails, sin cortes, sin censuras: Bajo este título, Jorge Uriarte nos contó las ventajas de la arquitectura de plugins de Grails, lo fácil que es crear un plugin y cómo le surgió la necesidad de crear este plugin. Con él, se puede internacionalizar campos de la base de datos de manera muy fácil y sencilla. Nos contó las distintas aproximaciones y evoluciones que ha tenido el plugin, vimos fragmentos de código,... La charla me pareció muy interesante y al final de ella pude hablar un rato con Jorge para comentarle que yo ya estoy utilizando su plugin en un proyecto y que me está resultando muy útil.
Después de esto tuvimos una pequeña pausa para tomar un café y recuperar algo de fuerzas con una pastas y volvimos a la carga con el siguiente bloque de charlas
4.- Volando con Griffon: Griffon es un framework que utiliza el lenguaje Groovy para escribir aplicaciones Java de escritorio basadas en Swing. La charla la dió Andrés Almiray, creador de Griffon. Tenía puestas muchas expectativas en esta charla pero al final me decepcionó un poco, según la agenda íbamos a ver cómo crear una aplicación con REST habilitado y al final sólo vimos cómo crear una aplicación con un par de cajas de texto y poco más.
5.- Gana velocidad y facilita la escalabilidad: Optimiza tus webs Grails: Dani Latorre nos contó una serie de tips generales para optimizar aplicaciones web y fue poniendo ejemplos de cómo implementarlos en Grails. Nos contó una gran variedad de plugins existentes actualmente con los que poder llevar a cabo dichas optimizaciones. La charla, sin ser magnífica, sí que me sirvió para replantearme ciertas cosas.
6.- Grails and Cloud Foundry: Después de la parada para la comida, volvimos con Graeme Rocher, lider del proyecto Grails, que nos contó la plataforma Cloud Foundry para el despliegue de aplicaciones "en la nube". Después de una pequeña introducción nos contó la existencia de un plugin de Grails que permite la integración y despligue de nuestras aplicaciones Grails de una manera rápida y sencilla. Vimos una demo de cómo funciona y aunque parece muy prometedor, todavía tiene bastantes limitaciones: no hay persistencia en el sistema de ficheros, no se puede acceder a la base de datos,... Graeme nos contó que están trabajando en solucionar todos estos problemas.
7.- Groovy Code Generation: Esta sin duda fue la charla más espesa de todas. Hamlet D'Arcy habló de transformaciones AST en Groovy. Hubo bastantes ejemplos y la charla fue muy interesante, aunque se requieren bastantes conocimientos para poder empezar con ello.
8.- Creación de plugins en Griffon: Mario García nos contó cómo funcionan los plugins de Griffon y nos hizo una demo sobre cómo crear uno para acceder a una instancia Solr.
9.- Engrandeciendo Grails con MongoDB: Esta fue una de las charlas que más me gustó. Enrique Medina nos habló sobre su experiencia en la integración de MondoDB con Grails, problemas que ha tenido, formas de resolver los distintos tipos de relaciones 1:1, 1:N y N:M. Me gustó mucho la charla y me abrió un poco los ojos respecto a una base de datos NoSQL. Es posible que en un futuro no muy lejano le dé una oportunidad a MongoDB en algún proyecto.

Y después de todas estas charlas llegó la parte final, se sorteó un curso de HTML5 y CSS3, una licencia de WebStorm y otra de Intelli J y finalmente libros de Grails in Action y Griffon in Action. A mi me tocó uno de Grails in Action :-).
Respecto a la organización, me pareció muy buena. Quiero dar las gracias a Alberto Vilches, padre del evento y a todos los colaboradores porque todo salió muy bien. Por ejemplo, el tema de la comida fue mucho mejor que en el pasado Spring IO en donde sólo tuvimos un sandwich frío. Esta vez pudimos comer en el comedor de la universidad.
Como punto negativo, al igual que en el Spring IO, la wifi se caía de vez en cuando, aunque esto es algo ajeno a los organizadores ya que es totalmente dependiente de la universidad.