Ceara On Rails 2009

732 views

Published on

Ruby on Rails e Agilidade no Ceará, dia 7/nov.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
732
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
10
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Ceara On Rails 2009

  1. 1. Tuesday, December 15, 2009
  2. 2. Filoso a Ruby on Rails Tuesday, December 15, 2009
  3. 3. AkitaOnRails.com Tuesday, December 15, 2009
  4. 4. Tuesday, December 15, 2009
  5. 5. Tuesday, December 15, 2009
  6. 6. Tuesday, December 15, 2009
  7. 7. Tuesday, December 15, 2009
  8. 8. Tuesday, December 15, 2009
  9. 9. Tuesday, December 15, 2009
  10. 10. Tuesday, December 15, 2009
  11. 11. Tuesday, December 15, 2009
  12. 12. Tuesday, December 15, 2009
  13. 13. Tuesday, December 15, 2009
  14. 14. Tuesday, December 15, 2009
  15. 15. www.slideshare.net/akitaonrails fabio.akita@locaweb.com.br Tuesday, December 15, 2009
  16. 16. Tuesday, December 15, 2009
  17. 17. Ruby on Rails 2.3 Ruby 1.8 “Novo” Ruby 1.9 Tuesday, December 15, 2009
  18. 18. Ruby on Rails 2.3 Ruby 1.8 “Novo” Ruby 1.9 Tuesday, December 15, 2009
  19. 19. Ruby on Rails 2.3 Ruby 1.8 “Novo” Ruby 1.9 Tuesday, December 15, 2009
  20. 20. “Matz” 1993 Tuesday, December 15, 2009
  21. 21. “Prag Dave” 2001 Tuesday, December 15, 2009
  22. 22. Tuesday, December 15, 2009
  23. 23. Tuesday, December 15, 2009
  24. 24. Tuesday, December 15, 2009
  25. 25. Tuesday, December 15, 2009
  26. 26. Orientação a Objetos? Tuesday, December 15, 2009
  27. 27. Tuesday, December 15, 2009
  28. 28. Alan Kay Dan Ingalls Tuesday, December 15, 2009
  29. 29. Alan Kay Eu inventei o termo ‘orientação a objetos’, e posso lhes dizer que não estava pensando em C++ Tuesday, December 15, 2009
  30. 30. Meta-programação Tuesday, December 15, 2009
  31. 31. Sim, faz praticamente tudo Tuesday, December 15, 2009
  32. 32. Tuesday, December 15, 2009
  33. 33. Tuesday, December 15, 2009
  34. 34. Demo Tuesday, December 15, 2009
  35. 35. Tuesday, December 15, 2009
  36. 36. Tuesday, December 15, 2009
  37. 37. Charles Nutter 2006 Tuesday, December 15, 2009
  38. 38. “DHH” 2004 Tuesday, December 15, 2009
  39. 39. Tuesday, December 15, 2009
  40. 40. Tuesday, December 15, 2009
  41. 41. Ruby on Rails Tuesday, December 15, 2009
  42. 42. Código que gera Código Convention over Con guration Extreme Programming Tuesday, December 15, 2009
  43. 43. Código que gera Código Convention over Con guration Extreme Programming Tuesday, December 15, 2009
  44. 44. Código que gera Código Convention over Con guration Extreme Programming Tuesday, December 15, 2009
  45. 45. Restful Resources Unicode, Time Zone, i18n Segurança (XSS, CSRF, Injection) Suporte a vários bancos de dados Envio/Recebimento de e-mails Tuesday, December 15, 2009
  46. 46. Restful Resources Unicode, Time Zone, i18n Segurança (XSS, CSRF, Injection) Suporte a vários bancos de dados Envio/Recebimento de e-mails Tuesday, December 15, 2009
  47. 47. Restful Resources Unicode, Time Zone, i18n Segurança (XSS, CSRF, Injection) Suporte a vários bancos de dados Envio/Recebimento de e-mails Tuesday, December 15, 2009
  48. 48. Restful Resources Unicode, Time Zone, i18n Segurança (XSS, CSRF, Injection) Suporte a vários bancos de dados Envio/Recebimento de e-mails Tuesday, December 15, 2009
  49. 49. Restful Resources Unicode, Time Zone, i18n Segurança (XSS, CSRF, Injection) Suporte a vários bancos de dados Envio/Recebimento de e-mails Tuesday, December 15, 2009
  50. 50. gem install rails Tuesday, December 15, 2009
  51. 51. “Beautiful Code” Tuesday, December 15, 2009
  52. 52. @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; } Tuesday, December 15, 2009
  53. 53. 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; } } Tuesday, December 15, 2009
  54. 54. 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 Tuesday, December 15, 2009
  55. 55. 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 Tuesday, December 15, 2009
  56. 56. 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 Tuesday, December 15, 2009
  57. 57. 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 Tuesday, December 15, 2009
  58. 58. 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 Tuesday, December 15, 2009
  59. 59. 190 vs 40 Tuesday, December 15, 2009
  60. 60. “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 Tuesday, December 15, 2009
  61. 61. “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 Tuesday, December 15, 2009
  62. 62. “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 Tuesday, December 15, 2009
  63. 63. “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 Tuesday, December 15, 2009
  64. 64. Ferramentas Ágeis Tuesday, December 15, 2009
  65. 65. Gitorious Repositórios Github Integrity Integração Contínua Cruise Control Capistrano Deployment Puppet Monitoramento New Relic Tuesday, December 15, 2009
  66. 66. Gitorious Repositórios Github Integrity Integração Contínua Cruise Control Capistrano Deployment Puppet Monitoramento New Relic Tuesday, December 15, 2009
  67. 67. Gitorious Repositórios Github Integrity Integração Contínua Cruise Control Capistrano Deployment Puppet Monitoramento New Relic Tuesday, December 15, 2009
  68. 68. Gitorious Repositórios Github Integrity Integração Contínua Cruise Control Capistrano Deployment Puppet Monitoramento New Relic Tuesday, December 15, 2009
  69. 69. Mitos? Tuesday, December 15, 2009
  70. 70. Tuesday, December 15, 2009
  71. 71. Mais Produtivo “Melhor” Anti-legado Tuesday, December 15, 2009
  72. 72. Sempre se Lembre Poderíamos contratar um Macaco Treinado para fazer seu Trabalho! Tuesday, December 15, 2009
  73. 73. Tuesday, December 15, 2009
  74. 74. Como é feito um software? Tuesday, December 15, 2009
  75. 75. “Engenharia” Tuesday, December 15, 2009
  76. 76. Tuesday, December 15, 2009
  77. 77. Tuesday, December 15, 2009
  78. 78. Tuesday, December 15, 2009
  79. 79. Tuesday, December 15, 2009
  80. 80. Análise Codi cação Tuesday, December 15, 2009
  81. 81. Programação “Compilação” Tuesday, December 15, 2009
  82. 82. “Codi cador” Tuesday, December 15, 2009
  83. 83. “Arquiteto” Tuesday, December 15, 2009
  84. 84. Standish Group - CHAOS Report 2009 Tuesday, December 15, 2009
  85. 85. Fracasso Total Sucesso 24% 32% Fracasso Médio 44% Standish Group - CHAOS Report 2009 Tuesday, December 15, 2009
  86. 86. Quebre Regras! Tuesday, December 15, 2009
  87. 87. Tuesday, December 15, 2009
  88. 88. Prazo Custo Tuesday, December 15, 2009
  89. 89. Escopo Prazo Custo Tuesday, December 15, 2009
  90. 90. Futuro Previsível? Tuesday, December 15, 2009
  91. 91. Tuesday, December 15, 2009
  92. 92. Winston W. Royce - 1970 Tuesday, December 15, 2009
  93. 93. “Eu acredito neste conceito mas a implementação descrita acima é arriscada e convida falhas.” Winston W. Royce - 1970 Tuesday, December 15, 2009
  94. 94. “Eu acredito neste conceito mas a implementação descrita acima é arriscada e convida falhas.” Winston W. Royce - 1970 Tuesday, December 15, 2009
  95. 95. “Eu acredito neste conceito mas a implementação descrita acima é arriscada e convida falhas.” Winston W. Royce - 1970 Tuesday, December 15, 2009
  96. 96. crédito: Jeff Patton Tuesday, December 15, 2009
  97. 97. crédito: Jeff Patton Tuesday, December 15, 2009
  98. 98. crédito: Jeff Patton Tuesday, December 15, 2009
  99. 99. crédito: Jeff Patton Tuesday, December 15, 2009
  100. 100. crédito: Jeff Patton Tuesday, December 15, 2009
  101. 101. crédito: Jeff Patton Tuesday, December 15, 2009
  102. 102. crédito: Jeff Patton Tuesday, December 15, 2009
  103. 103. crédito: Jeff Patton Tuesday, December 15, 2009
  104. 104. crédito: Jeff Patton Tuesday, December 15, 2009
  105. 105. crédito: Jeff Patton Tuesday, December 15, 2009
  106. 106. crédito: Jeff Patton Tuesday, December 15, 2009
  107. 107. “Soft”ware exige técnica e criatividade Tuesday, December 15, 2009
  108. 108. Trabalho Previsível? Tuesday, December 15, 2009
  109. 109. Tuesday, December 15, 2009
  110. 110. // create some properties and get the default Session Properties props = new Properties(); props.put("mail.smtp.host", _smtpHost); Session session = Session.getDefaultInstance(props, null); // create a message Address replyToList[] = { new InternetAddress(replyTo) }; Message newMessage = new MimeMessage(session); if (_fromName != null) newMessage.setFrom(new InternetAddress(from, _fromName + " on behalf of " + replyTo)); else newMessage.setFrom(new InternetAddress(from)); newMessage.setReplyTo(replyToList); newMessage.setRecipients(Message.RecipientType.BCC, _toList); newMessage.setSubject(subject); newMessage.setSentDate(sentDate); // send newMessage Transport transport = session.getTransport(SMTP_MAIL); transport.connect(_smtpHost, _user, _password); transport.sendMessage(newMessage, _toList); Tuesday, December 15, 2009
  111. 111. new EmailMessage() .from("demo@guilhermechapiewski.com") .to("destination@address.com") .withSubject("Fluent Mail API") .withBody("Demo message") .send(); crédito: Guilherme Chapiewski Tuesday, December 15, 2009
  112. 112. Escopo Prazo Custo Tuesday, December 15, 2009
  113. 113. Escopo Qualidade Variável Prazo Custo Tuesday, December 15, 2009
  114. 114. Qualidade Escopo Variável Prazo Custo Tuesday, December 15, 2009
  115. 115. Qualidade Escopo Variável Prazo Custo Tuesday, December 15, 2009
  116. 116. Agilidade Tuesday, December 15, 2009
  117. 117. Agilidade não é Rapidez Tuesday, December 15, 2009
  118. 118. Tuesday, December 15, 2009
  119. 119. Robert C. Martin Tuesday, December 15, 2009
  120. 120. Tuesday, December 15, 2009
  121. 121. Código Limpo Tuesday, December 15, 2009
  122. 122. Tuesday, December 15, 2009
  123. 123. Test Driven Development Tuesday, December 15, 2009
  124. 124. Tuesday, December 15, 2009
  125. 125. 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 Tuesday, December 15, 2009
  126. 126. 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 Tuesday, December 15, 2009
  127. 127. 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 Tuesday, December 15, 2009
  128. 128. 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 Tuesday, December 15, 2009
  129. 129. Tuesday, December 15, 2009
  130. 130. 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 Tuesday, December 15, 2009
  131. 131. 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 Tuesday, December 15, 2009
  132. 132. Tuesday, December 15, 2009
  133. 133. Tuesday, December 15, 2009
  134. 134. Não é mais demorado? Tuesday, December 15, 2009
  135. 135. Produtividade Cowboy Profissional Tuesday, December 15, 2009
  136. 136. Produtividade Cowboy Profissional 70.00 52.50 Produtividade 35.00 17.50 0 1 2 3 4 5 6 7 8 Tempo Tuesday, December 15, 2009
  137. 137. Produtividade Cowboy Profissional 70.00 52.50 Produtividade 35.00 17.50 0 1 2 3 4 5 6 7 8 Tempo Tuesday, December 15, 2009
  138. 138. Produtividade Cowboy Profissional 70.00 52.50 Produtividade 35.00 17.50 0 1 2 3 4 5 6 7 8 Tempo Tuesday, December 15, 2009
  139. 139. Produtividade Cowboy Profissional 70.00 52.50 Produtividade 35.00 17.50 0 1 2 3 4 5 6 7 8 Tempo Tuesday, December 15, 2009
  140. 140. Produtividade Cowboy Profissional 70.00 52.50 Produtividade 35.00 17.50 0 1 2 3 4 5 6 7 8 Tempo Tuesday, December 15, 2009
  141. 141. Produtividade Cowboy Profissional 70.00 52.50 Produtividade 35.00 17.50 0 1 2 3 4 5 6 7 8 Tempo Tuesday, December 15, 2009
  142. 142. Produtividade Cowboy Profissional 70.00 52.50 Produtividade 35.00 17.50 0 1 2 3 4 5 6 7 8 Tempo Tuesday, December 15, 2009
  143. 143. Produtividade Cowboy Profissional 70.00 52.50 Produtividade 35.00 17.50 0 1 2 3 4 5 6 7 8 Tempo Tuesday, December 15, 2009
  144. 144. Produtividade Cowboy Profissional 70.00 52.50 Produtividade 35.00 17.50 0 1 2 3 4 5 6 7 8 Tempo Tuesday, December 15, 2009
  145. 145. Tuesday, December 15, 2009
  146. 146. Tuesday, December 15, 2009
  147. 147. 237 Equipes 137 Finalizadas Tuesday, December 15, 2009
  148. 148. Tuesday, December 15, 2009
  149. 149. Empreendedorismo Código e “Forma” Ciclo de Vida de Projetos Comunidade Open Source Tuesday, December 15, 2009
  150. 150. Empreendedorismo Código e “Forma” Ciclo de Vida de Projetos Comunidade Open Source Tuesday, December 15, 2009
  151. 151. Empreendedorismo Código e “Forma” Ciclo de Vida de Projetos Comunidade Open Source Tuesday, December 15, 2009
  152. 152. Empreendedorismo Código e “Forma” Ciclo de Vida de Projetos Comunidade Open Source Tuesday, December 15, 2009
  153. 153. Pro ssionalismo Tuesday, December 15, 2009
  154. 154. Tuesday, December 15, 2009
  155. 155. Obrigado! akitaonrails.com railssummit.com.br Tuesday, December 15, 2009

×