JRuby: Introduciendo Ruby en un mundo enterprise - RubyConf Uruguay 2011
Publicado el Lunes, 21 de noviembre de 2011Sigo compartiendo mis impresiones de las charlas de la RubyConf Uruguay de este año. Esta vez les voy a hablar de la charla de Jano González.
La charla se dió durante la primera jornada, y le terminé dedicando un post entero por varias razones. En primer lugar, me sentí muy identificado con varias de las cosas que comentó al haber estado trabajando un par de años en Java y queriendo ahora migrar a Ruby. En segundo lugar, como escribí bastante al respecto, iba a quedar demasiado extenso para combinarla en otro post con más charlas.
Si todavía no lo hicieron, pueden ir y leer la primera parte de mis impresiones de RubyConf Uruguay.
Jano González (@janogonzalez), de Chile, ha sido desarrollador Java por 11 años, y Ruby por 1 año. Trabaja en la empresa Continuum en Santiago de Chile, y además de ser músico frustrado (me siento identificado 🙁 ) también tiene un blog sobre Ruby - Gema Roja.
Jano tambien organiza las meetups de lenguajes dinámicos en Santiago de Chile, así que si van por ahí y les interesa, ya tienen un lugar por donde pasar a tomar un café.
JRuby: Introduciendo Ruby en un mundo enterprise
Su presentación fue una de las que más dió que hablar. En primer lugar porque el tema, "Java vs. Ruby" se vuelve entretenido cuando algunos lo tratan como una guerra santa más. Es irónico, porque en verdad la charla venía más por el lado de "Java CON Ruby", pero en el peor de los casos, nos entretenemos con la discusión.
La competencia entre distintas tecnologías es necesaria, al mejorar una tecnología, los competidores se ven obligados a no quedarse atrás. Es así que varios frameworks Java han adquirido cosas de Rails. Al contar con un ecosistema tan rico, ambas tecnologías se alimentan y se vuelve algo tonto pero sobretodo innecesario, creo, la "pelea".
Tengo que decir que la charla fue sumamente divertida, por lo que recomiendo a todos, sobretodo desarrolladores Java, que la miren en Eventials. Tuve el gusto de compartir varias cervezas con Jano en los drink-ups de Heroku y Github, y como le dije personalmente, lo contrataría para dar esta charla como espectáculo en una fiesta. Fue una mezcla de stand-up con charla técnica, muy buena.
Comenzó comentando el tema de haber desarrollado Java por 11 años, "es como estar casado con una mujer hace 11 años. La amo, pero ya conozco la mayoría de sus defectos." Tuvo un enamoramiento con Ruby y pasó por una pequeña infidelidad a partir del año 2010. Habló un poco del mundo Enterprise contra los Startup más modernos donde los cambios se realizan de forma más ágil y la adopción de nuevas tecnologías es más aceptada. En el mundo Enterprise sin embargo, la relación con el cliente es más complicada y la adopción de tecnologías bastante lenta y tediosa (en general).
Habló de Java EE y frameworks como Spring, Hibernate, etc. su evolución e interacción y algo que los afecta: el exceso de complejidad. El ejemplo más claro que dió fue el AbstractSingletonProxyFactoryBean de Spring. Como dijo Jano, parecía tratarse de un concurso: "Meta tres patrones en uno y gane un iPad".
JRuby
También habló de las ventajas de los frameworks y Java EE, pero la solución la vió en JRuby: "Llevemos Java al siguiente nivel, tomemos todo lo bueno pero apliquemos lenguajes que nos den felicidad, como Ruby". Este es un tema bastante interesante en mi agenda, y ya estuve posteando al respecto en el blog: JRuby: Implementación de Ruby en la JVM.
Comparando Ruby con Java, dijo otra frase célebre que comparto con ustedes:
"Yo siempre he dicho que Ruby tiene la grasa necesaria para hacer sabrosa la carne. Java como que ya tiene mucha grasa, me está empezando a caer un poco mal al estómago."
A continuación, algo que también me pasó al entrar al mundo Ruby, preguntarse "¿Dónde están mis interfaces?". En Ruby no hay interfaces, se puede ver si un objeto responde a cierto método y tenemos mixins (algo muy increíble de Ruby, concepto en el que ahondaré en algún post más adelante), entre otras cosas.
También destacó la naturaleza de la orientación a objetos de Ruby, donde todo es un objeto. Mencionó los arreglos, hashes, rangos, expresiones regulares y lambdas (otra cosa a la que le vengo entrando de a poco recientemente y es super interesante), los bloques de código y map, select y reduce (de lo funcional). La facilidad de crear getters y setters con attr_reader (o attr_accessor), y la modificación de clases con Monkey Patching.
Por último, la gracia de JRuby es importar clases Java en Ruby, mostró un poco las formas de usarlo y mostró un ejemplo de código Volviendo a la comparación con Java, Jano propuso "Dime qué versión de Java usas y te diré quién eres". Siendo Java 7 lo mejor del momento, Java 6 "Bien", Java 5 "Bueno, ya..." y Java 1.4 o menor siendo el infierno.
Tácticas de "Guerra de guerrillas" para incorporar Ruby en el mundo Java empresarial
En principio usar jirb (consola interactiva de JRuby) como REPL (read–eval–print loop). Reemplazar Ant y Maven con Apache Buildr o Rake (|Ruby en vez de tanto XML"). Luego los scripts en general escribirlos en Ruby, y reemplazar JUnit y Selenium con RSpec y Cucumber. Todo esta primera fase es "personal" y el cliente no tiene por qué enterarse ya que no le afecta.
La segunda etapa sería con el cliente, reemplazando servicios REST con Sinatra. También crear DSLs para facilitar el uso de bibliotecas Java. Y "la guinda de la torta", crear aplicaciones web con Ruby On Rails. Además del ejemplo de JRuby usando Ruby con clases Java Swing, mostró un poco de código de integración con Spring.
El deploy de las aplicaciones JRuby se puede hacer en cualquier appserver. Mencionó algunas herramientas importantes para la integración de Java JRuby: warble, una gema para crear jars o wars de una aplicación Ruby, Rails, Merb o Rack. Trinidad, una gema que permite ejecutar aplicaciones Rails en un contenedor Apache Tomcat embebido. Para algo más "Entreprise" existe también TorqueBox una plataforma de aplicaciones Ruby cuyo diagrama me dió escalofríos: está construído sobre JBoss AS y provee clustering, balance de carga y alta disponibilidad "out of the box"...
Para quienes usan Ruby, hay muchas bibliotecas interesantes como ROFLScale con Netty o Apache Mina, actores remotos con Akka, "bibliotecas menos interesantes pero que le van a interesar al cliente" como iPDF y POI para reportes con PDF y Excel sucesivamente. Y por último STM de Clojure para meterlo en JRuby.
Su conclusión: Se acabó la guerra. Java y Ruby pueden convivir felizmente. Pueden ver y descargar la presentación de Jano en SlideShare. Y dense una vuelta por su blog para seguir sus charlas y conocer un poco más sobre Ruby.
Al final hubo tiempo para preguntas del público. Al preguntarle sobre Scala, Jano contestó con una cita de Charles Nutter (principal desarrollador de JRuby): "Scala es el lenguaje omniparadigma, implementa cada paradigma de programación conocido por el hombre". Su opinión personal: "Es un gran paso adelante por sobre Java. Podría ser más facil introducir Scala por sobre JRuby en la empresa".
Como dije, me resultó muy interesante la charla, además de entretenida, y espero sus comentarios para ver qué les pareció la movida como para empezar a usar Ruby en un ambiente de trabajo Java.
9 comentarios en este post
Feed de comentarios-
RubyConf Argentina 2012 - Primer día | Picando Código |
5 noviembre. 2012 - 09:51
[…] Jano González, con ¿Dónde están mis interfaces?. En el espíritu la charla fue similar a la que diera en 2011 en RubyConf Uruguay. Estuvo orientada a personas que vienen del mundo Java y C#.Dijo que el libro “Programming […]
Javier 21 noviembre. 2011 - 16:21
Gran post! Hubiera sido interesante presenciarla!
Aunque no me pueod quejar de RubyConfAr (=
Fernando 21 noviembre. 2011 - 18:52
¡Te recomiendo ver el video!
Me imagino que RubyConfAr estuvo tan buena como RubyConfUy. Voy a ver si el año que viene puedo visitar las instancias de Chile y Argentina 😀
¡Saludos!
Jano González 21 noviembre. 2011 - 17:58
Se agradece el “special feature” con un post completo en tu blog, me siento honrado!
Fernando 21 noviembre. 2011 - 19:13
Jeje, no es para tanto. Merecido el post. Es que empecé a escribir y vi que se me fue para largo y ya le tuve que dedicar un post entero…
Estuvo muy interesante.
¡Saludos!
alfonsin 23 diciembre. 2011 - 09:15
hace dias vi esta charla y me pareció excelente
Stivenson 7 enero. 2012 - 22:46
Esta muy bien el post, esto de JRuby se ve prometedor, lo probaré para trabajar con neo4j aprovechando esa gema neo4j.rb.
Pablo S. 19 enero. 2012 - 10:32
jaja que grande! y todo lo expuso en base a un plato de tallarines y una almóndiga oculta..
Fernando 19 enero. 2012 - 15:50
Sí, un grande Jano. No solo expuso todo en base al plato de pasta, sino que lo hizo con estilo y humor 😛