Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Filosofia Ruby e Rails (UFOP e Inforuso 2010)

on

  • 2,510 views

Filosofia do Ruby/Rails e valores da comunidade.

Filosofia do Ruby/Rails e valores da comunidade.

Statistics

Views

Total Views
2,510
Views on SlideShare
2,508
Embed Views
2

Actions

Likes
4
Downloads
26
Comments
0

1 Embed 2

http://daniellopes.me 2

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Filosofia Ruby e Rails (UFOP e Inforuso 2010) Presentation Transcript

  • 1. FILOSOFIA RUBY E RAILS
  • 2. @danielvlopes
  • 3. areacriacoes.com.br
  • 4. software + design areacriacoes.com.br
  • 5. cifrascash.com
  • 6. egenial.com.br/cursos
  • 7. egenial.com.br/cursos
  • 8. egenial.com.br/cursos
  • 9. ENG. DE SOFTWARE CENTRADA EM MÉTODOS ÁGEIS http://bit.ly/unapos
  • 10. SLIDESHARE.NET/DANIELVLOPES
  • 11. FILOSOFIA RUBY E RAILS
  • 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
  • 19. POR QUE STARTUPS?
  • 20. VOCÊ DEVE SE COMPORTAR COMO UMA STARTUP
  • 21. Yukihiro Matsumoto (criador do Ruby)
  • 22. “Se você terminar seu trabalho rápido e de forma divertida, isso não é bom?” Matz http://www.artima.com/intv/ruby3.html
  • 23. “Tornar as coisas simples fáceis e as coisas complexas possíveis”
  • 24. • 100% orientada a objetos • Linguagem dinâmica • Esperados 4 milhões até 2013 • FREE e Open Source • As vezes chamada de “scripting” language
  • 25. Eu inventei o termo “Orientação a Objetos” e posso dizer que não era C++ que eu tinha em mente.
  • 26. Dave Thomas
  • 27. Dave Thomas 2001
  • 28. 2004
  • 29. “Eu sempre soube que Smalltalk substituiria Java. Só não sabia que isso se chamaria Ruby.” Kent Beck, Criador do "Extreme Programming" e "TDD"
  • 30. FICAMOS EMPOLGADOS !!!
  • 31. Vídeo Java VS Rails
  • 32. JRuby Charles Nutter
  • 33. JRuby Charles Nutter MacRuby L. Sansonetti
  • 34. JQuery/Rails JRuby Yehuda Katz Charles Nutter MacRuby L. Sansonetti
  • 35. Ruby 1.8.7
  • 36. Ruby 1.8.7 Ruby 1.9.2
  • 37. JRuby 1.5.X
  • 38. JRuby 1.5.X Rubinius 1.1
  • 39. JRuby 1.5.X Rubinius 1.1 Mac Ruby 0.6
  • 40. JRuby 1.5.X Rubinius 1.1 Mac Ruby 0.6 Iron Ruby 1.0
  • 41. RUBY NA WEB
  • 42. RUBY ON RAILS
  • 43. JASON FRIED
  • 44. DAVID HANSSON
  • 45. DHH
  • 46. DHH 2004
  • 47. Vídeo 37Signals
  • 48. código gerando código
  • 49. código gerando código convention over configuration
  • 50. código gerando código convention over configuration don’t repeat your self
  • 51. código gerando código convention over configuration don’t repeat your self desenvolvimento ágil
  • 52. EXTREME PROGRAMMING
  • 53. recursos restful
  • 54. recursos restful Unicode, TimeZone, i18n
  • 55. recursos restful Unicode, TimeZone, i18n Segurança (XSS, XSRF, Injection)
  • 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. 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. 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
  • 59. 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
  • 60. 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
  • 61. 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
  • 62. 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
  • 63. 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 %>
  • 64. 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
  • 65. CLEAN CODE
  • 66. 190 VS 40
  • 67. Eles servem mais de 23 milhões de visitantes/mês.
  • 68. 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
  • 69. 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.
  • 70. 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.
  • 71. 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
  • 72. ECOSSISTEMA
  • 73. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 74. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 75. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 76. Repositórios Github e Codebase Integração Contínua Hudson, Cruise, CI Joe Chef, Puppet, Deploy Capistrano NewRelic, Scout, Monitoramento BackupMyApp
  • 77. 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
  • 78. COMO ACHAR ?
  • 79. DEPLOY
  • 80. 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
  • 81. TESTES
  • 82. RSpec Steak Cucumber Test::Unit Minitest Bacon Should Factory Girl Fabrication Machinist Mocha RR
  • 83. 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
  • 84. 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
  • 85. 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
  • 86. COMUNIDADE
  • 87. guides.rubyonrails.org
  • 88. peepcode.com
  • 89. railscasts.com
  • 90. akitaonrails.com
  • 91. egenial.com.br/cursos
  • 92. github.com
  • 93. MITOS
  • 94. Ruby é Lento
  • 95. http://programmingzen.com/?s=benchmark
  • 96. slideshare.net
  • 97. Home 331 ms Total 5.45 ms http://railsmg.org/meetings/1
  • 98. Rails NÃO ESCALA
  • 99. 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
  • 100. “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
  • 101. RAILS é a SALVAÇÃO
  • 102. VAMOS SER AGILE
  • 103. http://www.vimeo.com/1752667
  • 104. Recapitulando
  • 105. entregue rápido
  • 106. entregue rápido entregue sempre
  • 107. entregue rápido entregue sempre com qualidade
  • 108. SEJA SEMPRE PROFISSIONAL
  • 109. Vídeo Uncle Bob
  • 110. Aprender Ruby e Rails vão te tornar um profissional melhor
  • 111. CURSOS egenial.com.br/cursorails egenial.com.br/imersaorubyonrails CONTATOS blog.areacriacoes.com.br twitter @danielvlopes danielvlopes@areacriacoes.com.br