155
Tuesday, December 15, 2009

Ceara On Rails 2009

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 2: Ceara On Rails 2009

Filoso!a Ruby on Rails

Tuesday, December 15, 2009

Page 3: Ceara On Rails 2009

AkitaOnRails.com

Tuesday, December 15, 2009

Page 4: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 5: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 6: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 7: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 8: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 9: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 10: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 11: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 12: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 13: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 14: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 16: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 17: Ceara On Rails 2009

Ruby on Rails 2.3

Ruby 1.8

“Novo” Ruby 1.9

Tuesday, December 15, 2009

Page 18: Ceara On Rails 2009

Ruby on Rails 2.3

Ruby 1.8

“Novo” Ruby 1.9

Tuesday, December 15, 2009

Page 19: Ceara On Rails 2009

Ruby on Rails 2.3

Ruby 1.8

“Novo” Ruby 1.9

Tuesday, December 15, 2009

Page 20: Ceara On Rails 2009

1993“Matz”

Tuesday, December 15, 2009

Page 21: Ceara On Rails 2009

2001“Prag Dave”

Tuesday, December 15, 2009

Page 22: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 23: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 24: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 25: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 26: Ceara On Rails 2009

Orientação a Objetos?

Tuesday, December 15, 2009

Page 27: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 28: Ceara On Rails 2009

Alan Kay Dan Ingalls

Tuesday, December 15, 2009

Page 29: Ceara On Rails 2009

Eu inventei o termo ‘orientação a

objetos’, e posso lhes dizer que não

estava pensando em C++

Alan Kay

Tuesday, December 15, 2009

Page 30: Ceara On Rails 2009

Meta-programação

Tuesday, December 15, 2009

Page 31: Ceara On Rails 2009

Sim, faz praticamente

tudo

Tuesday, December 15, 2009

Page 32: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 33: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 34: Ceara On Rails 2009

Demo

Tuesday, December 15, 2009

Page 35: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 36: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 37: Ceara On Rails 2009

2006Charles Nutter

Tuesday, December 15, 2009

Page 38: Ceara On Rails 2009

2004“DHH”

Tuesday, December 15, 2009

Page 39: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 40: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 41: Ceara On Rails 2009

Ruby on Rails

Tuesday, December 15, 2009

Page 42: Ceara On Rails 2009

Código que gera Código

Convention over Con!guration

Extreme Programming

Tuesday, December 15, 2009

Page 43: Ceara On Rails 2009

Código que gera Código

Convention over Con!guration

Extreme Programming

Tuesday, December 15, 2009

Page 44: Ceara On Rails 2009

Código que gera Código

Convention over Con!guration

Extreme Programming

Tuesday, December 15, 2009

Page 45: Ceara On Rails 2009

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

Page 46: Ceara On Rails 2009

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

Page 47: Ceara On Rails 2009

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

Page 48: Ceara On Rails 2009

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

Page 49: Ceara On Rails 2009

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

Page 50: Ceara On Rails 2009

gem install rails

Tuesday, December 15, 2009

Page 51: Ceara On Rails 2009

“Beautiful Code”

Tuesday, December 15, 2009

Page 52: Ceara On Rails 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, December 15, 2009

Page 53: Ceara On Rails 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, December 15, 2009

Page 54: Ceara On Rails 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, December 15, 2009

Page 55: Ceara On Rails 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, December 15, 2009

Page 56: Ceara On Rails 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, December 15, 2009

Page 57: Ceara On Rails 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, December 15, 2009

Page 58: Ceara On Rails 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, December 15, 2009

Page 59: Ceara On Rails 2009

190vs

40

Tuesday, December 15, 2009

Page 60: Ceara On Rails 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, December 15, 2009

Page 61: Ceara On Rails 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, December 15, 2009

Page 62: Ceara On Rails 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, December 15, 2009

Page 63: Ceara On Rails 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, December 15, 2009

Page 64: Ceara On Rails 2009

Ferramentas Ágeis

Tuesday, December 15, 2009

Page 65: Ceara On Rails 2009

Repositórios GitoriousGithub

Integração Contínua IntegrityCruise Control

Deployment CapistranoPuppet

Monitoramento New Relic

Tuesday, December 15, 2009

Page 66: Ceara On Rails 2009

Repositórios GitoriousGithub

Integração Contínua IntegrityCruise Control

Deployment CapistranoPuppet

Monitoramento New Relic

Tuesday, December 15, 2009

Page 67: Ceara On Rails 2009

Repositórios GitoriousGithub

Integração Contínua IntegrityCruise Control

Deployment CapistranoPuppet

Monitoramento New Relic

Tuesday, December 15, 2009

Page 68: Ceara On Rails 2009

Repositórios GitoriousGithub

Integração Contínua IntegrityCruise Control

Deployment CapistranoPuppet

Monitoramento New Relic

Tuesday, December 15, 2009

Page 69: Ceara On Rails 2009

Mitos?

Tuesday, December 15, 2009

Page 70: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 71: Ceara On Rails 2009

Mais Produtivo

“Melhor”

Anti-legado

Tuesday, December 15, 2009

Page 72: Ceara On Rails 2009

Sempre se Lembre

Poderíamos contratar um Macaco Treinadopara fazer seu Trabalho!

Tuesday, December 15, 2009

Page 73: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 74: Ceara On Rails 2009

Como é feito um software?

Tuesday, December 15, 2009

Page 75: Ceara On Rails 2009

“Engenharia”

Tuesday, December 15, 2009

Page 76: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 77: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 78: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 79: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 80: Ceara On Rails 2009

Análise Codi!cação

Tuesday, December 15, 2009

Page 81: Ceara On Rails 2009

Programação “Compilação”

Tuesday, December 15, 2009

Page 82: Ceara On Rails 2009

“Codi!cador”

Tuesday, December 15, 2009

Page 83: Ceara On Rails 2009

“Arquiteto”

Tuesday, December 15, 2009

Page 84: Ceara On Rails 2009

Standish Group - CHAOS Report 2009

Tuesday, December 15, 2009

Page 85: Ceara On Rails 2009

Sucesso32%

Fracasso Médio44%

Fracasso Total24%

Standish Group - CHAOS Report 2009

Tuesday, December 15, 2009

Page 86: Ceara On Rails 2009

Quebre Regras!

Tuesday, December 15, 2009

Page 87: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 88: Ceara On Rails 2009

Prazo Custo

Tuesday, December 15, 2009

Page 89: Ceara On Rails 2009

Escopo

Prazo Custo

Tuesday, December 15, 2009

Page 90: Ceara On Rails 2009

Futuro Previsível?

Tuesday, December 15, 2009

Page 91: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 92: Ceara On Rails 2009

Winston W. Royce - 1970

Tuesday, December 15, 2009

Page 93: Ceara On Rails 2009

“Eu acredito neste conceito mas a implementação descrita acima é

arriscada e convida falhas.”

Winston W. Royce - 1970

Tuesday, December 15, 2009

Page 94: Ceara On Rails 2009

“Eu acredito neste conceito mas a implementação descrita acima é

arriscada e convida falhas.”

Winston W. Royce - 1970

Tuesday, December 15, 2009

Page 95: Ceara On Rails 2009

“Eu acredito neste conceito mas a implementação descrita acima é

arriscada e convida falhas.”

Winston W. Royce - 1970

Tuesday, December 15, 2009

Page 96: Ceara On Rails 2009

crédito: Jeff PattonTuesday, December 15, 2009

Page 97: Ceara On Rails 2009

crédito: Jeff PattonTuesday, December 15, 2009

Page 98: Ceara On Rails 2009

crédito: Jeff PattonTuesday, December 15, 2009

Page 99: Ceara On Rails 2009

crédito: Jeff PattonTuesday, December 15, 2009

Page 100: Ceara On Rails 2009

crédito: Jeff PattonTuesday, December 15, 2009

Page 101: Ceara On Rails 2009

crédito: Jeff PattonTuesday, December 15, 2009

Page 102: Ceara On Rails 2009

crédito: Jeff PattonTuesday, December 15, 2009

Page 103: Ceara On Rails 2009

crédito: Jeff PattonTuesday, December 15, 2009

Page 104: Ceara On Rails 2009

crédito: Jeff PattonTuesday, December 15, 2009

Page 105: Ceara On Rails 2009

crédito: Jeff PattonTuesday, December 15, 2009

Page 106: Ceara On Rails 2009

crédito: Jeff PattonTuesday, December 15, 2009

Page 107: Ceara On Rails 2009

“Soft”ware exigetécnica e

criatividade

Tuesday, December 15, 2009

Page 108: Ceara On Rails 2009

Trabalho Previsível?

Tuesday, December 15, 2009

Page 109: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 110: Ceara On Rails 2009

// create some properties and get the default SessionProperties props = new Properties();props.put("mail.smtp.host", _smtpHost);Session session = Session.getDefaultInstance(props, null); // create a messageAddress 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 newMessageTransport transport = session.getTransport(SMTP_MAIL);transport.connect(_smtpHost, _user, _password);transport.sendMessage(newMessage, _toList);

Tuesday, December 15, 2009

Page 111: Ceara On Rails 2009

new EmailMessage() .from("[email protected]") .to("[email protected]") .withSubject("Fluent Mail API") .withBody("Demo message") .send();

crédito: Guilherme Chapiewski

Tuesday, December 15, 2009

Page 112: Ceara On Rails 2009

Escopo

Prazo Custo

Tuesday, December 15, 2009

Page 113: Ceara On Rails 2009

Escopo

Prazo Custo

QualidadeVariável

Tuesday, December 15, 2009

Page 114: Ceara On Rails 2009

Qualidade

Prazo Custo

EscopoVariável

Tuesday, December 15, 2009

Page 115: Ceara On Rails 2009

Qualidade

Prazo Custo

EscopoVariável

Tuesday, December 15, 2009

Page 116: Ceara On Rails 2009

Agilidade

Tuesday, December 15, 2009

Page 117: Ceara On Rails 2009

Agilidade não é Rapidez

Tuesday, December 15, 2009

Page 118: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 119: Ceara On Rails 2009

Robert C. Martin

Tuesday, December 15, 2009

Page 120: Ceara On Rails 2009

“Uncle Bob”

Tuesday, December 15, 2009

Page 121: Ceara On Rails 2009

Código Limpo

Tuesday, December 15, 2009

Page 122: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 123: Ceara On Rails 2009

Test Driven Development

Tuesday, December 15, 2009

Page 124: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 125: Ceara On Rails 2009

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 endend

Tuesday, December 15, 2009

Page 126: Ceara On Rails 2009

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 endend

Tuesday, December 15, 2009

Page 127: Ceara On Rails 2009

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 endend

Tuesday, December 15, 2009

Page 128: Ceara On Rails 2009

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 endend

Tuesday, December 15, 2009

Page 129: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 130: Ceara On Rails 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, December 15, 2009

Page 131: Ceara On Rails 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, December 15, 2009

Page 132: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 133: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 134: Ceara On Rails 2009

Não é mais demorado?

Tuesday, December 15, 2009

Page 135: Ceara On Rails 2009

Cowboy Profissional

Produtividade

Tuesday, December 15, 2009

Page 136: Ceara On Rails 2009

1 2 3 4 5 6 7 80

17.50

35.00

52.50

70.00

Prod

utiv

idad

e

Tempo

Cowboy Profissional

Produtividade

Tuesday, December 15, 2009

Page 137: Ceara On Rails 2009

1 2 3 4 5 6 7 80

17.50

35.00

52.50

70.00

Prod

utiv

idad

e

Tempo

Cowboy Profissional

Produtividade

Tuesday, December 15, 2009

Page 138: Ceara On Rails 2009

1 2 3 4 5 6 7 80

17.50

35.00

52.50

70.00

Prod

utiv

idad

e

Tempo

Cowboy Profissional

Produtividade

Tuesday, December 15, 2009

Page 139: Ceara On Rails 2009

1 2 3 4 5 6 7 80

17.50

35.00

52.50

70.00

Prod

utiv

idad

e

Tempo

Cowboy Profissional

Produtividade

Tuesday, December 15, 2009

Page 140: Ceara On Rails 2009

1 2 3 4 5 6 7 80

17.50

35.00

52.50

70.00

Prod

utiv

idad

e

Tempo

Cowboy Profissional

Produtividade

Tuesday, December 15, 2009

Page 141: Ceara On Rails 2009

1 2 3 4 5 6 7 80

17.50

35.00

52.50

70.00

Prod

utiv

idad

e

Tempo

Cowboy Profissional

Produtividade

Tuesday, December 15, 2009

Page 142: Ceara On Rails 2009

1 2 3 4 5 6 7 80

17.50

35.00

52.50

70.00

Prod

utiv

idad

e

Tempo

Cowboy Profissional

Produtividade

Tuesday, December 15, 2009

Page 143: Ceara On Rails 2009

1 2 3 4 5 6 7 80

17.50

35.00

52.50

70.00

Prod

utiv

idad

e

Tempo

Cowboy Profissional

Produtividade

Tuesday, December 15, 2009

Page 144: Ceara On Rails 2009

1 2 3 4 5 6 7 80

17.50

35.00

52.50

70.00

Prod

utiv

idad

e

Tempo

Cowboy Profissional

Produtividade

Tuesday, December 15, 2009

Page 145: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 146: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 147: Ceara On Rails 2009

237 Equipes137 Finalizadas

Tuesday, December 15, 2009

Page 148: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 149: Ceara On Rails 2009

Empreendedorismo

Código e “Forma”

Ciclo de Vida de Projetos

Comunidade Open Source

Tuesday, December 15, 2009

Page 150: Ceara On Rails 2009

Empreendedorismo

Código e “Forma”

Ciclo de Vida de Projetos

Comunidade Open Source

Tuesday, December 15, 2009

Page 151: Ceara On Rails 2009

Empreendedorismo

Código e “Forma”

Ciclo de Vida de Projetos

Comunidade Open Source

Tuesday, December 15, 2009

Page 152: Ceara On Rails 2009

Empreendedorismo

Código e “Forma”

Ciclo de Vida de Projetos

Comunidade Open Source

Tuesday, December 15, 2009

Page 153: Ceara On Rails 2009

Pro!ssionalismo

Tuesday, December 15, 2009

Page 154: Ceara On Rails 2009

Tuesday, December 15, 2009

Page 155: Ceara On Rails 2009

Obrigado!akitaonrails.com

railssummit.com.br

Tuesday, December 15, 2009