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
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
Ecossistema Ruby e Rails (Serpro BH)
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
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
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
Ecossistema Ruby e Rails (Serpro BH)
Eu inventei o termo
“Orientação a
Objetos” e posso
dizer que não era C++
que eu tinha em
mente.
Ecossistema Ruby e Rails (Serpro BH)
Dave Thomas
Dave Thomas   2001
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
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 !!!
Ecossistema Ruby e Rails (Serpro BH)
JAVA vs RAILS: http://www.youtube.com/watch?
                v=SsYKd37r26s
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
JRuby
Charles Nutter
JRuby
         Charles Nutter




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




               MacRuby
               L. Sansonetti
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
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
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
David Heinemeier Hansson
          “DHH”
David Heinemeier Hansson
          “DHH”




        2004
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
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
Ecossistema Ruby e Rails (Serpro BH)
recursos restful
recursos restful


Unicode, TimeZone, i18n
recursos restful


Unicode, TimeZone, i18n


      Segurança
 (XSS, XSRF, Injection)
Ecossistema Ruby e Rails (Serpro BH)
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
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
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
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
190
VS

40
Ecossistema Ruby e Rails (Serpro BH)
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
Ecossistema Ruby e Rails (Serpro BH)
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
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
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 ?
Ecossistema Ruby e Rails (Serpro BH)
DEPLOY
Ecossistema Ruby e Rails (Serpro BH)
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
Ecossistema Ruby e Rails (Serpro BH)
TESTES
Ecossistema Ruby e Rails (Serpro BH)
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
Ecossistema Ruby e Rails (Serpro BH)
MITOS
Ecossistema Ruby e Rails (Serpro BH)
Ruby é Lento
http://programmingzen.com/?s=benchmark
slideshare.net
Ecossistema Ruby e Rails (Serpro BH)
Home 331 ms
   Total 5.45 ms
http://railsmg.org/meetings/1
Ecossistema Ruby e Rails (Serpro BH)
Rails NÃO ESCALA
Ecossistema Ruby e Rails (Serpro BH)
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
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
VAMOS SER AGILE
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
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.
Ecossistema Ruby e Rails (Serpro BH)
Ecossistema Ruby e Rails (Serpro BH)
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

PDF
Javascript no SAPO e libsapojs
codebits
 
KEY
Plack
Pedro Melo
 
PPTX
MongoDB + PHP
Ari Stopassola Junior
 
PPT
55 New Things in Java 7 - Brazil
Stephen Chin
 
PDF
Node.js: serious business
Pedro Franceschi
 
PPTX
Workshop Django Framework - 30/10/2018
Rafael Sales Pavarina
 
PPTX
Android - Frameworks de Persistência
Édipo Souza
 
Javascript no SAPO e libsapojs
codebits
 
Plack
Pedro Melo
 
MongoDB + PHP
Ari Stopassola Junior
 
55 New Things in Java 7 - Brazil
Stephen Chin
 
Node.js: serious business
Pedro Franceschi
 
Workshop Django Framework - 30/10/2018
Rafael Sales Pavarina
 
Android - Frameworks de Persistência
Édipo Souza
 

Destaque (8)

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

Semelhante a Ecossistema Ruby e Rails (Serpro BH) (20)

PDF
Fisl 11 - Ecossistema Ruby on Rails
Fabio Akita
 
PPT
Desenvolvimento Ágil com Ruby on Rails
Rogerio Chaves
 
PDF
Palestra Desenvolvimento Ágil para Web com ROR UVA
Thiago Cifani
 
PDF
Esta começando a programar para a web? Então começe com Rails
ismaelstahelin
 
PDF
Workshop Ruby on Rails dia 2 ruby-pt
Pedro Sousa
 
PDF
Palestra ror edted
brunoaalves
 
PDF
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações Web
Jairo Junior
 
PDF
Palestra Ruby on Rails SETA 2008/01
Douglas Roeder
 
PDF
Fisl 10
Fabio Akita
 
PDF
Desenvolvimento web ágil e descomplicado usando ruby on rails
Maurício Linhares
 
KEY
Ruby on Rails + MongoDB - GURU Sorocaba
Lucas Renan
 
PDF
O que é o ruby on rails?
Leonardo Costa
 
PPT
Introdução Ruby 1.8.7 + Rails 3
Régis Eduardo Weizenmann Gregol
 
PDF
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
Tchelinux
 
PDF
Python mudando o modo de desenvolver para a internet
Marcos Petry
 
PDF
Workshop - nivelamento tech
21212com
 
PDF
Palestra - Symfony Framework MVC PHP 5
Lucas Augusto Carvalho
 
PDF
Ruby on Rails: Produtividade e diversão na web
Rodrigo Manhães
 
PDF
Easy Rails
Regis Magalhães
 
Fisl 11 - Ecossistema Ruby on Rails
Fabio Akita
 
Desenvolvimento Ágil com Ruby on Rails
Rogerio Chaves
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Thiago Cifani
 
Esta começando a programar para a web? Então começe com Rails
ismaelstahelin
 
Workshop Ruby on Rails dia 2 ruby-pt
Pedro Sousa
 
Palestra ror edted
brunoaalves
 
Frameworks Opensource: ferramentas para desenvolvimento rápido de aplicações Web
Jairo Junior
 
Palestra Ruby on Rails SETA 2008/01
Douglas Roeder
 
Fisl 10
Fabio Akita
 
Desenvolvimento web ágil e descomplicado usando ruby on rails
Maurício Linhares
 
Ruby on Rails + MongoDB - GURU Sorocaba
Lucas Renan
 
O que é o ruby on rails?
Leonardo Costa
 
Introdução Ruby 1.8.7 + Rails 3
Régis Eduardo Weizenmann Gregol
 
Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
Tchelinux
 
Python mudando o modo de desenvolver para a internet
Marcos Petry
 
Workshop - nivelamento tech
21212com
 
Palestra - Symfony Framework MVC PHP 5
Lucas Augusto Carvalho
 
Ruby on Rails: Produtividade e diversão na web
Rodrigo Manhães
 
Easy Rails
Regis Magalhães
 
Anúncio

Último (7)

PPTX
Computacao-e-Tecnologias-Digitais-Por-Que-Aprender.pptx
RobertaOliveiradaFon1
 
PPTX
aplicativopenseira.pptx Aplicativo que organiza Pensamentos - Peça Publicitária
StelaNorie1
 
PPTX
Gestão de Mudanças - Os maiores desafios da Gestão de Mudanças e Gestão de Pr...
Gateware Group
 
PDF
Certificado em Redes Neurais Artificiais em Python
CaioSilva506151
 
PDF
Explorando o Futuro do Corpo: Implantes Neurais e o Biohacking dos Sentidos
cooperliora
 
PPTX
Desenvolvimento-de-Produtos-Inovadores.pptx
ssuser1d7565
 
PPTX
Gestão de Mudanças - Fases do processo de mudança organizacional
Gateware Group
 
Computacao-e-Tecnologias-Digitais-Por-Que-Aprender.pptx
RobertaOliveiradaFon1
 
aplicativopenseira.pptx Aplicativo que organiza Pensamentos - Peça Publicitária
StelaNorie1
 
Gestão de Mudanças - Os maiores desafios da Gestão de Mudanças e Gestão de Pr...
Gateware Group
 
Certificado em Redes Neurais Artificiais em Python
CaioSilva506151
 
Explorando o Futuro do Corpo: Implantes Neurais e o Biohacking dos Sentidos
cooperliora
 
Desenvolvimento-de-Produtos-Inovadores.pptx
ssuser1d7565
 
Gestão de Mudanças - Fases do processo de mudança organizacional
Gateware Group
 

Ecossistema Ruby e Rails (Serpro BH)

  • 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
  • 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
  • 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
  • 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"
  • 41. JAVA vs RAILS: http://www.youtube.com/watch? v=SsYKd37r26s
  • 45. JRuby Charles Nutter MacRuby L. Sansonetti
  • 46. JQuery/Rails JRuby Yehuda Katz Charles Nutter MacRuby L. Sansonetti
  • 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
  • 57. David Heinemeier Hansson “DHH” 2004
  • 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
  • 69. recursos restful Unicode, TimeZone, i18n Segurança (XSS, XSRF, Injection)
  • 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
  • 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
  • 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
  • 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
  • 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
  • 114. DEPLOY
  • 116. set :application, "producer" set :ip_address , "208.88.125.20" deploy.rb # GIT SETTINGS set :scm, :git set :repository, "[email protected]: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
  • 118. TESTES
  • 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 | [email protected] | | 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
  • 132. MITOS
  • 138. Home 331 ms Total 5.45 ms http://railsmg.org/meetings/1
  • 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
  • 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.
  • 171. CURSOS egenial.com.br/cursorails egenial.com.br/imersaorubyonrails CONTATOS blog.areacriacoes.com.br twitter @danielvlopes [email protected]