Transcript
Page 1: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

FILOSOFIA RUBY E RAILS

Page 2: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

@danielvlopes

Page 4: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

areacriacoes.com.br

software + design

Page 9: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

ENG. DE SOFTWARE CENTRADA EM MÉTODOS ÁGEIS

http://bit.ly/unapos

Page 10: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

SLIDESHARE.NET/DANIELVLOPES

Page 11: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

FILOSOFIA RUBY E RAILS

Page 12: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

• Código

• Cultura

• Criatividade

Page 13: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

POR QUE ME INTERESSA?

Page 14: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

... um aclamado instrutor aplicando um curso descobriu que um de seus pupilos era um venture capitalist.

Page 15: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Quando questionado sobre o motivo de estar em uma turma de “Ruby on Rails” ... , ele respondeu simplesmente:

Page 16: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Mark Gardner http://bit.ly/railsecosystem

todas as start-ups que me procuram estão usando, eu quero descobrir qual é o “grande lance”.

Page 17: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Matz Ruby World Keynote http://bit.ly/bH4hA2

Investidores estão pressionando startups para usarem Ruby. "É mais rápido, então se você pode encurtar a entrega em um

mês, porque não usar Ruby?"

Page 18: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Matz Ruby World Keynote http://bit.ly/bH4hA2

Investidores estão pressionando startups para usarem Ruby. "É mais rápido, então se você pode encurtar a entrega em um

mês, porque não usar Ruby?"

Mais de 60% dos VCs usam Ruby para criar seus sistemas

Page 19: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

POR QUE STARTUPS?

Page 20: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 21: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 22: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

VOCÊ DEVE SE COMPORTAR COMO

UMA STARTUP

Page 23: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 24: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 25: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 26: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Yukihiro Matsumoto(criador do Ruby)

Page 27: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

“Se você terminar seu trabalho rápido e de forma divertida, isso

não é bom?”

Matz http://www.artima.com/intv/ruby3.html

Page 28: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

“Tornar as coisas simples fáceis e as coisas complexas possíveis”

Page 29: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

• 100% orientada a objetos

• Linguagem dinâmica

• Esperados 4 milhões até 2013

• FREE e Open Source

• As vezes chamada de “scripting” language

Page 30: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 31: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Eu inventei o termo “Orientação a Objetos” e posso dizer que não era C++ que eu tinha em mente.

Page 32: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 33: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Dave Thomas

Page 34: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

2001Dave Thomas

Page 35: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 36: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

2004

Page 37: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

“Eu sempre soube que Smalltalk substituiria Java. Só não sabia que isso se chamaria Ruby.”

Kent Beck, Criador do "Extreme Programming" e "TDD"

Page 38: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

FICAMOS EMPOLGADOS !!!

Page 39: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 40: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Vídeo Java VS Rails

Page 41: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 42: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 43: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

JRubyCharles Nutter

Page 44: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

JRubyCharles Nutter

MacRubyL. Sansonetti

Page 45: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

JRubyCharles Nutter

JQuery/RailsYehuda Katz

MacRubyL. Sansonetti

Page 46: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 47: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 48: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Ruby 1.8.7

Page 49: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Ruby 1.8.7

Ruby 1.9.2

Page 50: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 51: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

JRuby 1.5.X

Page 52: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

JRuby 1.5.X

Rubinius 1.1

Page 53: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

JRuby 1.5.X

Rubinius 1.1

Mac Ruby 0.6

Page 54: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

JRuby 1.5.X

Rubinius 1.1

Mac Ruby 0.6

Iron Ruby 1.0

Page 55: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

RUBY NA WEB

Page 56: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

RUBY ON RAILS

Page 57: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

JASON FRIED

Page 58: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

DAVID HANSSON

Page 59: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 60: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 61: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

DHH

Page 62: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

DHH

2004

Page 63: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 64: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Vídeo 37Signals

Page 65: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 66: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

código gerando código

Page 67: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

código gerando código

convention over configuration

Page 68: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

código gerando código

convention over configuration

don’t repeat your self

Page 69: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

código gerando código

convention over configuration

don’t repeat your self

desenvolvimento ágil

Page 70: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

EXTREME PROGRAMMING

Page 71: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 72: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

recursos restful

Page 73: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

recursos restful

Unicode, TimeZone, i18n

Page 74: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

recursos restful

Unicode, TimeZone, i18n

Segurança (XSS, XSRF, Injection)

Page 75: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 76: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Templates ERB, HAML

Autenticação HTTP Basic, HTTP Digest, Devise

Bancos de Dados MongoDB, CouchDB, MySQL, PostgreSQL, Oracle

ORM’s ActiveRecord, DataMapper, MongoMapper

Javascript Prototype, jQuery, SproutCore

Web Servers Apache 2, NginX, Lighty, Litespeed

Page 77: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Templates ERB, HAML

Autenticação HTTP Basic, HTTP Digest, Devise

Bancos de Dados MongoDB, CouchDB, MySQL, PostgreSQL, Oracle

ORM’s ActiveRecord, DataMapper, MongoMapper

Javascript Prototype, jQuery, SproutCore

Web Servers Apache 2, NginX, Lighty, Litespeed

Page 78: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Templates ERB, HAML

Autenticação HTTP Basic, HTTP Digest, Devise

Bancos de Dados MongoDB, CouchDB, MySQL, PostgreSQL, Oracle

ORM’s ActiveRecord, DataMapper, MongoMapper

Javascript Prototype, jQuery, SproutCore

Web Servers Apache 2, NginX, Lighty, Litespeed

Page 79: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Templates ERB, HAML

Autenticação HTTP Basic, HTTP Digest, Devise

Bancos de Dados MongoDB, CouchDB, MySQL, PostgreSQL, Oracle

ORM’s ActiveRecord, DataMapper, MongoMapper

Javascript Prototype, jQuery, SproutCore

Web Servers Apache 2, NginX, Lighty, Litespeed

Page 80: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Templates ERB, HAML

Autenticação HTTP Basic, HTTP Digest, Devise

Bancos de Dados MongoDB, CouchDB, MySQL, PostgreSQL, Oracle

ORM’s ActiveRecord, DataMapper, MongoMapper

Javascript Prototype, jQuery, SproutCore

Web Servers Apache 2, NginX, Lighty, Litespeed

Page 81: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Templates ERB, HAML

Autenticação HTTP Basic, HTTP Digest, Devise

Bancos de Dados MongoDB, CouchDB, MySQL, PostgreSQL, Oracle

ORM’s ActiveRecord, DataMapper, MongoMapper

Javascript Prototype, jQuery, SproutCore

Web Servers Apache 2, NginX, Lighty, Litespeed

Page 82: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 83: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 84: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 85: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 86: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 87: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 88: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 89: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 90: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 91: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 92: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 93: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 94: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

class Post < ActiveRecord::Base # ASSOCIATIONS has_and_belongs_to_many :categories belongs_to :author has_many :comments, :dependent => :destroy

# VALIDATIONS validates_presence_of :title, :body, :author, :slug, :published_at validates_uniqueness_of :slug validates_inclusion_of :draft, :in => [true, false] validates_associated :author

# SCOPES (custom queries) default_scope :order => 'published_at DESC' scope :published, lambda { where(:draft => false) }

# CALLBACKS before_validation :generate_slug

protected def generate_slug self.slug = title unless slug.present? self.slug = slug.parameterize endend

model

Page 95: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

<%= form_for [ post, comment ], :remote => true do |f| %> <%= error_messages_for comment %> <div class="field"> <%= f.label :author %><br /> <%= f.text_field :author %> </div>

<div class="field"> <%= f.label :url %><br /> <%= f.text_field :url %> </div>

<div class="field"> <%= f.label :body %><br /> <%= f.text_area :body, :rows => 10, :cols => 90 %> </div>

<%= render "submit_or_cancel" %><% end %>

views

Page 96: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

class Admin::PostCategoriesController < ApplicationController def index @categories = PostCategory.all respond_with @categories end

def show @category = PostCategory.find(params[:id]) respond_with @category end

def new @category = PostCategory.new respond_with @category end

def edit @category = PostCategory.find(params[:id]) end

def create @category = PostCategory.new(params[:post_category]) flash[:notice] = 'Category was successfully created.' if @category.save respond_with @category end

def update end

def destroy endend

controller

Page 97: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

CLEAN CODE

Page 98: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 99: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 100: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 101: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 102: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

190

40VS

Page 103: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 104: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Eles servem mais de 23 milhões de visitantes/mês.

Page 105: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

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

Page 106: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Eles servem mais de 23 milhões de visitantes/mês.

A conversão resultou em 20 mil linhas de Ruby em vez de 125 mil linhas de Java

mais importante, facilitou a dificuldade que tinham em manutenção.

Page 107: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

A conversão resultou em 20 mil linhas de Ruby em vez de 125 mil linhas de Java

mais importante, facilitou a dificuldade que tinham em manutenção.

Eles finalizaram a reescrita do sistema em apenas 3 meses com 4 desenvolvedores.

Page 108: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

mais importante, facilitou a dificuldade que tinham em manutenção.

Eles finalizaram a reescrita do sistema em apenas 3 meses com 4 desenvolvedores.

Uma vez completo e otimizado, o site deles agora é mais rápido que antes

http://www.railsonwave.com/railsonwave/2008/6/4/yellowpages-com-migrates-to-rails

Page 109: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

ECOSSISTEMA

Page 110: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 111: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Repositórios Github e Codebase

Integração Contínua Hudson, Cruise, CI Joe

Deploy Chef, Puppet, Capistrano

Monitoramento NewRelic, Scout, BackupMyApp

Page 112: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Repositórios Github e Codebase

Integração Contínua Hudson, Cruise, CI Joe

Deploy Chef, Puppet, Capistrano

Monitoramento NewRelic, Scout, BackupMyApp

Page 113: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Repositórios Github e Codebase

Integração Contínua Hudson, Cruise, CI Joe

Deploy Chef, Puppet, Capistrano

Monitoramento NewRelic, Scout, BackupMyApp

Page 114: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Repositórios Github e Codebase

Integração Contínua Hudson, Cruise, CI Joe

Deploy Chef, Puppet, Capistrano

Monitoramento NewRelic, Scout, BackupMyApp

Page 115: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 116: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 117: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

source 'http://rubygems.org'

gem 'rails', '3.0.0.rc'gem 'devise', '1.1.1'gem 'paperclip', '2.3.3'gem 'menu_builder', '0.3.3'gem 'RedCloth', '4.2.3'gem 'will_paginate', '3.0.pre2'gem 'reverse_captcha', '0.0.1'gem 'capistrano', '2.5.19'gem 'mysql', '2.8.1'

group :development do gem 'sqlite3-ruby', :require => 'sqlite3' gem "rspec", ">=2.0.0.beta.11" gem "rspec-rails", ">=2.0.0.beta.11" gem "ruby-debug"end

group :test do gem 'capybara' gem 'database_cleaner' gem 'steak', '>= 0.4.0.beta.1' gem 'factory_girl_rails'end

Gemfile

Page 118: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

COMO ACHAR ?

Page 119: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 120: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

DEPLOY

Page 121: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 122: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

deploy.rbset :application, "producer"set :ip_address , "208.88.125.20"

# GIT SETTINGSset :scm, :gitset :repository, "[email protected]:danielvlopes/producer.git"set :branch, "master"set :deploy_via, :remote_cache

# SSH SETTINGSset :user , "rails"set :deploy_to, "/home/rails/#{application}"set :shared_directory, "#{deploy_to}/shared"set :use_sudo, falseset :group_writable, falsedefault_run_options[:pty] = true

# ROLESrole :app, ip_addressrole :web, ip_addressrole :db, ip_address, :primary => true

# HOOKSafter 'deploy:setup', 'db:setup'

after 'deploy:update_code' do db.symlink assets.symlinkend

Page 123: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

TESTES

Page 124: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 125: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

RSpec Steak

Cucumber Test::Unit

Minitest Bacon Should

Factory Girl Fabrication

Machinist Mocha RR

Page 126: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Feature: Authenticate In order to see my previous links As a user I want to be able to create an account

Scenario: Creating a new account Given I am not authenticated When I go to register And I fill in the following: | Email | [email protected] | | Password | 123456 | | Password confirmation | 123456 | And I press "Sign up" Then I should see "You have signed up successfully"

Cucumber

http://github.com/danielvlopes/buggy/blob/master/features/authenticate.feature

Page 127: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

feature "Catalog", %q{ In order to display a catalog in devices As registered publisher I want to manage a catalog.} do

background do ensure_not_logged_in @owner = Factory :app, :name => "1Password" end

scenario "Create catalog for 1Password", :js => true do visit new_catalog_page_for(@owner)

select "shelf/metal", :from => "Theme" fill_in "Title", :with => "Appextras"

drag_to_catalog available_app click "Create Catalog"

should_have_notice "Catalog was successfully created." end

Steak

Page 128: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

describe Guest do before do @room = Room.new("Room 35", Type::Master.new) @hosting = Hosting.new(@room, 5) @guest = Guest.new("Daniel Lopes", @hosting) end

it "should have a name" do assert_equal "Daniel Lopes", @guest.name end

describe "when print the invoice" do it "should have the guest name" do assert_match /Daniel Lopes/, @guest.invoice end

it "should have the room name" do assert_match /Room 35/, @guest.invoice end

it "should have the total amount" do assert_match /Valor total: 1000/, @guest.invoice end

it "should have the discount points earned with that hosting" do assert_match /Você ganhou 6 ponto\(s\)/, @guest.invoice end endend

Minispec

Page 129: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

COMUNIDADE

Page 130: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

guides.rubyonrails.org

Page 131: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

peepcode.com

Page 132: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

railscasts.com

Page 133: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

akitaonrails.com

Page 134: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

egenial.com.br/cursos

Page 135: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

github.com

Page 136: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 137: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

MITOS

Page 138: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 139: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Ruby é Lento

Page 141: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

slideshare.net

Page 142: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 143: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Home 331 ms

Total 5.45 ms

http://railsmg.org/meetings/1

Page 144: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 145: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Rails NÃO ESCALA

Page 146: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 147: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Friendster foi escrito em Java e mudaram para PHP.

MySpace foi escrito em ColdFusion e mudaram ASP.NET.

Quando as pessoas caem em problemas de escalabilidade, normalmente acham que a linguagem é o problema, mas eu acho que isso raramente é a realidade.

http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter

Page 148: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

“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

Page 149: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

RAILS é a SALVAÇÃO

Page 150: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 151: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 152: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 153: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 154: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

VAMOS SER AGILE

Page 155: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 156: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 157: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 158: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 159: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 160: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 161: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

http://www.vimeo.com/1752667

Page 162: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Recapitulando

Page 163: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

entregue rápido

Page 164: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

entregue rápidoentregue sempre

Page 165: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

entregue rápidoentregue sempre

com qualidade

Page 166: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

SEJA SEMPRE PROFISSIONAL

Page 167: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Vídeo Uncle Bob

Page 168: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

Aprender Ruby e Railsvão te tornar um

profissional melhor

Page 169: Filosofia Ruby e Rails (UFOP e Inforuso 2010)
Page 170: Filosofia Ruby e Rails (UFOP e Inforuso 2010)

CURSOS

egenial.com.br/cursorails

egenial.com.br/imersaorubyonrails

CONTATOS

blog.areacriacoes.com.br

twitter @danielvlopes

[email protected]


Top Related