Resumen del Spring IO 2012 (muy resumido)

Bueno, pues os voy a contar un poco mis impresiones y las charlas a las que asistí en el Spring IO, aparte del taller que estuve impartiendo, claro :).

El primer día sólo asistí a unas pocas charlas, llegué un poco tarde y luego anduve pendiente de finiquitar el contenido de mi taller del segundo día. Deambulé por algunas charlas pero prefiero no nombrar ni valorar el contenido, principalmente porque de esas no me enteré más que de el título y quien era el ponente :D.

- El primer día asistí a:

  • Creación de plugins para Grails, con Juan Reyes. Que, aprovechando, sirvió para el que quiso como introducción teórica a mi taller del segundo día. Juan explicó como es la arquitectura de un plugin de Grails, hizo un ejemplo y remarcó las capacidades dinámicas de groovy y como utilizarlas para extender los artefactos de aplicaciones que utilicen esos plugins.
  • Vitaminas para tu proyecto Java, con Alberto Vilches. Donde se hacía uso de groovy escalonadamente en una aplicación Java a base de Servlets, JDBC... Para mostrar que hasta en esas aplicaciones se puede sacar partido al lenguaje groovy. Realmente me metí en el taller para tener una mesa cómoda donde trabajar en mi taller, pero principalmente me sirvió para darme cuenta que la wifi no tiraba y que debía reenfocar parte de mi taller por no tener wifi para descargar plugins de internet.
  • Using Grails in a Startup, con Tomás Lin. Donde nos compartió sus experiencias, problemas y recetas que les han ido surgiendo en Secret Scapes. Para mi, allí donde voy, suelen resultarme el tipo de charlas más enriquecedoras: problemas reales en un contexto y las soluciones a las que se han ido llegando.
  • Pilotando con Spock, con Ruben Eguiluz. Nos estuvo hablando del framework de testing Spock, ya le había pegado un ojo pero todavía tengo pendiente utilizarlo en algún proyecto. Por ahora sigo dándole a Groovy Unit Testing con sus extensiones para los artefactos de Grails y Groovy Mocks
  • Atlassian Party. Qué puedo decir: copazos, cervezas, sorteos y gente interesante con la que charlar, que siempre es lo mejor. Lo malo: creo que jamás me había ido tan pronto de una fiesta desde que tenía 14 años :D, de todos modos, un 10 para Atlassian.

- El segundo día, volví a llegar tarde y me quedé por los pasillos durante las charlas previas al café, pero tras mi taller y la comida asistí a:

  • Polyglot Grails, con Marcin Gryszko. Marcin expuso las posibilidades políglotas de Grails con otros lenguajes de la JVM usando sus respectivos plugins: Clojure, Scala y JRuby. Me pareció una charla interesante, pero se me hizo muy dura, cometí el error de no tomar el café después de comer y mi capacidad de atención terminó tendiendo a 0 XD.
  • Grails, opción real y escalable para sitios web de alta carga, con Domingo Suarez. Nos estuvo explicando acerca de clickonero, al parecer la plataforma ecommerce más grande de Latinoamérica, al estilo club de compras. También fue una de esas charlas en las que se explica la experiencia del trabajo y problemas dentro de una empresa de internet; tanto desarrollando nuevas funcionalidades como manteniendo un alto tráfico en sus servidores.
  • Aplicando elasticidad en la búsqueda con Grails, con Enrique Medina, el pobre de nuevo cerrando con la última charla. Que estuvo hablando de Elastic Search, que es un proyecto que desde que apareció he tenido a la vista como alternativa (aparentemente) más ligera que solr para búsquedas full-text sin tener que "bajar" a lucene. Personalmente, no me decepcionó para nada. Seguramente para el próximo proyecto que necesite búsquedas full-text, elegiré esa solución.
  • Cervezas de despedida, cortesía de Zero Turnaround. Para mi que tenía que volver a Zaragoza en el último AVE, fueron más bien pocas.

Me he perdido cantidad de charlas y talleres, me ha gustado bastante el contenido y forma de casi todo lo que pude atender. Para mi gusto, las más destacables fueron las de Tomás Lin y Domingo Suárez.

Y pienso que posiblemente vaya a ser la última vez que proponga un taller para un evento. Me lleva más o menos el mismo trabajo que preparar una presentación en condiciones. Me evito dolores de cabeza con temas logísticos del tipo a la conexión a internet, versiones de las instalaciones de los asistentes... Y también pienso que viste menos que una charla.

En fin, hasta la de 2013!

PD: Agradecimientos a Yurena, Tana y Yeray por acercarme hasta atocha desde Boadilla el viernes. Mucho más rápido que el metro y, una compañía y conversación difícilmente mejorable la del comando muyayo :).

Presentación y código: Modulariza tus aplicaciones Grails

Sobre el taller que impartí el viernes en el Spring IO, el código está en mi cuenta de github y la presentación la he subido a mi cuenta en slideshare.

En resumen, en el taller trabajamos sobre una pequeña aplicación que es un pequeño gestor de contenidos, donde se puede categorizar el contenido y asociarle varias imágenes.

El ejercicio era sacar la funcionalidad completa de subida de fotos a un plugin. Esto es: Clase de dominio, controlador y vistas.

A ver si esta semana escribo con calma sobre las charlas que asistí y el evento en general, pero no prometo nada :P.

Contenido duplicado y el canonical link

Como desarrolladores, si seguimos buenas prácticas, deberíamos procurar que cada recurso (o llámalo documento, o página...) de nuestras webs tuviera una url única, que no hubiera más que una posibilidad de acceder a ese recurso.

Pero en ocasiones, en nuestras aplicaciones web, nos encontraremos con casos en los que un recurso es muy similar a otro en su contenido, por lo que muy posiblemente tendremos problemas de penalización por contenido duplicado con los buscadores.

Un ejemplo típico podría ser el de algún item que puede pertenecer a varias categorías. Depende del camino escogido podríamos tener urls diferentes, donde cambiaría el breadcrumb para poder volver atrás en la navegación y muy poco más. Imaginemos por ejemplo que ese item fuera una noticia, una ficha de un producto, un evento... el grueso del contenido sería el mismo y podría ser considerado contenido duplicado.

Aparte de otro problema muy habitual es el de los ids de sesión en las urls (jsessionid, phpsessid...). Si no ha cambiado la cosa, cada vez que un robot de los buscadores encuentra uno de esos identificadores diferente, se toma como una url distinta y el contenido como duplicado.

Pues ya hace bastante tiempo que podemos especificar una url como canónica para estos casos. Esto quiere decir, que le diremos a los buscadores cuál es la url buena del siguiente modo:


<link rel="canonical" href="http://mikillerapp.com/soy-una-url-que-mola" />

Esta una de esas pequeñas cosas con las que puedes mejorar el SEO de tus aplicaciones web en internet, seguramente lo más "complejo" para muchos casos sea decidir cuál es la url canónica e implementar su lógica.

En fin, yo escribiendo de algo relacionado con SEO... si un día lo hago de social (co)media o cosas de esas, llamad a la policía ;). De cualquier modo, si necesitas una mano en estas cuestiones, seguro que la gente de VGS tecnologías web pueden ayudarte.

Bitly Shortener Plugin para Grails

A raíz de mi colaboración trabajando con UniversalPlaces, surgió la necesidad de integrar el acortador de urls de bit.ly. Principalmente para aprovechar las estadísticas que da este servicio alrededor de los enlaces compartidos, teniendo además uplac.es como dominio propio para este uso.

Lo desarrollé en un plugin que usamos internamente a modo de core, donde tenemos funcionalidad común. Porque, entre otras cosas, había que implementarlo en el buscador de hoteles en playas, en el portal de playas y en otro buscador vertical que saldrá a la luz próximamente.

Durante la semana pasada saqué un rato un par de noches para extraer la funcionalidad y escribir la documentación para poder publicarlo a modo de plugin de grails. No es gran cosa, pero quizás a alguien le ahorre un poco de trabajo :).

La documentación en inglés está en el README del repositorio en github, pero la dejo aquí en español:

¿Qué es?

Un plugin para grails que encapsula el método shorten de la API de bitly, para acortar urls.

Instalación

grails install-plugin bitly-shortener

Configuración:

En el Config.groovy se debe configurar el login de usuario de bitly, el apiKey de ese usuario; y si corresponde el dominio que se quiera utilizar.

bitly.login = "danilat"
bitly.apiKey = "R_FooBar"
bitly.domain = "j.mp" //optional

Cómo usarlo:

Hay 2 artefactos de grails que se pueden utilizar, un servicio bitlyService:

def shortened = bitlyService.shorten("http://www.danilat.com")
shortened.statusCode // 200 si la petición ha ido bien.
shortened.statusText // "OK" si la petición ha ido bien.
shortened.url // Nos da la url acortada si todo ha ido bien.

Y un taglib bitly:shorten:

${bitly.shorten(url:'http://www.danilat.com')}

<bitly:shorten url="http://www.danilat.com" />