Your SlideShare is downloading. ×
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011

921
views

Published on

Slides de mi presentación en RubyConf Uruguay 2011

Slides de mi presentación en RubyConf Uruguay 2011

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
921
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. JRubyRuby en un mundo enterpriseJano GonzálezDesarrolladorhttp://janogonzalez.com
  • 2. Sobre mi @janogonzalez 12● Desarrollando en Java desde 2000, enamorado de Ruby en 10 2010 8● Co-organizador del Meetup de 6 Columna 1 Columna 2 Lenguajes Dinámicos: Columna 3 http://www.meetup.com/dynla 4 ngchile/ 2● Publica el blog http://gemaroja.com 0 Fila 1 Fila 2 Fila 3 Fila 4● Músico frustrado
  • 3. El mundo enterprise
  • 4. Java EE
  • 5. Versiones● 1999: J2EE 1.2● 2001: J2EE 1.3● 2003: J2EE 1.4● 2006: Java EE 5● 2009: Java EE 6 → Un paso en ladirección correcta...
  • 6. Frameworks● Spring● Hibernate● iBatis● Guice● Jboss Seam● ...
  • 7. Servidores de aplicaciones● JBoss● Tomcat● Weblogic● Websphere● ...
  • 8. El problema
  • 9. Exceso de complejidad
  • 10. Lo bueno
  • 11. Portabilidad
  • 12. Escalabilidad
  • 13. Multithreading
  • 14. JIT
  • 15. Garbage Collector
  • 16. La solución
  • 17. Ruby para la JVM :Dc
  • 18. Dinámico :Dc
  • 19. Orientado a Objetos :Dc
  • 20. Gran soporte para meta- programación
  • 21. JavaList<String> nombres = Arrays.asList("Jano", "Ian","Juanelo", "Peyuco");Collections.sort(nombres, new Comparator<String>() { public int compare(String x, String y) { return x.length() - y.length(); }});for (String nombre : nombres) { System.out.println(nombre);}
  • 22. Rubynombres = ["Jano","Ian","Juanelo","Peyuco"]nombres.sort! { |x, y| x.length <=> y.length }nombres.each { |nombre| puts nombre }
  • 23. Javapublic interface DuckLike { String cuack();}... public void doSomething(DuckLike duckLike) { . . . duckLike.cuack(); }
  • 24. Rubydef do_something(obj) if obj.respond_to? :cuack obj.cuack else … endend
  • 25. Todo es un objeto# El clásico string“Hola Mundo”.upcase# No hay "tipos primitivos"!5.zero?# Hasta el nulo es un objetonil.nil?
  • 26. Hay muchos tipos de objetos# Arreglos[1, 2, 3, 4, 5]# Hashes{:jano => "Alejandro", :cote => "José"}# Rangos(1..10)# Expresiones regulares/^[a-z]+$/# Lambdaslambda { |n| n * 2 }
  • 27. Con métodos muy cool# En realidad + es un método, no un operador1.+(9)# Con un poco de azucar sintáctico1 + 9# En otros objetos"Hola " + "Mundo"# Con una gran cantidad de objetos![1, 2, 3] + [4, 5]
  • 28. Bloques# Un método puede recibir un bloque de código5.times do |n| puts nend# Para casos cortos como el anterior...5.times { |n| puts n }
  • 29. Bloques# El clásico map(1..100).map { |n| n * 2 }# El clásico select(1..100).select { |n| n % 3 == 0 }# El clásico reduce(1..100).reduce { |sum, n| sum + n }# Incluso más corto(1..100).reduce(:+)
  • 30. Creando tus propias clases# Problem Java?class Persona attr_reader :nombre, :apellido def initialize(nombre, apellido) @nombre = nombre @apellido = apellido endendjano = Persona.new("Jano", "González")jano.nombre
  • 31. Modificando clases ya existentes# Monkey patchingclass Range def even self.select { |n| n % 2 == 0 } endend(1..100).even
  • 32. Accediendo a clases Java# Importando clases Javarequire javajava_import java.util.dated = Date.newd.to_gmt_string
  • 33. Accediendo a clases JavaDate d = new Date(); => d = Date.newd.toGMTString() => d.to_gmt_stringArrays.asList() => Arrays::as_list
  • 34. ComandosIntérprete$ jrubyREPL$ jirbAdministrador de paquetes$ jgem
  • 35. GemasPrecaución: No todas funcionan en Jruby
  • 36. Encontrando la gema adecuada
  • 37. Dime que versión de Java usas y te diré quién eres
  • 38. Java 7
  • 39. Java 6
  • 40. Java 5
  • 41. Java <= 1.4
  • 42. Guerra de guerrillas
  • 43. Fase I● Usar jirb como REPL Java● Ant/Maven → Apache Buildr● Scripts en general● Junit/Selenium → RSpec, Cucumber
  • 44. Fase II● Servicios REST con Sinatra● DSLs para facilitar uso de bibliotecas Java● Aplicaciones Web con Ruby on Rails
  • 45. JRuby on Rails
  • 46. JRuby on Rails$ gem install rails$ rails new startechconf
  • 47. Configura tu database.ymldevelopment: adapter: jdbcmysql database: startechconf_development username: root encoding: utf8test: adapter: jdbcmysql database: startechconf_test username: root encoding: utf8production: adapter: jdbc jndi: jdbc/stconrails
  • 48. Usa modo multithread production.rb# Enable threaded modeconfig.threadsafe!
  • 49. La magia que hay detrás● jruby-rack● activerecord-jdbc-adapter
  • 50. Precaución●Si usas un servidor Java EE 1.4 (Por ej. WAS 6.1)debes usar jruby-rack 1.0.0.1
  • 51. Integración con Spring
  • 52. Integración con Spring● Usa un initializer para cargar tu $CLASSPATH● Usa un initializer para cargar el ApplicationContext
  • 53. Deploy en tu appserver preferido
  • 54. $ warble
  • 55. warbler
  • 56. Otras opciones
  • 57. trinidad
  • 58. TorqueBox
  • 59. ¿y si ya uso Ruby?
  • 60. No seas GIL
  • 61. No seas GIL
  • 62. Bibliotecas interesantes● ROFLScale con Netty o Apache Mina● Actores remotos con Akka
  • 63. Bibliotecas menos interesantes● Reportes iPDF● Excel con POI
  • 64. Políglota extremo● STM de Clojure
  • 65. Conclusión
  • 66. Más información
  • 67. Más información● http://jruby.org● https://github.com/jruby● https://github.com/nicksieger/refactoring-to-rails
  • 68. Más información● @headius● @nicksieger● @janogonzalez O RLY?
  • 69. @janogonzalez
  • 70. ¡Gracias!