ERECOMPI

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    2 Favorites

    ERECOMPI - Presentation Transcript

    1. Ruby on Rails Thursday, June 4, 2009
    2. AkitaOnRails.com slideshare.net/akitaonrails Thursday, June 4, 2009
    3. 2008 Thursday, June 4, 2009
    4. 2008 Thursday, June 4, 2009
    5. 13 e 14 Outubro 2009 Thursday, June 4, 2009
    6. Thursday, June 4, 2009
    7. ~108 slides ~90 min Thursday, June 4, 2009
    8. www.slideshare.net/akitaonrails fabio.akita@locaweb.com.br Thursday, June 4, 2009
    9. Thursday, June 4, 2009
    10. Thursday, June 4, 2009
    11. Thursday, June 4, 2009
    12. “Especialista em uma coisa só é um amador em todo o resto.” Thursday, June 4, 2009
    13. Thursday, June 4, 2009
    14. Ruby on Rails 2.3 Ruby 1.8 Novo Ruby 1.9 Thursday, June 4, 2009
    15. Ruby on Rails 2.3 Ruby 1.8 Novo Ruby 1.9 Thursday, June 4, 2009
    16. Ruby on Rails 2.3 Ruby 1.8 Novo Ruby 1.9 Thursday, June 4, 2009
    17. “Matz” 1993 Thursday, June 4, 2009
    18. “Prag Dave” 2001 Thursday, June 4, 2009
    19. “DHH” 2004 Thursday, June 4, 2009
    20. Charles Nutter 2006 Thursday, June 4, 2009
    21. Thursday, June 4, 2009
    22. Thursday, June 4, 2009
    23. “Tornar as coisas simples fáceis e as coisas complexas possíveis” Filosofia Ruby Thursday, June 4, 2009
    24. Thursday, June 4, 2009
    25. O que dizem por aí ... Thursday, June 4, 2009
    26. Pouco usado Thursday, June 4, 2009
    27. Rails não Escala Thursday, June 4, 2009
    28. Ruby é Lento Thursday, June 4, 2009
    29. WTF!? Thursday, June 4, 2009
    30. Pouco usado Thursday, June 4, 2009
    31. Thursday, June 4, 2009
    32. Thursday, June 4, 2009
    33. Thursday, June 4, 2009
    34. Thursday, June 4, 2009
    35. Thursday, June 4, 2009
    36. Thursday, June 4, 2009
    37. Thursday, June 4, 2009
    38. Thursday, June 4, 2009
    39. Thursday, June 4, 2009
    40. Thursday, June 4, 2009
    41. Thursday, June 4, 2009
    42. Thursday, June 4, 2009
    43. Thursday, June 4, 2009
    44. Thursday, June 4, 2009
    45. Thursday, June 4, 2009
    46. Thursday, June 4, 2009
    47. Rails não Escala Thursday, June 4, 2009
    48. Thursday, June 4, 2009
    49. Para colocar as coisas em perspectiva, o Friendster foi escrito em Java e eles mudaram para PHP. MySpace foi escrito em ColdFusion e eles mudaram para 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. Blaine Cook http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter Thursday, June 4, 2009
    50. “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 Thursday, June 4, 2009
    51. Ruby é Lento Thursday, June 4, 2009
    52. x mais lento que C++ Thursday, June 4, 2009
    53. x mais lento que C++ 0 50 100 Python 2 150 Ruby 1.9 200 Perl JRuby Python 3 PHP Ruby 1.8.6 Thursday, June 4, 2009
    54. Homepage: 331 ms Thursday, June 4, 2009
    55. Homepage: 331 ms Total: 5.45 s Thursday, June 4, 2009
    56. Thursday, June 4, 2009
    57. Thursday, June 4, 2009
    58. PHP “puro” 331 req/s CakePHP 4 a 8 req/s* Code Igniter 22 a 98 req/s* Rails (2008) 88 req/s Thursday, June 4, 2009
    59. PHP “puro” 331 req/s CakePHP 4 a 8 req/s* Code Igniter 22 a 98 req/s* Rails (2008) 88 req/s Thursday, June 4, 2009
    60. PHP “puro” 331 req/s CakePHP 4 a 8 req/s* Code Igniter 22 a 98 req/s* Rails (2008) 88 req/s Thursday, June 4, 2009
    61. PHP “puro” 331 req/s CakePHP 4 a 8 req/s* Code Igniter 22 a 98 req/s* Rails (2008) 88 req/s Thursday, June 4, 2009
    62. Thursday, June 4, 2009
    63. PHP Reload Java Persistente Ruby Misto Thursday, June 4, 2009
    64. PHP Reload Java Persistente Ruby Misto Thursday, June 4, 2009
    65. PHP Reload Java Persistente Ruby Misto Thursday, June 4, 2009
    66. Browser Rails Banco de Banco Slave Dados Thursday, June 4, 2009
    67. Browser Rails Banco de Banco Slave Dados Thursday, June 4, 2009
    68. Browser Rails Banco de Banco Slave Dados Thursday, June 4, 2009
    69. Browser Rails Banco Slave Banco de Dados Thursday, June 4, 2009
    70. Browser Rails Banco de Banco Slave Dados Thursday, June 4, 2009
    71. Browser Rails Memcached Banco de Banco Slave Dados Thursday, June 4, 2009
    72. Browser Rails Memcached Banco de Banco Slave Dados Thursday, June 4, 2009
    73. Browser Memcached Rails Memcached Banco de Banco Slave Dados Thursday, June 4, 2009
    74. Browser Memcached Web Caches Rails Memcached Banco de Banco Slave Dados Thursday, June 4, 2009
    75. Performance != Escalabilidade Thursday, June 4, 2009
    76. Performance Ghz “Vertical” Thursday, June 4, 2009
    77. Escalabilidade MultiCore “Horizontal” Thursday, June 4, 2009
    78. Ruby on Rails Thursday, June 4, 2009
    79. RUBY Thursday, June 4, 2009
    80. Rails ActiveSupport RUBY Thursday, June 4, 2009
    81. ActionController ActionPack ActionView Rails ActiveSupport RUBY Thursday, June 4, 2009
    82. ActiveRecord ActionController ActionPack ActionView Rails ActiveSupport RUBY Thursday, June 4, 2009
    83. ActionMailer ActiveRecord ActionController ActionPack ActionView Rails ActiveSupport RUBY Thursday, June 4, 2009
    84. ActiveResource ActionWebService ActionMailer ActiveRecord ActionController ActionPack ActionView Rails ActiveSupport RUBY Thursday, June 4, 2009
    85. Thursday, June 4, 2009
    86. Thursday, June 4, 2009
    87. Thursday, June 4, 2009
    88. Thursday, June 4, 2009
    89. Thursday, June 4, 2009
    90. Thursday, June 4, 2009
    91. Thursday, June 4, 2009
    92. Thursday, June 4, 2009
    93. RSpec describe Product do include ProductSpecHelper before(:each) do @product = Product.new end it \"should not be valid when empty\" do @product.should_not be_valid end it \"should be valid when having correct information\" do @product.attributes = valid_product_attributes @product.should be_valid end end Thursday, June 4, 2009
    94. RSpec describe Product do include ProductSpecHelper before(:each) do @product = Product.new end it \"should not be valid when empty\" do rake spec @product.should_not be_valid end it \"should be valid when having correct information\" do @product.attributes = valid_product_attributes @product.should be_valid end end Thursday, June 4, 2009
    95. Model class Product < ActiveRecord::Base after_create :set_initial_inventory has_many :variants, :dependent => :destroy has_many :images, :as => :viewable, :order => :position, :dependent => :destroy has_many :properties, :through => :product_properties belongs_to :tax_category validates_presence_of :name validates_presence_of :master_price validates_presence_of :description make_permalink :with => :name, :field => :permalink end Thursday, June 4, 2009
    96. Model class Product < ActiveRecord::Base after_create :set_initial_inventory has_many :variants, :dependent => :destroy has_many :images, :as => :viewable, :order => :position, :dependent => :destroy has_many :properties, :through => :product_properties Product.find(1) belongs_to :tax_category validates_presence_of :name validates_presence_of :master_price validates_presence_of :description make_permalink :with => :name, :field => :permalink end Thursday, June 4, 2009
    97. Controller class UsersController < Spree::BaseController resource_controller before_filter :initialize_extension_partials actions :all, :except => [:index, :destroy] show.before do @orders = Order.checkout_completed(true) .find_all_by_user_id(current_user.id) end create.after { self.current_user = @user } create.response do |wants| wants.html { redirect_back_or_default(products_path) } end end Thursday, June 4, 2009
    98. Controller class UsersController < Spree::BaseController resource_controller before_filter :initialize_extension_partials actions :all, :except => [:index, :destroy] show.before do @orders = Order.checkout_completed(true) /users/1 .find_all_by_user_id(current_user.id) end create.after { self.current_user = @user } create.response do |wants| wants.html { redirect_back_or_default(products_path) } end end Thursday, June 4, 2009
    99. Views ERB <div id=\"product-listing\"> <%= breadcrumbs(@taxon) %> <br/> <%= render :partial => \"shared/products.html.erb\", :locals => {:products => @products, :taxon => @taxon } %> </div> <% content_for :sidebar do %> <td id=\"shop-by-col\" valign=\"top\"> <%= render :partial => \"shared/taxonomies\" %> </td> <% end %> <%= render :partial => 'shared/paginate', :locals => {:collection => @products, :options => {}} unless @products.empty? %> Thursday, June 4, 2009
    100. Views HAML #product-listing =breadcrumbs(@taxon) %br =render :partial => \"shared/products.html.erb\", :locals => {:products => @products, :taxon => @taxon} -content_for :sidebar do %td#shop-by-col(:valign => \"top\") =render :partial => \"shared/taxonomies\" =render :partial => 'shared/paginate', :locals => {:collection => @products, :options => {}} unless @products.empty? Thursday, June 4, 2009
    101. Rotas RESTFul ActionController::Routing::Routes.draw do |map| map.connect ':controller/service.wsdl', :action => 'wsdl' map.resources :products, :member => {:change_image => :post} map.resources :addresses map.resources :orders, :has_many => [:line_items] map.namespace :admin do |admin| admin.resources :users admin.resources :products end end Thursday, June 4, 2009
    102. Rotas RESTFul ActionController::Routing::Routes.draw do |map| GET /products/new map.connect ':controller/service.wsdl', :action => 'wsdl' GET /products map.resources :products, :member => POST /products {:change_image => :post} map.resources :addresses GET /products/1 map.resources :orders, GET /products/1/edit :has_many => [:line_items] map.namespacePUT /products/1 :admin do |admin| DESTROY /products/1 admin.resources :users admin.resources :products end end Thursday, June 4, 2009
    103. Migrations class RenameAppConfiguration < ActiveRecord::Migration def self.up rename_table :app_configurations, :configurations change_table :configurations do |t| t.string :type end end def self.down change_table :configurations do |t| t.remove :type end rename_table :configurations, :app_configurations end end Thursday, June 4, 2009
    104. Migrations class RenameAppConfiguration < ActiveRecord::Migration def self.up rename_table :app_configurations, :configurations change_table :configurations do |t| t.string :type end end rake db:migrate def self.down change_table :configurations do |t| t.remove :type end rename_table :configurations, :app_configurations end end Thursday, June 4, 2009
    105. “Beautiful Code” Thursday, June 4, 2009
    106. @Transient public BigDecimal getTotal() //$Id: Booking.java 5579 2007-06-27 00:06:49Z gavin $ { package org.jboss.seam.example.booking; return hotel.getPrice().multiply( new BigDecimal( getNights() ) ); } import java.io.Serializable; import java.math.BigDecimal; @Transient import java.text.DateFormat; public int getNights() import java.util.Date; { return (int) ( checkoutDate.getTime() - checkinDate.getTime() ) / import javax.persistence.Basic; 1000 / 60 / 60 / 24; import javax.persistence.Entity; } import javax.persistence.GeneratedValue; import javax.persistence.Id; @Id @GeneratedValue import javax.persistence.ManyToOne; public Long getId() import javax.persistence.Temporal; { import javax.persistence.TemporalType; return id; import javax.persistence.Transient; } public void setId(Long id) import org.hibernate.validator.Length; { import org.hibernate.validator.NotNull; this.id = id; import org.hibernate.validator.Pattern; } import org.jboss.seam.annotations.Name; @NotNull @Entity @Basic @Temporal(TemporalType.DATE) @Name(\"booking\") public Date getCheckinDate() public class Booking implements Serializable { { return checkinDate; private Long id; } private User user; public void setCheckinDate(Date datetime) private Hotel hotel; { private Date checkinDate; this.checkinDate = datetime; private Date checkoutDate; } private String creditCard; private String creditCardName; @ManyToOne @NotNull private int creditCardExpiryMonth; public Hotel getHotel() private int creditCardExpiryYear; { private boolean smoking; return hotel; private int beds; } public void setHotel(Hotel hotel) public Booking() {} { this.hotel = hotel; public Booking(Hotel hotel, User user) } { this.hotel = hotel; @ManyToOne @NotNull this.user = user; public User getUser() } { return user; } Thursday, June 4, 2009
    107. public int getBeds() public void setUser(User user) { { return beds; this.user = user; } } public void setBeds(int beds) @Basic @Temporal(TemporalType.DATE) { @NotNull this.beds = beds; public Date getCheckoutDate() } { @NotNull(message=\"Credit card name is required\") return checkoutDate; @Length(min=3, max=70, message=\"Credit card name is required\") } public String getCreditCardName() public void setCheckoutDate(Date checkoutDate) { { return creditCardName; this.checkoutDate = checkoutDate; } } public void setCreditCardName(String creditCardName) @NotNull(message=\"Credit card number is required\") { @Length(min=16, max=16, message=\"Credit card number must 16 digits long\") this.creditCardName = creditCardName; @Pattern(regex=\"^\\\\d*$\", message=\"Credit card number must be numeric\") } public String getCreditCard() { public int getCreditCardExpiryMonth() return creditCard; { } return creditCardExpiryMonth; } public void setCreditCard(String creditCard) { public void setCreditCardExpiryMonth(int creditCardExpiryMonth) this.creditCard = creditCard; { } this.creditCardExpiryMonth = creditCardExpiryMonth; } @Transient public String getDescription() public int getCreditCardExpiryYear() { { DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM); return creditCardExpiryYear; return hotel==null ? null : hotel.getName() + } \", \" + df.format( getCheckinDate() ) + \" to \" + df.format( getCheckoutDate() ); public void setCreditCardExpiryYear(int creditCardExpiryYear) } { this.creditCardExpiryYear = creditCardExpiryYear; public boolean isSmoking() } { return smoking; @Override } public String toString() { public void setSmoking(boolean smoking) return \"Booking(\" + user + \",\"+ hotel + \")\"; { } this.smoking = smoking; } } Thursday, June 4, 2009
    108. class Booking < ActiveRecord::Base belongs_to :hotel belongs_to :user validates_presence_of :hotel validates_presence_of :user validates_presence_of :credit_card validates_presence_of :credit_card_name validates_length_of :credit_card, :within => 16..16 validates_format_of :credit_card, :with => /^\\\\d*$/ validates_length_of :credit_card_name, :within => 3..70 def total hotel.price * nights end def nights ((checkout_date - checkin_date) / 1.day).round end def to_s \"Booking(#{user},#{hotel})\" end end Thursday, June 4, 2009
    109. class CreateBookings < ActiveRecord::Migration def self.up create_table :bookings do |t| t.references :user t.references :hotel t.datetime :checkin t.datetime :checkout t.string :credit_card t.string :credit_card_name t.integer :credit_card_expiry_month t.integer :credit_card_expiry_year t.boolean :smoking t.integer :beds t.timestamps end end def self.down drop_table :bookings end end Thursday, June 4, 2009
    110. 190 vs 40 Thursday, June 4, 2009
    111. “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. Uma vez completo e otimizado, o site deles agora é mais rápido que antes. Eles também finalizaram a reescrita do sistema em apenas 3 meses com 4 desenvolvedores.” http://www.railsonwave.com/railsonwave/2008/6/4/yellowpages-com-migrates-to-rails Thursday, June 4, 2009
    112. Thursday, June 4, 2009
    113. 11 mil classes! 46 só de coleções! Thursday, June 4, 2009
    114. • Classes: • Modules: • Array • Enumerable • Hash • Comparable • Set • Sorted Set Thursday, June 4, 2009
    115. 1.400 Classes: • classesArray • Modules: • • Enumerable • Hash • Comparable 6 de Set só • • Sorted coleções! Set Thursday, June 4, 2009
    116. Ferramentas Ágeis Thursday, June 4, 2009
    117. Gerenciamento Thursday, June 4, 2009
    118. Thursday, June 4, 2009
    119. Thursday, June 4, 2009
    120. Thursday, June 4, 2009
    121. Repositórios Thursday, June 4, 2009
    122. Thursday, June 4, 2009
    123. Thursday, June 4, 2009
    124. Thursday, June 4, 2009
    125. Thursday, June 4, 2009
    126. Thursday, June 4, 2009
    127. Thursday, June 4, 2009
    128. Integração Contínua Thursday, June 4, 2009
    129. Thursday, June 4, 2009
    130. Thursday, June 4, 2009
    131. Manutenção Thursday, June 4, 2009
    132. Thursday, June 4, 2009
    133. Thursday, June 4, 2009
    134. Thursday, June 4, 2009
    135. Open Source Thursday, June 4, 2009
    136. Thursday, June 4, 2009
    137. describe BankAccount do before :each do @bank_account = BankAccount.new :balance => 250 end it \"should not be valid\" do @bank_account.should be_valid end it \"should transfer funds successfully\" do @bank_account.should_receive(:transfer) .with_args(:amount => 100) .and_return(true) @bank_account.execute_transaction(:amount => 100) @bank_account.balance.should == 150 end end Thursday, June 4, 2009
    138. Thursday, June 4, 2009
    139. Funcionalidade: Adição Para evitar erros bobos Como um péssimo matemático Eu quero saber como somar dois números Cenário: Adicionar dois números Dado que eu digitei 50 na calculadora E que eu digitei 70 na calculadora Quando eu aperto o botão de soma Então o resultado na calculadora deve ser 120 Thursday, June 4, 2009
    140. Before do @calc = Calculadora.new end Dado /que eu digitei (\\d+) na calculadora/ do |n| @calc.push n.to_i end Quando 'eu aperto o botão de soma' do @result = @calc.soma end Então /o resultado na calculadora deve ser (\\d*)/ do |result| @result.should == result.to_i end Thursday, June 4, 2009
    141. class SignupTest < ActionController::IntegrationTest def test_trial_account_sign_up visit home_path click_link \"Sign up\" fill_in \"Email\", :with => \"good@example.com\" select \"Free account\" click_button \"Register\" end end Thursday, June 4, 2009
    142. rspec rspec.info cucumber cukes.info shoulda thoughtbot.com/projects/shoulda webrat github.com/brynary/webrat integrity integrityapp.com ZenTest zenspider.com Thursday, June 4, 2009
    143. • plugins de Active Record • plugins de Views • plugins de Localização • CMS • Parsers • Autenticadores/Autorizadores Thursday, June 4, 2009
    144. Comunidade Thursday, June 4, 2009
    145. peepcode.com Geoffrey Thursday, June 4, 2009
    146. railsenvy.com Jason e Gregg Thursday, June 4, 2009
    147. railscasts.com Ryan Bates Thursday, June 4, 2009
    148. guias.rubyonrails.pro.br Pratik Naik Thursday, June 4, 2009
    149. rubylearning.org Satish Talim Thursday, June 4, 2009
    150. rubyinside.com.br Peter Cooper Thursday, June 4, 2009
    151. why.nomedojogo.com _why Thursday, June 4, 2009
    152. Thursday, June 4, 2009
    153. Thursday, June 4, 2009
    154. Thursday, June 4, 2009
    155. Thursday, June 4, 2009
    156. Thursday, June 4, 2009
    157. Thursday, June 4, 2009
    158. Uma pulga ... Thursday, June 4, 2009
    159. Standish Group - CHAOS Report 2009 Thursday, June 4, 2009
    160. Fracasso Total 24% Sucesso 32% Fracasso Médio 44% Standish Group - CHAOS Report 2009 Thursday, June 4, 2009
    161. Winston W. Royce - 1970 Thursday, June 4, 2009
    162. “Eu acredito neste conceito mas a implementação descrita acima é arriscada e convida falhas.” Winston W. Royce - 1970 Thursday, June 4, 2009
    163. “Eu acredito neste conceito mas a implementação descrita acima é arriscada e convida falhas.” Winston W. Royce - 1970 Thursday, June 4, 2009
    164. “Eu acredito neste conceito mas a implementação descrita acima é arriscada e convida falhas.” Winston W. Royce - 1970 Thursday, June 4, 2009
    165. Insanidade Thursday, June 4, 2009
    166. “Querer resultados melhores fazendo a mesma coisa.” Thursday, June 4, 2009
    167. “Think Different” Thursday, June 4, 2009
    168. “Think Different” Thursday, June 4, 2009
    169. Obrigado! akitaonrails.com Thursday, June 4, 2009
    SlideShare Zeitgeist 2009

    + Fabio AkitaFabio Akita Nominate

    custom

    680 views, 2 favs, 2 embeds more stats

    Palestra de Ruby on Rails que dei no evento ERECOMP more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 680
      • 666 on SlideShare
      • 14 from embeds
    • Comments 0
    • Favorites 2
    • Downloads 51
    Most viewed embeds
    • 8 views on http://desunidos.wordpress.com
    • 6 views on http://constantinoneto.wordpress.com

    more

    All embeds
    • 8 views on http://desunidos.wordpress.com
    • 6 views on http://constantinoneto.wordpress.com

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories