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" />

Taller Spring I/O 2012: Modulariza tus aplicaciones Grails

Este año volveré a estar por el Spring I/O (16 y 17 de Febrero 2012 en Madrid), en esta ocasión dirigiendo el taller Modulariza tus aplicaciones Grails :

Gracias a los plugins de grails liberados a la comunidad, podemos aprovechar el esfuerzo hecho por otros desarrolladores y reutilizar el trabajo que han hecho. El sistema de plugins de grails da múltiples puntos de extensión para la plataforma: permite añadir comandos nuevos a la CLI, servicios, clases de dominio, extender dinámicamente algunos comportamientos... En el taller sacaremos partido del sistema de plugins de grails para reutilizar trabajo entre distintas de nuestras aplicaciones, veremos algunos ejemplos y desarrollaremos un plugin a modo de ejemplo.

Básicamente, mostraremos de forma práctica como reutilizar código en nuestros proyectos del día a día, más allá de liberar plugins que sólo tengan sentido ser liberados para el resto de la comunidad.

Este año volverán a ser 2 días de charlas y talleres, un eventazo a un precio de risa. Como podéis ver en la agenda, hay buena cantidad y calidad de ponentes, incluida alguna rockstar internacional entre ellos.

Cualquiera que trabaje o le interesen tecnologías alrededor de los ecosistemas Spring, Grails o Groovy debería asistir a este evento; o también a quienes les interesan cosas relacionadas con Mongodb, Scala, ElasticSearch, RabbitMQ o incluso temas de cloud computing.

Pero seguro que lo mejor está por los pasillos, durante los cafés y las comidas... o, por descontado, en la fiestaca del jueves :).

Nos vemos en el Spring I/O!