Slideshare.net (beta)

 

All comments

Add a comment on Slide 1

If you have a SlideShare account, login to comment; else you can comment as a guest


Showing 1-50 of 3 (more)

Ruby Mola (y por qué)

From sergio.gil, 1 year ago

Material de la presentación realizada en la Conferencia Rails 200 more

1481 views  |  0 comments  |  3 favorites
Download not available ?
 

Groups / Events

 

 
Embed
options

More Info

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License
This slideshow is Public
Total Views: 1481
on Slideshare: 1481
from embeds: 0

Slideshow transcript

Slide 1: Ruby Mola (y por qué) Sergio Gil Conferencia Rails noviembre de 2006 1

Slide 2: Ruby

Slide 3: Ruby

Slide 4: Ruby • Simple

Slide 5: Ruby • Simple • Completo

Slide 6: Ruby • Simple • Orientado a objetos • Completo

Slide 7: Ruby • Simple • Orientado a objetos • Completo • Dinamico ´

Slide 8: Ruby • Simple • Orientado a objetos • Completo • Dinamico ´ Ruby y Ruby on Rails

Slide 9: Ruby • Simple • Orientado a objetos • Completo • Dinamico ´ Ruby y Ruby on Rails • Rails aprovecha al maximo la potencia y el ´ dinamismo de Ruby

Slide 10: Ruby • Simple • Orientado a objetos • Completo • Dinamico ´ Ruby y Ruby on Rails • Rails aprovecha al maximo la potencia y el ´ dinamismo de Ruby • DHH opina que no hubiera podido crear Rails con otro lenguaje.

Slide 11: Ruby • Simple • Orientado a objetos • Completo • Dinamico ´ Ruby y Ruby on Rails • Rails aprovecha al maximo la potencia y el ´ dinamismo de Ruby • DHH opina que no hubiera podido crear Rails con otro lenguaje. • Y sin embargo, esta infrautilizado ´

Slide 12: Ruby • Simple • Orientado a objetos • Completo • Dinamico ´ Ruby y Ruby on Rails • Rails aprovecha al maximo la potencia y el ´ dinamismo de Ruby • DHH opina que no hubiera podido crear Rails con otro lenguaje. • Y sin embargo, esta infrautilizado ´

Slide 13: 1 Un lenguaje muy dulce

Slide 14: 1 Un lenguaje muy dulce 2 ‘De serie’

Slide 15: 1 Un lenguaje muy dulce 2 ‘De serie’ ´ 3 Orientacion a objetos

Slide 16: 1 Un lenguaje muy dulce 2 ‘De serie’ ´ 3 Orientacion a objetos ´ 4 Un lenguaje dinamico

Slide 17: Un lenguaje muy dulce 1 Un lenguaje muy dulce 2 ‘De serie’ ´ 3 Orientacion a objetos ´ 4 Un lenguaje dinamico

Slide 18: Un lenguaje muy dulce “Quien no ha probado lo amargo, no sabe lo que es dulce” ´ PROVERBIO ALEM A N

Slide 19: Un lenguaje muy dulce • Los idiomas influyen (¿determinan?) la manera de pensar de las personas

Slide 20: Un lenguaje muy dulce • Los idiomas influyen (¿determinan?) la manera de pensar de las personas • Los lenguajes, la de los programadores

Slide 21: Un lenguaje muy dulce • Los idiomas influyen (¿determinan?) la manera de pensar de las personas • Los lenguajes, la de los programadores Ruby

Slide 22: Un lenguaje muy dulce • Los idiomas influyen (¿determinan?) la manera de pensar de las personas • Los lenguajes, la de los programadores Ruby • Cercano a nuestra forma de pensar

Slide 23: Un lenguaje muy dulce • Los idiomas influyen (¿determinan?) la manera de pensar de las personas • Los lenguajes, la de los programadores Ruby • Cercano a nuestra forma de pensar • Lo cual da una experiencia mejor

Slide 24: Un lenguaje muy dulce • Los idiomas influyen (¿determinan?) la manera de pensar de las personas • Los lenguajes, la de los programadores Ruby • Cercano a nuestra forma de pensar • Lo cual da una experiencia mejor • ¡Es divertido!

Slide 25: Un lenguaje muy dulce • Los idiomas influyen (¿determinan?) la manera de pensar de las personas • Los lenguajes, la de los programadores Ruby • Cercano a nuestra forma de pensar • Lo cual da una experiencia mejor • ¡Es divertido! • Te hace sentir inteligente

Slide 26: Un lenguaje muy dulce • Los idiomas influyen (¿determinan?) la manera de pensar de las personas • Los lenguajes, la de los programadores Ruby • Cercano a nuestra forma de pensar • Lo cual da una experiencia mejor • ¡Es divertido! • Te hace sentir inteligente • ‘Ruby stays out of your way’

Slide 27: Un lenguaje muy dulce Algunos ejemplos

Slide 28: Un lenguaje muy dulce ´ Las estructuras devuelven el valor de la ultima expresion ´ evaluada: @user = if params[:id] User.find(params[:id]) else User.new end

Slide 29: Un lenguaje muy dulce ´ Las estructuras devuelven el valor de la ultima expresion ´ evaluada: @user = if params[:id] User.find(params[:id]) else User.new end

Slide 30: Un lenguaje muy dulce ´ Las estructuras devuelven el valor de la ultima expresion ´ evaluada: @user = if params[:id] User.find(params[:id]) else User.new end

Slide 31: Un lenguaje muy dulce ´ Las estructuras devuelven el valor de la ultima expresion ´ evaluada: @user = if params[:id] User.find(params[:id]) else User.new end ´ Menos codigo 1

Slide 32: Un lenguaje muy dulce ´ Las estructuras devuelven el valor de la ultima expresion ´ evaluada: @user = if params[:id] User.find(params[:id]) else User.new end ´ Menos codigo 1 Menos errores 2

Slide 33: Un lenguaje muy dulce ´ Las estructuras devuelven el valor de la ultima expresion ´ evaluada: @user = if params[:id] User.find(params[:id]) else User.new end ´ Menos codigo 1 Menos errores 2 ´ ¡Mas bonito! 3

Slide 34: Un lenguaje muy dulce ´ Las asignaciones tambien devuelven el valor asignado: @post = Post.find(params[:id]) if @post @post.destroy end

Slide 35: Un lenguaje muy dulce ´ Las asignaciones tambien devuelven el valor asignado: @post = Post.find(params[:id]) if @post @post.destroy end Mejor: if @post = Post.find(params[:id]) @post.destroy end

Slide 36: Un lenguaje muy dulce ´ Las asignaciones tambien devuelven el valor asignado: @post = Post.find(params[:id]) if @post @post.destroy end Mejor: if @post = Post.find(params[:id]) @post.destroy end

Slide 37: Un lenguaje muy dulce ´ Las asignaciones tambien devuelven el valor asignado: @post = Post.find(params[:id]) if @post @post.destroy end Mejor: if @post = Post.find(params[:id]) @post.destroy end • Y ademas nos repetimos menos ´

Slide 38: Un lenguaje muy dulce Asignaciones condicionales

Slide 39: Un lenguaje muy dulce Asignaciones condicionales @title = "T´tulo gen´rico" unless defined?(@title) ı e

Slide 40: Un lenguaje muy dulce Asignaciones condicionales @title = "T´tulo gen´rico" unless defined?(@title) ı e @title ||= "T´tulo gen´rico" ı e

Slide 41: Un lenguaje muy dulce Asignaciones condicionales @title = "T´tulo gen´rico" unless defined?(@title) ı e @title ||= "T´tulo gen´rico" ı e @heading = if defined?(@subsection) @subsection.title else @section.title end

Slide 42: Un lenguaje muy dulce Asignaciones condicionales @title = "T´tulo gen´rico" unless defined?(@title) ı e @title ||= "T´tulo gen´rico" ı e @heading = if defined?(@subsection) @subsection.title else @section.title end @heading = ( @subsection || @section ).title

Slide 43: Un lenguaje muy dulce Asignaciones condicionales @title = "T´tulo gen´rico" unless defined?(@title) ı e @title ||= "T´tulo gen´rico" ı e @heading = if defined?(@subsection) @subsection.title else @section.title end @heading = ( @subsection || @section ).title

Slide 44: ‘De serie’ 1 Un lenguaje muy dulce 2 ‘De serie’ ´ 3 Orientacion a objetos ´ 4 Un lenguaje dinamico

Slide 45: ‘De serie’ “Cualquier tecnolog´a ı distinguible de la magia es insuficientemente avanzada” ´ CLE ON I

Slide 46: ‘De serie’ • La clase Array1 es una de las joyas de las clases inclu´das ı 1 ´ Sin olvidar el modulo Enumerable

Slide 47: ‘De serie’ • La clase Array1 es una de las joyas de las clases inclu´das ı • Le daremos un repaso para ejemplificar: 1 ´ Sin olvidar el modulo Enumerable

Slide 48: ‘De serie’ • La clase Array1 es una de las joyas de las clases inclu´das ı • Le daremos un repaso para ejemplificar: • La potencia de las clases inclu´das ı 1 ´ Sin olvidar el modulo Enumerable

Slide 49: ‘De serie’ • La clase Array1 es una de las joyas de las clases inclu´das ı • Le daremos un repaso para ejemplificar: • La potencia de las clases inclu´das ı • La potencia y el uso de los bloques 1 ´ Sin olvidar el modulo Enumerable

Slide 50: ‘De serie’ • La clase Array1 es una de las joyas de las clases inclu´das ı • Le daremos un repaso para ejemplificar: • La potencia de las clases inclu´das ı • La potencia y el uso de los bloques • El ‘estilo Ruby’ 1 ´ Sin olvidar el modulo Enumerable

Slide 51: ‘De serie’ @arr = [ 1, 2, 3, 4, 5 ]

Slide 52: ‘De serie’ @arr = [ 1, 2, 3, 4, 5 ] Iterando: @arr.each do |item| puts item end

Slide 53: ‘De serie’ @arr = [ 1, 2, 3, 4, 5 ] Iterando: @arr.each do |item| puts item end

Slide 54: ‘De serie’ @arr = [ 1, 2, 3, 4, 5 ] Iterando: @arr.each do |item| puts item end

Slide 55: ‘De serie’ @arr = [ 1, 2, 3, 4, 5 ] Iterando: Que es el for de toda la vida: @arr.each do |item| for item in @arr puts item puts item end end

Slide 56: ‘De serie’ @arr = [ 1, 2, 3, 4, 5 ] Iterando: Que es el for de toda la vida: @arr.each do |item| for item in @arr puts item puts item end end

Slide 57: ‘De serie’ @arr = [ 1, 2, 3, 4, 5 ] Iterando: Que es el for de toda la vida: @arr.each do |item| for item in @arr puts item puts item end end

Slide 58: ‘De serie’ Lo bueno empieza ahora:

Slide 59: ‘De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq [ 1, 1, 2, 3, 3 ].uniq >> [ 1, 2, 3 ]

Slide 60: ‘De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq • .flatten [ [ 1, 1 ], 2, [ 3, 3 ] ].flatten >> [ 1, 1, 2, 3, 3 ]

Slide 61: ‘De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq • .flatten [ 1, nil, 2, nil, 3 ].compact • .compact >> [ 1, 2, 3 ]

Slide 62: ‘De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq • .flatten [ 1, 1, 2, 3, 3 ].reverse • .compact >> [ 3, 3, 2, 1, 1 ] • .reverse

Slide 63: ‘De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq • .flatten [ 1, 3, 2, 1, 3 ].sort • .compact >> [ 1, 1, 2, 3, 3 ] • .reverse • .sort

Slide 64: ‘De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq • .flatten • .compact • .reverse • .sort Busqueda ´ [ 1, 2, 3 ].find {|n| n % 3 == 0 } >> 3 • .find [ 1, 2, 3 ].find {|n| n % 5 == 0 } >> nil

Slide 65: ‘De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq • .flatten • .compact • .reverse • .sort Busqueda ´ [ 1, 3, 5, 6 ].find all {|n| n % 3 == 0 } >> [ 3, 6 ] • .find [ 1, 2, 3 ].find all {|n| n % 5 == 0 } • .find all >> []

Slide 66: ‘De serie’ Lo bueno empieza ahora: Utilidades varias • .uniq • .flatten • .compact • .reverse • .sort Busqueda ´ [ 1, 3, 5, 6 ].reject {|n| n % 3 == 0 } >> [ 1, 5] • .find [ 1, 2, 3 ].reject {|n| n % 5 == 0 } • .find all >> [ 1, 2, 3 ]

Slide 67: ‘De serie’ Operaciones • ‘Suma’: + [ 1, 2 ] + [ 3, 4 ] >> [ 1, 2, 3, 4 ]

Slide 68: ‘De serie’ Operaciones • ‘Suma’: + • ‘Resta’: - [ 1, 2, 3, 4 ] - [ 2, 3 ] >> [ 1, 4 ]

Slide 69: ‘De serie’ Operaciones • ‘Suma’: + • ‘Resta’: - [ 1, 2 ] * 3 • ‘Repeticion’: * ´ >> [ 1, 2, 1, 2, 1, 2 ]

Slide 70: ‘De serie’ Operaciones • ‘Suma’: + • ‘Resta’: - [ 0, 1, 2, 3, 4 ] & [ 0, 3, 6 ] • ‘Repeticion’: * ´ >> [ 0, 3 ] • Interseccion (∩): & ´

Slide 71: ‘De serie’ Operaciones • ‘Suma’: + • ‘Resta’: - [ 1, 2, 3] | [ 3, 4, 5 ] • ‘Repeticion’: * ´ >> [ 1, 2, 3, 4, 5 ] • Interseccion (∩): & ´ • Union (∪): | ´

Slide 72: ‘De serie’ ´ Nunca mas esto: @precios = ... @ivas = [] @precios.each do |precio| @ivas << precio * 0.16 end

Slide 73: ‘De serie’ ´ Nunca mas esto: @precios = ... @ivas = [] @precios.each do |precio| @ivas << precio * 0.16 end ¿No es mejor esto? @ivas = @precios.map {|precio| precio * 0.16 }

Slide 74: ‘De serie’ Por si hace falta otro ejemplo: @precios = ... @total = 0 @precios.each do |precio| @total += precio end

Slide 75: ‘De serie’ Por si hace falta otro ejemplo: @precios = ... @total = 0 @precios.each do |precio| @total += precio end ´ ¿No es mas bonito as´? ı @total = @precios.inject {|t, precio| t + precio }

Slide 76: ‘De serie’ ¿Y en Rails? Algunos ejemplos chulos:

Slide 77: ‘De serie’ ¿Y en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort

Slide 78: ‘De serie’ ¿Y en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort

Slide 79: ‘De serie’ ¿Y en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort

Slide 80: ‘De serie’ ¿Y en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort @last comments = Comment.find(:all, :order => ’date DESC’, :limit => 10) @last commented posts = @last comments.map { |c| c.post }.uniq

Slide 81: ‘De serie’ ¿Y en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort @last comments = Comment.find(:all, :order => ’date DESC’, :limit => 10) @last commented posts = @last comments.map { |c| c.post }.uniq

Slide 82: ‘De serie’ ¿Y en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort @last comments = Comment.find(:all, :order => ’date DESC’, :limit => 10) @last commented posts = @last comments.map { |c| c.post }.uniq <p>Comentado por: <%= @post.comments.sort[0..4].map { |c| link to(c.user.name, c.permalink) }.join(’, ’) %></p>

Slide 83: ‘De serie’ ¿Y en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort @last comments = Comment.find(:all, :order => ’date DESC’, :limit => 10) @last commented posts = @last comments.map { |c| c.post }.uniq <p>Comentado por: <%= @post.comments.sort[0..4].map { |c| link to(c.user.name, c.permalink) }.join(’, ’) %></p>

Slide 84: ‘De serie’ ¿Y en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort @last comments = Comment.find(:all, :order => ’date DESC’, :limit => 10) @last commented posts = @last comments.map { |c| c.post }.uniq <p>Comentado por: <%= @post.comments.sort[0..4].map { |c| link to(c.user.name, c.permalink) }.join(’, ’) %></p>

Slide 85: ‘De serie’ ¿Y en Rails? Algunos ejemplos chulos: @comments = @posts.map { |p| p.comments }.flatten.sort @last comments = Comment.find(:all, :order => ’date DESC’, :limit => 10) @last commented posts = @last comments.map { |c| c.post }.uniq <p>Comentado por: <%= @post.comments.sort[0..4].map { |c| link to(c.user.name, c.permalink) }.join(’, ’) %></p>

Slide 86: ‘De serie’ Merece la pena conocer bien las clases inclu´das ı ´ Algunas clases y modulos que no perder de vista

Slide 87: ‘De serie’ Merece la pena conocer bien las clases inclu´das ı ´ Algunas clases y modulos que no perder de vista • Array

Slide 88: ‘De serie’ Merece la pena conocer bien las clases inclu´das ı ´ Algunas clases y modulos que no perder de vista • Array • Enumerable

Slide 89: ‘De serie’ Merece la pena conocer bien las clases inclu´das ı ´ Algunas clases y modulos que no perder de vista • Array • Enumerable • Hash

Slide 90: ‘De serie’ Merece la pena conocer bien las clases inclu´das ı ´ Algunas clases y modulos que no perder de vista • Array • Enumerable • Hash • Numeric

Slide 91: ‘De serie’ Merece la pena conocer bien las clases inclu´das ı ´ Algunas clases y modulos que no perder de vista • Array • Range • Enumerable • Hash • Numeric

Slide 92: ‘De serie’ Merece la pena conocer bien las clases inclu´das ı ´ Algunas clases y modulos que no perder de vista • Array • Range • Enumerable • Regexp • Hash • Numeric

Slide 93: ‘De serie’ Merece la pena conocer bien las clases inclu´das ı ´ Algunas clases y modulos que no perder de vista • Array • Range • Enumerable • Regexp • Hash • String • Numeric

Slide 94: ‘De serie’ Merece la pena conocer bien las clases inclu´das ı ´ Algunas clases y modulos que no perder de vista • Array • Range • Enumerable • Regexp • Hash • String • Numeric • Time

Slide 95: ´ Orientacion a objetos 1 Un lenguaje muy dulce 2 ‘De serie’ ´ 3 Orientacion a objetos ´ 4 Un lenguaje dinamico

Slide 96: ´ Orientacion a objetos “Los prisioneros de la ´ caverna solo ven las sombras de los objetos.” ´ PLAT ON

Slide 97: ´ Orientacion a objetos En Ruby: • Todo es un objeto

Slide 98: ´ Orientacion a objetos En Ruby: • Todo es un objeto • Todo

Slide 99: ´ Orientacion a objetos En Ruby: • Todo es un objeto • Todo • De verdad, todo

Slide 100: ´ Orientacion a objetos En serio, todo: • No hay ‘tipos primitivos’ 2 ´ Lo cual permite tecnicas avanzadas que no veremos hoy =;-)

Slide 101: ´ Orientacion a objetos En serio, todo: • No hay ‘tipos primitivos’ • Los numeros son objetos Fixnum (o Float, o...) ´ 2 ´ Lo cual permite tecnicas avanzadas que no veremos hoy =;-)

Slide 102: ´ Orientacion a objetos En serio, todo: • No hay ‘tipos primitivos’ • Los numeros son objetos Fixnum (o Float, o...) ´ • Las cadenas son objetos String 2 ´ Lo cual permite tecnicas avanzadas que no veremos hoy =;-)

Slide 103: ´ Orientacion a objetos En serio, todo: • No hay ‘tipos primitivos’ • Los numeros son objetos Fixnum (o Float, o...) ´ • Las cadenas son objetos String • Incluso las clases son objetos Class2 2 ´ Lo cual permite tecnicas avanzadas que no veremos hoy =;-)

Slide 104: ´ Orientacion a objetos De toda la vida: def sanitize title(title) sanitized title = ... return sanitized title end ... post.title = params[:title] post.sanitized title = sanitize title(post.title)

Slide 105: ´ Orientacion a objetos ´ ´ Mas bonito y mas DRY : class Post < ActiveRecord::Base def sanitized title ... end end ... post.title = params[:title] post.sanitized title

Slide 106: ´ Orientacion a objetos Mejor aun: ´ class String def sanitize ... end end ... post.title = params[:title] post.title.sanitize

Slide 107: ´ Un lenguaje dinamico 1 Un lenguaje muy dulce 2 ‘De serie’ ´ 3 Orientacion a objetos ´ 4 Un lenguaje dinamico

Slide 108: ´ Un lenguaje dinamico “Un hombre no puede ˜ banarse dos veces en el mismo r´o; ni el r´o ni el ı ı hombre son los mismos, puesto que todo fluye.” ´ HER A CLITO

Slide 109: ´ Un lenguaje dinamico En Ruby: • No hay diferencia entre ‘tiempo de compilacion’ y ‘tiempo ´ ´ de ejecucion’

Slide 110: ´ Un lenguaje dinamico En Ruby: • No hay diferencia entre ‘tiempo de compilacion’ y ‘tiempo ´ ´ de ejecucion’ • Se pueden crear y modificar clases, redefinir o anadir ˜ ´ metodos, en cualquier momento

Slide 111: ´ Un lenguaje dinamico En Ruby: • No hay diferencia entre ‘tiempo de compilacion’ y ‘tiempo ´ ´ de ejecucion’ • Se pueden crear y modificar clases, redefinir o anadir ˜ ´ metodos, en cualquier momento • Hasta los tipos basicos, como Class u Object ´

Slide 112: ´ Un lenguaje dinamico ´ ¿Como creen si no que Rails... • ...anade metodos a clases ActiveRecord tras leer la base ˜ ´ de datos? (como name o incluso find by name())

Slide 113: ´ Un lenguaje dinamico ´ ¿Como creen si no que Rails... • ...anade metodos a clases ActiveRecord tras leer la base ˜ ´ de datos? (como name o incluso find by name()) • ...anade unos metodos tras ejecutar otros? ˜ ´ ˜ ´ (has many :posts anade el metodo posts, etc...)

Slide 114: ´ Un lenguaje dinamico ´ ¿Como creen si no que Rails... • ...anade metodos a clases ActiveRecord tras leer la base ˜ ´ de datos? (como name o incluso find by name()) • ...anade unos metodos tras ejecutar otros? ˜ ´ ˜ ´ (has many :posts anade el metodo posts, etc...) • ...modifica nuestros metodos para que ejecuten los filtros? ´ (before filter y after filter)

Slide 115: ´ Un lenguaje dinamico ´ Nosotros tambien podemos redefinir

Slide 116: ´ Un lenguaje dinamico ´ Nosotros tambien podemos redefinir class Fixnum def +(other) self - other end end

Slide 117: ´ Un lenguaje dinamico ´ Nosotros tambien podemos redefinir class Fixnum def +(other) self - other end end >> 5 + 4

Slide 118: ´ Un lenguaje dinamico ´ Nosotros tambien podemos redefinir class Fixnum def +(other) self - other end end >> 5 + 4 => 1

Slide 119: ´ Un lenguaje dinamico ´ Un ejemplo mas cabal

Slide 120: ´ Un lenguaje dinamico ´ Un ejemplo mas cabal class Post < ActiveRecord::Base end

Slide 121: ´ Un lenguaje dinamico ´ Un ejemplo mas cabal class Post < ActiveRecord::Base def title=(title) write attribute(’title’, title) end end

Slide 122: ´ Un lenguaje dinamico ´ Un ejemplo mas cabal class Post < ActiveRecord::Base def title=(title) write attribute(’title’, title) if self.new? write attribute(’sanitized title’, title.sanitize) end end end

Slide 123: Preguntas ¿ ... ?

Slide 124: Moraleja: Aprendan Ruby Merece la pena ¡Y gracias por venir!

Slide 125: Salamanca 17 Madrid – 28020 España tel. +34 91 567 0605 www.the­cocktail.com 2

Slide 126: Referencias • “Programming Ruby”, Dave Thomas • “The Pragmatic Programmer”, Adrew Hunt & Dave Thomas • http://www.ruby-lang.org/ • http://www.rubyonrails.org/ • http://www.cs.byu.edu/colloquia/2006Fall/presentations/Matz slides/ • http://es.wikipedia.org/wiki/Plat%C3%B3n • http://es.wikipedia.org/wiki/Her%C3%A1clito Fotograf´as: ı • http://flickr.com/photos/rtv/290062998/in/pool-sweetcandy/ • http://microwave.gotovim.ru/ • http://www.xtec.es/lvallmaj/passeig/plato2.htm • http://www.flickr.com/photos/mtnpix/294515665/