SlideShare a Scribd company logo
Discutindo Rails
 e Arquiteturas

  a apresentação já vai começar ...
Discutindo Rails
 e Arquiteturas
Fabio Akita
www.akitaonrails.com
  @akitaonrails
Rs on Rails 2011
1 ano atrás       4 pessoas


                  20 pessoas
   Hoje
              + USD 1 Milhão/ano
1 ano atrás       4 pessoas


                  20 pessoas
   Hoje
              + USD 1 Milhão/ano
1 ano atrás       4 pessoas


                  20 pessoas
   Hoje
              + USD 1 Milhão/ano
~1990
Anos 80   Fim Anos 90   Século XXI
Anos 80               Fim Anos 90                    Século XXI

                                            Perl
Basic                 Pascal                              Java
                  C                   PHP

 dBase                    Delphi           Python         ABAP
   III
                                                                 Ruby
        Clipper
                                     ASP           .NET
                                                                 ObjC
                                    VB6
Rs on Rails 2011
1.8.7
  1.9.2
1.9.3-dev
 2.3.12
  3.0.9
3.1-RC4
1.8.7
  1.9.2
1.9.3-dev
 2.3.12
  3.0.9
3.1-RC4
1.8.7
  1.9.2
1.9.3-dev
 2.3.12
  3.0.9
3.1-RC4
Request

       Web Server


   Rack Middlewares


                    Routes

       Controller

View                Model
Request

       Web Server


   Rack Middlewares


                    Routes

       Controller

View                Model
Request

       Web Server


   Rack Middlewares


                    Routes

       Controller

View                Model
Request

       Web Server


   Rack Middlewares


                    Routes

       Controller

View                Model
Request

       Web Server


   Rack Middlewares


                    Routes

       Controller

View                Model
Request

       Web Server


   Rack Middlewares


                    Routes

       Controller

View                Model
Request

       Web Server


   Rack Middlewares


                    Routes

       Controller

View                Model
Request

       Web Server


   Rack Middlewares


                    Routes

       Controller

View                Model
Request

       Web Server


   Rack Middlewares


                    Routes

       Controller

View                Model
Request

       Web Server


   Rack Middlewares


                    Routes

       Controller

View                Model
Request

       Web Server


   Rack Middlewares


                    Routes

       Controller

View                Model
Response                Request

           Web Server


     Rack Middlewares


                        Routes

           Controller

  View                  Model
Response                Request

           Web Server


     Rack Middlewares
                                  Application
                                  Server Rack:
                        Routes
                                   Unicorn,
           Controller
                                  Passenger
  View                  Model
Web Server:

Response                Request     NginX
                                    Apache
           Web Server


     Rack Middlewares
                                  Application
                                  Server Rack:
                        Routes
                                   Unicorn,
           Controller
                                  Passenger
  View                  Model
NginX, Apache



     Reverse Proxy




   Unicorn, Passenger

ActiveRecord/DataMapper



     RDBMS/NoSQL
HAProxy
     NginX, Apache



     Reverse Proxy




   Unicorn, Passenger

ActiveRecord/DataMapper
     RestClient/Savon



     RDBMS/NoSQL
Web Services (REST, SOAP)
HAProxy
     NginX, Apache

                            Varnish
     Reverse Proxy




   Unicorn, Passenger

ActiveRecord/DataMapper
     RestClient/Savon



     RDBMS/NoSQL
Web Services (REST, SOAP)
HAProxy
     NginX, Apache

                             Varnish
     Reverse Proxy




   Unicorn, Passenger

ActiveRecord/DataMapper
     RestClient/Savon
                            Memcached

     RDBMS/NoSQL
Web Services (REST, SOAP)
Request   Request   Request     Request      Request   Request




HTTPD     HTTPD     HTTPD        HTTPD       HTTPD     HTTPD




 Rails     Rails     Rails           Rails    Rails     Rails
 App       App       App             App      App       App




                             RDBMS
Request   Request   Request     Request      Request   Request




HTTPD     HTTPD     HTTPD        HTTPD       HTTPD     HTTPD




 Rails     Rails     Rails           Rails    Rails     Rails
 App       App       App             App      App       App




                             RDBMS
Request   Request   Request     Request      Request   Request




HTTPD     HTTPD     HTTPD        HTTPD       HTTPD     HTTPD




 Rails     Rails     Rails           Rails    Rails     Rails
 App       App       App             App      App       App




 Mais curto                  RDBMS
 possível!
Thread Context Switch
Thread Context Switch
Rails
Request
          App
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Eventos Assíncronos
Envio de mensagens
Request   Request   Request     Request      Request   Request




HTTPD     HTTPD     HTTPD        HTTPD       HTTPD     HTTPD




 Rails     Rails     Rails           Rails    Rails     Rails
 App       App       App             App      App       App




                             RDBMS
Request   Request   Request   Request   Request   Request




                          NginX




                        Async App




                         RDBMS
Request   Request   Request   Request   Request   Request




                          NginX




                        Async App
                                         “Look Ma!
                                        No Threads!”


                         RDBMS
Request   Request   Request   Request   Request   Request




                          NginX

                                          5k ~ 10k
                                          conexões

                        Async App
                                         “Look Ma!
                                        No Threads!”


                         RDBMS
Request   Request   Request   Request   Request   Request




                          NginX

                                          5k ~ 10k
                                          conexões
     Conexões
      Longas            Async App
                                         “Look Ma!
                                        No Threads!”


                         RDBMS
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
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
  end
end
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
  end
end
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
  end
end
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
  end
end
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
  end
end
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
  end
end
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
  end
end
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
  end
end
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
  end
end
Rs on Rails 2011
<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>
<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>
<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>
myChannel.bind('coisa-criada', function(thing) {
  alert('Uma coisa foi criada: ' + thing.name);
});
myChannel.bind('coisa-criada', function(thing) {
  alert('Uma coisa foi criada: ' + thing.name);
});
myChannel.bind('coisa-criada', function(thing) {
  alert('Uma coisa foi criada: ' + thing.name);
});
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
  end
end
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
  end
end
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
  end
end
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
  end
end
Rs on Rails 2011
Arquitetura de
Altíssima Concorrência
(
W. Edward Deming
Rs on Rails 2011
IN GOD WE TRUST
Todos os outros devem trazer dados
Rs on Rails 2011
EXPERIENCE BY ITSELF BRINGS
           NOTHING
Ciclo “Plan-Do-Check-Act”
       (melhoria contínua)




 P A
 D C
Ciclo “Plan-Do-Check-Act”
       (melhoria contínua)




 P A
 D C
      STANDARD
Ciclo “Plan-Do-Check-Act”
       (melhoria contínua)




 P A
 D C
Ciclo “Plan-Do-Check-Act”
       (melhoria contínua)




        P A
        D C
Ciclo “Plan-Do-Check-Act”
       (melhoria contínua)




                      P A
                      D C
Ciclo “Plan-Do-Check-Act”
       (melhoria contínua)



                             P A
                             D C
)
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Perl
Rs on Rails 2011
Python
Rs on Rails 2011
PHP
Rs on Rails 2011
Ruby
OMG!
2011

2010



2009




2008

2007   Ruby on Rails
3.0.9

2011     2.3.12
                               10
2010                   3.0.0
         2.2.3
                               12
2009
                       2.3.0

         2.1.2
                               4
                       2.2.0
          2.0.5                3
                       2.1.0
2008                           6
2007   Ruby on Rails   2.0.0
3.0.9

2011     2.3.12
2010                   3.0.0
         2.2.3
2009

         2.1.2
                       2.3.0
                               34
                       2.2.0   Versões!

          2.0.5
                       2.1.0
2008

2007   Ruby on Rails   2.0.0
Rs on Rails 2011
Request



          Web Server




                      Rails
                      App


/public/stylesheets
Request



                      Web Server


Arquivos
Estáticos                         Rails
                                  App


            /public/stylesheets
Rs on Rails 2011
Variáveis
$blue: #3bbfce;
$margin: 16px;            /* CSS */

.content-navigation {     .content-navigation {
  border-color: $blue;      border-color: #3bbfce;
  color:                    color: #2b9eab;
    darken($blue, 9%);    }
}
                          .border {
.border {                   padding: 8px;
  padding: $margin / 2;     margin: 8px;
  margin: $margin / 2;      border-color: #3bbfce;
  border-color: $blue;    }
}
Nesting
table.hl {               /* CSS */
  margin: 2em 0;
  td.ln {                table.hl {
    text-align: right;     margin: 2em 0;
  }                      }
}                        table.hl td.ln {
                           text-align: right;
li {                     }
  font: {
     family: serif;      li {
     weight: bold;         font-family: serif;
     size: 1.2em;          font-weight: bold;
  }                        font-size: 1.2em;
}                        }
Mixins
@mixin table-base {
  th {
                          /* CSS */
    text-align: center;
    font-weight: bold;
                          #data {
  }
  td, th {padding: 2px}     float: left;
}                           margin-left: 10px;
                          }
@mixin left($dist) {      #data th {
  float: left;              text-align: center;
  margin-left: $dist;       font-weight: bold;
}
                          }
                          #data td, #data th {
#data {
  @include left(10px);      padding: 2px;
  @include table-base;    }
}
Selector Inheritance
                       /* CSS */

.error {
                       .error, .badError {
  border: 1px #f00;
                         border: 1px #f00;
  background: #fdd;
                         background: #fdd;
}
                       }
.error.intrusion {
  font-size: 1.3em;
                       .error.intrusion,
  font-weight: bold;
                       .badError.intrusion {
}
                         font-size: 1.3em;
                         font-weight: bold;
.badError {
                       }
  @extend .error;
  border-width: 3px;
                       .badError {
}
                         border-width: 3px;
                       }
Rs on Rails 2011
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;
class Animal                                     child.__super__ = parent.prototype;
  constructor: (@name) ->                        return child;
                                              };
                                              Animal = (function() {
  move: (meters) ->                              function Animal(name) {
                                                    this.name = name;
    alert @name + " moved " + meters + "m."      }
                                                 Animal.prototype.move = function(meters) {
                                                    return alert(this.name + " moved " + meters + "m.");
class Snake extends Animal                       };
                                                 return Animal;
  move: ->                                    })();
    alert "Slithering..."                     Snake = (function() {
                                                 __extends(Snake, Animal);
    super 5                                      function Snake() {
                                                    Snake.__super__.constructor.apply(this, arguments);
                                                 }
class Horse extends Animal                       Snake.prototype.move = function() {
                                                    alert("Slithering...");
  move: ->                                          return Snake.__super__.move.call(this, 5);
    alert "Galloping..."                         };
                                                 return Snake;
    super 45                                  })();
                                              Horse = (function() {
                                                 __extends(Horse, Animal);
sam = new Snake "Sammy the Python"               function Horse() {
tom = new Horse "Tommy the Palomino"                Horse.__super__.constructor.apply(this, arguments);
                                                 }
                                                 Horse.prototype.move = function() {
                                                    alert("Galloping...");
sam.move()                                          return Horse.__super__.move.call(this, 45);
tom.move()                                       };
                                                 return Horse;
                                              })();
                                              sam = new Snake("Sammy the Python");
                                              tom = new Horse("Tommy the Palomino");
                                              sam.move();
                                              tom.move();
                                              loadrun
Rs on Rails 2011
Rs on Rails 2011
102
Request          Request


   Web Server       Web Server
(Desenvolvimento)   (Produção)




                               Rails
                               App




 /app/assets         /public
Request          Request


   Web Server       Web Server
(Desenvolvimento)   (Produção)




                               Rails
    Sprockets
                               App




 /app/assets         /public
Request          Request


   Web Server       Web Server
(Desenvolvimento)   (Produção)




                               Rails
    Sprockets
                               App

      Tilt




 /app/assets         /public
Request          Request


   Web Server       Web Server
(Desenvolvimento)   (Produção)




                               Rails
    Sprockets
                               App

       Tilt

     Ugli er



 /app/assets         /public
ENGINE                 FILE EXTENSIONS         REQUIRED LIBRARIES

ERB                    .erb, .rhtml
                                               none
Interpolated String    .str

Erubis                 .erb, .rhtml, .erubis   erubis

Haml                   .haml                   haml

Sass                   .sass
                                               sass
Scss                   .scss

Less CSS               .less                   less

Builder                .builder                builder

Liquid                 .liquid                 liquid

RDiscount                                      rdiscount

Redcarpet                                      redcarpet

BlueCloth              .markdown, .mkd, .md    bluecloth

Kramdown                                       kramdown

Maruku                                         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
Rs on Rails 2011
jQuery       Tamanho   Tempo

 Original Size    621kb

Google Closure    234kb     6.5s

YUI Compressor    240kb     2.7s

   UglifyJS      235kb     1.3s
jQuery       Tamanho   Tempo

 Original Size    621kb

Google Closure    234kb     6.5s

YUI Compressor    240kb     2.7s

   UglifyJS      235kb     1.3s
jQuery       Tamanho   Tempo

 Original Size    621kb

Google Closure    234kb     6.5s

YUI Compressor    240kb     2.7s

   UglifyJS      235kb     1.3s
jQuery       Tamanho   Tempo

 Original Size    621kb

Google Closure    234kb     6.5s

YUI Compressor    240kb     2.7s

   UglifyJS      235kb     1.3s
jQuery       Tamanho   Tempo

 Original Size    621kb

Google Closure    234kb     6.5s

YUI Compressor    240kb     2.7s

   UglifyJS      235kb     1.3s
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rails 3.1:
Release Candidate
   (may 2011)
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
RubyConf
     Brasil
3 e 4 de Novembro
    www.rubyconf.com.br
<epílogo>
Rs on Rails 2011
Rs on Rails 2011
Como o cliente      Como o Líder de    Como o Analista     Como o Programador   Como o Consultor de
    explicou         Projeto entendeu      desenhou               escreveu        Negócios descreveu




Como o projeto foi   Como Operações     Como o cliente foi                          O que o cliente
                                                             Como foi o suporte
  documentado           instalou            cobrado                                realmente queria
Requerimentos:
 ENTENDIDO!
Rs on Rails 2011
LOL
DESIGN
DESIGN
Rs on Rails 2011
Rs on Rails 2011
Pattern   PADRÃO
STANDARD


 Pattern   PADRÃO


 Default
“Pattern”
Rs on Rails 2011
Rs on Rails 2011
NÃO é “Standard”!
Christopher Alexander
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
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
Rs on Rails 2011
2 + 2 = 5!
2 + 2 = 5!
2 + 2 = 4!
Rs on Rails 2011
Bertrand Russel
Bertrand Russel
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Aqui estão os fatos. Que   Aqui está a conclusão.
  conclusões podemos        Que fatos podemos
   chegar com eles?         suportar com eles?
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
80
20


     80
20


     80
20


     80
          “Long Tail”
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Pedro Franceschi
     @pedroh96
15 anos


Pedro Franceschi
     @pedroh96
9 anos


Pedro Franceschi
     @pedroh96
6 anos


Pedro Franceschi
     @pedroh96
Pedro Franceschi
     @pedroh96
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
Rs on Rails 2011
<epílogo>
Obrigado!
 www.akitaonrails.com
 u.akita.ws/rsonrails11




 .com.br
Obrigado!


 www.akitaonrails.com
 u.akita.ws/rsonrails11

 .com.br

More Related Content

PDF
HBaseCon 2012 | Orchestrating Clusters with Ironfan and Chef - Runa
PPTX
IdM in Smart Applications on Virtual Infrastructure
KEY
Orchestrating HBase Cluster Deployment with Ironfan and Chef
KEY
Automated testing of complex service oriented architectures
PPTX
SWIM MasterClass - Building SWIM B2B web services using Open Standards
PDF
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...
PDF
Yahoo Communities Architecture Unlikely Bedfellows
PDF
Unoesc - Ruby, Rails e JRuby
HBaseCon 2012 | Orchestrating Clusters with Ironfan and Chef - Runa
IdM in Smart Applications on Virtual Infrastructure
Orchestrating HBase Cluster Deployment with Ironfan and Chef
Automated testing of complex service oriented architectures
SWIM MasterClass - Building SWIM B2B web services using Open Standards
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...
Yahoo Communities Architecture Unlikely Bedfellows
Unoesc - Ruby, Rails e JRuby

Viewers also liked (20)

PDF
Dev In Rio 2009
PDF
Sao Carlos - Ruby on Rails
PDF
Ruby on Rails na Unip
PDF
Usp Ribeirao - Ruby on Rails
PDF
Edted 2010 Dicas de Web
PDF
languages.map(&:latest).reduce(&:future).sort.first - Rupy Campinas 2015
PDF
Restrição == inovação - 17o Encontro Locaweb SP
PDF
"Elixir of Life" - Dev In Santos
PDF
Workshop de Ruby - UFSCar 2011
PDF
Manual de excel 2010
PPTX
PPTX
PDF
Conclusiones 3er Congreso Enfermedad de Parkinson
DOCX
Estados de la materia
PDF
Revista SaintDominioner nº 7
PPT
A importância do Messias
PPTX
Anticonceptivos por Laura Vera
PPT
Experiências do Verdadeiro Pai na juventude
PDF
Boletin ehs marzo 2015
Dev In Rio 2009
Sao Carlos - Ruby on Rails
Ruby on Rails na Unip
Usp Ribeirao - Ruby on Rails
Edted 2010 Dicas de Web
languages.map(&:latest).reduce(&:future).sort.first - Rupy Campinas 2015
Restrição == inovação - 17o Encontro Locaweb SP
"Elixir of Life" - Dev In Santos
Workshop de Ruby - UFSCar 2011
Manual de excel 2010
Conclusiones 3er Congreso Enfermedad de Parkinson
Estados de la materia
Revista SaintDominioner nº 7
A importância do Messias
Anticonceptivos por Laura Vera
Experiências do Verdadeiro Pai na juventude
Boletin ehs marzo 2015
Ad

Similar to Rs on Rails 2011 (20)

PDF
09 - Fábio Akita - Além do rails
PDF
.NET Architects Day - DNAD 2011
PDF
RubyConf Brazil 2011
KEY
大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会
PDF
Netapp Michael Galpin
PDF
Ruby on Rails : 簡介與入門
PDF
Project Fedena and Why Ruby on Rails - ArvindArvind G S
PDF
(ATS4-DEV04) Protocols as RESTful Services and RESTful URL Routing
PDF
Spring Into the Cloud
PPTX
A great api is hard to find
KEY
BEAR v0.9 (Saturday)
PDF
Load Balancing und Beschleunigung mit Citrix Net Scaler
PDF
On being RESTful
PDF
New Ways To Engage With Tiempo 2011
PDF
Ruby on rails vs asp.net mvc
PDF
02s0102基于rails的大型b2 b系统架构优化 于冰赵晓锋
PDF
02s0102基于rails的大型b2 b系统架构优化 于冰赵晓锋
KEY
Cloud Foundry Bootcamp
PDF
Windows Azure架构探析
09 - Fábio Akita - Além do rails
.NET Architects Day - DNAD 2011
RubyConf Brazil 2011
大規模環境でRailsと4年間付き合ってきて@ クックパッド * 食べログ合同勉強会
Netapp Michael Galpin
Ruby on Rails : 簡介與入門
Project Fedena and Why Ruby on Rails - ArvindArvind G S
(ATS4-DEV04) Protocols as RESTful Services and RESTful URL Routing
Spring Into the Cloud
A great api is hard to find
BEAR v0.9 (Saturday)
Load Balancing und Beschleunigung mit Citrix Net Scaler
On being RESTful
New Ways To Engage With Tiempo 2011
Ruby on rails vs asp.net mvc
02s0102基于rails的大型b2 b系统架构优化 于冰赵晓锋
02s0102基于rails的大型b2 b系统架构优化 于冰赵晓锋
Cloud Foundry Bootcamp
Windows Azure架构探析
Ad

More from Fabio Akita (20)

PDF
Devconf 2019 - São Carlos
PDF
Meetup Nerdzão - English Talk about Languages
PDF
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
PDF
Desmistificando Blockchains - 20o Encontro Locaweb SP
PDF
Desmistificando Blockchains - Insiter Goiania
PDF
Blockchain em 7 minutos - 7Masters
PDF
Elixir -Tolerância a Falhas para Adultos - GDG Campinas
PDF
Desmistificando Mitos de Tech Startups - Intercon 2017
PDF
30 Days to Elixir and Crystal and Back to Ruby
PDF
Uma Discussão sobre a Carreira de TI
PDF
THE CONF - Opening Keynote
PDF
A Journey through New Languages - Rancho Dev 2017
PDF
Desmistificando Mitos de Startups - Sebrae - AP
PDF
A Journey through New Languages - Guru Sorocaba 2017
PDF
A Journey through New Languages - Insiter 2017
PDF
A Journey through New Languages - Locaweb Tech Day
PDF
A Journey through new Languages - Intercon 2016
PDF
Premature Optimization 2.0 - Intercon 2016
PDF
Conexão Kinghost - Otimização Prematura
PDF
The Open Commerce Conference - Premature Optimisation: The Root of All Evil
Devconf 2019 - São Carlos
Meetup Nerdzão - English Talk about Languages
Desmistificando Blockchains p/ Developers - Criciuma Dev Conf 2018
Desmistificando Blockchains - 20o Encontro Locaweb SP
Desmistificando Blockchains - Insiter Goiania
Blockchain em 7 minutos - 7Masters
Elixir -Tolerância a Falhas para Adultos - GDG Campinas
Desmistificando Mitos de Tech Startups - Intercon 2017
30 Days to Elixir and Crystal and Back to Ruby
Uma Discussão sobre a Carreira de TI
THE CONF - Opening Keynote
A Journey through New Languages - Rancho Dev 2017
Desmistificando Mitos de Startups - Sebrae - AP
A Journey through New Languages - Guru Sorocaba 2017
A Journey through New Languages - Insiter 2017
A Journey through New Languages - Locaweb Tech Day
A Journey through new Languages - Intercon 2016
Premature Optimization 2.0 - Intercon 2016
Conexão Kinghost - Otimização Prematura
The Open Commerce Conference - Premature Optimisation: The Root of All Evil

Recently uploaded (20)

PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Encapsulation theory and applications.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Approach and Philosophy of On baking technology
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Electronic commerce courselecture one. Pdf
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Per capita expenditure prediction using model stacking based on satellite ima...
Network Security Unit 5.pdf for BCA BBA.
Digital-Transformation-Roadmap-for-Companies.pptx
Encapsulation theory and applications.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
MYSQL Presentation for SQL database connectivity
sap open course for s4hana steps from ECC to s4
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Approach and Philosophy of On baking technology
Dropbox Q2 2025 Financial Results & Investor Presentation
Unlocking AI with Model Context Protocol (MCP)
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
20250228 LYD VKU AI Blended-Learning.pptx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
NewMind AI Weekly Chronicles - August'25 Week I
Electronic commerce courselecture one. Pdf
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows

Rs on Rails 2011

  • 1. Discutindo Rails e Arquiteturas a apresentação já vai começar ...
  • 2. Discutindo Rails e Arquiteturas
  • 5. 1 ano atrás 4 pessoas 20 pessoas Hoje + USD 1 Milhão/ano
  • 6. 1 ano atrás 4 pessoas 20 pessoas Hoje + USD 1 Milhão/ano
  • 7. 1 ano atrás 4 pessoas 20 pessoas Hoje + USD 1 Milhão/ano
  • 9. Anos 80 Fim Anos 90 Século XXI
  • 10. Anos 80 Fim Anos 90 Século XXI Perl Basic Pascal Java C PHP dBase Delphi Python ABAP III Ruby Clipper ASP .NET ObjC VB6
  • 12. 1.8.7 1.9.2 1.9.3-dev 2.3.12 3.0.9 3.1-RC4
  • 13. 1.8.7 1.9.2 1.9.3-dev 2.3.12 3.0.9 3.1-RC4
  • 14. 1.8.7 1.9.2 1.9.3-dev 2.3.12 3.0.9 3.1-RC4
  • 15. Request Web Server Rack Middlewares Routes Controller View Model
  • 16. Request Web Server Rack Middlewares Routes Controller View Model
  • 17. Request Web Server Rack Middlewares Routes Controller View Model
  • 18. Request Web Server Rack Middlewares Routes Controller View Model
  • 19. Request Web Server Rack Middlewares Routes Controller View Model
  • 20. Request Web Server Rack Middlewares Routes Controller View Model
  • 21. Request Web Server Rack Middlewares Routes Controller View Model
  • 22. Request Web Server Rack Middlewares Routes Controller View Model
  • 23. Request Web Server Rack Middlewares Routes Controller View Model
  • 24. Request Web Server Rack Middlewares Routes Controller View Model
  • 25. Request Web Server Rack Middlewares Routes Controller View Model
  • 26. Response Request Web Server Rack Middlewares Routes Controller View Model
  • 27. Response Request Web Server Rack Middlewares Application Server Rack: Routes Unicorn, Controller Passenger View Model
  • 28. Web Server: Response Request NginX Apache Web Server Rack Middlewares Application Server Rack: Routes Unicorn, Controller Passenger View Model
  • 29. NginX, Apache Reverse Proxy Unicorn, Passenger ActiveRecord/DataMapper RDBMS/NoSQL
  • 30. HAProxy NginX, Apache Reverse Proxy Unicorn, Passenger ActiveRecord/DataMapper RestClient/Savon RDBMS/NoSQL Web Services (REST, SOAP)
  • 31. HAProxy NginX, Apache Varnish Reverse Proxy Unicorn, Passenger ActiveRecord/DataMapper RestClient/Savon RDBMS/NoSQL Web Services (REST, SOAP)
  • 32. HAProxy NginX, Apache Varnish Reverse Proxy Unicorn, Passenger ActiveRecord/DataMapper RestClient/Savon Memcached RDBMS/NoSQL Web Services (REST, SOAP)
  • 33. Request Request Request Request Request Request HTTPD HTTPD HTTPD HTTPD HTTPD HTTPD Rails Rails Rails Rails Rails Rails App App App App App App RDBMS
  • 34. Request Request Request Request Request Request HTTPD HTTPD HTTPD HTTPD HTTPD HTTPD Rails Rails Rails Rails Rails Rails App App App App App App RDBMS
  • 35. Request Request Request Request Request Request HTTPD HTTPD HTTPD HTTPD HTTPD HTTPD Rails Rails Rails Rails Rails Rails App App App App App App Mais curto RDBMS possível!
  • 46. Request Request Request Request Request Request HTTPD HTTPD HTTPD HTTPD HTTPD HTTPD Rails Rails Rails Rails Rails Rails App App App App App App RDBMS
  • 47. Request Request Request Request Request Request NginX Async App RDBMS
  • 48. Request Request Request Request Request Request NginX Async App “Look Ma! No Threads!” RDBMS
  • 49. Request Request Request Request Request Request NginX 5k ~ 10k conexões Async App “Look Ma! No Threads!” RDBMS
  • 50. Request Request Request Request Request Request NginX 5k ~ 10k conexões Conexões Longas Async App “Look Ma! No Threads!” RDBMS
  • 56. 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 end end
  • 57. 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 end end
  • 58. 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 end end
  • 59. 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 end end
  • 60. 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 end end
  • 61. 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 end end
  • 62. 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 end end
  • 63. 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 end end
  • 64. 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 end end
  • 66. <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>
  • 67. <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>
  • 68. <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>
  • 69. myChannel.bind('coisa-criada', function(thing) { alert('Uma coisa foi criada: ' + thing.name); });
  • 70. myChannel.bind('coisa-criada', function(thing) { alert('Uma coisa foi criada: ' + thing.name); });
  • 71. myChannel.bind('coisa-criada', function(thing) { alert('Uma coisa foi criada: ' + thing.name); });
  • 72. 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 end end
  • 73. 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 end end
  • 74. 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 end end
  • 75. 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 end end
  • 78. (
  • 81. IN GOD WE TRUST Todos os outros devem trazer dados
  • 83. EXPERIENCE BY ITSELF BRINGS NOTHING
  • 84. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C
  • 85. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C STANDARD
  • 86. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C
  • 87. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C
  • 88. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C
  • 89. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C
  • 90. )
  • 98. Perl
  • 100. Python
  • 102. PHP
  • 104. Ruby
  • 105. OMG!
  • 106. 2011 2010 2009 2008 2007 Ruby on Rails
  • 107. 3.0.9 2011 2.3.12 10 2010 3.0.0 2.2.3 12 2009 2.3.0 2.1.2 4 2.2.0 2.0.5 3 2.1.0 2008 6 2007 Ruby on Rails 2.0.0
  • 108. 3.0.9 2011 2.3.12 2010 3.0.0 2.2.3 2009 2.1.2 2.3.0 34 2.2.0 Versões! 2.0.5 2.1.0 2008 2007 Ruby on Rails 2.0.0
  • 110. Request Web Server Rails App /public/stylesheets
  • 111. Request Web Server Arquivos Estáticos Rails App /public/stylesheets
  • 113. Variáveis $blue: #3bbfce; $margin: 16px; /* CSS */ .content-navigation { .content-navigation { border-color: $blue; border-color: #3bbfce; color: color: #2b9eab; darken($blue, 9%); } } .border { .border { padding: 8px; padding: $margin / 2; margin: 8px; margin: $margin / 2; border-color: #3bbfce; border-color: $blue; } }
  • 114. Nesting table.hl { /* CSS */ margin: 2em 0; td.ln { table.hl { text-align: right; margin: 2em 0; } } } table.hl td.ln { text-align: right; li { } font: { family: serif; li { weight: bold; font-family: serif; size: 1.2em; font-weight: bold; } font-size: 1.2em; } }
  • 115. Mixins @mixin table-base { th { /* CSS */ text-align: center; font-weight: bold; #data { } td, th {padding: 2px} float: left; } margin-left: 10px; } @mixin left($dist) { #data th { float: left; text-align: center; margin-left: $dist; font-weight: bold; } } #data td, #data th { #data { @include left(10px); padding: 2px; @include table-base; } }
  • 116. Selector Inheritance /* CSS */ .error { .error, .badError { border: 1px #f00; border: 1px #f00; background: #fdd; background: #fdd; } } .error.intrusion { font-size: 1.3em; .error.intrusion, font-weight: bold; .badError.intrusion { } font-size: 1.3em; font-weight: bold; .badError { } @extend .error; border-width: 3px; .badError { } border-width: 3px; }
  • 118. 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()
  • 119. 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; class Animal child.__super__ = parent.prototype; constructor: (@name) -> return child; }; Animal = (function() { move: (meters) -> function Animal(name) { this.name = name; alert @name + " moved " + meters + "m." } Animal.prototype.move = function(meters) { return alert(this.name + " moved " + meters + "m."); class Snake extends Animal }; return Animal; move: -> })(); alert "Slithering..." Snake = (function() { __extends(Snake, Animal); super 5 function Snake() { Snake.__super__.constructor.apply(this, arguments); } class Horse extends Animal Snake.prototype.move = function() { alert("Slithering..."); move: -> return Snake.__super__.move.call(this, 5); alert "Galloping..." }; return Snake; super 45 })(); Horse = (function() { __extends(Horse, Animal); sam = new Snake "Sammy the Python" function Horse() { tom = new Horse "Tommy the Palomino" Horse.__super__.constructor.apply(this, arguments); } Horse.prototype.move = function() { alert("Galloping..."); sam.move() return Horse.__super__.move.call(this, 45); tom.move() }; return Horse; })(); sam = new Snake("Sammy the Python"); tom = new Horse("Tommy the Palomino"); sam.move(); tom.move(); loadrun
  • 122. 102
  • 123. Request Request Web Server Web Server (Desenvolvimento) (Produção) Rails App /app/assets /public
  • 124. Request Request Web Server Web Server (Desenvolvimento) (Produção) Rails Sprockets App /app/assets /public
  • 125. Request Request Web Server Web Server (Desenvolvimento) (Produção) Rails Sprockets App Tilt /app/assets /public
  • 126. Request Request Web Server Web Server (Desenvolvimento) (Produção) Rails Sprockets App Tilt Ugli er /app/assets /public
  • 127. ENGINE FILE EXTENSIONS REQUIRED LIBRARIES ERB .erb, .rhtml none Interpolated String .str Erubis .erb, .rhtml, .erubis erubis Haml .haml haml Sass .sass sass Scss .scss Less CSS .less less Builder .builder builder Liquid .liquid liquid RDiscount rdiscount Redcarpet redcarpet BlueCloth .markdown, .mkd, .md bluecloth Kramdown kramdown Maruku 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
  • 129. jQuery Tamanho Tempo Original Size 621kb Google Closure 234kb 6.5s YUI Compressor 240kb 2.7s UglifyJS 235kb 1.3s
  • 130. jQuery Tamanho Tempo Original Size 621kb Google Closure 234kb 6.5s YUI Compressor 240kb 2.7s UglifyJS 235kb 1.3s
  • 131. jQuery Tamanho Tempo Original Size 621kb Google Closure 234kb 6.5s YUI Compressor 240kb 2.7s UglifyJS 235kb 1.3s
  • 132. jQuery Tamanho Tempo Original Size 621kb Google Closure 234kb 6.5s YUI Compressor 240kb 2.7s UglifyJS 235kb 1.3s
  • 133. jQuery Tamanho Tempo Original Size 621kb Google Closure 234kb 6.5s YUI Compressor 240kb 2.7s UglifyJS 235kb 1.3s
  • 143. RubyConf Brasil 3 e 4 de Novembro www.rubyconf.com.br
  • 147. Como o cliente Como o Líder de Como o Analista Como o Programador Como o Consultor de explicou Projeto entendeu desenhou escreveu Negócios descreveu Como o projeto foi Como Operações Como o cliente foi O que o cliente Como foi o suporte documentado instalou cobrado realmente queria
  • 150. LOL
  • 151. DESIGN
  • 152. DESIGN
  • 155. Pattern PADRÃO
  • 156. STANDARD Pattern PADRÃO Default
  • 166. 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
  • 168. 2 + 2 = 5!
  • 169. 2 + 2 = 5!
  • 170. 2 + 2 = 4!
  • 177. Aqui estão os fatos. Que Aqui está a conclusão. conclusões podemos Que fatos podemos chegar com eles? suportar com eles?
  • 189. 80
  • 190. 20 80
  • 191. 20 80
  • 192. 20 80 “Long Tail”
  • 197. Pedro Franceschi @pedroh96
  • 201. Pedro Franceschi @pedroh96