SlideShare uma empresa Scribd logo
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?
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
VOCÊ DEVE SE
COMPORTAR COMO
  UMA STARTUP
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
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
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Eu inventei o termo
“Orientação a
Objetos” e posso
dizer que não era C++
que eu tinha em
mente.
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Dave Thomas
Dave Thomas   2001
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
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 !!!
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Vídeo Java VS Rails
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
JRuby
Charles Nutter
JRuby
         Charles Nutter




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




               MacRuby
               L. Sansonetti
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Ruby   1.8.7
Ruby   1.8.7
Ruby   1.9.2
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
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
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
DHH
DHH




      2004
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Vídeo 37Signals
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
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
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
recursos restful
recursos restful


Unicode, TimeZone, i18n
recursos restful


Unicode, TimeZone, i18n


      Segurança
 (XSS, XSRF, Injection)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
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
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)
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)
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)
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
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)
190
VS

40
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
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
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
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
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
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 ?
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
DEPLOY
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
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
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
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
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
MITOS
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Ruby é Lento
http://programmingzen.com/?s=benchmark
slideshare.net
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Home 331 ms
   Total 5.45 ms
http://railsmg.org/meetings/1
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Rails NÃO ESCALA
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
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
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)
VAMOS SER AGILE
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)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
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
Filosofia Ruby e Rails (UFOP e Inforuso 2010)
CURSOS
	 egenial.com.br/cursorails
  egenial.com.br/imersaorubyonrails

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

Mais conteúdo relacionado

PDF
Minicurso Ruby e Rails (RailsMG UNA)
PDF
Frontline - Rails3.1
PPTX
Node.js - Devo adotar na minha empresa?
PPTX
Performance Web com ASP.NET MVC
PDF
Introdução ao Rails (Linguagil)
PDF
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
PPSX
Rails e Rails, introdução e estudo de caso
PDF
Node.js no Pagar.me
Minicurso Ruby e Rails (RailsMG UNA)
Frontline - Rails3.1
Node.js - Devo adotar na minha empresa?
Performance Web com ASP.NET MVC
Introdução ao Rails (Linguagil)
Três anos de Scala em Produção: desafios, aprendizados e dores de cabeça
Rails e Rails, introdução e estudo de caso
Node.js no Pagar.me

Mais procurados (20)

PPT
Javascript nos dias de hoje
PDF
Node.js: 5 razões para começar a utilizar
PDF
SEA Rails na pratica
PPTX
MongoDB: Prós, Contras e Showcases.
PPTX
Javascript por debaixo dos panos
PDF
Node.js for Noobs
PDF
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
PDF
Rails nas Nuvens
PDF
Conhecendo mundo Node.js
PPTX
Clojure
PDF
JavaScript Applications
ODP
Jruby, o melhor de 2 mundos (MacGyver + ChuckNorris)
ODP
PHP + Node.js
PPTX
Ruby on Rails
PDF
Clusterização de Aplicações PHP
PDF
Abordagem geral - Ruby on rails
PPTX
AspNet 5 & Redis - Escalando sua performance
KEY
Palestra Fatec
PPTX
Desenvolvemos para web?
KEY
Projeto Octopus - Database Sharding para ActiveRecord
Javascript nos dias de hoje
Node.js: 5 razões para começar a utilizar
SEA Rails na pratica
MongoDB: Prós, Contras e Showcases.
Javascript por debaixo dos panos
Node.js for Noobs
TDC2018SP | Trilha Node.js - Melhores praticas de desempenho utilizando Node....
Rails nas Nuvens
Conhecendo mundo Node.js
Clojure
JavaScript Applications
Jruby, o melhor de 2 mundos (MacGyver + ChuckNorris)
PHP + Node.js
Ruby on Rails
Clusterização de Aplicações PHP
Abordagem geral - Ruby on rails
AspNet 5 & Redis - Escalando sua performance
Palestra Fatec
Desenvolvemos para web?
Projeto Octopus - Database Sharding para ActiveRecord
Anúncio

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

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

Mais de Daniel Lopes (9)

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

Último (11)

PPTX
Arquitetura de computadores - Memórias Secundárias
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Tipos de servidor em redes de computador.pptx
PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPTX
Design - Introdução a Gestalt e teoria das formas
PPTX
Utilizando code blockes por andre backes
PPTX
Eng. Software - pontos essenciais para o início
Arquitetura de computadores - Memórias Secundárias
Viasol Energia Solar -Soluções para geração e economia de energia
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Manejo integrado de pragas na cultura do algodão
Tipos de servidor em redes de computador.pptx
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Design - Introdução a Gestalt e teoria das formas
Utilizando code blockes por andre backes
Eng. Software - pontos essenciais para o início

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
  • 22. VOCÊ DEVE SE COMPORTAR COMO UMA STARTUP
  • 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
  • 31. Eu inventei o termo “Orientação a Objetos” e posso dizer que não era C++ que eu tinha em mente.
  • 34. Dave Thomas 2001
  • 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"
  • 40. Vídeo Java VS Rails
  • 44. JRuby Charles Nutter MacRuby L. Sansonetti
  • 45. JQuery/Rails JRuby Yehuda Katz Charles Nutter MacRuby L. Sansonetti
  • 48. Ruby 1.8.7
  • 49. Ruby 1.8.7 Ruby 1.9.2
  • 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
  • 61. DHH
  • 62. DHH 2004
  • 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
  • 74. recursos restful Unicode, TimeZone, i18n Segurança (XSS, XSRF, Injection)
  • 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
  • 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
  • 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
  • 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
  • 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
  • 120. DEPLOY
  • 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
  • 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
  • 137. MITOS
  • 143. Home 331 ms Total 5.45 ms http://railsmg.org/meetings/1
  • 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
  • 168. Aprender Ruby e Rails vão te tornar um profissional melhor
  • 170. CURSOS egenial.com.br/cursorails egenial.com.br/imersaorubyonrails CONTATOS blog.areacriacoes.com.br twitter @danielvlopes danielvlopes@areacriacoes.com.br