La semana pasada asistí a tres reuniones en Buenos Aires: el lunes, la del grupo de usuarios de Java; el miércoles, la de Lean Startup, y el jueves, a la Ruby Meetup. Cada una merecería un post de comentario, pero hoy le toca a la de Ruby.
El lugar elegido para la reunión fue La Maquinita, un co-working en el amplio barrio de Palermo, Niceto Vega 4736, entre Malabia y Armenia, ver mapa http://goo.gl/gmTd8 (curiosamente, el meetup de Lean Startup del miércoles fue a una cuadra de ahí, organizado por los rubistas @etagwerker y Fernando Parra, en The Founders Place, otro co-working). ver mapa en http://maps.google.com/maps?q=Niceto+Vega+4662%2C+Buenos+Aires. El listado de asistentes y charlas propuestas en:
La reunión de Ruby estaba organizada para las 18:30hs, pero era día lluvioso y en general, en Argentina, la gente tarda en llegar (la puntualidad no es uno de nuestras “features” 馃檪 Pero no importa, la agenda era relajada y no había apuro en desarrollar la reunión. Yo preparé una charla de quince minutos sobre lo que había aprendido de Rack, y de Ruby, presentando el material del curso que dí hace mes y medio:
https://github.com/ajlopez/AprendiendoRuby
En especial los ejemplos de:
https://github.com/ajlopez/AprendiendoRuby/tree/master/ejemplos/rack
Llamé la atención sobre la existencia de un DSL que nos da rack, pero que está implementado distinto del de Sinatra: verbos como use y run, que son parte de ese DSL, en realidad son métodos de un Rack::Builder que termina cargando dinámicamente en su contexto a un archivo .ru donde especificamos cómo levantar la aplicación. Se puede levantar Rack directamente desde Ruby (ver los ejemplos que dejé en el enlace de arriba), pero parece que no es fácil colgar en la cadena de ejecución un middleware desde Ruby directo.
Luego Cristian Rasch pasó a mostrar el uso de middlewares en Cuba, que se monta sobre Rack. Al parecer, las clases de Cuba tienen su propio método use, que permiten colgar middlewares desde ahí. No llegué a ver todavía el código de Cuba, pero al parecer, se cuelga del Rack::Builder para hacer eso. Ver
https://github.com/soveran/cuba del bueno de @soveran.
El plato fuerte fue la presentación de @kragen (ver http://canonical.org/~kragen/about/) sobre música generativa, su port a Ruby de su trabajo en Python, ver:
http://lists.canonical.org/pipermail/kragen-hacks/2013-July/000556.html
Armar un árbol aleatorio, a partir de dos “notas” wav: el golpe en una copa, y el sonido de una guitarra. El viernes siguiente a la charla, hacia el final del día, investigué las opciones multiplataforma para generar sonido, manipular wavs, y emitir MIDI. De Ruby, vi una gema, unimidi, que bajó, compiló nativamente en Window 8 (usando el devkit que tengo instalado) pero no funcionó con el generador MIDI que tengo instalado. En cambio, código de Java me anduvo sin problemas para MIDI, y pico de JavaScript, me generó sonidos y música desde un browser moderno. Pero eso ya es tema para otro post.
Aparte de las charlas, se trataron otros temas, como la próxima RubyConf de Argentina. Se va a realizar a finales de Noviembre (bien! no se pisa ni con Python Argentina, ni Smalltalks 2013, y tampoco con PHP Developers). Se expusieron los motivos para volver a hacerla en el lugar de la primera edición, de 2011, en el complejo Konex (en lugar de La Plaza, de 2012). Yo pregunté si alguien usaba TDD para armar una aplicación, y de más o menos 25 personas, al parecer nadie lo usa. No sé si se entendió la pregunta, hubo discusión adicional en la lista Rubysur:
https://groups.google.com/forum/#!topic/rubysur/HBYWHMGJwyw
https://groups.google.com/forum/#!topic/rubysur/OeeNE92D1Cg
@kragen me comentó que quizás en Ruby no es tan usado TDD porque muchos escriben gemas chicas, que se producen y consumen fácilmente. Habrá que ver cuán efectivo es TDD en Ruby. Comenté que en Node.js, con JavaScript dinámico, todo lo hago con TDD (para evidencia pueden ver mi cuenta en GitHub, donde hago commits prácticamente por test). Comenté que me resultó más fácil enganchar con TDD en Node.js/JavaScript, que en Ruby. En general, Ruby necesita más ceremonia de programación que JavaScript. También se discutió bastante de cómo usar Git, GitHub, el workflow a seguir, rebase vs otras opciones, etc. Es interesante ver que en el mundo Ruby, y open source en general, se da mucho lo de tener branch experimentales, fork y pull requests.
Como otras veces en otras reuniones, me retiro 20:45, que a esa hora me convierto en calabaza. La gente siguió conversando, y supongo que hubo cerveza (snif… no durante la reunión; en eso prefiero los meetups de Mule Soft, donde la cerveza es lo primero 馃檪
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez