Tip: Arrancando RabbitMQ en Mac OS

He empezado a trastear con RabbitMQ, que hacía mucho que lo tenía entre ceja y ceja. La instalación en un servidor con ubuntu fue trivial, en unos minutos estaba instalado y en marcha, pero no fue así en mi Mac.

Tras instalarlo con homebrew no conseguía arrancarlo, me daba el siguiente error:

ERROR: epmd error for host "vodkalimon": address (unable to establish tcp connection)

Al parecer se intentaba conectar con mi máquina por su nombre (efectivamente se llama vodkalimon ;)), no por localhost o la ip de loopback.

La solución es muy simple, aunque a mi me costó un buen rato darme cuenta, que uno es un poco torpe para los sistemas.

Simplemente añadir en /private/etc/hosts el nombre de la máquina apuntando a la ip de loopback. Lo que a mi me ha quedado como algo así:


...
127.0.0.1 localhost
127.0.0.1 vodkalimon
255.255.255.255 broadcasthost
...

Y con esto, ya podemos arrancar normalmente RabbitMQ.

Disponible para contratación

Actualmente empiezo a tener de nuevo disponibilidad para trabajar en nuevos proyectos, por el momento únicamente de forma parcial, ya que estoy terminando mi colaboración en otro proyecto y estoy trabajando en un pequeño producto propio (del que algo escribiré próximamente).

Qué ofrezco

  • Desarrollo web, principalmente para la plataforma Java, normalmente con Groovy y Grails (en el pasado trabajé con cosas como Struts o JSF, pero comprenderéis que ya no me apetece). Puedo programar con Ruby (Rails o Sinatra), aunque debería refrescar mis conocimientos. También he hecho cosas con Python y PHP.
  • Unos 7 años desarrollando proyectos y productos web, principalmente para internet. En sectores de lo más variopinto: empleo, turismo, salud, ocio... Trabajando con equipos unas veces más multidisciplinares que otros.
  • Consultoría de producto. No me considero un product manager al uso, pero puedo ayudar a crear un mejor producto desde los puntos de vista de la tecnología, de la interfaz y del negocio.
  • Acostumbrado a trabajar con metodologías ágiles, usando buenas prácticas de programación y con orientación a los usuarios finales del producto.
  • Para los que quieran conocer con algo más de detalle mi trayectoria, tengo mi perfil en linkedin o mi CV en jobsket.

Qué busco

  • Algún proyecto/colaboración interesante a media jornada y de corta o media duración (de 1 a 6-7 meses). Me interesan especialmente los productos web dirigidos a internet.
  • Colaboración con un equipo existente al que le pueda aportar experiencia o me necesiten para un trabajo concreto. Pero con posibilidad de trabajar a distancia.
  • Desarrollo de algún prototipo de producto de nueva creación, lo que se viene nombrando en los últimos tiempo como un MVP. Pensando que en el futuro tenga continuidad y equipo propio, claro.
  • Que si hay que hacer reuniones físicas (las menos posibles), estando ya a cierta distancia, pueda desplazarme desde Zaragoza con tren (Madrid, Barcelona, Sevilla...). O bueno, si surge :), avión (Londres, Bruselas, París...)

En estos momentos, por compromisos con el proyecto que ando finiquitando, me resulta imposible trabajar físicamente en oficinas fuera de Zaragoza y/o a tiempo completo. Pero si a alguien le pudiera interesar contratarme en ese formato en el futuro, podemos hablarlo.

También tengo habladas ya posibles colaboraciones con algún proyecto que a priori no pinta mal, además con tecnologías que me gustan como son Ruby on Rails y Grails. Pero me apetecía explorar que tal escaparate es mi blog para recibir posibles proyectos.

Quien quiera contactar conmigo, mi email es:
dani (ARROBA) danilat (PUNTO) com

Y por favor, poned alguna referencia al post si contactáis conmigo :).

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.