fórum de software livre do serpro rj 2009
DESCRIPTION
Esta palestra é muito parecida com a que eu também ministrei no evento Dev in Rio 2009, portanto os slides são quase iguais caso você já tenha baixado. A apresentação fala sobre filosofias, valores e idéias ágeis e como elas são a fundação da comunidade Ruby on Rails e do ecossistema que se formou ao seu redor.Alguns dos vídeos mostrados estão disponíveis em http://vimeo.com/akitaonrails.comTRANSCRIPT
Tuesday, September 15, 2009
Ruby on RailsTuesday, September 15, 2009
AkitaOnRails.comslideshare.net/akitaonrails
Tuesday, September 15, 2009
Tuesday, September 15, 2009
> 100 slides< 1 hora
Tuesday, September 15, 2009
www.slideshare.net/akitaonrails
Tuesday, September 15, 2009
Contexto
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Ruby on Rails 2.3
Ruby 1.8
“Novo” Ruby 1.9Tuesday, September 15, 2009
Ruby on Rails 2.3
Ruby 1.8
“Novo” Ruby 1.9Tuesday, September 15, 2009
Ruby on Rails 2.3
Ruby 1.8
“Novo” Ruby 1.9Tuesday, September 15, 2009
1993
“Matz”
Tuesday, September 15, 2009
2001
“Prag Dave”
Tuesday, September 15, 2009
Tuesday, September 15, 2009
2004“DHH”
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
2006
Charles Nutter
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
“Tornar as coisas simples fáceis e as coisas complexas
possíveis”
Filosofia Ruby
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Orientação a Objetos?
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Alay KayTuesday, September 15, 2009
Alay Kay Dan IngallsTuesday, September 15, 2009
Alay KayTuesday, September 15, 2009
Alay KayTuesday, September 15, 2009
“Eu inventei o termo ʻorientação a
objetosʼ, e posso lhes dizer que eu
não estava pensando em C++.”
Alay KayTuesday, September 15, 2009
Meta-programação
Tuesday, September 15, 2009
Meta-apresentação
by Dave ThomasTuesday, September 15, 2009
Tuesday, September 15, 2009
Ruby on Rails
Tuesday, September 15, 2009
Código que gera Código
Convention over Configuration
Don’t Repeat Yourself
Extreme Programming
Tuesday, September 15, 2009
Código que gera Código
Convention over Configuration
Don’t Repeat Yourself
Extreme Programming
Tuesday, September 15, 2009
Código que gera Código
Convention over Configuration
Don’t Repeat Yourself
Extreme Programming
Tuesday, September 15, 2009
Código que gera Código
Convention over Configuration
Don’t Repeat Yourself
Extreme Programming
Tuesday, September 15, 2009
Restful Resources
Unicode, Time Zone, i18n
Segurança (XSS, CSRF, Injection)
Rack Support (Middlewares)
Tuesday, September 15, 2009
Restful Resources
Unicode, Time Zone, i18n
Segurança (XSS, CSRF, Injection)
Rack Support (Middlewares)
Tuesday, September 15, 2009
Restful Resources
Unicode, Time Zone, i18n
Segurança (XSS, CSRF, Injection)
Rack Support (Middlewares)
Tuesday, September 15, 2009
Restful Resources
Unicode, Time Zone, i18n
Segurança (XSS, CSRF, Injection)
Rack Support (Middlewares)
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
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 => :permalinkend
Model
Tuesday, September 15, 2009
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 => :permalinkend
Model
Tuesday, September 15, 2009
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 => :permalinkend
Model
Tuesday, September 15, 2009
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 => :permalinkend
Model
Tuesday, September 15, 2009
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 => :permalinkend
Model
Tuesday, September 15, 2009
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 => :permalinkend
Model
Tuesday, September 15, 2009
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 => :permalinkend
Model
Tuesday, September 15, 2009
<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? %>
Views ERB
Tuesday, September 15, 2009
<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? %>
Views ERB
Tuesday, September 15, 2009
<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? %>
Views ERB
Tuesday, September 15, 2009
#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?
Views HAML
Tuesday, September 15, 2009
“Beautiful Code”
Tuesday, September 15, 2009
//$Id: Booking.java 5579 2007-06-27 00:06:49Z gavin $package org.jboss.seam.example.booking;
import java.io.Serializable;import java.math.BigDecimal;import java.text.DateFormat;import java.util.Date;
import javax.persistence.Basic;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.ManyToOne;import javax.persistence.Temporal;import javax.persistence.TemporalType;import javax.persistence.Transient;
import org.hibernate.validator.Length;import org.hibernate.validator.NotNull;import org.hibernate.validator.Pattern;import org.jboss.seam.annotations.Name;
@Entity@Name("booking")public class Booking implements Serializable{ private Long id; private User user; private Hotel hotel; private Date checkinDate; private Date checkoutDate; private String creditCard; private String creditCardName; private int creditCardExpiryMonth; private int creditCardExpiryYear; private boolean smoking; private int beds; public Booking() {} public Booking(Hotel hotel, User user) { this.hotel = hotel; this.user = user; }
@Transient public BigDecimal getTotal() { return hotel.getPrice().multiply( new BigDecimal( getNights() ) ); }
@Transient public int getNights() { return (int) ( checkoutDate.getTime() - checkinDate.getTime() ) / 1000 / 60 / 60 / 24; }
@Id @GeneratedValue public Long getId() { return id; } public void setId(Long id) { this.id = id; } @NotNull @Basic @Temporal(TemporalType.DATE) public Date getCheckinDate() { return checkinDate; } public void setCheckinDate(Date datetime) { this.checkinDate = datetime; }
@ManyToOne @NotNull public Hotel getHotel() { return hotel; } public void setHotel(Hotel hotel) { this.hotel = hotel; } @ManyToOne @NotNull public User getUser() { return user; }
Tuesday, September 15, 2009
public void setUser(User user) { this.user = user; } @Basic @Temporal(TemporalType.DATE) @NotNull public Date getCheckoutDate() { return checkoutDate; } public void setCheckoutDate(Date checkoutDate) { this.checkoutDate = checkoutDate; } @NotNull(message="Credit card number is required") @Length(min=16, max=16, message="Credit card number must 16 digits long") @Pattern(regex="^\\d*$", message="Credit card number must be numeric") public String getCreditCard() { return creditCard; }
public void setCreditCard(String creditCard) { this.creditCard = creditCard; } @Transient public String getDescription() { DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM); return hotel==null ? null : hotel.getName() + ", " + df.format( getCheckinDate() ) + " to " + df.format( getCheckoutDate() ); }
public boolean isSmoking() { return smoking; }
public void setSmoking(boolean smoking) { this.smoking = smoking; }
public int getBeds() { return beds; }
public void setBeds(int beds) { this.beds = beds; } @NotNull(message="Credit card name is required") @Length(min=3, max=70, message="Credit card name is required") public String getCreditCardName() { return creditCardName; }
public void setCreditCardName(String creditCardName) { this.creditCardName = creditCardName; }
public int getCreditCardExpiryMonth() { return creditCardExpiryMonth; }
public void setCreditCardExpiryMonth(int creditCardExpiryMonth) { this.creditCardExpiryMonth = creditCardExpiryMonth; }
public int getCreditCardExpiryYear() { return creditCardExpiryYear; }
public void setCreditCardExpiryYear(int creditCardExpiryYear) { this.creditCardExpiryYear = creditCardExpiryYear; } @Override public String toString() { return "Booking(" + user + ","+ hotel + ")"; }
}
Tuesday, September 15, 2009
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})" endend
Tuesday, September 15, 2009
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})" endend
Tuesday, September 15, 2009
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 endend
Tuesday, September 15, 2009
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 endend
Tuesday, September 15, 2009
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 endend
Tuesday, September 15, 2009
190vs40
Tuesday, September 15, 2009
http://www.railsonwave.com/railsonwave/2008/6/4/yellowpages-com-migrates-to-rails
“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.”
Tuesday, September 15, 2009
http://www.railsonwave.com/railsonwave/2008/6/4/yellowpages-com-migrates-to-rails
“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.”
Tuesday, September 15, 2009
http://www.railsonwave.com/railsonwave/2008/6/4/yellowpages-com-migrates-to-rails
“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.”
Tuesday, September 15, 2009
http://www.railsonwave.com/railsonwave/2008/6/4/yellowpages-com-migrates-to-rails
“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.”
Tuesday, September 15, 2009
Ferramentas Ágeis
Tuesday, September 15, 2009
Repositórios GitoriousGithub
Integração Contínua
IntegrityCruise Control
Deployment CapistranoPuppet
Monitoramento New Relic
Tuesday, September 15, 2009
Repositórios GitoriousGithub
Integração Contínua
IntegrityCruise Control
Deployment CapistranoPuppet
Monitoramento New Relic
Tuesday, September 15, 2009
Repositórios GitoriousGithub
Integração Contínua
IntegrityCruise Control
Deployment CapistranoPuppet
Monitoramento New Relic
Tuesday, September 15, 2009
Repositórios GitoriousGithub
Integração Contínua
IntegrityCruise Control
Deployment CapistranoPuppet
Monitoramento New Relic
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Comunidade
Tuesday, September 15, 2009
Geoffrey
peepcode.com
Tuesday, September 15, 2009
Gregg Pollack
envylabs.com
Tuesday, September 15, 2009
Ryan Bates
railscasts.com
Tuesday, September 15, 2009
Satish Talim
rubylearning.org
Tuesday, September 15, 2009
Peter Cooper
rubyinside.com.br
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
O que dizempor aí ...
Tuesday, September 15, 2009
Pouco usado
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Rails não Escala
Tuesday, September 15, 2009
Rails não EscalaTM
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Blaine Cook
http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter
Tuesday, September 15, 2009
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.
Blaine Cook
http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter
Tuesday, September 15, 2009
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.
Blaine Cook
http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter
Quando as pessoas caem em problemas de escalabilidade, normalmente acham que a
linguagem é o problema, mas eu acho que isso raramente é
a realidade.
Tuesday, September 15, 2009
http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise?fp=16&fpid=1
“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.”
Tuesday, September 15, 2009
http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise?fp=16&fpid=1
“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.”
Tuesday, September 15, 2009
Ruby é Lento
Tuesday, September 15, 2009
x mais lento que C++
Tuesday, September 15, 2009
0 50 100 150 200
Python 2
Ruby 1.9
Perl
JRuby
Python 3
PHP
Ruby 1.8.6
x mais lento que C++
Tuesday, September 15, 2009
Homepage: 331 ms
Tuesday, September 15, 2009
Homepage: 331 ms
Total: 5.45 sTuesday, September 15, 2009
Tuesday, September 15, 2009
Performance!=
Escalabilidade
Tuesday, September 15, 2009
Outros Mitos?
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Mais Produtivo
“Melhor”
Anti-legadoTuesday, September 15, 2009
Tuesday, September 15, 2009
Agilidade
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Robert C. Martin
Tuesday, September 15, 2009
“Uncle Bob”
Tuesday, September 15, 2009
Código Limpo
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Test Driven Development
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
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, September 15, 2009
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, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Não é mais demorado?
Tuesday, September 15, 2009
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
1 2 3 4 5 6 7 8 9 100
17.50
35.00
52.50
70.00
Produtividade
Tempo
“Cowboy” Profissional
Produtividade
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Tuesday, September 15, 2009
237 Equipes137 Finalizadas
Tuesday, September 15, 2009
Tuesday, September 15, 2009
Empreendedorismo
Código e “Forma”
Ciclo de Vida de Projetos
Comunidade Open Source
Tuesday, September 15, 2009
Empreendedorismo
Código e “Forma”
Ciclo de Vida de Projetos
Comunidade Open Source
Tuesday, September 15, 2009
Empreendedorismo
Código e “Forma”
Ciclo de Vida de Projetos
Comunidade Open Source
Tuesday, September 15, 2009
Empreendedorismo
Código e “Forma”
Ciclo de Vida de Projetos
Comunidade Open Source
Tuesday, September 15, 2009
Profissionalismo
Tuesday, September 15, 2009
Tuesday, September 15, 2009
one more thing ...
Tuesday, September 15, 2009
2008Tuesday, September 15, 2009
2008Tuesday, September 15, 2009
13 e 14Outubro
2009Tuesday, September 15, 2009
Obrigado!akitaonrails.com
railssummit.com.br
Tuesday, September 15, 2009