SlideShare uma empresa Scribd logo
1 de 170
Baixar para ler offline
FILOSOFIA RUBY E RAILS
@danielvlopes
areacriacoes.com.br
software + design




           areacriacoes.com.br
cifrascash.com
egenial.com.br/cursos
egenial.com.br/cursos
egenial.com.br/cursos
ENG. DE SOFTWARE
CENTRADA EM MÉTODOS ÁGEIS
      http://bit.ly/unapos
SLIDESHARE.NET/DANIELVLOPES
FILOSOFIA RUBY E RAILS
•   Código

•   Cultura

•   Criatividade
POR QUE ME INTERESSA?
... um aclamado instrutor aplicando um curso descobriu
     que um de seus pupilos era um venture capitalist.
Quando questionado sobre o motivo de estar em uma
turma de “Ruby on Rails” ... , ele respondeu simplesmente:
todas as start-ups que me procuram estão usando,
     eu quero descobrir qual é o “grande lance”.




                           Mark Gardner http://bit.ly/railsecosystem
Investidores estão pressionando startups para usarem Ruby.
"É mais rápido, então se você pode encurtar a entrega em um
                mês, porque não usar Ruby?"




                            Matz Ruby World Keynote http://bit.ly/bH4hA2
Investidores estão pressionando startups para usarem Ruby.
"É mais rápido, então se você pode encurtar a entrega em um
                mês, porque não usar Ruby?"



             Mais de 60% dos VCs usam Ruby
                 para criar seus sistemas




                            Matz Ruby World Keynote http://bit.ly/bH4hA2
POR QUE STARTUPS?
VOCÊ DEVE SE
COMPORTAR COMO
  UMA STARTUP
Yukihiro Matsumoto
 (criador do Ruby)
“Se você terminar seu trabalho
rápido e de forma divertida, isso
          não é bom?”



                 Matz http://www.artima.com/intv/ruby3.html
“Tornar as coisas simples fáceis e as
   coisas complexas possíveis”
•   100% orientada a objetos

•   Linguagem dinâmica

•   Esperados 4 milhões até 2013

•   FREE e Open Source

•   As vezes chamada de “scripting” language
Eu inventei o termo
“Orientação a
Objetos” e posso
dizer que não era C++
que eu tinha em
mente.
Dave Thomas
Dave Thomas   2001
2004
“Eu sempre soube que Smalltalk substituiria
Java. Só não sabia que isso se chamaria Ruby.”




                   Kent Beck, Criador do "Extreme Programming" e "TDD"
FICAMOS EMPOLGADOS !!!
Vídeo Java VS Rails
JRuby
Charles Nutter
JRuby
         Charles Nutter




MacRuby
L. Sansonetti
JQuery/Rails             JRuby
 Yehuda Katz            Charles Nutter




               MacRuby
               L. Sansonetti
Ruby   1.8.7
Ruby   1.8.7
Ruby   1.9.2
JRuby   1.5.X
JRuby     1.5.X
Rubinius    1.1
JRuby     1.5.X
Rubinius    1.1
Mac Ruby    0.6
JRuby      1.5.X
Rubinius     1.1
Mac Ruby     0.6
Iron Ruby    1.0
RUBY NA WEB
RUBY ON RAILS
JASON FRIED
DAVID
HANSSON
DHH
DHH




      2004
Vídeo 37Signals
código gerando código
código gerando código

convention over configuration
código gerando código

convention over configuration

    don’t repeat your self
código gerando código

convention over configuration

    don’t repeat your self

    desenvolvimento ágil
EXTREME PROGRAMMING
recursos restful
recursos restful


Unicode, TimeZone, i18n
recursos restful


Unicode, TimeZone, i18n


      Segurança
 (XSS, XSRF, Injection)
Templates                           ERB, HAML


                       HTTP Basic, HTTP Digest,
Autenticação
                                        Devise

                  MongoDB, CouchDB, MySQL,
Bancos de Dados
                         PostgreSQL, Oracle

                    ActiveRecord, DataMapper,
ORM’s
                               MongoMapper


Javascript        Prototype, jQuery, SproutCore


                       Apache 2, NginX, Lighty,
Web Servers
                                    Litespeed
Templates                           ERB, HAML


                       HTTP Basic, HTTP Digest,
Autenticação
                                        Devise

                  MongoDB, CouchDB, MySQL,
Bancos de Dados
                         PostgreSQL, Oracle

                    ActiveRecord, DataMapper,
ORM’s
                               MongoMapper


Javascript        Prototype, jQuery, SproutCore


                       Apache 2, NginX, Lighty,
Web Servers
                                    Litespeed
Templates                           ERB, HAML


                       HTTP Basic, HTTP Digest,
Autenticação
                                        Devise

                  MongoDB, CouchDB, MySQL,
Bancos de Dados
                         PostgreSQL, Oracle

                    ActiveRecord, DataMapper,
ORM’s
                               MongoMapper


Javascript        Prototype, jQuery, SproutCore


                       Apache 2, NginX, Lighty,
Web Servers
                                    Litespeed
Templates                           ERB, HAML


                       HTTP Basic, HTTP Digest,
Autenticação
                                        Devise

                  MongoDB, CouchDB, MySQL,
Bancos de Dados
                         PostgreSQL, Oracle

                    ActiveRecord, DataMapper,
ORM’s
                               MongoMapper


Javascript        Prototype, jQuery, SproutCore


                       Apache 2, NginX, Lighty,
Web Servers
                                    Litespeed
Templates                           ERB, HAML


                       HTTP Basic, HTTP Digest,
Autenticação
                                        Devise

                  MongoDB, CouchDB, MySQL,
Bancos de Dados
                         PostgreSQL, Oracle

                    ActiveRecord, DataMapper,
ORM’s
                               MongoMapper


Javascript        Prototype, jQuery, SproutCore


                       Apache 2, NginX, Lighty,
Web Servers
                                    Litespeed
Templates                           ERB, HAML


                       HTTP Basic, HTTP Digest,
Autenticação
                                        Devise

                  MongoDB, CouchDB, MySQL,
Bancos de Dados
                         PostgreSQL, Oracle

                    ActiveRecord, DataMapper,
ORM’s
                               MongoMapper


Javascript        Prototype, jQuery, SproutCore


                       Apache 2, NginX, Lighty,
Web Servers
                                    Litespeed
class Post < ActiveRecord::Base
  # ASSOCIATIONS
                                                                           model
  has_and_belongs_to_many :categories
  belongs_to :author
  has_many :comments, :dependent => :destroy

  # VALIDATIONS
  validates_presence_of     :title, :body, :author, :slug, :published_at
  validates_uniqueness_of   :slug
  validates_inclusion_of    :draft, :in => [true, false]
  validates_associated      :author

  # SCOPES (custom queries)
  default_scope :order => 'published_at DESC'
  scope :published, lambda { where(:draft => false) }

  # CALLBACKS
  before_validation :generate_slug

protected
  def generate_slug
    self.slug = title unless slug.present?
    self.slug = slug.parameterize
  end
end
views
<%= form_for [ post, comment ], :remote => true do |f| %>
  <%= error_messages_for comment %>

  <div class="field">
    <%= f.label :author %><br />
    <%= f.text_field :author %>
  </div>

  <div class="field">
    <%= f.label :url %><br />
    <%= f.text_field :url %>
  </div>

  <div class="field">
    <%= f.label :body %><br />
    <%= f.text_area :body, :rows => 10, :cols => 90 %>
  </div>

  <%= render "submit_or_cancel" %>
<% end %>
class Admin::PostCategoriesController < ApplicationController
  def index
    @categories = PostCategory.all
                                                                              controller
    respond_with @categories
  end

  def show
    @category = PostCategory.find(params[:id])
    respond_with @category
  end

  def new
    @category = PostCategory.new
    respond_with @category
  end

  def edit
    @category = PostCategory.find(params[:id])
  end

  def create
    @category = PostCategory.new(params[:post_category])
    flash[:notice] = 'Category was successfully created.' if @category.save
    respond_with @category
  end

  def update
  end

  def destroy
  end
end
CLEAN CODE
190
VS

40
Eles servem mais de 23 milhões de visitantes/mês.
Eles servem mais de 23 milhões de visitantes/mês.
  A conversão resultou em 20 mil linhas de Ruby
        em vez de 125 mil linhas de Java
Eles servem mais de 23 milhões de visitantes/mês.
  A conversão resultou em 20 mil linhas de Ruby
        em vez de 125 mil linhas de Java
    mais importante, facilitou a dificuldade que
            tinham em manutenção.
A conversão resultou em 20 mil linhas de Ruby
      em vez de 125 mil linhas de Java
 mais importante, facilitou a dificuldade que
         tinham em manutenção.
  Eles finalizaram a reescrita do sistema em
  apenas 3 meses com 4 desenvolvedores.
mais importante, facilitou a dificuldade que
        tinham em manutenção.
 Eles finalizaram a reescrita do sistema em
 apenas 3 meses com 4 desenvolvedores.
   Uma vez completo e otimizado, o site
   deles agora é mais rápido que antes




               http://www.railsonwave.com/railsonwave/2008/6/4/yellowpages-com-migrates-to-rails
ECOSSISTEMA
Repositórios            Github e Codebase



Integração Contínua   Hudson, Cruise, CI Joe


                              Chef, Puppet,
Deploy
                                Capistrano

                           NewRelic, Scout,
Monitoramento
                            BackupMyApp
Repositórios            Github e Codebase



Integração Contínua   Hudson, Cruise, CI Joe


                              Chef, Puppet,
Deploy
                                Capistrano

                           NewRelic, Scout,
Monitoramento
                            BackupMyApp
Repositórios            Github e Codebase



Integração Contínua   Hudson, Cruise, CI Joe


                              Chef, Puppet,
Deploy
                                Capistrano

                           NewRelic, Scout,
Monitoramento
                            BackupMyApp
Repositórios            Github e Codebase



Integração Contínua   Hudson, Cruise, CI Joe


                              Chef, Puppet,
Deploy
                                Capistrano

                           NewRelic, Scout,
Monitoramento
                            BackupMyApp
source 'http://rubygems.org'                    Gemfile
gem   'rails', '3.0.0.rc'
gem   'devise', '1.1.1'
gem   'paperclip', '2.3.3'
gem   'menu_builder', '0.3.3'
gem   'RedCloth', '4.2.3'
gem   'will_paginate', '3.0.pre2'
gem   'reverse_captcha', '0.0.1'
gem   'capistrano', '2.5.19'
gem   'mysql', '2.8.1'

group   :development do
  gem   'sqlite3-ruby', :require => 'sqlite3'
  gem   "rspec", ">=2.0.0.beta.11"
  gem   "rspec-rails", ">=2.0.0.beta.11"
  gem   "ruby-debug"
end

group   :test do
  gem   'capybara'
  gem   'database_cleaner'
  gem   'steak', '>= 0.4.0.beta.1'
  gem   'factory_girl_rails'
end
COMO ACHAR ?
DEPLOY
set :application, "producer"
set :ip_address , "208.88.125.20"
                                                              deploy.rb
# GIT SETTINGS
set :scm, :git
set :repository, "git@github.com:danielvlopes/producer.git"
set :branch, "master"
set :deploy_via, :remote_cache

# SSH SETTINGS
set :user , "rails"
set :deploy_to, "/home/rails/#{application}"
set :shared_directory, "#{deploy_to}/shared"
set :use_sudo, false
set :group_writable, false
default_run_options[:pty] = true

# ROLES
role :app, ip_address
role :web, ip_address
role :db, ip_address, :primary => true

# HOOKS
after 'deploy:setup', 'db:setup'

after 'deploy:update_code' do
  db.symlink
  assets.symlink
end
TESTES
RSpec Steak
 Cucumber        Test::Unit
Minitest     Bacon   Should
 Factory Girl    Fabrication
 Machinist      Mocha    RR
Cucumber
Feature: Authenticate
  In order to see my previous links
  As a user
  I want to be able to create an account

  Scenario: Creating a new account
    Given I am not authenticated
    When I go to register
    And I fill in the following:
      | Email                 | testing@man.net |
      | Password              | 123456          |
      | Password confirmation | 123456          |
    And I press "Sign up"
    Then I should see "You have signed up successfully"




       http://github.com/danielvlopes/buggy/blob/master/features/authenticate.feature
feature "Catalog", %q{                                       Steak
  In order to display a catalog in devices
  As registered publisher
  I want to manage a catalog.
} do

  background do
    ensure_not_logged_in
    @owner = Factory :app, :name => "1Password"
  end

  scenario "Create catalog for 1Password", :js => true do
    visit new_catalog_page_for(@owner)

    select "shelf/metal", :from => "Theme"
    fill_in "Title",      :with => "Appextras"

    drag_to_catalog available_app
    click "Create Catalog"

    should_have_notice "Catalog was successfully created."
  end
describe Guest
  before do
                 do
                                                                       Minispec
    @room    =   Room.new("Room 35", Type::Master.new)
    @hosting =   Hosting.new(@room, 5)
    @guest   =   Guest.new("Daniel Lopes", @hosting)
  end

  it "should have a name" do
    assert_equal "Daniel Lopes", @guest.name
  end

  describe "when print the invoice" do
    it "should have the guest name" do
      assert_match /Daniel Lopes/, @guest.invoice
    end

    it "should have the room name" do
      assert_match /Room 35/, @guest.invoice
    end

    it "should have the total amount" do
      assert_match /Valor total: 1000/, @guest.invoice
    end

    it "should have the discount points earned with that hosting" do
      assert_match /Você ganhou 6 ponto(s)/, @guest.invoice
    end
  end
end
COMUNIDADE
guides.rubyonrails.org
peepcode.com
railscasts.com
akitaonrails.com
egenial.com.br/cursos
github.com
MITOS
Ruby é Lento
http://programmingzen.com/?s=benchmark
slideshare.net
Home 331 ms
   Total 5.45 ms
http://railsmg.org/meetings/1
Rails NÃO ESCALA
Friendster foi escrito em Java e
mudaram para PHP.

MySpace foi escrito em ColdFusion e
mudaram ASP.NET.

Quando as pessoas caem em problemas
de escalabilidade, normalmente acham
que a linguagem é o problema, mas eu
acho que isso raramente é a realidade.


http://www.akitaonrails.com/2008/6/17/chatting-with-
blaine-cook-twitter
“O The New York Times usou Ruby on Rails para agregar,
analizar 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
RAILS é a SALVAÇÃO
VAMOS SER AGILE
http://www.vimeo.com/1752667
Recapitulando
entregue rápido
entregue rápido
entregue sempre
entregue rápido
entregue sempre
 com qualidade
SEJA SEMPRE
PROFISSIONAL
Vídeo Uncle Bob
Aprender Ruby e Rails
  vão te tornar um
 profissional melhor
CURSOS
	 egenial.com.br/cursorails
  egenial.com.br/imersaorubyonrails

CONTATOS
	 blog.areacriacoes.com.br
	 twitter @danielvlopes
  danielvlopes@areacriacoes.com.br

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Javascript nos dias de hoje
Javascript nos dias de hojeJavascript nos dias de hoje
Javascript nos dias de hoje
 
Node.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizarNode.js: 5 razões para começar a utilizar
Node.js: 5 razões para começar a utilizar
 
SEA Rails na pratica
SEA Rails na praticaSEA Rails na pratica
SEA Rails na pratica
 
MongoDB: Prós, Contras e Showcases.
MongoDB: Prós, Contras e Showcases.MongoDB: Prós, Contras e Showcases.
MongoDB: Prós, Contras e Showcases.
 
Javascript por debaixo dos panos
Javascript por debaixo dos panosJavascript por debaixo dos panos
Javascript por debaixo dos panos
 
Node.js for Noobs
Node.js for NoobsNode.js for Noobs
Node.js for Noobs
 
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
 
Rails nas Nuvens
Rails nas NuvensRails nas Nuvens
Rails nas Nuvens
 
Conhecendo mundo Node.js
Conhecendo mundo Node.jsConhecendo mundo Node.js
Conhecendo mundo Node.js
 
Clojure
ClojureClojure
Clojure
 
JavaScript Applications
JavaScript ApplicationsJavaScript Applications
JavaScript Applications
 
Jruby, o melhor de 2 mundos (MacGyver + ChuckNorris)
Jruby, o melhor de 2 mundos (MacGyver + ChuckNorris)Jruby, o melhor de 2 mundos (MacGyver + ChuckNorris)
Jruby, o melhor de 2 mundos (MacGyver + ChuckNorris)
 
PHP + Node.js
PHP + Node.jsPHP + Node.js
PHP + Node.js
 
Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
Clusterização de Aplicações PHP
Clusterização de Aplicações PHPClusterização de Aplicações PHP
Clusterização de Aplicações PHP
 
Abordagem geral - Ruby on rails
Abordagem geral - Ruby on railsAbordagem geral - Ruby on rails
Abordagem geral - Ruby on rails
 
AspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performanceAspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performance
 
Palestra Fatec
Palestra FatecPalestra Fatec
Palestra Fatec
 
Desenvolvemos para web?
Desenvolvemos para web?Desenvolvemos para web?
Desenvolvemos para web?
 
Projeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecordProjeto Octopus - Database Sharding para ActiveRecord
Projeto Octopus - Database Sharding para ActiveRecord
 

Semelhante a Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)
Joao Lucas Santana
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
João Moura
 
Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009
Caue Guerra
 
Fisl banco de dados no sql de código aberto
Fisl   banco de dados no sql de código abertoFisl   banco de dados no sql de código aberto
Fisl banco de dados no sql de código aberto
Suissa
 

Semelhante a Filosofia Ruby e Rails (UFOP e Inforuso 2010) (20)

Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
 
Fisl 11 - Ecossistema Ruby on Rails
Fisl 11 - Ecossistema Ruby on RailsFisl 11 - Ecossistema Ruby on Rails
Fisl 11 - Ecossistema Ruby on Rails
 
Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01
 
Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)Desenvolvimento web com Ruby on Rails (parte 1)
Desenvolvimento web com Ruby on Rails (parte 1)
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Carreira php
Carreira phpCarreira php
Carreira php
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
Esta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com RailsEsta começando a programar para a web? Então começe com Rails
Esta começando a programar para a web? Então começe com Rails
 
Entregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVMEntregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVM
 
Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009
 
Bigdata
BigdataBigdata
Bigdata
 
Light Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.jsLight Talk: Introdução sobre Node.js
Light Talk: Introdução sobre Node.js
 
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariaisRuby on Rails: um estudo de viabilidade em ambientes empresariais
Ruby on Rails: um estudo de viabilidade em ambientes empresariais
 
Tecnologias para desenvolvimento ágil de aplicações Web-Isemanatsi_UTFPR
Tecnologias para desenvolvimento ágil de aplicações Web-Isemanatsi_UTFPRTecnologias para desenvolvimento ágil de aplicações Web-Isemanatsi_UTFPR
Tecnologias para desenvolvimento ágil de aplicações Web-Isemanatsi_UTFPR
 
Fisl banco de dados no sql de código aberto
Fisl   banco de dados no sql de código abertoFisl   banco de dados no sql de código aberto
Fisl banco de dados no sql de código aberto
 
Apache e Java
Apache e JavaApache e Java
Apache e Java
 
Rails na pratica
Rails na praticaRails na pratica
Rails na pratica
 
Ruby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e PráticaRuby on Rails - Filosofia e Prática
Ruby on Rails - Filosofia e Prática
 
Monitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com ZabbixMonitoramento de Aplicações Web Modernas com Zabbix
Monitoramento de Aplicações Web Modernas com Zabbix
 

Mais de Daniel Lopes

BDD e TDD (Café Ágil)
BDD e TDD (Café Ágil)BDD e TDD (Café Ágil)
BDD e TDD (Café Ágil)
Daniel Lopes
 
Steak (Oxente Rails)
Steak (Oxente Rails)Steak (Oxente Rails)
Steak (Oxente Rails)
Daniel Lopes
 

Mais de Daniel Lopes (9)

Seguranca em APP Rails
Seguranca em APP RailsSeguranca em APP Rails
Seguranca em APP Rails
 
BDD e TDD (Café Ágil)
BDD e TDD (Café Ágil)BDD e TDD (Café Ágil)
BDD e TDD (Café Ágil)
 
Steak (Ruby on Rio)
Steak (Ruby on Rio)Steak (Ruby on Rio)
Steak (Ruby on Rio)
 
Adobe Air e HTML (FlexForKids)
Adobe Air e HTML (FlexForKids)Adobe Air e HTML (FlexForKids)
Adobe Air e HTML (FlexForKids)
 
Steak (Oxente Rails)
Steak (Oxente Rails)Steak (Oxente Rails)
Steak (Oxente Rails)
 
Mercado (Pós UNA)
Mercado (Pós UNA)Mercado (Pós UNA)
Mercado (Pós UNA)
 
Frontend (RailsMG)
Frontend (RailsMG)Frontend (RailsMG)
Frontend (RailsMG)
 
Ruby on Rails - uma mentalidade (Café com Tom)
Ruby on Rails - uma mentalidade (Café com Tom)Ruby on Rails - uma mentalidade (Café com Tom)
Ruby on Rails - uma mentalidade (Café com Tom)
 
Frontend (Rails For Kids)
Frontend (Rails For Kids)Frontend (Rails For Kids)
Frontend (Rails For Kids)
 

Filosofia Ruby e Rails (UFOP e Inforuso 2010)

  • 4. software + design areacriacoes.com.br
  • 9. ENG. DE SOFTWARE CENTRADA EM MÉTODOS ÁGEIS http://bit.ly/unapos
  • 12. Código • Cultura • Criatividade
  • 13. POR QUE ME INTERESSA?
  • 14. ... um aclamado instrutor aplicando um curso descobriu que um de seus pupilos era um venture capitalist.
  • 15. Quando questionado sobre o motivo de estar em uma turma de “Ruby on Rails” ... , ele respondeu simplesmente:
  • 16. todas as start-ups que me procuram estão usando, eu quero descobrir qual é o “grande lance”. Mark Gardner http://bit.ly/railsecosystem
  • 17. Investidores estão pressionando startups para usarem Ruby. "É mais rápido, então se você pode encurtar a entrega em um mês, porque não usar Ruby?" Matz Ruby World Keynote http://bit.ly/bH4hA2
  • 18. Investidores estão pressionando startups para usarem Ruby. "É mais rápido, então se você pode encurtar a entrega em um mês, porque não usar Ruby?" Mais de 60% dos VCs usam Ruby para criar seus sistemas Matz Ruby World Keynote http://bit.ly/bH4hA2
  • 20.
  • 21.
  • 22. VOCÊ DEVE SE COMPORTAR COMO UMA STARTUP
  • 23.
  • 24.
  • 25.
  • 27. “Se você terminar seu trabalho rápido e de forma divertida, isso não é bom?” Matz http://www.artima.com/intv/ruby3.html
  • 28. “Tornar as coisas simples fáceis e as coisas complexas possíveis”
  • 29. 100% orientada a objetos • Linguagem dinâmica • Esperados 4 milhões até 2013 • FREE e Open Source • As vezes chamada de “scripting” language
  • 30.
  • 31. Eu inventei o termo “Orientação a Objetos” e posso dizer que não era C++ que eu tinha em mente.
  • 32.
  • 34. Dave Thomas 2001
  • 35.
  • 36. 2004
  • 37. “Eu sempre soube que Smalltalk substituiria Java. Só não sabia que isso se chamaria Ruby.” Kent Beck, Criador do "Extreme Programming" e "TDD"
  • 39.
  • 40. Vídeo Java VS Rails
  • 41.
  • 42.
  • 44. JRuby Charles Nutter MacRuby L. Sansonetti
  • 45. JQuery/Rails JRuby Yehuda Katz Charles Nutter MacRuby L. Sansonetti
  • 46.
  • 47.
  • 48. Ruby 1.8.7
  • 49. Ruby 1.8.7 Ruby 1.9.2
  • 50.
  • 51. JRuby 1.5.X
  • 52. JRuby 1.5.X Rubinius 1.1
  • 53. JRuby 1.5.X Rubinius 1.1 Mac Ruby 0.6
  • 54. JRuby 1.5.X Rubinius 1.1 Mac Ruby 0.6 Iron Ruby 1.0
  • 59.
  • 60.
  • 61. DHH
  • 62. DHH 2004
  • 63.
  • 65.
  • 67. código gerando código convention over configuration
  • 68. código gerando código convention over configuration don’t repeat your self
  • 69. código gerando código convention over configuration don’t repeat your self desenvolvimento ágil
  • 71.
  • 74. recursos restful Unicode, TimeZone, i18n Segurança (XSS, XSRF, Injection)
  • 75.
  • 76. Templates ERB, HAML HTTP Basic, HTTP Digest, Autenticação Devise MongoDB, CouchDB, MySQL, Bancos de Dados PostgreSQL, Oracle ActiveRecord, DataMapper, ORM’s MongoMapper Javascript Prototype, jQuery, SproutCore Apache 2, NginX, Lighty, Web Servers Litespeed
  • 77. Templates ERB, HAML HTTP Basic, HTTP Digest, Autenticação Devise MongoDB, CouchDB, MySQL, Bancos de Dados PostgreSQL, Oracle ActiveRecord, DataMapper, ORM’s MongoMapper Javascript Prototype, jQuery, SproutCore Apache 2, NginX, Lighty, Web Servers Litespeed
  • 78. Templates ERB, HAML HTTP Basic, HTTP Digest, Autenticação Devise MongoDB, CouchDB, MySQL, Bancos de Dados PostgreSQL, Oracle ActiveRecord, DataMapper, ORM’s MongoMapper Javascript Prototype, jQuery, SproutCore Apache 2, NginX, Lighty, Web Servers Litespeed
  • 79. Templates ERB, HAML HTTP Basic, HTTP Digest, Autenticação Devise MongoDB, CouchDB, MySQL, Bancos de Dados PostgreSQL, Oracle ActiveRecord, DataMapper, ORM’s MongoMapper Javascript Prototype, jQuery, SproutCore Apache 2, NginX, Lighty, Web Servers Litespeed
  • 80. Templates ERB, HAML HTTP Basic, HTTP Digest, Autenticação Devise MongoDB, CouchDB, MySQL, Bancos de Dados PostgreSQL, Oracle ActiveRecord, DataMapper, ORM’s MongoMapper Javascript Prototype, jQuery, SproutCore Apache 2, NginX, Lighty, Web Servers Litespeed
  • 81. Templates ERB, HAML HTTP Basic, HTTP Digest, Autenticação Devise MongoDB, CouchDB, MySQL, Bancos de Dados PostgreSQL, Oracle ActiveRecord, DataMapper, ORM’s MongoMapper Javascript Prototype, jQuery, SproutCore Apache 2, NginX, Lighty, Web Servers Litespeed
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94. class Post < ActiveRecord::Base # ASSOCIATIONS model has_and_belongs_to_many :categories belongs_to :author has_many :comments, :dependent => :destroy # VALIDATIONS validates_presence_of :title, :body, :author, :slug, :published_at validates_uniqueness_of :slug validates_inclusion_of :draft, :in => [true, false] validates_associated :author # SCOPES (custom queries) default_scope :order => 'published_at DESC' scope :published, lambda { where(:draft => false) } # CALLBACKS before_validation :generate_slug protected def generate_slug self.slug = title unless slug.present? self.slug = slug.parameterize end end
  • 95. views <%= form_for [ post, comment ], :remote => true do |f| %> <%= error_messages_for comment %> <div class="field"> <%= f.label :author %><br /> <%= f.text_field :author %> </div> <div class="field"> <%= f.label :url %><br /> <%= f.text_field :url %> </div> <div class="field"> <%= f.label :body %><br /> <%= f.text_area :body, :rows => 10, :cols => 90 %> </div> <%= render "submit_or_cancel" %> <% end %>
  • 96. class Admin::PostCategoriesController < ApplicationController def index @categories = PostCategory.all controller respond_with @categories end def show @category = PostCategory.find(params[:id]) respond_with @category end def new @category = PostCategory.new respond_with @category end def edit @category = PostCategory.find(params[:id]) end def create @category = PostCategory.new(params[:post_category]) flash[:notice] = 'Category was successfully created.' if @category.save respond_with @category end def update end def destroy end end
  • 98.
  • 99.
  • 100.
  • 101.
  • 103.
  • 104. Eles servem mais de 23 milhões de visitantes/mês.
  • 105. Eles servem mais de 23 milhões de visitantes/mês. A conversão resultou em 20 mil linhas de Ruby em vez de 125 mil linhas de Java
  • 106. Eles servem mais de 23 milhões de visitantes/mês. A conversão resultou em 20 mil linhas de Ruby em vez de 125 mil linhas de Java mais importante, facilitou a dificuldade que tinham em manutenção.
  • 107. A conversão resultou em 20 mil linhas de Ruby em vez de 125 mil linhas de Java mais importante, facilitou a dificuldade que tinham em manutenção. Eles finalizaram a reescrita do sistema em apenas 3 meses com 4 desenvolvedores.
  • 108. mais importante, facilitou a dificuldade que tinham em manutenção. Eles finalizaram a reescrita do sistema em apenas 3 meses com 4 desenvolvedores. Uma vez completo e otimizado, o site deles agora é mais rápido que antes http://www.railsonwave.com/railsonwave/2008/6/4/yellowpages-com-migrates-to-rails
  • 110.
  • 111. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 112. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 113. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 114. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 115.
  • 116.
  • 117. source 'http://rubygems.org' Gemfile gem 'rails', '3.0.0.rc' gem 'devise', '1.1.1' gem 'paperclip', '2.3.3' gem 'menu_builder', '0.3.3' gem 'RedCloth', '4.2.3' gem 'will_paginate', '3.0.pre2' gem 'reverse_captcha', '0.0.1' gem 'capistrano', '2.5.19' gem 'mysql', '2.8.1' group :development do gem 'sqlite3-ruby', :require => 'sqlite3' gem "rspec", ">=2.0.0.beta.11" gem "rspec-rails", ">=2.0.0.beta.11" gem "ruby-debug" end group :test do gem 'capybara' gem 'database_cleaner' gem 'steak', '>= 0.4.0.beta.1' gem 'factory_girl_rails' end
  • 119.
  • 120. DEPLOY
  • 121.
  • 122. set :application, "producer" set :ip_address , "208.88.125.20" deploy.rb # GIT SETTINGS set :scm, :git set :repository, "git@github.com:danielvlopes/producer.git" set :branch, "master" set :deploy_via, :remote_cache # SSH SETTINGS set :user , "rails" set :deploy_to, "/home/rails/#{application}" set :shared_directory, "#{deploy_to}/shared" set :use_sudo, false set :group_writable, false default_run_options[:pty] = true # ROLES role :app, ip_address role :web, ip_address role :db, ip_address, :primary => true # HOOKS after 'deploy:setup', 'db:setup' after 'deploy:update_code' do db.symlink assets.symlink end
  • 123. TESTES
  • 124.
  • 125. RSpec Steak Cucumber Test::Unit Minitest Bacon Should Factory Girl Fabrication Machinist Mocha RR
  • 126. Cucumber Feature: Authenticate In order to see my previous links As a user I want to be able to create an account Scenario: Creating a new account Given I am not authenticated When I go to register And I fill in the following: | Email | testing@man.net | | Password | 123456 | | Password confirmation | 123456 | And I press "Sign up" Then I should see "You have signed up successfully" http://github.com/danielvlopes/buggy/blob/master/features/authenticate.feature
  • 127. feature "Catalog", %q{ Steak In order to display a catalog in devices As registered publisher I want to manage a catalog. } do background do ensure_not_logged_in @owner = Factory :app, :name => "1Password" end scenario "Create catalog for 1Password", :js => true do visit new_catalog_page_for(@owner) select "shelf/metal", :from => "Theme" fill_in "Title", :with => "Appextras" drag_to_catalog available_app click "Create Catalog" should_have_notice "Catalog was successfully created." end
  • 128. describe Guest before do do Minispec @room = Room.new("Room 35", Type::Master.new) @hosting = Hosting.new(@room, 5) @guest = Guest.new("Daniel Lopes", @hosting) end it "should have a name" do assert_equal "Daniel Lopes", @guest.name end describe "when print the invoice" do it "should have the guest name" do assert_match /Daniel Lopes/, @guest.invoice end it "should have the room name" do assert_match /Room 35/, @guest.invoice end it "should have the total amount" do assert_match /Valor total: 1000/, @guest.invoice end it "should have the discount points earned with that hosting" do assert_match /Você ganhou 6 ponto(s)/, @guest.invoice end end end
  • 136.
  • 137. MITOS
  • 138.
  • 142.
  • 143. Home 331 ms Total 5.45 ms http://railsmg.org/meetings/1
  • 144.
  • 146.
  • 147. Friendster foi escrito em Java e mudaram para PHP. MySpace foi escrito em ColdFusion e mudaram ASP.NET. Quando as pessoas caem em problemas de escalabilidade, normalmente acham que a linguagem é o problema, mas eu acho que isso raramente é a realidade. http://www.akitaonrails.com/2008/6/17/chatting-with- blaine-cook-twitter
  • 148. “O The New York Times usou Ruby on Rails para agregar, analizar 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
  • 149. RAILS é a SALVAÇÃO
  • 150.
  • 151.
  • 152.
  • 153.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 168. Aprender Ruby e Rails vão te tornar um profissional melhor
  • 169.
  • 170. CURSOS egenial.com.br/cursorails egenial.com.br/imersaorubyonrails CONTATOS blog.areacriacoes.com.br twitter @danielvlopes danielvlopes@areacriacoes.com.br