SlideShare a Scribd company logo
2009, ano do Ruby
       on Rails no Brasil

Sunday, November 8, 2009
Cauê Guerra
   caue.guerra@caelum.com.br

  @caueguerra




Sunday, November 8, 2009
Sunday, November 8, 2009
Ruby



Sunday, November 8, 2009
Yukihiro Matsumoto (Matz)

    “Often people, especially
    computer engineers, focus on the
    machines. But in fact we
                     need
    to focus on humans, on
    how humans care about doing
    programming or operating the
    application of the machines. We
    are the masters. They are the
    slaves.”



Sunday, November 8, 2009
Características




Sunday, November 8, 2009
Características

               Orientada a Objetos    2.times { puts “Olá” }




Sunday, November 8, 2009
Características

               Orientada a Objetos    2.times { puts “Olá” }

               Tipagem dinâmica       @nome = “Cauê Guerra”




Sunday, November 8, 2009
Características

               Orientada a Objetos    2.times { puts “Olá” }

               Tipagem dinâmica       @nome = “Cauê Guerra”

               Meta-programação       Código que gera código




Sunday, November 8, 2009
Características

               Orientada a Objetos      2.times { puts “Olá” }

               Tipagem dinâmica         @nome = “Cauê Guerra”

               Meta-programação         Código que gera código


                Programação funcional




Sunday, November 8, 2009
Exemplo




Sunday, November 8, 2009
Java
                           class CalculadorDeMDC {
                             public int calcula(int a, int b) {
                               if (b == 0)
                                 return a;
                               else
                                 return calcula(b, a % b);
                             }
                           }

      CalculadorDeMDC calculador = new CalculadorDeMDC();
      System.out.println(calculador.calcula(28, 7));




Sunday, November 8, 2009
Ruby
                           class CalculadorDeMDC
                            def calcula(a, b)
                              if b == 0
                                a
                              else
                                calcula(b, a % b)
                              end
                            end
                           end
     calculador = CalculadorDeMDC.new
     puts calculador.calcula(28, 7)




Sunday, November 8, 2009
Um outro exemplo




Sunday, November 8, 2009
Java

                  public String[] paraMaiuscula(String[] palavras) {
                    String[] resposta = new String[palavras.length];
                    for (int i = 0; i < palavras.length; i++)
                      resposta[i] = palavras[i].toUpperCase();
                    return resposta;
                  }




Sunday, November 8, 2009
Ruby

      def paraMaiuscula(palavras)
       palavras.map { |palavra| palavra.upcase }
      end




Sunday, November 8, 2009
“Tornar as coisas
                     simples, fáceis;
                     e as complexas,
                        possíveis”
                           Filosofia Ruby




Sunday, November 8, 2009
1995
Sunday, November 8, 2009
2001




                           Dave Thomas




Sunday, November 8, 2009
RubyConf 2001


Sunday, November 8, 2009
http://www.ruby-lang.org




Sunday, November 8, 2009
Thomas Enebo   2006




Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
WTF?!?



Sunday, November 8, 2009
WTF?!?



Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
- Busca textual
                           - Autenticação
                           - Autorização
                           - Processamento
                           assíncrono
                           - Mensageria
                           - WebServices
                           ...




Sunday, November 8, 2009
http://rubyonrails.org/




Sunday, November 8, 2009
Pilares




Sunday, November 8, 2009
CoC
                           Convention over Configuration




Sunday, November 8, 2009
DRY
                           Don’t Repeat Yourself




Sunday, November 8, 2009
MVC
Sunday, November 8, 2009
Browser




Sunday, November 8, 2009
Browser


                           ApplicationController




Sunday, November 8, 2009
Browser


                           ApplicationController


                                Controller




Sunday, November 8, 2009
Browser


                           ApplicationController


                                Controller         Model




Sunday, November 8, 2009
Browser


                           ApplicationController


                                Controller         Model   DB




Sunday, November 8, 2009
Browser


                           ApplicationController


                                Controller         Model   DB




Sunday, November 8, 2009
Browser


                           ApplicationController


                                Controller         Model   DB




Sunday, November 8, 2009
Browser


                           ApplicationController


              View              Controller         Model   DB




Sunday, November 8, 2009
Sunday, November 8, 2009
Aplicação
                           Configurações
                           Schema evolution




                           Testes




Sunday, November 8, 2009
Controller




                           Model

                           View




Sunday, November 8, 2009
Testes
Sunday, November 8, 2009
Test All The Fucking Time!




              Testes
Sunday, November 8, 2009
TDD
                           Test Driven Development




                           BDD
                           Behavior Driven Development




Sunday, November 8, 2009
RSpec
           it "should require acceptance of terms of service" do
               @job.attributes = valid_job_attributes.except(:terms_accepted)
               @job.should_not be_valid
               @job.terms_accepted = false
               @job.should_not be_valid
               @job.terms_accepted = true
               @job.should be_valid
           end




Sunday, November 8, 2009
Cucumber
       Feature: Job listing
        In order to see the job offers in my area and start working
        As a user
        I want to see a list of jobs filtered by type and location

         Scenario: Listing when there is no jobs
          Given there is no jobs
          When I go to "java"
          Then I should see "Desculpe, não existem vagas disponíveis."
          And the "OndeTrabalhar.com" field should contain "java"




Sunday, November 8, 2009
Rails 3 =   +




Sunday, November 8, 2009
Yehuda Katz




Sunday, November 8, 2009
José Valim




Sunday, November 8, 2009
Por que não aprender Rails?




Sunday, November 8, 2009
Rails não escala!



Sunday, November 8, 2009
Hoje o Redeparede.com
                           serve 7,5 milhões de
                           acessos por mês
                           usando Ruby on Rails.
                           Rails escala, depende
                           de você!




Sunday, November 8, 2009
“Basecamp is now handling
                            more than 50 million Rails
                            requests per week. We're
                            peaking out at around 200
                                req/sec. Damn!”

                              “Basecamp's average
                             response time is 90ms
                            and 87% of all requests
                           finish in less than 200ms.”




Sunday, November 8, 2009
Não conheço ninguém que use Rails




Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
http://www.workingwithrails.com/high-profile-organisations




Sunday, November 8, 2009
Sunday, November 8, 2009
Martin Fowler


          41 projetos Ruby
          de 2006 a 2008 -
          a maioria usando
                Rails




Sunday, November 8, 2009
Ruby é mais produtivo?


                                                13




                                           5         5

                                     3
                                2
                           1                               1

                     Negativo   0   20%   50%   2X   5X   10X




Sunday, November 8, 2009
Ruby foi a escolha certa?


                                          não
                                           5




                                    sim
                                    36




Sunday, November 8, 2009
Sunday, November 8, 2009
“As empresas estão
       cheias de guardas,
         impedindo as
      pessoas de mudar!”




Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Regis Pires




                           IFPI - Piauí




Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
2
Sunday, November 8, 2009
3
Sunday, November 8, 2009
Formação Rails




            RR-71: Desenvolvimento Ágil para     RR-75: Ruby e Rails avançados:
              Web 2.0 com Ruby on Rails        lidando com problemas do dia a dia




Sunday, November 8, 2009
150



               113                        113




                 75
                                   72



                  38

                                         2009
                     0            2008
                            10
                           2007



Sunday, November 8, 2009
E daí?

Sunday, November 8, 2009
http://ondetrabalhar.com/ruby+ou+rails




Sunday, November 8, 2009
Sunday, November 8, 2009
Sunday, November 8, 2009
http://slideshare.net/caueguerra




Sunday, November 8, 2009

More Related Content

Similar to 2009, o ano do Ruby on Rails no Brasil - CaelumDay 2009

Enecomp 2009
Enecomp 2009Enecomp 2009
Enecomp 2009
Fabio Akita
 
Oxente on Rails 2009
Oxente on Rails 2009Oxente on Rails 2009
Oxente on Rails 2009
Fabio Akita
 
Tkinter Does Not Suck
Tkinter Does Not SuckTkinter Does Not Suck
Tkinter Does Not Suck
Richard Jones
 
Rhouse - Home automation is ruby ?
Rhouse - Home automation is ruby ?Rhouse - Home automation is ruby ?
Rhouse - Home automation is ruby ?
Fernand Galiana
 
Software livre e padrões abertos no desenvolvimento Web
Software livre e padrões abertos no desenvolvimento WebSoftware livre e padrões abertos no desenvolvimento Web
Software livre e padrões abertos no desenvolvimento Web
Felipe Ribeiro
 
Functional Java Script - Webtechcon 2009
Functional Java Script - Webtechcon 2009Functional Java Script - Webtechcon 2009
Functional Java Script - Webtechcon 2009
wolframkriesing
 
MacRuby - When objective-c and Ruby meet
MacRuby - When objective-c and Ruby meetMacRuby - When objective-c and Ruby meet
MacRuby - When objective-c and Ruby meet
Matt Aimonetti
 
Semcomp de São Carlos
Semcomp de São CarlosSemcomp de São Carlos
Semcomp de São Carlos
Fabio Akita
 
Accelerating Ruby with LLVM
Accelerating Ruby with LLVMAccelerating Ruby with LLVM
Accelerating Ruby with LLVM
evanphx
 
Latinoware Rails 2009
Latinoware Rails 2009Latinoware Rails 2009
Latinoware Rails 2009
Fabio Akita
 
JRubyConf 2009
JRubyConf 2009JRubyConf 2009
JRubyConf 2009
John Woodell
 
DjangoCon 2009 Keynote
DjangoCon 2009 KeynoteDjangoCon 2009 Keynote
DjangoCon 2009 Keynote
Ted Leung
 
Macruby - RubyConf Presentation 2010
Macruby - RubyConf Presentation 2010Macruby - RubyConf Presentation 2010
Macruby - RubyConf Presentation 2010
Matt Aimonetti
 
Everyday - mongodb
Everyday - mongodbEveryday - mongodb
Everyday - mongodb
elliando dias
 
Btree Nosql Oak
Btree Nosql OakBtree Nosql Oak
Btree Nosql Oak
Chris Anderson
 
Ruby On Rails Presentation Barcamp Antwerp.Key
Ruby On Rails Presentation Barcamp Antwerp.KeyRuby On Rails Presentation Barcamp Antwerp.Key
Ruby On Rails Presentation Barcamp Antwerp.Key
Bert Goethals
 
Cloudera Desktop
Cloudera DesktopCloudera Desktop
Cloudera Desktop
Hadoop User Group
 
Using Puppet and Cobbler to Automate Your Infrastructure
Using Puppet and Cobbler to Automate Your InfrastructureUsing Puppet and Cobbler to Automate Your Infrastructure
Using Puppet and Cobbler to Automate Your Infrastructure
Phil Windley
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
OpenFest team
 
Vagrant at LA Ruby
Vagrant at LA RubyVagrant at LA Ruby
Vagrant at LA Ruby
Mitchell Hashimoto
 

Similar to 2009, o ano do Ruby on Rails no Brasil - CaelumDay 2009 (20)

Enecomp 2009
Enecomp 2009Enecomp 2009
Enecomp 2009
 
Oxente on Rails 2009
Oxente on Rails 2009Oxente on Rails 2009
Oxente on Rails 2009
 
Tkinter Does Not Suck
Tkinter Does Not SuckTkinter Does Not Suck
Tkinter Does Not Suck
 
Rhouse - Home automation is ruby ?
Rhouse - Home automation is ruby ?Rhouse - Home automation is ruby ?
Rhouse - Home automation is ruby ?
 
Software livre e padrões abertos no desenvolvimento Web
Software livre e padrões abertos no desenvolvimento WebSoftware livre e padrões abertos no desenvolvimento Web
Software livre e padrões abertos no desenvolvimento Web
 
Functional Java Script - Webtechcon 2009
Functional Java Script - Webtechcon 2009Functional Java Script - Webtechcon 2009
Functional Java Script - Webtechcon 2009
 
MacRuby - When objective-c and Ruby meet
MacRuby - When objective-c and Ruby meetMacRuby - When objective-c and Ruby meet
MacRuby - When objective-c and Ruby meet
 
Semcomp de São Carlos
Semcomp de São CarlosSemcomp de São Carlos
Semcomp de São Carlos
 
Accelerating Ruby with LLVM
Accelerating Ruby with LLVMAccelerating Ruby with LLVM
Accelerating Ruby with LLVM
 
Latinoware Rails 2009
Latinoware Rails 2009Latinoware Rails 2009
Latinoware Rails 2009
 
JRubyConf 2009
JRubyConf 2009JRubyConf 2009
JRubyConf 2009
 
DjangoCon 2009 Keynote
DjangoCon 2009 KeynoteDjangoCon 2009 Keynote
DjangoCon 2009 Keynote
 
Macruby - RubyConf Presentation 2010
Macruby - RubyConf Presentation 2010Macruby - RubyConf Presentation 2010
Macruby - RubyConf Presentation 2010
 
Everyday - mongodb
Everyday - mongodbEveryday - mongodb
Everyday - mongodb
 
Btree Nosql Oak
Btree Nosql OakBtree Nosql Oak
Btree Nosql Oak
 
Ruby On Rails Presentation Barcamp Antwerp.Key
Ruby On Rails Presentation Barcamp Antwerp.KeyRuby On Rails Presentation Barcamp Antwerp.Key
Ruby On Rails Presentation Barcamp Antwerp.Key
 
Cloudera Desktop
Cloudera DesktopCloudera Desktop
Cloudera Desktop
 
Using Puppet and Cobbler to Automate Your Infrastructure
Using Puppet and Cobbler to Automate Your InfrastructureUsing Puppet and Cobbler to Automate Your Infrastructure
Using Puppet and Cobbler to Automate Your Infrastructure
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Vagrant at LA Ruby
Vagrant at LA RubyVagrant at LA Ruby
Vagrant at LA Ruby
 

Recently uploaded

Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Tosin Akinosho
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
Zilliz
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
CAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on BlockchainCAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on Blockchain
Claudio Di Ciccio
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
akankshawande
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfAI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
Techgropse Pvt.Ltd.
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
tolgahangng
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 

Recently uploaded (20)

Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
CAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on BlockchainCAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on Blockchain
 
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development ProvidersYour One-Stop Shop for Python Success: Top 10 US Python Development Providers
Your One-Stop Shop for Python Success: Top 10 US Python Development Providers
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfAI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
Serial Arm Control in Real Time Presentation
Serial Arm Control in Real Time PresentationSerial Arm Control in Real Time Presentation
Serial Arm Control in Real Time Presentation
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 

2009, o ano do Ruby on Rails no Brasil - CaelumDay 2009