SlideShare uma empresa Scribd logo
1 de 171
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
FILOSOFIA RUBY E RAILS
POR QUE ?
OBRIGADO
   @AKITAONRAILS PELO CONTEÚDO
DE VÁRIOS SLIDES DESTA APRESENTAÇÃO
O QUE EU
TENHO COM ISSO?
... 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
Entrevista Steve Jobs (momento entre 1:00 e
 1:01): http://itunes.apple.com/us/podcast/
 steve- jobs-at-d8-conference/id377953458
VOCÊ DEVE SE
COMPORTAR COMO
  UMA STARTUP
Ruby   1.8.7
Ruby   1.8.7
Ruby   1.9.2
Ruby        1.8.7
    Ruby        1.9.2
Ruby on Rails   2.3.8
Ruby        1.8.7
    Ruby        1.9.2
Ruby on Rails   2.3.8
Ruby on Rails   3.0.0
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 !!!
JAVA vs RAILS: http://www.youtube.com/watch?
                v=SsYKd37r26s
JRuby
Charles Nutter
JRuby
         Charles Nutter




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




               MacRuby
               L. Sansonetti
JRuby   1.5.X
JRuby     1.5.X
Rubinius    1.0
JRuby     1.5.X
Rubinius    1.0
Mac Ruby    0.6
JRuby      1.5.X
Rubinius     1.0
Mac Ruby     0.6
Iron Ruby    1.0
APLICANDO NA WEB
David Heinemeier Hansson
          “DHH”
David Heinemeier Hansson
          “DHH”




        2004
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 @post
  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 e, mais importante, facilitou
      a dificuldade que tinham em manutenção.
“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 e, mais importante, facilitou
    a dificuldade que tinham em manutenção. Eles
também 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
http://www.vimeo.com/1752667
Recapitulando
entregue rápido
entregue pouco, mas
      sempre
mas com qualidade
para manutenção
Rails e Ruby vão
ajudar MUITO mas
não fazem milagres
todas as start-ups que me procuram estão usando,
     eu quero descobrir qual é o “grande lance”.
o “grande lance” é que Rails é uma ferramenta
           para empreendedores.
MUITO OBRIGADO
CURSOS
	 egenial.com.br/cursorails
  egenial.com.br/imersaorubyonrails

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

Mais conteúdo relacionado

Destaque

Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Daniel Lopes
 
Seguranca em APP Rails
Seguranca em APP RailsSeguranca em APP Rails
Seguranca em APP RailsDaniel Lopes
 
BDD e TDD (Café Ágil)
BDD e TDD (Café Ágil)BDD e TDD (Café Ágil)
BDD e TDD (Café Ágil)Daniel Lopes
 
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Daniel Lopes
 
Frontline - Rails3.1
Frontline - Rails3.1Frontline - Rails3.1
Frontline - Rails3.1Daniel Lopes
 
Steak (Oxente Rails)
Steak (Oxente Rails)Steak (Oxente Rails)
Steak (Oxente Rails)Daniel Lopes
 
Adobe Air e HTML (FlexForKids)
Adobe Air e HTML (FlexForKids)Adobe Air e HTML (FlexForKids)
Adobe Air e HTML (FlexForKids)Daniel Lopes
 
Steak (Ruby on Rio)
Steak (Ruby on Rio)Steak (Ruby on Rio)
Steak (Ruby on Rio)Daniel Lopes
 

Destaque (8)

Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)
 
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)
 
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
 
Frontline - Rails3.1
Frontline - Rails3.1Frontline - Rails3.1
Frontline - Rails3.1
 
Steak (Oxente Rails)
Steak (Oxente Rails)Steak (Oxente Rails)
Steak (Oxente Rails)
 
Adobe Air e HTML (FlexForKids)
Adobe Air e HTML (FlexForKids)Adobe Air e HTML (FlexForKids)
Adobe Air e HTML (FlexForKids)
 
Steak (Ruby on Rio)
Steak (Ruby on Rio)Steak (Ruby on Rio)
Steak (Ruby on Rio)
 

Semelhante a Filosofia Ruby e Rails em 40 linhas

Fisl 11 - Ecossistema Ruby on Rails
Fisl 11 - Ecossistema Ruby on RailsFisl 11 - Ecossistema Ruby on Rails
Fisl 11 - Ecossistema Ruby on RailsFabio Akita
 
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/01Douglas Roeder
 
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 MongoDBAri Stopassola Junior
 
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 UVAThiago Cifani
 
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
 
Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009Caue Guerra
 
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
 
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 Railsismaelstahelin
 
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 ZabbixAndré Déo
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito CertoRavan Scafi
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemRodrigo Valerio
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Emerson Macedo
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSEmerson Macedo
 
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 JVMRodrigo Zaccara
 
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_UTFPRAlessandro Dias
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JSRodrigo Urubatan
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 

Semelhante a Filosofia Ruby e Rails em 40 linhas (20)

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 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
 
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
 
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)
 
Rails - EXATEC2009
Rails - EXATEC2009Rails - EXATEC2009
Rails - EXATEC2009
 
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 )
 
Carreira php
Carreira phpCarreira php
Carreira php
 
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
 
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
 
APIs do Jeito Certo
APIs do Jeito CertoAPIs do Jeito Certo
APIs do Jeito Certo
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvem
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
 
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
 
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
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 

Filosofia Ruby e Rails em 40 linhas

  • 4. software + design areacriacoes.com.br
  • 9. ENG. DE SOFTWARE CENTRADA EM MÉTODOS ÁGEIS http://bit.ly/unapos
  • 12. OBRIGADO @AKITAONRAILS PELO CONTEÚDO DE VÁRIOS SLIDES DESTA APRESENTAÇÃO
  • 13. O QUE EU TENHO COM ISSO?
  • 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. Entrevista Steve Jobs (momento entre 1:00 e 1:01): http://itunes.apple.com/us/podcast/ steve- jobs-at-d8-conference/id377953458
  • 18. VOCÊ DEVE SE COMPORTAR COMO UMA STARTUP
  • 19.
  • 20. Ruby 1.8.7
  • 21. Ruby 1.8.7 Ruby 1.9.2
  • 22. Ruby 1.8.7 Ruby 1.9.2 Ruby on Rails 2.3.8
  • 23. Ruby 1.8.7 Ruby 1.9.2 Ruby on Rails 2.3.8 Ruby on Rails 3.0.0
  • 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.
  • 37. 2004
  • 38. “Eu sempre soube que Smalltalk substituiria Java. Só não sabia que isso se chamaria Ruby.” Kent Beck, Criador do "Extreme Programming" e "TDD"
  • 40.
  • 41. JAVA vs RAILS: http://www.youtube.com/watch? v=SsYKd37r26s
  • 42.
  • 43.
  • 45. JRuby Charles Nutter MacRuby L. Sansonetti
  • 46. JQuery/Rails JRuby Yehuda Katz Charles Nutter MacRuby L. Sansonetti
  • 47.
  • 48.
  • 49. JRuby 1.5.X
  • 50. JRuby 1.5.X Rubinius 1.0
  • 51. JRuby 1.5.X Rubinius 1.0 Mac Ruby 0.6
  • 52. JRuby 1.5.X Rubinius 1.0 Mac Ruby 0.6 Iron Ruby 1.0
  • 54.
  • 55.
  • 57. David Heinemeier Hansson “DHH” 2004
  • 58.
  • 59.
  • 60.
  • 62. código gerando código convention over configuration
  • 63. código gerando código convention over configuration don’t repeat your self
  • 64. código gerando código convention over configuration don’t repeat your self desenvolvimento ágil
  • 66.
  • 69. recursos restful Unicode, TimeZone, i18n Segurança (XSS, XSRF, Injection)
  • 70.
  • 71. 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
  • 72. 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
  • 73. 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
  • 74. 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
  • 75. 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
  • 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.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89. 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
  • 90. 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 %>
  • 91. 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 @post end def update end def destroy end end
  • 93.
  • 94.
  • 95.
  • 96.
  • 98.
  • 99. Eles servem mais de 23 milhões de visitantes/mês.
  • 100. 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
  • 101. 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 e, mais importante, facilitou a dificuldade que tinham em manutenção.
  • 102. “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 e, mais importante, facilitou a dificuldade que tinham em manutenção. Eles também 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
  • 104.
  • 105. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 106. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 107. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 108. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 109.
  • 110.
  • 111. 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
  • 113.
  • 114. DEPLOY
  • 115.
  • 116. 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
  • 117.
  • 118. TESTES
  • 119.
  • 120. RSpec Steak Cucumber Test::Unit Minitest Bacon Should Factory Girl Fabrication Machinist Mocha RR
  • 121. 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
  • 122. 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
  • 123. 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
  • 131.
  • 132. MITOS
  • 133.
  • 137.
  • 138. Home 331 ms Total 5.45 ms http://railsmg.org/meetings/1
  • 139.
  • 141.
  • 142. 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
  • 143. “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
  • 144. RAILS é a SALVAÇÃO
  • 145.
  • 146.
  • 147.
  • 149.
  • 150.
  • 151.
  • 152.
  • 153.
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 164. mas com qualidade para manutenção
  • 165. Rails e Ruby vão ajudar MUITO mas não fazem milagres
  • 166. todas as start-ups que me procuram estão usando, eu quero descobrir qual é o “grande lance”.
  • 167. o “grande lance” é que Rails é uma ferramenta para empreendedores.
  • 168.
  • 169.
  • 171. CURSOS egenial.com.br/cursorails egenial.com.br/imersaorubyonrails CONTATOS blog.areacriacoes.com.br twitter @danielvlopes danielvlopes@areacriacoes.com.br