Fin del Linking Internship ¿Qué pasa con flatee?

Pues como ya han escrito Aitor en el blog de Linking Paths y Jesús en el suyo, el internship ya ha terminado y no se puede decir que haya sido un éxito, ni mucho menos.

La idea era lanzar flatee al terminar el internship, pero por varias razones no ha sido posible dedicarle todo el tiempo y esfuerzo que requería este proyecto y se nos ha quedado a todos la sensación de que ha sido una decepción, personalmente más cuando alguien se ha interesado por la evolución del proyecto. De todas formas, sacando la parte positiva, a mi me ha servido para aprender bastante rails (sin tog) y que uno no se puede liar en un proyecto de este tipo con medias tintas. A mi me cogió en un momento muy liado con el GSoC, otro proyecto propio, proyectos a terceros... ni trabajando algunos fines de semana daba abasto(y de vez en cuando hay que descansar).

Sobre el futuro de flatee, por ahora voy a seguir trabajando en ello como side project, con el compromiso de sacar la primera versión para finales de año. Aunque sigue sin sobrarme precisamente, tengo algo más de tiempo que durante el verano, es un proyecto que cubre una necesidad propia y soy un poco tozudo(como buen aragonés :P). Esto significará pegarme también algunos fines de semana de código encerrado en casa y tratar de liberarme algunos días para dedicarle más tiempo.

Espero que más adelante Jesús pueda volver a incorporarse y podamos sacar a la luz un proyecto que resulte de utilidad a la gente que busca(mos) compañeros de piso o piso compartido.

Tog ya es público

En el blog de Linking Paths han ido escribiendo mucho sobre tog, y desde la semana pasada es pública la versión 0.2(licencia MIT).

¿Pero qué es tog?

Es una plataforma open source extensible para crear redes o aplicaciones sociales bajo Ruby on Rails. Da la base social casi sin esfuerzo y se puede añadir funcionalidad mediante la arquitectura de plugins, usando los existentes o creándolos nosotros mismos, e incluso personalizar los plugins para nuestras necesidades puntuales. Quien pueda pensar en un clon de Ning, anda desencaminado, esto es una plataforma para desarrollar y no un servicio(aunque sí se podría crear un clon con tog ;))

Para dar a conocer la plataforma, se ha organizado un evento de introducción el día 9 de octubre en Madrid, para el que obviamente ya me he registrado :), el evento es gratuito pero las plazas son limitadas. Si te interesa ver la evolución de tog, no dejes de seguir su blog, que es donde se publicarán las novedades que vayan surgiendo.

Como opinión personal, después de un tiempo utilizando la plataforma dentro de Linking Paths, estoy convencido en que es una buena elección para posibles proyectos sociales que me surjan. Además, tengo pensado usarlo en un proyecto personal, si lo empiezo algún día(que visto lo visto no será en breve :P).

Crónica del Google Developer Day 2008

Ayer fué un día realmente largo e intenso, ya que fuí al Google Developer Day 2008 en el Parque de Atracciones de Madrid con Alberto Gimeno y Juan Luis Belmonte. Al llegar se podía ver que iba a haber muchos asistentes, luego dijeron que entorno a 400 desarrolladores, entre los que encontré a algún viejo conocido y muchas caras que me resultaron familiares y no supe ubicar.

Nada más llegar y acreditarnos, nos esperaba un almuerzo para cargar pilas y luego pasamos al auditorio, dónde nos dió la bienvenida Chris DiBona con su móvil Android en la mano :), tras la que se dividió a la gente en las diferentes charlas y talleres programados. Yo me fuí de charlas mientras que Juan Luis y Alberto se fueron al turno de mañana del taller de App Engine, donde al parecer terminaron presentando debug_mode=on(fuera del concurso de los talleres).

En el auditorio comenzó Mano Marks con una charla de introducción a App Engine, no dijo nada especialmente nuevo sobre App Engine, pero que resultó igualmente interesante y para mi se complementaba bastante bien con el taller práctico.

Seguidamente Mike Jennings nos dió una charla sobre Android, que fué igual de amena, aunque profundizando algo más, que la que dió ya en la Campus Party. Mostró algunos comandos y el plugin para Eclipse, alguna demo de las cosas que se pueden hacer...

Después cambié de sala para ver a Sumit Chandel hablando sobre GWT, donde introdujo a los asistentes a éste framework Java para desarrollar aplicaciones ricas ajax y estuvo enseñando pantallazos con código para hacerse una idea de cómo se trabaja.

Al fin nos volvimos a reunir para parar a comer, era un buffet libre al que llegamos en el momento que más cola había, de la que la parte buena fue que sobró comida y la mala, incomprensiblemente, ¡¡no había café!!.

Después de comer queríamos asistir a la charla de orientación de start-ups, pero al llegar ya había gente saliendo de la sala por estar más que llena(en esa misma sala para la charla de GWT también acabó mucha gente de pie). Entonces acabamos viendo parte de una charla donde unos desarrolladores nos contaron su experiencia con gadgets sociales(usando opensocial).

Por la tarde quería ir al taller de App Engine, al que terminaron animándose de nuevo Alberto y Juan Luis. Empecé siguiendo el taller, pero acabé pendiente de otras cosas por culpa del interés de los ingenieros de google (que no habían visto la presentación de la mañana) en ver las funcionalidades de debug_mode=on, los problemas que estaban teniendo con la cuota de CPU... que por cierto pareció que les gustó bastante(además de ver que había artículos en español de App Engine).

Después llegó ya la sesión de cierre donde se respondieron algunas preguntas, se entregaron los premios de los talleres y Chris DiBona siguió jugando con su móvil Android.

Al final tuvimos una fiesta con barra libre, picoteo, máquinas recreativas, dj y la lanzadera del parque de atracciones hasta las 22:00.

En fin, el evento fué una demostración de que a google le importan los desarrolladores, o al menos que tengamos el concepto de empresa molona :), y sigamos usando o usemos más sus productos para desarrolladores.

Hay más información en el blog para programadores de google, también un par de álbumes en picasa y fotos en flickr del evento.

Red social para desarrolladores, debug_mode=ON

debug_mode=ON es una red social para los profesionales del mundo del desarrollo en la que están trabajando Alberto Gimeno, Ignacio Andreu y Juan Luis Belmonte; y que ya han puesto como beta pública.

Por el momento podemos añadir contactos, participar en grupos, crear grupos de nuestro interés, participar en los foros de los grupos y escribir artículos(con los que podemos ganar dinero introduciendo nuestro código de google adsense). Para hacerse una idea de qué tipo de grupos se pueden crear, ahora nos podemos encontrar grupos de desarrollo web, SEO, usabilidad, java, ruby on rails, php, metodologías ágiles, java-colombia, freelance, open solaris... está abierto a todo lo que esté relacionado con el desarrollo de software, hay un artículo con más información de qué es debug_mode=on.

La red social está siendo desarrollada con Python y Google AppEngine, pero parece que el servicio de google todavía no está muy afinado y han tenido problemas con la cantidad carga que están recibiendo estos días: han aparecido en javaHispano, en varios blogs, está en cola de varios agregadores de noticias(en alguno ya en portada) y para terminar en la portada de barrapunto. Evidentemente esta situación es una mala imagen para AppEngine, y visto lo ocurrido, por el momento descartaría desarrollar proyectos que no fueran de juguete hasta que no saquen el servicio de pago, con lo que el servicio y soporte se suponen que serán mejores.

Sobre el proyecto, pienso que era necesario un desarrollo de este tipo, ya que muchos de los portales en español de siempre, excepto algunos foros, parece que están congelados y que no tienen demasiada participación de los usuarios. En este sentido, a mi me parece un soplo de aire fresco, y como he podido ver el ritmo que llevan en el desarrollo desde las primeras semanas(haciendo un poco de beta-tester ;)) estoy seguro que no tardarán en añadir nuevas funcionalidades.

Esperemos que se vaya creando comunidad alrededor de estos grupos, sea una red social útil y de las de paso diario obligado; yo ya he empezado a participar :)

Receta Grails: Marcar una pestaña como actual

Es bastante habitual en el desarrollo web que, teniendo un sistema de pestañas, se requiera marcar la que corresponde a la actual. Esto habitualmente se realiza con listas y CSS, luego comprobando programáticamente qué se está ejecutando y aplicar el estilo al elemento correspondiente.


<ul>
<li class="act"> <a href="...">News</a></li>
<li><a href="...">Forum</a></li>
...
...
</ul>

Tanto con Grails como con cualquier framework podemos acceder a la petición en la vista, comprobar los parámetros para ver qué elemento de la lista es el actual, y en cada elemento de la lista comprobar si se la acción está relacionada con dicho elemento para asignarle el class. En fin, nuestra vista quedaría algo así:


<ul>
<li ${(params.controller=='news' &&(!params.action || params.action=='index'))?'class="act"':''}><g.link controller="news">News</g.link></li>
<li ${(params.controller=='forum' && params.action=='last')?'class="act"':''}><g.link controller="forum" action="last">Forum</g.link></li>
...
...
</ul>

Pero gracias al sistema de taglibs de grails, lo podemos hacer de forma mucho más limpia y más DRY.

Creamos un taglib, por ejemplo TabsTagLib:

grails create-tag-lib tabs

Ya se nos habrá creado en nuestrapp/grails-app/taglib/TabsTagLib.groovy, donde deberemos añadir una closure que actuará como nuestro tag para esto, el código quedará algo así:


class TabsTagLib {
 def actualTabWithLink={ attrs, body ->
  def selectedClass=(attrs.controller==controllerName && (attrs.action?attrs.action==actionName:true))?'class="act"':''
  out << '<li '+selectedClass+'>'+ g.link(attrs){body()}+'</li>'
 }
}

Y nuestra visa pasaría a quedar así:

<ul>
<actualTabWithLink controller="news"> News </actualTabWithLink>
<actualTabWithLink controller="forum" action="last"> Forum </actualTabWithLink>
...
...
</ul>

La explicación rápida del taglib(para más información la documentación de taglibs de Grails):

(attrs, body ->) attrs son atributos del tag(controller, action...) y body el cuerpo dentro del tag(en nuestro caso News o Forum).

Comparamos controllerName y actionName con los atributos pasados al taglib, attrs.controller siempre y el attrs.action éste último sólo si tiene valor. Si el resultado es que es el actual asignamos a selectedClass class="act", si no es así una cadena vacía.

Como desde un taglib podemos acceder a otros taglibs, llamamos al taglib g.link de forma parecida a la vista, en este caso le pasamos todos los atributos y el cuerpo que vengan de la llamada a actualTabWithLink g.link(attrs){body()}, que nos devolverá la cadena del link.

Por último, sólo debemos concatenar la cadena del link a los tags li con el class="act" en el controller/action actual y hacemos el append a la variable implícita out, que no es otra cosa que el Writer de salida.

En fin, que esta es una forma simple de aprovechar los taglibs de Grails para tener un código mucho más legible en las vistas y más DRY. Veáse también que de ésta forma no debemos preocuparnos de los cambios de mapping de URLs ni de si un acción es la de por defecto en un controller, que entonces no es necesario especificarla en la URL para que se ejecute. También hay que tener en cuenta que para éste caso sólo controlamos los controllers y actions, nos encontraremos en casos dónde podríamos necesitar controlar algún otro parámetro.