O mundo visto de dentro do
          Ruby
2007
2007
Ciência da Computação
E vocês, já ouviram falar ou
       usaram Ruby?
Yukihiro “Matz” Matsumoto
“Se você terminar seu trabalho rápido e
                              de forma divertida, isso não é bom?”




Yukihiro “Matz” Matsumoto
“Se você terminar seu trabalho rápido e
                              de forma divertida, isso não é bom?”


                        “Eu queria uma linguagem mais poderosa
                         que perl, e mais orientada a objetos que
                        Python. Foi por isso que eu decidi projetar
                               minha própria linguagem.”



Yukihiro “Matz” Matsumoto
1993
                            Primeiros rabiscos




Yukihiro “Matz” Matsumoto
1993
                              Primeiros rabiscos



                                  1995
                            Primeiro release público



Yukihiro “Matz” Matsumoto
   Sintaxe simples, inspirada por Ada, Eiffel e Perl
   Semântica compacta, inspirada por Smalltalk
   Object Model igual ao de Smalltalk
   Expressões regulares do Perl
   Conceitos de linguagem funcional
   Características do C e C++
   Sintaxe simples, inspirada por Ada, Eiffel e Perl
   Semântica compacta, inspirada por Smalltalk
   Object Model igual ao de Smalltalk
   Expressões regulares do Perl
   Conceitos de linguagem funcional
   Características do C e C++
   Produtividade no desenvolvedor
   Simplicidade
   Linguagem humana
   Linguagem dinâmica e reflexiva
   Extensibilidade
   Todas as classes são abertas
   Herança simples e mixins
   DSL’s
   Garbage collector
Ruby   1.8.7 e 1.9.2
Ruby   1.8.7 e 1.9.2

REE    1.8.7-2010.2
Ruby       1.8.7 e 1.9.2

REE        1.8.7-2010.2

Rubinius   1.0.1
Ruby       1.8.7 e 1.9.2

REE        1.8.7-2010.2

Rubinius   1.0.1

JRuby      1.5.X           (Java)
Ruby       1.8.7 e 1.9.2

REE        1.8.7-2010.2

Rubinius   1.0.1

JRuby      1.5.X           (Java)

MacRuby    0.6             (Objective-C)
Ruby       1.8.7 e 1.9.2

REE        1.8.7-2010.2

Rubinius   1.0.1

JRuby      1.5.X           (Java)

MacRuby    0.6             (Objective-C)

MagLev     Beta            (Smalltalk)
Ruby       1.8.7 e 1.9.2

REE        1.8.7-2010.2

Rubinius   1.0.1

JRuby      1.5.X           (Java)

MacRuby    0.6             (Objective-C)

MagLev     Beta            (Smalltalk)

IronRuby   1.1             (.NET)
Mas, por que Ruby?
“Tornar as coisas simples fáceis e as coisas
           complexas possíveis.”
                                   Filosofia Ruby
Focado no humano

    3.times do
           print “Wee”
    end
Focado no humano

      3.times do
             print “Wee”
      end


  feed_dog if @dog.hungry?
Focado no humano

            3.times do
                   print “Wee”
            end


      feed_dog if @dog.hungry?



['beer', 'vodka', 'wine'].each |drink| do
        print drink.capitalize
end
Verdadeiramente OO



Tudo é objeto, não há sequer tipo primitivo.
Verdadeiramente OO



Tudo é objeto, não há sequer tipo primitivo.



                >> 1.class
                => Fixnum
                >> 1.class.class
                => Class
                >> nil.class
                => NilClass
Código “bonito”
140
vs

40
“Eu sempre soube que Smalltalk substituiria
Java. Só não sabia que isso se chamaria Ruby.”
               Kent Beck, Criador do "Extreme Programming" e "TDD"
O que podemos fazer com Ruby...
No desktop
Bowline   Titanium
Bowline   Titanium


Shoes     GTK+
Bowline   Titanium


Shoes     GTK+


wxRuby    Win32 widgets
          Aqua, GTK+
Bowline   Titanium


Shoes     GTK+


wxRuby    Win32 widgets
          Aqua, GTK+

QtRuby    Qt
Bowline      Titanium


Shoes        GTK+


wxRuby       Win32 widgets
             Aqua, GTK+

QtRuby       Qt


Ruby Cocoa   Cocoa
Na web
David “dhh” Heinemeier Hansson
2004




David “dhh” Heinemeier Hansson
2004




David “dhh” Heinemeier Hansson
2.3.8   3.0.0
   Código gerando código
   Convenção sobre configuração
   DRY (don't repeat yourself)
   Produtividade sustentável
   Desenvolvimento ágil
   Diversão
Sinatra
require 'rubygems'
require 'sinatra'
get '/hi' do
 "Hello World!"
end
Ferramentas
1.8.7 + 1.9.2 + REE + JRuby + Rubinius +
    MagLev + IronRuby + MacRuby
1.8.7 + 1.9.2 + REE + JRuby + Rubinius +
    MagLev + IronRuby + MacRuby

                   =

                RVM
Repositórios   Github, Codebase
Repositórios          Github, Codebase


Integração contínua   Hudson, Cruise
Repositórios          Github, Codebase


Integração contínua   Hudson, Cruise


                      Puppet, Chef
Deploy
                      Capistrano
Repositórios          Github, Codebase


Integração contínua   Hudson, Cruise


                      Puppet, Chef
Deploy
                      Capistrano

                      NewRelic, Scout
Monitoramento         BackupMyApp
Repositórios          Github, Codebase


Integração contínua   Hudson, Cruise


                      Puppet, Chef
Deploy
                      Capistrano

                      NewRelic, Scout
Monitoramento         BackupMyApp


Servidores            Passenger,
                      Mongrel, Thin
Testes



Cucumber, Steak, RSpec, Minitest,
   Test::Unit, Shoulda, Bacon,
  Machinist, Factory Girl, Mocha
Minispec




http://gist.github.com/433067
Cucumber




http://github.com/danielvlopes/buggy/blob/master/features/authenticate.feature
Steak
Comunidade
Ué, mas não dizem que
     Ruby é lento?
Performance

      !=

Escalabilidade
“O The New York Times usou Ruby on Rails para agregar,
analisar e mostrar os resultados das eleições em quase tempo
     real em um de seus sites mais acessados de todos os
                           tempos.”
    http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise/?fp=16&fpid=1
Agradecimentos


@akitaonrails   (Fábio Akita)
@danielvlopes   (Daniel V. Lopes)
OBRIGADO!
@vitoravelino
vitoravelino@octahedron.com.br

O mundo visto de dentro do Ruby

  • 1.
    O mundo vistode dentro do Ruby
  • 3.
  • 4.
  • 6.
    E vocês, jáouviram falar ou usaram Ruby?
  • 8.
  • 9.
    “Se você terminarseu trabalho rápido e de forma divertida, isso não é bom?” Yukihiro “Matz” Matsumoto
  • 10.
    “Se você terminarseu trabalho rápido e de forma divertida, isso não é bom?” “Eu queria uma linguagem mais poderosa que perl, e mais orientada a objetos que Python. Foi por isso que eu decidi projetar minha própria linguagem.” Yukihiro “Matz” Matsumoto
  • 11.
    1993 Primeiros rabiscos Yukihiro “Matz” Matsumoto
  • 12.
    1993 Primeiros rabiscos 1995 Primeiro release público Yukihiro “Matz” Matsumoto
  • 13.
    Sintaxe simples, inspirada por Ada, Eiffel e Perl  Semântica compacta, inspirada por Smalltalk  Object Model igual ao de Smalltalk  Expressões regulares do Perl  Conceitos de linguagem funcional  Características do C e C++
  • 14.
    Sintaxe simples, inspirada por Ada, Eiffel e Perl  Semântica compacta, inspirada por Smalltalk  Object Model igual ao de Smalltalk  Expressões regulares do Perl  Conceitos de linguagem funcional  Características do C e C++
  • 15.
    Produtividade no desenvolvedor  Simplicidade  Linguagem humana  Linguagem dinâmica e reflexiva  Extensibilidade  Todas as classes são abertas  Herança simples e mixins  DSL’s  Garbage collector
  • 16.
    Ruby 1.8.7 e 1.9.2
  • 17.
    Ruby 1.8.7 e 1.9.2 REE 1.8.7-2010.2
  • 18.
    Ruby 1.8.7 e 1.9.2 REE 1.8.7-2010.2 Rubinius 1.0.1
  • 19.
    Ruby 1.8.7 e 1.9.2 REE 1.8.7-2010.2 Rubinius 1.0.1 JRuby 1.5.X (Java)
  • 20.
    Ruby 1.8.7 e 1.9.2 REE 1.8.7-2010.2 Rubinius 1.0.1 JRuby 1.5.X (Java) MacRuby 0.6 (Objective-C)
  • 21.
    Ruby 1.8.7 e 1.9.2 REE 1.8.7-2010.2 Rubinius 1.0.1 JRuby 1.5.X (Java) MacRuby 0.6 (Objective-C) MagLev Beta (Smalltalk)
  • 22.
    Ruby 1.8.7 e 1.9.2 REE 1.8.7-2010.2 Rubinius 1.0.1 JRuby 1.5.X (Java) MacRuby 0.6 (Objective-C) MagLev Beta (Smalltalk) IronRuby 1.1 (.NET)
  • 23.
  • 24.
    “Tornar as coisassimples fáceis e as coisas complexas possíveis.” Filosofia Ruby
  • 25.
    Focado no humano 3.times do print “Wee” end
  • 26.
    Focado no humano 3.times do print “Wee” end feed_dog if @dog.hungry?
  • 27.
    Focado no humano 3.times do print “Wee” end feed_dog if @dog.hungry? ['beer', 'vodka', 'wine'].each |drink| do print drink.capitalize end
  • 28.
    Verdadeiramente OO Tudo éobjeto, não há sequer tipo primitivo.
  • 29.
    Verdadeiramente OO Tudo éobjeto, não há sequer tipo primitivo. >> 1.class => Fixnum >> 1.class.class => Class >> nil.class => NilClass
  • 30.
  • 36.
  • 37.
    “Eu sempre soubeque Smalltalk substituiria Java. Só não sabia que isso se chamaria Ruby.” Kent Beck, Criador do "Extreme Programming" e "TDD"
  • 38.
    O que podemosfazer com Ruby...
  • 39.
  • 40.
    Bowline Titanium
  • 41.
    Bowline Titanium Shoes GTK+
  • 42.
    Bowline Titanium Shoes GTK+ wxRuby Win32 widgets Aqua, GTK+
  • 43.
    Bowline Titanium Shoes GTK+ wxRuby Win32 widgets Aqua, GTK+ QtRuby Qt
  • 44.
    Bowline Titanium Shoes GTK+ wxRuby Win32 widgets Aqua, GTK+ QtRuby Qt Ruby Cocoa Cocoa
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
    2.3.8 3.0.0
  • 50.
    Código gerando código  Convenção sobre configuração  DRY (don't repeat yourself)  Produtividade sustentável  Desenvolvimento ágil  Diversão
  • 51.
  • 52.
    require 'rubygems' require 'sinatra' get'/hi' do "Hello World!" end
  • 55.
  • 56.
    1.8.7 + 1.9.2+ REE + JRuby + Rubinius + MagLev + IronRuby + MacRuby
  • 57.
    1.8.7 + 1.9.2+ REE + JRuby + Rubinius + MagLev + IronRuby + MacRuby = RVM
  • 58.
    Repositórios Github, Codebase
  • 59.
    Repositórios Github, Codebase Integração contínua Hudson, Cruise
  • 60.
    Repositórios Github, Codebase Integração contínua Hudson, Cruise Puppet, Chef Deploy Capistrano
  • 61.
    Repositórios Github, Codebase Integração contínua Hudson, Cruise Puppet, Chef Deploy Capistrano NewRelic, Scout Monitoramento BackupMyApp
  • 62.
    Repositórios Github, Codebase Integração contínua Hudson, Cruise Puppet, Chef Deploy Capistrano NewRelic, Scout Monitoramento BackupMyApp Servidores Passenger, Mongrel, Thin
  • 63.
    Testes Cucumber, Steak, RSpec,Minitest, Test::Unit, Shoulda, Bacon, Machinist, Factory Girl, Mocha
  • 64.
  • 65.
  • 66.
  • 72.
  • 79.
    Ué, mas nãodizem que Ruby é lento?
  • 82.
    Performance != Escalabilidade
  • 83.
    “O The NewYork Times usou Ruby on Rails para agregar, analisar e mostrar os resultados das eleições em quase tempo real em um de seus sites mais acessados de todos os tempos.” http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise/?fp=16&fpid=1
  • 84.
    Agradecimentos @akitaonrails (Fábio Akita) @danielvlopes (Daniel V. Lopes)
  • 85.