Ruby, Ruby on Rails,
     IronRuby
              Miguel Rodriguez




                     Enero 2010
2  Lenguajes de Programación


“Existen dos tipos de lenguajes de programación:
      los que la gente se queja todo el ra...
Ruby, Ruby on Rails,
     IronRuby
Es decir...
Ruby por todos lados!
Ruby es ...
Un lenguaje de programación      dinámico y de
código abierto enfocado en la simplicidad
y productividad.

Su ...
Yukihiro “matz” Matsumoto

Clases
               1995                 Objetos


                                  Instanci...
Flexibilidad                               Bloques
                              motores_de_busqueda =
 class Numeric     ...
Metodos
def suma(i,j)
  i+j
end

suma(3,2) 
     » 5

def suma_si_existe(i,j=nil)
  if j
    "Con j=#{j}: " + (i+j).to_s
 ...
Expresiones : Condiciones


es_cierto = true
puts "Es cierto" if es_cierto 
 » Es cierto
puts "Es cierto ¡otra vez!" unles...
Iteradores
a = 3
while a > 0
  a -= 1
end

3.times do
  print 'hola' + ' '
end

    
 » hola hola hola

for i in ['lunes',...
Arrays
a = ['a', 'b', 'c','e','f','g','h','a','h']

a.size

   » 9

a.include?('d') » false

a[2] 
 
   » c

a.index('c') ...
Hash

persona = {'nombre' => 'Juan',
  'apellidos' => 'García Robledo',
  'telefono' => '915671234' }

persona['nombre'] 
...
Manejo de excepciones

f = File.open("testfile")

begin
  puts "Fichero abierto"
rescue
  puts "No se ha podido abrir el f...
Clases y Herencias
                    class Persona
                      def initialize(nombre, apellidos, edad)
       ...
y tambien...


✓mark-and-sweep garbage collector
✓escribir extenciones en C para Ruby
✓puede cargar bibliotecas de extensi...
¿porque lo uso para casi todo?
y bueno no es para flame war pero ...
no apesta tanto como otros :)




grafica basada en google code search
es una implementacion de Ruby para
Microsoft .NET framework, para aprovechar
DLR (Dynamic Languaje Runtime)
Ventajas        o al menos donde se quiere llegar



✓ Deploy on .Net infrastructure
✓ Web apps on IIS (Rails on .Net!)
✓ ...
Estado de desarrollo

  •   No integracion con IDE
  •   Lack ASP.NET app
  •   No LinQ
  •   No WPF data binding
  •   Pe...
Rails
   Convencion sobre configuracion
                      Framework
Open Source                                      AJ...
Model -View-Controller
Active Record
object-relational mapping (ORM)

  ✓Encapsula el acceso a BD
  ✓Métodos de clase para
   obtener instancias
...
Active Record
               object-relational mapping (ORM)
                     class Product < ActiveRecord::Base
     ...
REST
Representational State Transfer
REST
Representational State Transfer
TESTEAR ANTES DE CODIFICAR



 Tests unitarios (modelos)
 Tests funcionales (controladores)
 Test de integración (acciones)
Conclusiones
Usando Rails




http://rails100.pbworks.com/Alexa+Rankings
Links y creditos
‣http://www.slideshare.net/demisone/athens-ruby-meetup-3-ironruby
‣http://poignantguide.net/ruby/
‣http:/...
Preguntas?
Gracias!
                    Miguel Rodriguez

                 http://twitter.com/miguelr
http://www.linkedin.com/in/migu...
Ruby Latin Developer20012010
Ruby Latin Developer20012010
Upcoming SlideShare
Loading in …5
×

Ruby Latin Developer20012010

801 views

Published on

Intro de Ruby, Ruby On Rails, ironruby en LatinDeveloper Group. Enero 2010

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
801
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • e Ruby est&amp;#xE1; dise&amp;#xF1;ado para la productividad y la diversi&amp;#xF3;n del desarrollador, siguiendo los principios de una buena interfaz de usuario.
    A menudo la gente, especialmente los ingenieros en inform&amp;#xE1;tica, se centran en las m&amp;#xE1;quinas. Ellos piensan, &quot;Haciendo esto, la m&amp;#xE1;quina funcionar&amp;#xE1; m&amp;#xE1;s r&amp;#xE1;pido. Haciendo esto, la m&amp;#xE1;quina funcionar&amp;#xE1; de manera m&amp;#xE1;s eficiente. Haciendo esto...&quot; Est&amp;#xE1;n centrados en las m&amp;#xE1;quinas, pero en realidad necesitamos centrarnos en las personas, en c&amp;#xF3;mo hacen programas o c&amp;#xF3;mo manejan las aplicaciones en los ordenadores. Nosotros somos los jefes. Ellos son los esclavos.

    RubyGems es un gestor de paquetes para el lenguaje de programaci&amp;#xF3;n Ruby que proporciona un formato est&amp;#xE1;ndar y autocontenido (llamado gem) Es, por tanto, equivalente al papel que juegan CPAN y PEAR en los lenguajes Perl y PHP, respectivamente.
  • Las clases pueden mezclar (mixin) un m&amp;#xF3;dulo e incorporar todos sus m&amp;#xE9;todos gratuitamente. Por ejemplo, cualquier clase que implemente el m&amp;#xE9;todo each puede incorporar el m&amp;#xF3;dulo Enumerable, que le agrega un conjunto de m&amp;#xE9;todos que usan each para recorrer sus elementos.
    un verdadero mark-and-sweep garbage collector para todos los objetos de Ruby. No es necesario mantener contadores de referencias en bibliotecas externas. Como dice Matz, &amp;#x201C;Esto es mejor para tu salud&amp;#x201D;.
  • Consume all the C# code you want!
    The huge .Net library ecosystem
    External .Net libraries
    Custom / existing C# code
  • REST describe todo un paradigma de arquitectura para aplicaciones que solicitan y manipulan recursos en la web utilizando los m&amp;#xB4;etodos estandar de HTTP: GET, POST, PUT y DELETE.
    En REST todo recurso es una entidad direccionable mediante una URL unica con la que se puede interactuar a trav&amp;#xB4;es del protocolo HTTP. Dichos recursos pueden representarse en diversos formatos como HTML, XML o RSS, segun lo solicite el cliente.
  • URLs limpias.
    Formatos de respuesta variados
    Menos codigo.
    Controladores orientados a CRUD.
    Diseno limpio de la aplicacion.
  • facil de usar, mitos de escalabilidad, empresas.. Panama
  • Ruby Latin Developer20012010

    1. 1. Ruby, Ruby on Rails, IronRuby Miguel Rodriguez Enero 2010
    2. 2. 2 Lenguajes de Programación “Existen dos tipos de lenguajes de programación: los que la gente se queja todo el rato; y por otro, los que nadie utiliza.” Bjarne Stroustrup, inventor del lenguaje C++
    3. 3. Ruby, Ruby on Rails, IronRuby
    4. 4. Es decir...
    5. 5. Ruby por todos lados!
    6. 6. Ruby es ... Un lenguaje de programación dinámico y de código abierto enfocado en la simplicidad y productividad. Su elegante sintaxis se siente natural al leerla y fácil al escribirla.
    7. 7. Yukihiro “matz” Matsumoto Clases 1995 Objetos Instancias Python, Perl , Smalltalk, Lips OpenSource GPL Rubygems Portable interpretado, reflexivo y Herencia orientado a objecionesetos Interfaces
    8. 8. Flexibilidad Bloques motores_de_busqueda = class Numeric   %w[Google Yahoo MSN].map do |motor|   def sumar(x)     "http://www." + motor.downcase + ".com"     self.+(x)   end   end end y = 5.sumar 6 # ahora y vale 11 Mixin class MiArray Hash   include Enumerable end grades = Hash.new grades["Bob"] = 82 grades["Jim"] = 94 grades["Billy"] = 58 Arrays puts grades["Jim"] days1 = ["Mon", "Tue", "Wed"] days2 = ["Thu", "Fri", "Sat", "Sun"] days = days1 + days2 => ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
    9. 9. Metodos def suma(i,j) i+j end suma(3,2) » 5 def suma_si_existe(i,j=nil) if j "Con j=#{j}: " + (i+j).to_s else "Sin j (i=#{i}): " + i.to_s end end suma_si_existe(1) » Sin j (i=1): 1 suma_si_existe 3, 5 » Con j=5: 8
    10. 10. Expresiones : Condiciones es_cierto = true puts "Es cierto" if es_cierto » Es cierto puts "Es cierto ¡otra vez!" unless not es_cierto » Es cierto ¡otra vez! programas = 3 numero_programas = if programas < 2 "hay un programa" elsif programas >= 2 and programas < 4 "hay entre dos y tres programas" else "hay muchos programas" end puts numero_programas » hay entre dos y tres programas
    11. 11. Iteradores a = 3 while a > 0 a -= 1 end 3.times do print 'hola' + ' ' end » hola hola hola for i in ['lunes', 'martes', 'miercoles', 'jueves', 'viernes'] print i, ' ' end » lunes martes miercoles jueves viernes
    12. 12. Arrays a = ['a', 'b', 'c','e','f','g','h','a','h'] a.size » 9 a.include?('d') » false a[2] » c a.index('c') 2 » a.join(' - ') » a - b - c - e - f - g - h - a - h a.slice(1,4) ['b','c','e','f'] » a.sort » ['a','a','b','c','e','f','g','h','h'] a.uniq » ['a','b','c','e','f','g','h']
    13. 13. Hash persona = {'nombre' => 'Juan', 'apellidos' => 'García Robledo', 'telefono' => '915671234' } persona['nombre'] » Juan persona['edad'] = 26 persona.each_key {|key| print key,' '} » nombre telefono apellidos persona.each {|key,value| print key,' > ',value, ' ' } » nombre > Juan telefono > 915671234 apellidos > García Robledo persona.delete_if {|key,value| key == 'telefono' and value =~ /^91/ }
    14. 14. Manejo de excepciones f = File.open("testfile") begin puts "Fichero abierto" rescue puts "No se ha podido abrir el fichero" else puts "Congratulations: no errors!" ensure f.close unless f.nil? end
    15. 15. Clases y Herencias class Persona def initialize(nombre, apellidos, edad) @nombre,@apellidos,@edad = nombre,apellidos,edad end def es_mayor_edad? @edad >= 18 end end p = Persona.new('Juan','García',18) p.es_mayor_edad? » true p = Persona.new('Felipe','Andrés',14) p.es_mayor_edad? » false p.edad » undefined method `edad' class Persona class Persona attr_reader :nombre,:edad ... attr_writer :edad private def initialize(nombre, apellidos, edad) def es_mayor_edad? @nombre,@apellidos,@edad = nombre,apellidos,edad @edad >= 18 end end def es_mayor_edad? end @edad >= 18 end class Adulto < Persona end public :es_mayor_edad? def initialize(nombre, apellidos,edad) super end p = Persona.new('Juan','García',18) end p.edad » 18 p.edad = 15 » 15 a = Adulto.new('Jaime','García',15) p.es_mayor_edad? false » a.es_mayor_edad? » false p = Persona.new('Juan','García',18) p.es_mayor_edad? » private method `es_mayor_edad?'
    16. 16. y tambien... ✓mark-and-sweep garbage collector ✓escribir extenciones en C para Ruby ✓puede cargar bibliotecas de extensión dinámicamente ✓threading
    17. 17. ¿porque lo uso para casi todo?
    18. 18. y bueno no es para flame war pero ...
    19. 19. no apesta tanto como otros :) grafica basada en google code search
    20. 20. es una implementacion de Ruby para Microsoft .NET framework, para aprovechar DLR (Dynamic Languaje Runtime)
    21. 21. Ventajas o al menos donde se quiere llegar ✓ Deploy on .Net infrastructure ✓ Web apps on IIS (Rails on .Net!) ✓ Consumir nativamente servicios .net ✓ Consumir codigo C# ✓ SQL ✓ Office ✓ Active Directory ✓ Exchange ✓ Interoperabilidad con .net
    22. 22. Estado de desarrollo • No integracion con IDE • Lack ASP.NET app • No LinQ • No WPF data binding • Performance
    23. 23. Rails Convencion sobre configuracion Framework Open Source AJAX No config apps lighttpd RESTFUL Database Agnostic MVC BDD DRY (Dont Repeat Yourself) Test No XML innecesario David Heinemeier Hansson Menos código
    24. 24. Model -View-Controller
    25. 25. Active Record object-relational mapping (ORM) ✓Encapsula el acceso a BD ✓Métodos de clase para obtener instancias ✓migraciones
    26. 26. Active Record object-relational mapping (ORM) class Product < ActiveRecord::Base end CREATE TABLE products ( id int(11) NOT NULL auto_increment, name varchar(255), PRIMARY KEY (id) ); firm = Firm.new("name" => "Next Angle") # SQL: INSERT INTO companies (name, type) VALUES("Next Angle", "Firm") firm.save client = Client.new("name" => "37signals", "client_of" => firm.id) # SQL: INSERT INTO companies (name, client_of, type) VALUES("37signals", 1, "Firm") client.save # SQL: SELECT * FROM companies WHERE id = 1 next_angle = Company.find(1) # SQL: SELECT * FROM companies WHERE id = 1 AND type = 'Firm' next_angle = Firm.find(1) # SQL: SELECT * FROM companies WHERE id = 1 AND name = 'Next Angle' next_angle = Company.find(:first, :conditions => "name = 'Next Angle'") next_angle = Firm.find_by_sql("SELECT * FROM companies WHERE id = 1").first
    27. 27. REST Representational State Transfer
    28. 28. REST Representational State Transfer
    29. 29. TESTEAR ANTES DE CODIFICAR Tests unitarios (modelos) Tests funcionales (controladores) Test de integración (acciones)
    30. 30. Conclusiones
    31. 31. Usando Rails http://rails100.pbworks.com/Alexa+Rankings
    32. 32. Links y creditos ‣http://www.slideshare.net/demisone/athens-ruby-meetup-3-ironruby ‣http://poignantguide.net/ruby/ ‣http://www.humblelittlerubybook.com/book/ ‣http://ruby-doc.org/docs/ProgrammingRuby/ ‣http://en.wikipedia.org/wiki/IronRuby ‣http://github.com/ironruby/ironruby/ ‣http://ruby-lang.org/en/documentation/quickstart/ ‣http://en.wikipedia.org/wiki/Ruby_%28programming_language%29 ‣http://the-cocktail.com/docs/rails1/
    33. 33. Preguntas?
    34. 34. Gracias! Miguel Rodriguez http://twitter.com/miguelr http://www.linkedin.com/in/miguelrodriguezs

    ×