Encontro de TI - Arteccom

Post on 28-May-2015

607 views 0 download

Tags:

description

Palestra sobre Agilidade e Ruby on Rails no Encontro de TI do Rio de Janeiro, pela Arteccom.

transcript

Ruby on RailsEcossistema e Agilidade

Wednesday, April 8, 2009

Ruby on RailsEcossistema e Agilidade

Wednesday, April 8, 2009

Wednesday, April 8, 2009

1Wednesday, April 8, 2009

Wednesday, April 8, 2009

Aplicações vs. Frameworks

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

“Produtividade”

“Quick’n Dirty”

Mantenabilidade

DÉBITO TÉCNICO

Wednesday, April 8, 2009

“Produtividade”

“Quick’n Dirty”

Mantenabilidade

DÉBITO TÉCNICO

Wednesday, April 8, 2009

“Produtividade”

“Quick’n Dirty”

Mantenabilidade

DÉBITO TÉCNICO

Wednesday, April 8, 2009

“Produtividade”

“Quick’n Dirty”

Mantenabilidade

DÉBITO TÉCNICO

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Codificadoresx

Desenvolvedores

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Martin Fowler

Wednesday, April 8, 2009

Agile

Wednesday, April 8, 2009

AGILIDADE

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Estamos “descobrindo” maneiras melhores de desenvolver software na prática e ajudando outros

a desenvolver.

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Big Design Up Front

“Waterfall” (Cascata)

Escopo Fechado

“Change Requests”

Wednesday, April 8, 2009

Big Design Up Front

“Waterfall” (Cascata)

Escopo Fechado

“Change Requests”

Wednesday, April 8, 2009

Big Design Up Front

“Waterfall” (Cascata)

Escopo Fechado

“Change Requests”

Wednesday, April 8, 2009

Big Design Up Front

“Waterfall” (Cascata)

Escopo Fechado

“Change Requests”

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Ceticismo

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Winston W. Royce - 1970

Wednesday, April 8, 2009

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

e convida falhas.”

Winston W. Royce - 1970

Wednesday, April 8, 2009

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

e convida falhas.”

Winston W. Royce - 1970

Wednesday, April 8, 2009

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

e convida falhas.”

Winston W. Royce - 1970

Wednesday, April 8, 2009

“Cargo Cult”

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

“SOFT”WARE

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Agilidade NÃO é metodologia

Wednesday, April 8, 2009

Agilidade são valores, cultura.

Wednesday, April 8, 2009

1Wednesday, April 8, 2009

2Wednesday, April 8, 2009

1993

“Matz”

Wednesday, April 8, 2009

2001

“Prag Dave”

Wednesday, April 8, 2009

2004

“DHH”

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

“Tornar as coisas simples fáceis e as coisas

complexas possíveis”

Filosofia Ruby do 80/20

Wednesday, April 8, 2009

Ruby on Rails

Wednesday, April 8, 2009

RUBY

Wednesday, April 8, 2009

ActiveSupportRails

RUBY

Wednesday, April 8, 2009

ActionPack

ActionController

ActionView

ActiveSupportRails

RUBY

Wednesday, April 8, 2009

ActiveRecord

ActionPack

ActionController

ActionView

ActiveSupportRails

RUBY

Wednesday, April 8, 2009

ActiveRecord

ActionPack

ActionMailer

ActionController

ActionView

ActiveSupportRails

RUBY

Wednesday, April 8, 2009

ActiveRecord

ActionPack

ActiveResource

ActionMailer

ActionController

ActionView

ActiveSupportRails

ActionWebService

RUBY

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 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

Wednesday, April 8, 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

Product.find(1)

Wednesday, April 8, 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

Wednesday, April 8, 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

Wednesday, April 8, 2009

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

Controller

Wednesday, April 8, 2009

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

Controller

/users/1

Wednesday, April 8, 2009

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 endend

Rotas RESTFul

Wednesday, April 8, 2009

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 endend

Rotas RESTFul

GET /products/newGET /productsPOST /productsGET /products/1GET /products/1/editPUT /products/1DESTROY /products/1

Wednesday, April 8, 2009

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 endend

Migrations

Wednesday, April 8, 2009

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 endend

Migrations

rake db:migrate

Wednesday, April 8, 2009

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 endend

RSpec

Wednesday, April 8, 2009

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 endend

RSpec

rake spec

Wednesday, April 8, 2009

Cucumber

Funcionalidade: Criar Post no Blog

Para conseguir divulgar minhas idéiasComo um bloggerEu quero conseguir criar um post no meu blog

Cenário: Criando um novo Post

Dado que estou na página de Administração E que eu preencho o formulário de novo post Então quero conseguir visualizar o título do novo post na homepage

Wednesday, April 8, 2009

“Beautiful Code”

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

11 mil classes!

46 só de Collections!

Wednesday, April 8, 2009

• Modules:

• Enumerable

• Comparable

• Classes:

• Array

• Hash

• Set

• Sorted Set

Wednesday, April 8, 2009

• Modules:

• Enumerable

• Comparable

• Classes:

• Array

• Hash

• Set

• Sorted Set

1.400classes

só 6 de Collections!

Wednesday, April 8, 2009

• Convention over Configuration

• Don’t Repeat Yourself

• You Ain’t Gonna Need It

• Boas Práticas

• Escalabilidade

• Segurança

• Automação

Wednesday, April 8, 2009

2Wednesday, April 8, 2009

3Wednesday, April 8, 2009

Mitos

Wednesday, April 8, 2009

Rails não Escala

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Blaine Cook

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

Para colocar as coisas em perspectiva, o Friendster foi

escrito em Java no começo, mas mudou para PHP. O MySpace foi

escrito em ColdFusion e transicionou para ASP.NET.

Quando as pessoas caem em problemas de escalabilidade,

costumam pensar sempre que o problema é a linguagem, mas eu acho que esse raramente é o

caso.

Wednesday, April 8, 2009

http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise?fp=16&fpid=1

“O New York Times usou Ruby on Rails para juntar, analisar e mostrar resultados das eleições quase em

real time em um dos dias mais congestionados de tráfego que já se viu. ”

Wednesday, April 8, 2009

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

“Eles servem mais de 23 milhões de visitantes por mês. A conversão resultou em 20 mil linhas de código Ruby em vez de 125 mil de Java, e mais importante, facilitou a dificuldade que tinham em manter isso. Uma vez finalizado e otimizado o site

deles agora é mais rápido que antes. Eles também finalizaram a re-escrita em 3 meses com 4 desenvolvedores.”

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Mitos

Wednesday, April 8, 2009

Rails é mal documentado

Wednesday, April 8, 2009

Geoffrey

Wednesday, April 8, 2009

Jason e Gregg

Wednesday, April 8, 2009

Pratik Naik

Wednesday, April 8, 2009

Satish Talim

Wednesday, April 8, 2009

Peter Cooper

Wednesday, April 8, 2009

Peter Cooper

Wednesday, April 8, 2009

_why

Wednesday, April 8, 2009

Ryan Bates

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

3Wednesday, April 8, 2009

4Wednesday, April 8, 2009

Open Source

Wednesday, April 8, 2009

Chris Wanstrath

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

Wednesday, April 8, 2009

4Wednesday, April 8, 2009

“Especialista de uma coisa só é um amador em todo o

resto.”

Wednesday, April 8, 2009

Obrigado!fabio.akita@locaweb.com.br

Wednesday, April 8, 2009