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.

Ranking de blogs sobre desarrollo de software

Descubro gracias al blog de Ferrán Rodenas, un recopilación del Top 100 de blogs sobre desarrollo de software.

Para confeccionar el ranking se han tenido en cuenta varias estadísticas: el page rank de Google, la autoridad en Technorati, el ranking de Alexa, los hits en google y los comentarios de los últimos 10 posts de cada blog.

Algunos, al menos para mi, eran de esperar que estuvieran entre los primeros(Joel Spolsky, Jeff Atwood, Martin Fowler, Paul Graham...). A unos pocos del top 100 los sigo en mi lector de feeds, en algunos otros blogs acabo pasando de vez en cuando y otros muchos del ranking no los conocía, habrá que pasearse por el listado a ver cuáles son del gusto de cada uno :P.

Cursos del CTA 2008-2009

Hoy mismo, me ha llegado un email avisándome que ya está disponible el calendario de cursos del Centro de Tecnologías Avanzadas de Zaragoza.

En el calendario del programa TIC hay cursos de administración de Linux y Windows Server, networking(estoy hablando de redes :P), seguridad, gestión de proyectos...

Pero cómo era de esperar los primeros que estoy mirando son los de programación :), y parece que se repiten bastantes del año pasado. De los que he estado viendo, me interesan:

El de Java ME y el de Spring+Hibernate+Struts2, el primero salirme un poco del sólo web y el segundo más que nada por ver Struts2. Otro que me parece medio interesante es el de Java EE para ver algo de JMS, EJB3 e incluso de Struts2 que además incluye gratuito el examen de certificación SCJP(¿no sería mejor un curso de preparación para esto?); pero me parece un poco coñazo ver Servlets y JSPs.

Habrá que ver si puedo sacar tiempo durante 2 o 3 semanas para asistir a alguno de estos curso o me vuelvo a quedar sin hacer ninguno, ya que parece que los autónomos también podemos inscribirnos :)

También hay algunos cursos más de Java, además de PHP+MySQL(también incluye examen de certificación a PHP5) y de .Net; o incluso de CICS y SAP(si lo que quieres es ganar más dinero programando...).

Aún siendo cursos de programación que, además de ser gratuitos, no sacan mala pinta; para mi falta algún curso sobre algún framework algo más novedosos/ágil en cuanto a desarrollo web tipo Ruby on Rails, Grails, Zend Framework, Django, Symfony... aunque en el tiempo que sigo los cursos que salen del CTA, no suelen destacar por ser early adopters y sí por ser bastante enterprisey.

Por cierto, que en el boletín de Septiembre, ya salen los cursos disponibles para octubre en los que ya se puede hacer la pre-inscripción.