rs on rails 2011
DESCRIPTION
Discutindo Rails e Arquiteturas. Palestra para a RS on Rails 2011TRANSCRIPT
![Page 1: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/1.jpg)
Discutindo Railse Arquiteturas
a apresentação já vai começar ...
![Page 2: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/2.jpg)
Discutindo Railse Arquiteturas
![Page 3: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/3.jpg)
Fabio Akitawww.akitaonrails.com
@akitaonrails
![Page 4: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/4.jpg)
![Page 5: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/5.jpg)
1 ano atrás 4 pessoas
Hoje 20 pessoas+ USD 1 Milhão/ano
![Page 6: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/6.jpg)
1 ano atrás 4 pessoas
Hoje 20 pessoas+ USD 1 Milhão/ano
![Page 7: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/7.jpg)
1 ano atrás 4 pessoas
Hoje 20 pessoas+ USD 1 Milhão/ano
![Page 8: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/8.jpg)
~1990
![Page 9: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/9.jpg)
Anos 80 Fim Anos 90 Século XXI
![Page 10: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/10.jpg)
Perl
C
Anos 80 Fim Anos 90 Século XXI
Basic
dBase III
Clipper
Pascal
Delphi
ASP
PHP
Python
.NET
Java
ABAP
Ruby
ObjCVB6
![Page 11: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/11.jpg)
![Page 12: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/12.jpg)
1.8.71.9.2
1.9.3-dev2.3.123.0.9
3.1-RC4
![Page 13: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/13.jpg)
1.8.71.9.2
1.9.3-dev2.3.123.0.9
3.1-RC4
![Page 14: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/14.jpg)
1.8.71.9.2
1.9.3-dev2.3.123.0.9
3.1-RC4
![Page 15: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/15.jpg)
Web Server
Rack Middlewares
Routes
Controller
ModelView
Request
![Page 16: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/16.jpg)
Web Server
Rack Middlewares
Routes
Controller
ModelView
Request
![Page 17: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/17.jpg)
Web Server
Rack Middlewares
Routes
Controller
ModelView
Request
![Page 18: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/18.jpg)
Web Server
Rack Middlewares
Routes
Controller
ModelView
Request
![Page 19: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/19.jpg)
Web Server
Rack Middlewares
Routes
Controller
ModelView
Request
![Page 20: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/20.jpg)
Web Server
Rack Middlewares
Routes
Controller
ModelView
Request
![Page 21: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/21.jpg)
Web Server
Rack Middlewares
Routes
Controller
ModelView
Request
![Page 22: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/22.jpg)
Web Server
Rack Middlewares
Routes
Controller
ModelView
Request
![Page 23: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/23.jpg)
Web Server
Rack Middlewares
Routes
Controller
ModelView
Request
![Page 24: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/24.jpg)
Web Server
Rack Middlewares
Routes
Controller
ModelView
Request
![Page 25: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/25.jpg)
Web Server
Rack Middlewares
Routes
Controller
ModelView
Request
![Page 26: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/26.jpg)
Web Server
Rack Middlewares
Routes
Controller
ModelView
Response Request
![Page 27: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/27.jpg)
Application Server Rack:
Unicorn, Passenger
Web Server
Rack Middlewares
Routes
Controller
ModelView
Response Request
![Page 28: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/28.jpg)
Web Server:
NginXApache
Application Server Rack:
Unicorn, Passenger
Web Server
Rack Middlewares
Routes
Controller
ModelView
Response Request
![Page 29: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/29.jpg)
NginX, Apache
Unicorn, Passenger
Reverse Proxy
ActiveRecord/DataMapper
RDBMS/NoSQL
![Page 30: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/30.jpg)
NginX, Apache
Unicorn, Passenger
Reverse Proxy
ActiveRecord/DataMapper
RDBMS/NoSQLWeb Services (REST, SOAP)
RestClient/Savon
HAProxy
![Page 31: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/31.jpg)
NginX, Apache
Unicorn, Passenger
Reverse Proxy
ActiveRecord/DataMapper
RDBMS/NoSQLWeb Services (REST, SOAP)
RestClient/Savon
HAProxy
Varnish
![Page 32: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/32.jpg)
NginX, Apache
Unicorn, Passenger
Reverse Proxy
ActiveRecord/DataMapper
RDBMS/NoSQLWeb Services (REST, SOAP)
RestClient/Savon
HAProxy
Memcached
Varnish
![Page 33: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/33.jpg)
HTTPD
Request Request Request Request Request Request
RailsApp
RailsApp
RailsApp
RailsApp
RailsApp
RailsApp
RDBMS
HTTPD HTTPD HTTPD HTTPD HTTPD
![Page 34: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/34.jpg)
HTTPD
Request Request Request Request Request Request
RailsApp
RailsApp
RailsApp
RailsApp
RailsApp
RailsApp
RDBMS
HTTPD HTTPD HTTPD HTTPD HTTPD
![Page 35: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/35.jpg)
HTTPD
Request Request Request Request Request Request
RailsApp
RailsApp
RailsApp
RailsApp
RailsApp
RailsApp
RDBMS
HTTPD HTTPD HTTPD HTTPD HTTPD
Mais curto possível!
![Page 36: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/36.jpg)
Thread Context Switch
![Page 37: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/37.jpg)
Thread Context Switch
![Page 38: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/38.jpg)
Request RailsApp
![Page 39: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/39.jpg)
![Page 40: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/40.jpg)
![Page 41: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/41.jpg)
![Page 42: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/42.jpg)
![Page 43: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/43.jpg)
![Page 44: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/44.jpg)
![Page 45: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/45.jpg)
Eventos AssíncronosEnvio de mensagens
![Page 46: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/46.jpg)
HTTPD
Request Request Request Request Request Request
RailsApp
RailsApp
RailsApp
RailsApp
RailsApp
RailsApp
RDBMS
HTTPD HTTPD HTTPD HTTPD HTTPD
![Page 47: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/47.jpg)
NginX
Request Request Request Request Request Request
RDBMS
Async App
![Page 48: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/48.jpg)
NginX
Request Request Request Request Request Request
RDBMS
Async App“Look Ma!
No Threads!”
![Page 49: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/49.jpg)
NginX
Request Request Request Request Request Request
RDBMS
Async App“Look Ma!
No Threads!”
5k ~ 10kconexões
![Page 50: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/50.jpg)
NginX
Request Request Request Request Request Request
RDBMS
Async App“Look Ma!
No Threads!”
5k ~ 10kconexões
ConexõesLongas
![Page 51: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/51.jpg)
![Page 52: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/52.jpg)
![Page 53: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/53.jpg)
![Page 54: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/54.jpg)
![Page 55: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/55.jpg)
![Page 56: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/56.jpg)
EventMachine.run do conn = { :host => "0.0.0.0", :port => 8080 } EventMachine::WebSocket.start(conn) do |ws| ws.onopen do puts "WebSocket connection open" # publish message to the client ws.send "Hello Client" end ws.onclose { puts "Connection closed" } ws.onmessage do |msg| puts "Recieved message: #{msg}" ws.send "Pong: #{msg}" end endend
![Page 57: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/57.jpg)
EventMachine.run do conn = { :host => "0.0.0.0", :port => 8080 } EventMachine::WebSocket.start(conn) do |ws| ws.onopen do puts "WebSocket connection open" # publish message to the client ws.send "Hello Client" end ws.onclose { puts "Connection closed" } ws.onmessage do |msg| puts "Recieved message: #{msg}" ws.send "Pong: #{msg}" end endend
![Page 58: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/58.jpg)
EventMachine.run do conn = { :host => "0.0.0.0", :port => 8080 } EventMachine::WebSocket.start(conn) do |ws| ws.onopen do puts "WebSocket connection open" # publish message to the client ws.send "Hello Client" end ws.onclose { puts "Connection closed" } ws.onmessage do |msg| puts "Recieved message: #{msg}" ws.send "Pong: #{msg}" end endend
![Page 59: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/59.jpg)
EventMachine.run do conn = { :host => "0.0.0.0", :port => 8080 } EventMachine::WebSocket.start(conn) do |ws| ws.onopen do puts "WebSocket connection open" # publish message to the client ws.send "Hello Client" end ws.onclose { puts "Connection closed" } ws.onmessage do |msg| puts "Recieved message: #{msg}" ws.send "Pong: #{msg}" end endend
![Page 60: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/60.jpg)
EventMachine.run do conn = { :host => "0.0.0.0", :port => 8080 } EventMachine::WebSocket.start(conn) do |ws| ws.onopen do puts "WebSocket connection open" # publish message to the client ws.send "Hello Client" end ws.onclose { puts "Connection closed" } ws.onmessage do |msg| puts "Recieved message: #{msg}" ws.send "Pong: #{msg}" end endend
![Page 61: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/61.jpg)
EventMachine.run do conn = { :host => "0.0.0.0", :port => 8080 } EventMachine::WebSocket.start(conn) do |ws| ws.onopen do puts "WebSocket connection open" # publish message to the client ws.send "Hello Client" end ws.onclose { puts "Connection closed" } ws.onmessage do |msg| puts "Recieved message: #{msg}" ws.send "Pong: #{msg}" end endend
![Page 62: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/62.jpg)
EventMachine.run do conn = { :host => "0.0.0.0", :port => 8080 } EventMachine::WebSocket.start(conn) do |ws| ws.onopen do puts "WebSocket connection open" # publish message to the client ws.send "Hello Client" end ws.onclose { puts "Connection closed" } ws.onmessage do |msg| puts "Recieved message: #{msg}" ws.send "Pong: #{msg}" end endend
![Page 63: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/63.jpg)
EventMachine.run do conn = { :host => "0.0.0.0", :port => 8080 } EventMachine::WebSocket.start(conn) do |ws| ws.onopen do puts "WebSocket connection open" # publish message to the client ws.send "Hello Client" end ws.onclose { puts "Connection closed" } ws.onmessage do |msg| puts "Recieved message: #{msg}" ws.send "Pong: #{msg}" end endend
![Page 64: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/64.jpg)
EventMachine.run do conn = { :host => "0.0.0.0", :port => 8080 } EventMachine::WebSocket.start(conn) do |ws| ws.onopen do puts "WebSocket connection open" # publish message to the client ws.send "Hello Client" end ws.onclose { puts "Connection closed" } ws.onmessage do |msg| puts "Recieved message: #{msg}" ws.send "Pong: #{msg}" end endend
![Page 65: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/65.jpg)
![Page 66: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/66.jpg)
<script src="http://js.pusherapp.com/1.8/pusher.min.js"></script>
<script>var pusher = new Pusher('API_KEY');var myChannel = pusher.subscribe('MEU_CANAL');</script>
![Page 67: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/67.jpg)
<script src="http://js.pusherapp.com/1.8/pusher.min.js"></script>
<script>var pusher = new Pusher('API_KEY');var myChannel = pusher.subscribe('MEU_CANAL');</script>
![Page 68: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/68.jpg)
<script src="http://js.pusherapp.com/1.8/pusher.min.js"></script>
<script>var pusher = new Pusher('API_KEY');var myChannel = pusher.subscribe('MEU_CANAL');</script>
![Page 69: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/69.jpg)
myChannel.bind('coisa-criada', function(thing) { alert('Uma coisa foi criada: ' + thing.name);});
![Page 70: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/70.jpg)
myChannel.bind('coisa-criada', function(thing) { alert('Uma coisa foi criada: ' + thing.name);});
![Page 71: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/71.jpg)
myChannel.bind('coisa-criada', function(thing) { alert('Uma coisa foi criada: ' + thing.name);});
![Page 72: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/72.jpg)
require 'pusher'
Pusher.app_id = 'APP_ID'Pusher.key = 'API_KEY'Pusher.secret = 'SECRET_KEY'
class ThingsController < ApplicationController def create @thing = Thing.new(params[:thing])
if @thing.save Pusher['MEU_CANAL'].trigger('coisa-criada', @thing.attributes) end endend
![Page 73: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/73.jpg)
require 'pusher'
Pusher.app_id = 'APP_ID'Pusher.key = 'API_KEY'Pusher.secret = 'SECRET_KEY'
class ThingsController < ApplicationController def create @thing = Thing.new(params[:thing])
if @thing.save Pusher['MEU_CANAL'].trigger('coisa-criada', @thing.attributes) end endend
![Page 74: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/74.jpg)
require 'pusher'
Pusher.app_id = 'APP_ID'Pusher.key = 'API_KEY'Pusher.secret = 'SECRET_KEY'
class ThingsController < ApplicationController def create @thing = Thing.new(params[:thing])
if @thing.save Pusher['MEU_CANAL'].trigger('coisa-criada', @thing.attributes) end endend
![Page 75: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/75.jpg)
require 'pusher'
Pusher.app_id = 'APP_ID'Pusher.key = 'API_KEY'Pusher.secret = 'SECRET_KEY'
class ThingsController < ApplicationController def create @thing = Thing.new(params[:thing])
if @thing.save Pusher['MEU_CANAL'].trigger('coisa-criada', @thing.attributes) end endend
![Page 76: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/76.jpg)
![Page 77: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/77.jpg)
Arquitetura de Altíssima Concorrência
![Page 78: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/78.jpg)
(
![Page 79: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/79.jpg)
W. Edward Deming
![Page 80: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/80.jpg)
![Page 81: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/81.jpg)
IN GOD WE TRUST
Todos os outros devem trazer dados
![Page 82: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/82.jpg)
![Page 83: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/83.jpg)
EXPERIENCE BY ITSELF BRINGSNOTHING
![Page 84: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/84.jpg)
ACD
P
Ciclo “Plan-Do-Check-Act”(melhoria contínua)
![Page 85: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/85.jpg)
ACD
P
STANDARD
Ciclo “Plan-Do-Check-Act”(melhoria contínua)
![Page 86: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/86.jpg)
ACD
P
Ciclo “Plan-Do-Check-Act”(melhoria contínua)
![Page 87: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/87.jpg)
ACD
P
Ciclo “Plan-Do-Check-Act”(melhoria contínua)
![Page 88: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/88.jpg)
ACD
P
Ciclo “Plan-Do-Check-Act”(melhoria contínua)
![Page 89: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/89.jpg)
ACD
P
Ciclo “Plan-Do-Check-Act”(melhoria contínua)
![Page 90: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/90.jpg)
)
![Page 91: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/91.jpg)
![Page 92: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/92.jpg)
![Page 93: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/93.jpg)
![Page 94: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/94.jpg)
![Page 95: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/95.jpg)
![Page 96: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/96.jpg)
![Page 97: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/97.jpg)
![Page 98: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/98.jpg)
Perl
![Page 99: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/99.jpg)
![Page 100: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/100.jpg)
Python
![Page 101: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/101.jpg)
![Page 102: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/102.jpg)
PHP
![Page 103: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/103.jpg)
![Page 104: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/104.jpg)
Ruby
![Page 105: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/105.jpg)
OMG!
![Page 106: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/106.jpg)
2007
2008
2009
2010
2011
Ruby on Rails
![Page 107: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/107.jpg)
2.0.0
2.1.0
2.2.0
2.3.0
3.0.0
2.0.5
2.1.2
2.2.3
2.3.12
3.0.9
2007
2008
2009
2010
2011
6
3
4
12
10
Ruby on Rails
![Page 108: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/108.jpg)
2.0.0
2.1.0
2.2.0
2.3.0
3.0.0
2.0.5
2.1.2
2.2.3
2.3.12
3.0.9
2007
2008
2009
2010
2011
Ruby on Rails
34Versões!
![Page 109: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/109.jpg)
![Page 110: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/110.jpg)
Web Server
Request
RailsApp
/public/stylesheets
![Page 111: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/111.jpg)
Web Server
Request
RailsApp
ArquivosEstáticos
/public/stylesheets
![Page 112: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/112.jpg)
![Page 113: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/113.jpg)
Variáveis/* CSS */
.content-navigation { border-color: #3bbfce; color: #2b9eab;}
.border { padding: 8px; margin: 8px; border-color: #3bbfce;}
$blue: #3bbfce;$margin: 16px;
.content-navigation { border-color: $blue; color: darken($blue, 9%);}
.border { padding: $margin / 2; margin: $margin / 2; border-color: $blue;}
![Page 114: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/114.jpg)
Nestingtable.hl { margin: 2em 0; td.ln { text-align: right; }}
li { font: { family: serif; weight: bold; size: 1.2em; }}
/* CSS */
table.hl { margin: 2em 0;}table.hl td.ln { text-align: right;}
li { font-family: serif; font-weight: bold; font-size: 1.2em;}
![Page 115: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/115.jpg)
Mixins@mixin table-base { th { text-align: center; font-weight: bold; } td, th {padding: 2px}}
@mixin left($dist) { float: left; margin-left: $dist;}
#data { @include left(10px); @include table-base;}
/* CSS */
#data { float: left; margin-left: 10px;}#data th { text-align: center; font-weight: bold;}#data td, #data th { padding: 2px;}
![Page 116: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/116.jpg)
Selector Inheritance.error { border: 1px #f00; background: #fdd;}.error.intrusion { font-size: 1.3em; font-weight: bold;}
.badError { @extend .error; border-width: 3px;}
/* CSS */
.error, .badError { border: 1px #f00; background: #fdd;}
.error.intrusion,
.badError.intrusion { font-size: 1.3em; font-weight: bold;}
.badError { border-width: 3px;}
![Page 117: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/117.jpg)
![Page 118: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/118.jpg)
class Animal constructor: (@name) ->
move: (meters) -> alert @name + " moved " + meters + "m."
class Snake extends Animal move: -> alert "Slithering..." super 5
class Horse extends Animal move: -> alert "Galloping..." super 45
sam = new Snake "Sammy the Python"tom = new Horse "Tommy the Palomino"
sam.move()tom.move()
![Page 119: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/119.jpg)
class Animal constructor: (@name) ->
move: (meters) -> alert @name + " moved " + meters + "m."
class Snake extends Animal move: -> alert "Slithering..." super 5
class Horse extends Animal move: -> alert "Galloping..." super 45
sam = new Snake "Sammy the Python"tom = new Horse "Tommy the Palomino"
sam.move()tom.move()
var Animal, Horse, Snake, sam, tom;var __hasProp = Object.prototype.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child;};Animal = (function() { function Animal(name) { this.name = name; } Animal.prototype.move = function(meters) { return alert(this.name + " moved " + meters + "m."); }; return Animal;})();Snake = (function() { __extends(Snake, Animal); function Snake() { Snake.__super__.constructor.apply(this, arguments); } Snake.prototype.move = function() { alert("Slithering..."); return Snake.__super__.move.call(this, 5); }; return Snake;})();Horse = (function() { __extends(Horse, Animal); function Horse() { Horse.__super__.constructor.apply(this, arguments); } Horse.prototype.move = function() { alert("Galloping..."); return Horse.__super__.move.call(this, 45); }; return Horse;})();sam = new Snake("Sammy the Python");tom = new Horse("Tommy the Palomino");sam.move();tom.move();loadrun
![Page 120: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/120.jpg)
![Page 121: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/121.jpg)
![Page 122: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/122.jpg)
102
![Page 123: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/123.jpg)
Web Server(Produção)
Request
RailsApp
/app/assets
Web Server(Desenvolvimento)
Request
/public
![Page 124: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/124.jpg)
Web Server(Produção)
Request
RailsApp
/app/assets
Web Server(Desenvolvimento)
Request
Sprockets
/public
![Page 125: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/125.jpg)
Web Server(Produção)
Request
RailsApp
/app/assets
Web Server(Desenvolvimento)
Request
Sprockets
Tilt
/public
![Page 126: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/126.jpg)
Web Server(Produção)
Request
RailsApp
/app/assets
Web Server(Desenvolvimento)
Request
Sprockets
Tilt
Ugli!er
/public
![Page 127: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/127.jpg)
ENGINE FILE EXTENSIONS REQUIRED LIBRARIES
ERB .erb, .rhtmlnone
Interpolated String .strnone
Erubis .erb, .rhtml, .erubis erubis
Haml .haml haml
Sass .sasssass
Scss .scsssass
Less CSS .less less
Builder .builder builder
Liquid .liquid liquid
RDiscount
.markdown, .mkd, .md
rdiscount
Redcarpet
.markdown, .mkd, .md
redcarpet
BlueCloth .markdown, .mkd, .md bluecloth
Kramdown
.markdown, .mkd, .md
kramdown
Maruku
.markdown, .mkd, .md
maruku
RedCloth .textile redcloth
RDoc .rdoc rdoc
Radius .radius radius
Markaby .mab markaby
Nokogiri .nokogiri nokogiri
CoffeeScript .coffee coffee-script
Creole (Wiki markup) .creole creole
![Page 128: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/128.jpg)
![Page 129: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/129.jpg)
jQuery Tamanho Tempo
Original Size 621kb
Google Closure 234kb 6.5s
YUI Compressor 240kb 2.7s
UglifyJS 235kb 1.3s
![Page 130: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/130.jpg)
jQuery Tamanho Tempo
Original Size 621kb
Google Closure 234kb 6.5s
YUI Compressor 240kb 2.7s
UglifyJS 235kb 1.3s
![Page 131: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/131.jpg)
jQuery Tamanho Tempo
Original Size 621kb
Google Closure 234kb 6.5s
YUI Compressor 240kb 2.7s
UglifyJS 235kb 1.3s
![Page 132: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/132.jpg)
jQuery Tamanho Tempo
Original Size 621kb
Google Closure 234kb 6.5s
YUI Compressor 240kb 2.7s
UglifyJS 235kb 1.3s
![Page 133: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/133.jpg)
jQuery Tamanho Tempo
Original Size 621kb
Google Closure 234kb 6.5s
YUI Compressor 240kb 2.7s
UglifyJS 235kb 1.3s
![Page 134: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/134.jpg)
![Page 135: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/135.jpg)
![Page 136: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/136.jpg)
![Page 137: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/137.jpg)
Rails 3.1:Release Candidate
(may 2011)
![Page 138: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/138.jpg)
![Page 139: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/139.jpg)
![Page 140: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/140.jpg)
![Page 141: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/141.jpg)
![Page 142: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/142.jpg)
![Page 143: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/143.jpg)
RubyConfBrasil
3 e 4 de Novembrowww.rubyconf.com.br
![Page 144: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/144.jpg)
<epílogo>
![Page 145: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/145.jpg)
![Page 146: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/146.jpg)
![Page 147: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/147.jpg)
Como o cliente explicou
Como o Líder de Projeto entendeu
Como o Analista desenhou
Como o Programador escreveu
Como o Consultor de Negócios descreveu
Como o projeto foi documentado
Como Operações instalou
Como o cliente foi cobrado Como foi o suporte
O que o cliente realmente queria
![Page 148: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/148.jpg)
Requerimentos:ENTENDIDO!
![Page 149: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/149.jpg)
![Page 150: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/150.jpg)
LOL
![Page 151: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/151.jpg)
DESIGN
![Page 152: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/152.jpg)
DESIGN
![Page 153: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/153.jpg)
![Page 154: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/154.jpg)
![Page 155: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/155.jpg)
Pattern PADRÃO
![Page 156: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/156.jpg)
Pattern PADRÃO
Default
STANDARD
![Page 157: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/157.jpg)
“Pattern”
![Page 158: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/158.jpg)
![Page 159: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/159.jpg)
![Page 160: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/160.jpg)
NÃO é “Standard”!
![Page 161: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/161.jpg)
Christopher Alexander
![Page 162: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/162.jpg)
![Page 163: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/163.jpg)
![Page 164: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/164.jpg)
![Page 165: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/165.jpg)
![Page 166: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/166.jpg)
cada padrão (“pattern”)representa nosso melhor chute agora ... os padrões ainda são hipóteses, ... e portanto todos são
tentativas, todos livres para evoluir sob o impacto de novas experiências e
observações."
Christopher Alexander
![Page 167: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/167.jpg)
![Page 168: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/168.jpg)
2 + 2 = 5!
![Page 169: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/169.jpg)
2 + 2 = 5!
![Page 170: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/170.jpg)
2 + 2 = 4!
![Page 171: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/171.jpg)
![Page 172: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/172.jpg)
Bertrand Russel
![Page 173: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/173.jpg)
Bertrand Russel
![Page 174: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/174.jpg)
![Page 175: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/175.jpg)
![Page 176: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/176.jpg)
![Page 177: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/177.jpg)
Aqui estão os fatos. Que conclusões podemos
chegar com eles?
Aqui está a conclusão. Que fatos podemos suportar com eles?
![Page 178: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/178.jpg)
![Page 179: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/179.jpg)
![Page 180: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/180.jpg)
![Page 181: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/181.jpg)
![Page 182: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/182.jpg)
![Page 183: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/183.jpg)
![Page 184: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/184.jpg)
![Page 185: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/185.jpg)
![Page 186: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/186.jpg)
![Page 187: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/187.jpg)
![Page 188: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/188.jpg)
![Page 189: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/189.jpg)
80
![Page 190: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/190.jpg)
20
80
![Page 191: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/191.jpg)
20
80
![Page 192: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/192.jpg)
20
80“Long Tail”
![Page 193: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/193.jpg)
![Page 194: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/194.jpg)
![Page 195: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/195.jpg)
![Page 196: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/196.jpg)
![Page 197: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/197.jpg)
@pedroh96
Pedro Franceschi
![Page 198: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/198.jpg)
15 anos
@pedroh96
Pedro Franceschi
![Page 199: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/199.jpg)
9 anos
@pedroh96
Pedro Franceschi
![Page 200: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/200.jpg)
6 anos
@pedroh96
Pedro Franceschi
![Page 201: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/201.jpg)
@pedroh96
Pedro Franceschi
![Page 202: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/202.jpg)
![Page 203: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/203.jpg)
![Page 204: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/204.jpg)
![Page 205: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/205.jpg)
![Page 206: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/206.jpg)
![Page 207: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/207.jpg)
<epílogo>
![Page 208: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/208.jpg)
Obrigado!
.com.br
www.akitaonrails.com
u.akita.ws/rsonrails11
![Page 209: Rs on Rails 2011](https://reader034.vdocuments.net/reader034/viewer/2022042510/5555a73fd8b42a52568b4755/html5/thumbnails/209.jpg)
Obrigado!
.com.br
www.akitaonrails.com
u.akita.ws/rsonrails11