Usando ExpandoMetaClass

Como ya comenté, una de las cosas interesantes que veía en groovy era ExpandoMetaClass.

Este sería un ejemplo de uso, añadiendo a la clase StringBuilder un método en tiempo de ejecución. Es un método para que se hiciera el append sólo si el parámetro pasado no es nulo, de esta forma nos podríamos ahorrar una buena cantidad de if si necesitaramos hacer esta comprobación antes de cada append.


StringBuilder.metaClass.appendNotNull={ str ->
if(str){
append(str)
}
}
//Lo usaríamos como cualquier otro método
StringBuilder builder = new StringBuilder()
builder.appendNotNull("hola")
builder.appendNotNull(null)
builder.appendNotNull("mundo")

Este ejemplo es un poco trivial, ya que se podría hacer esto simplemente creando una clase que extendiera de StringBuilder e implementando el método. Aunque por otro lado, si sólo necesitamos hacerlo en un punto de nuestro código, esta podría ser una solución.

Google App Engine

Ya se ha escrito mucho sobre Google App Engine, parece mentira que lo anunciaran ayer, pero la verdad que es realmente interesante el poder disponer de los mismos sistemas de google para escalar un proyecto web.

En español, unas revisiones que me han gustado mucho han sido las de Aitor García y de Ricardo Galli, por eso simplemente voy a dar algunas impresiones acerca de GAE.

Estoy convencido que supondrá un buen empujón a python como lenguaje, por ser hasta el momento el único lenguaje soportado. Imagino que no todos de esos 10000 desarrolladores que se han registrado a la preview release conocerían python, aparte de los que habrán empezado o empezarán en breve a estudiar la SDK.

La facilidad que les puede suponer para las startups contar con un sistema que saben que va a escalar perfectamente, empezando además con un hosting gratuito de 500MB de espacio en disco y poder servir 5 millones de páginas al mes.

Habrá que ver cómo responde Amazon, al ser GAE un servicio más orientado al desarrollador, teniendo "simplemente" que subir la aplicación, mientras que en Amazon parece que la combinación EC2+S3+SimpleDB no es tan sencilla. Y aunque ahora GAE sólo pueda usarse con aplicaciones en python, parece que google irá dando soporte a más lenguajes.

Por otro lado, también habrá que esperar a ver que movimientos hacen empresas como IBM, Microsoft, SUN o HP.

El mercado del cloud computing parece que se está poniendo competitivo y muy interesante.

Duplicando esfuerzos

Joseph Ottinger ha escrito en TheServerSide un post sobre la duplicación de esfuerzos en la industria del desarrollo de software.

El post se centra en diferentes librerías del mundo open source, con la misma finalidad o con finalidades muy parecidas y la "duplicación" de esfuerzo al desarrollar estas librerías. Algunas razones que da son:

  • Falta de conocimiento de alguna librería existente.
  • Falta de amplitud de percepción.
  • Diferencia de opinión de cómo debería trabajar la librería.
  • El antiguo proyecto puede no estar mantenido.

Otras razones que he visto por las que se han desarrollado librerías y frameworks dentro de empresas han sido: no encontrar una librería que cubriera unas necesidades determinadas, que las librerías existentes no se consideraran lo suficiente maduras, o que no hubiera una empresa detrás que diera confianza en su mantenimiento. Por otro lado, también conozco a algún "raro" que crea sus propias librerías en casa por pura diversión :).

Personalmente, me encanta poder tener múltiples opciones a elegir y probar varias de ellas, tratando de encontrar sus puntos fuertes y débiles. Aunque hay casos como el de los frameworks web, con la gran cantidad que hay (tanto Java como Php), que siempre queda la duda de haber hecho la mejor elección para desarrollar un proyecto.

Algunas impresiones sobre Groovy

Poco a poco me está gustando más Groovy, a priori, se puede pensar que como es un lenguaje de programación dinámico es un lenguaje sencillo, nada más lejos de la realidad.

Es un lenguaje que tiene una sintaxis parecida a Java pero con sus añadidos resulta más compleja, existe un documento donde se nombran las principales diferencias entre Groovy y Java. Además, usando Groovy contamos con la ventaja de que podemos aprovechar el conocimiento que ya tenemos, además de por su sintaxis, por su integración con librerías java.

Además, me gustan las capacidades dinámicas del lenguaje y su ExpandoMetaClass para añadir comportamientos a una clase(añadir métodos, atributos y constructores usando closures), me falta empezar a utilizar estas features del lenguaje a las que les tengo ganas :) y que me ayuda a pensar cómo estarán desarrolladas algunas partes de grails.

Para empezar a "jugar" con el lenguaje no puedo dejar de recomendar los artículos que escribió Andrés Almiray en groovy.org.es de Introducción a Groovy(partes 2 y 3), dónde explica con detalle muchas de esas diferencias entre Java y Groovy.