Ecossistema Ruby e Rails (Serpro BH)

2,360 views

Published on

Palestra aplicada no Serpro BH cobrindo uma introdução ao Rails e ao Ruby em conjunto com seu ecosistema.

Obrigado Fábio Akita por ceder vários slides (http://www.slideshare.net/akitaonrails)

Published in: Technology
1 Comment
3 Likes
Statistics
Notes
No Downloads
Views
Total views
2,360
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
41
Comments
1
Likes
3
Embeds 0
No embeds

No notes for slide

Ecossistema Ruby e Rails (Serpro BH)

  1. 1. FILOSOFIA RUBY E RAILS
  2. 2. @danielvlopes
  3. 3. areacriacoes.com.br
  4. 4. software + design areacriacoes.com.br
  5. 5. cifrascash.com
  6. 6. egenial.com.br/cursos
  7. 7. egenial.com.br/cursos
  8. 8. egenial.com.br/cursos
  9. 9. ENG. DE SOFTWARE CENTRADA EM MÉTODOS ÁGEIS http://bit.ly/unapos
  10. 10. FILOSOFIA RUBY E RAILS
  11. 11. POR QUE ?
  12. 12. OBRIGADO @AKITAONRAILS PELO CONTEÚDO DE VÁRIOS SLIDES DESTA APRESENTAÇÃO
  13. 13. O QUE EU TENHO COM ISSO?
  14. 14. ... um aclamado instrutor aplicando um curso descobriu que um de seus pupilos era um venture capitalist.
  15. 15. Quando questionado sobre o motivo de estar em uma turma de “Ruby on Rails” ... , ele respondeu simplesmente:
  16. 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. 17. Entrevista Steve Jobs (momento entre 1:00 e 1:01): http://itunes.apple.com/us/podcast/ steve- jobs-at-d8-conference/id377953458
  18. 18. VOCÊ DEVE SE COMPORTAR COMO UMA STARTUP
  19. 19. Ruby 1.8.7
  20. 20. Ruby 1.8.7 Ruby 1.9.2
  21. 21. Ruby 1.8.7 Ruby 1.9.2 Ruby on Rails 2.3.8
  22. 22. Ruby 1.8.7 Ruby 1.9.2 Ruby on Rails 2.3.8 Ruby on Rails 3.0.0
  23. 23. Yukihiro Matsumoto (criador do Ruby)
  24. 24. “Se você terminar seu trabalho rápido e de forma divertida, isso não é bom?” Matz http://www.artima.com/intv/ruby3.html
  25. 25. “Tornar as coisas simples fáceis e as coisas complexas possíveis”
  26. 26. • 100% orientada a objetos • Linguagem dinâmica • Esperados 4 milhões até 2013 • FREE e Open Source • As vezes chamada de “scripting” language
  27. 27. Eu inventei o termo “Orientação a Objetos” e posso dizer que não era C++ que eu tinha em mente.
  28. 28. Dave Thomas
  29. 29. Dave Thomas 2001
  30. 30. 2004
  31. 31. “Eu sempre soube que Smalltalk substituiria Java. Só não sabia que isso se chamaria Ruby.” Kent Beck, Criador do "Extreme Programming" e "TDD"
  32. 32. FICAMOS EMPOLGADOS !!!
  33. 33. JAVA vs RAILS: http://www.youtube.com/watch? v=SsYKd37r26s
  34. 34. JRuby Charles Nutter
  35. 35. JRuby Charles Nutter MacRuby L. Sansonetti
  36. 36. JQuery/Rails JRuby Yehuda Katz Charles Nutter MacRuby L. Sansonetti
  37. 37. JRuby 1.5.X
  38. 38. JRuby 1.5.X Rubinius 1.0
  39. 39. JRuby 1.5.X Rubinius 1.0 Mac Ruby 0.6
  40. 40. JRuby 1.5.X Rubinius 1.0 Mac Ruby 0.6 Iron Ruby 1.0
  41. 41. APLICANDO NA WEB
  42. 42. David Heinemeier Hansson “DHH”
  43. 43. David Heinemeier Hansson “DHH” 2004
  44. 44. código gerando código
  45. 45. código gerando código convention over configuration
  46. 46. código gerando código convention over configuration don’t repeat your self
  47. 47. código gerando código convention over configuration don’t repeat your self desenvolvimento ágil
  48. 48. EXTREME PROGRAMMING
  49. 49. recursos restful
  50. 50. recursos restful Unicode, TimeZone, i18n
  51. 51. recursos restful Unicode, TimeZone, i18n Segurança (XSS, XSRF, Injection)
  52. 52. 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
  53. 53. 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
  54. 54. 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
  55. 55. 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
  56. 56. 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
  57. 57. 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
  58. 58. 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
  59. 59. 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 %>
  60. 60. 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
  61. 61. CLEAN CODE
  62. 62. 190 VS 40
  63. 63. Eles servem mais de 23 milhões de visitantes/mês.
  64. 64. 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
  65. 65. 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.
  66. 66. “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
  67. 67. ECOSSISTEMA
  68. 68. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  69. 69. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  70. 70. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  71. 71. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  72. 72. 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
  73. 73. COMO ACHAR ?
  74. 74. DEPLOY
  75. 75. 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
  76. 76. TESTES
  77. 77. RSpec Steak Cucumber Test::Unit Minitest Bacon Should Factory Girl Fabrication Machinist Mocha RR
  78. 78. 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
  79. 79. 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
  80. 80. 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
  81. 81. COMUNIDADE
  82. 82. guides.rubyonrails.org
  83. 83. peepcode.com
  84. 84. railscasts.com
  85. 85. akitaonrails.com
  86. 86. egenial.com.br/cursos
  87. 87. github.com
  88. 88. MITOS
  89. 89. Ruby é Lento
  90. 90. http://programmingzen.com/?s=benchmark
  91. 91. slideshare.net
  92. 92. Home 331 ms Total 5.45 ms http://railsmg.org/meetings/1
  93. 93. Rails NÃO ESCALA
  94. 94. 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
  95. 95. “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
  96. 96. RAILS é a SALVAÇÃO
  97. 97. VAMOS SER AGILE
  98. 98. http://www.vimeo.com/1752667
  99. 99. http://www.vimeo.com/1752667
  100. 100. Recapitulando
  101. 101. entregue rápido
  102. 102. entregue pouco, mas sempre
  103. 103. mas com qualidade para manutenção
  104. 104. Rails e Ruby vão ajudar MUITO mas não fazem milagres
  105. 105. todas as start-ups que me procuram estão usando, eu quero descobrir qual é o “grande lance”.
  106. 106. o “grande lance” é que Rails é uma ferramenta para empreendedores.
  107. 107. MUITO OBRIGADO
  108. 108. CURSOS egenial.com.br/cursorails egenial.com.br/imersaorubyonrails CONTATOS blog.areacriacoes.com.br twitter @danielvlopes danielvlopes@areacriacoes.com.br

×