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
Fabio Akita
www.akitaonrails.com
  @akitaonrails




  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
<prólogo>
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!
LOL
DESIGN
DESIGN
Pattern   PADRÃO
STANDARD


 Pattern   PADRÃO


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


     80
20


     80
          “Long Tail”
</prólogo>
Pequenos
 (Startups?)


   Grandes
(Enterprisey?)
Pequenos
       (Startups?)


D DD Grandes
  (Enterprisey?)
Pequenos
     (Startups?)


  DD ”
D ht  Grandes
“Lig
   (Enterprisey?)
Pequenos
 (Startups?)


   Grandes
(Enterprisey?)
Complexidade
  Acidental
Ruby on Rails é a melhor forma de desenvolver
qualquer aplicação Web.
Todas as outras formas de desenvolver aplicações
Web são inferiores a Ruby on Rails.
Ruby on Rails é uma das maneiras competentes
de se desenvolver aplicações Web em alguns
cenários.
1994
  (linguagem)




                  2004
(framework web)
1.8.7
  1.9.2
1.9.3-dev
 2.3.11
  3.0.7
3.1-RC1
1.8.7
  1.9.2
1.9.3-dev
 2.3.11
  3.0.7
3.1-RC1
1.8.7
  1.9.2
1.9.3-dev
 2.3.11
  3.0.7
3.1-RC1
1.8.7
  1.9.2
1.9.3-dev
 2.3.11
  3.0.7
3.1-RC1
gem install rails

rails new nome_do_projeto
gem install rails

rails new nome_do_projeto
gem install rails

rails new nome_do_projeto

      SIM! Via CLI! :-P
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
~30 mil gems

  ~15 GB
bundle install
RubyGems   Library Assembly (DLL)


  Rake            MSBuild


 Bundler          NuGet
> bundle list

Gems included by the bundle:   *   mail (2.2.19)
  * abstract (1.0.0)           *   mime-types (1.16)
  * actionmailer (3.0.7)       *   polyglot (0.3.1)
  * actionpack (3.0.7)         *   rack (1.2.2)
  * activemodel (3.0.7)        *   rack-mount (0.6.14)
  * activerecord (3.0.7)       *   rack-test (0.5.7)
  * activeresource (3.0.7)     *   rails (3.0.7)
  * activesupport (3.0.7)      *   railties (3.0.7)
  * arel (2.0.9)               *   rake (0.8.7)
  * builder (2.1.2)            *   sqlite3 (1.3.3)
  * bundler (1.0.13)           *   thor (0.14.6)
  * erubis (2.6.6)             *   treetop (1.4.9)
  * i18n (0.5.0)               *   tzinfo (0.3.27)
> bundle list

Gems included by the bundle:   *   mail (2.2.19)
  * abstract (1.0.0)           *   mime-types (1.16)
  * actionmailer (3.0.7)       *   polyglot (0.3.1)
  * actionpack (3.0.7)         *   rack (1.2.2)
  * activemodel (3.0.7)        *   rack-mount (0.6.14)
  * activerecord (3.0.7)       *   rack-test (0.5.7)
  * activeresource (3.0.7)     *   rails (3.0.7)
  * activesupport (3.0.7)      *   railties (3.0.7)
  * arel (2.0.9)               *   rake (0.8.7)
  * builder (2.1.2)            *   sqlite3 (1.3.3)
  * bundler (1.0.13)           *   thor (0.14.6)
  * erubis (2.6.6)             *   treetop (1.4.9)
  * i18n (0.5.0)               *   tzinfo (0.3.27)
> rake -T
                           rake   log:clear
rake   about               rake   middleware
rake   db:create           rake   notes
rake   db:drop             rake   notes:custom
rake   db:fixtures:load    rake   rails:template
rake   db:migrate          rake   rails:update
rake   db:migrate:status   rake   routes
rake   db:rollback         rake   secret
rake   db:schema:dump      rake   stats
rake   db:schema:load      rake   test
rake   db:seed             rake   test:recent
rake   db:setup            rake   test:uncommitted
rake   db:structure:dump   rake   time:zones:all
rake   db:version          rake   tmp:clear
rake   doc:app             rake   tmp:create
> rails generate
Usage: rails generate GENERATOR [args] [options]

General options:
  -h, [--help]       #   Print generator's options and usage
  -p, [--pretend]    #   Run but do not make any changes
  -f, [--force]      #   Overwrite files that already exist
  -s, [--skip]       #   Skip files that already exist
  -q, [--quiet]      #   Suppress status output

Please choose a generator below.

Rails:                   observer
  controller             performance_test
  generator              plugin
  helper                 resource
  integration_test       scaffold
  mailer                 scaffold_controller
  migration              session_migration
  model                  stylesheets
> rake middleware                                   Rack
                                                 Middlewares
use   ActionDispatch::Static
use   Rack::Lock
use   ActiveSupport::Cache::Strategy::LocalCache
use   Rack::Runtime
use   Rails::Rack::Logger
use   ActionDispatch::ShowExceptions
use   ActionDispatch::RemoteIp
use   Rack::Sendfile
use   ActionDispatch::Callbacks
use   ActiveRecord::ConnectionAdapters::ConnectionManagement
use   ActiveRecord::QueryCache
use   ActionDispatch::Cookies
use   ActionDispatch::Session::CookieStore
use   ActionDispatch::Flash
use   ActionDispatch::ParamsParser
use   Rack::MethodOverride
use   ActionDispatch::Head
use   ActionDispatch::BestStandardsSupport
run   Demo::Application.routes
Response                Request

           Web Server


     Rack Middlewares


                        Routes

           Controller

  View                  Model
Response                Request

           Web Server


     Rack Middlewares


                        Routes

           Controller

  View                  Model
Response                Request

           Web Server

                                  Application
     Rack Middlewares             Server Rack:
                                    Mongrel,
                        Routes       Thin,
                                   Passenger,
           Controller               Unicorn
  View                  Model
Web Server:
                                    NginX
Response                Request
                                   Apache
           Web Server

                                  Application
     Rack Middlewares             Server Rack:
                                    Mongrel,
                        Routes       Thin,
                                   Passenger,
           Controller               Unicorn
  View                  Model
NginX, Apache, Lighty, IIS



         Reverse Proxy




Mongrel, Thin, Unicorn, Passenger

   ActiveRecord/DataMapper



         RDBMS/NoSQL
NginX, Apache, Lighty, IIS



         Reverse Proxy




Mongrel, Thin, Unicorn, Passenger    TidyTDS
   ActiveRecord/DataMapper

                                    SQL Server
                                    SQL Azure
         RDBMS/NoSQL
NginX, Apache, Lighty, IIS



         Reverse Proxy




Mongrel, Thin, Unicorn, Passenger

   ActiveRecord/DataMapper
ActiveResource/RestClient/Savon

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



         Reverse Proxy




Mongrel, Thin, Unicorn, Passenger

   ActiveRecord/DataMapper
ActiveResource/RestClient/Savon



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

                                    Varnish
         Reverse Proxy




Mongrel, Thin, Unicorn, Passenger

   ActiveRecord/DataMapper
ActiveResource/RestClient/Savon



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

                                     Varnish
         Reverse Proxy




Mongrel, Thin, Unicorn, Passenger

   ActiveRecord/DataMapper
ActiveResource/RestClient/Savon
                                    Memcache

        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
$(':checkbox').map(function() {
  return this.id;
}).get().join(',');
Rails
Request
          App
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




                          Event
                         Machine




                         RDBMS
Request   Request   Request   Request   Request   Request




                          NginX




                          Event
                         Machine         “Look Ma!
                                        No Threads!”


                         RDBMS
Request   Request   Request   Request   Request   Request




                          NginX

                                          5k ~ 10k
                                          conexões
                          Event
                         Machine         “Look Ma!
                                        No Threads!”


                         RDBMS
Request   Request   Request   Request   Request   Request




                          NginX

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


                         RDBMS
<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
Arquitetura de
Altíssima Concorrência
(
W. Edward Deming
IN GOD WE TRUST
Todos os outros devem trazer dados
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
)
Perl
Python
PHP
Ruby
OMG!
2011

2010



2009




2008

2007   Ruby on Rails
2011

2010



2009




          2.0.5

2008                           6
2007   Ruby on Rails   2.0.0
2011

2010



2009

         2.1.2

          2.0.5                3
                       2.1.0
2008                           6
2007   Ruby on Rails   2.0.0
2011

2010

         2.2.3
2009

         2.1.2
                               4
                       2.2.0
          2.0.5                3
                       2.1.0
2008                           6
2007   Ruby on Rails   2.0.0
2011     2.3.11
2010

         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.7

         2.3.11
                               8
2011

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.7

2011     2.3.11
2010                   3.0.0
         2.2.3
2009

         2.1.2
                       2.3.0
                               31
                       2.2.0   Versões!

          2.0.5
                       2.1.0
2008

2007   Ruby on Rails   2.0.0
Request



          Web Server




                      Rails
                      App


/public/stylesheets
Request



                      Web Server


Arquivos
Estáticos                         Rails
                                  App


            /public/stylesheets
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;
                       }
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
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
Rails 3.1:
Release Candidate
   (may 2011)
RubyConf
     Brasil
3 e 4 de Novembro
    www.rubyconf.com.br
<epílogo>
Pedro Franceschi
     @pedroh96
15 anos


Pedro Franceschi
     @pedroh96
9 anos


Pedro Franceschi
     @pedroh96
6 anos


Pedro Franceschi
     @pedroh96
Pedro Franceschi
     @pedroh96
</epílogo>
Obrigado!
 www.akitaonrails.com
  u.akita.ws/dnad11




 .com.br

More Related Content

What's hot

Apache camel overview dec 2011
Apache camel overview dec 2011Apache camel overview dec 2011
Apache camel overview dec 2011Marcelo Jabali
 
Cloud Foundry Open Tour China
Cloud Foundry Open Tour ChinaCloud Foundry Open Tour China
Cloud Foundry Open Tour Chinamarklucovsky
 
TorqueBox at DC:JBUG - November 2011
TorqueBox at DC:JBUG - November 2011TorqueBox at DC:JBUG - November 2011
TorqueBox at DC:JBUG - November 2011
bobmcwhirter
 
Apache con 2011 gd
Apache con 2011 gdApache con 2011 gd
Apache con 2011 gd
Leif Hedstrom
 
Introduction to Apache Camel
Introduction to Apache CamelIntroduction to Apache Camel
Introduction to Apache CamelFuseSource.com
 
Apache Camel: The Swiss Army Knife of Open Source Integration
Apache Camel: The Swiss Army Knife of Open Source IntegrationApache Camel: The Swiss Army Knife of Open Source Integration
Apache Camel: The Swiss Army Knife of Open Source Integration
prajods
 
Complex Made Simple: Sleep Better with TorqueBox
Complex Made Simple: Sleep Better with TorqueBoxComplex Made Simple: Sleep Better with TorqueBox
Complex Made Simple: Sleep Better with TorqueBox
bobmcwhirter
 
At Scale With Style
At Scale With StyleAt Scale With Style
At Scale With Style
Martin Rehfeld
 
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
bobmcwhirter
 
Rails Metal, Rack, and Sinatra
Rails Metal, Rack, and SinatraRails Metal, Rack, and Sinatra
Rails Metal, Rack, and Sinatra
Adam Wiggins
 
Ruby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developerRuby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developer
gicappa
 
DataMapper on Infinispan
DataMapper on InfinispanDataMapper on Infinispan
DataMapper on InfinispanLance Ball
 
Cloud Foundry Open Tour China (english)
Cloud Foundry Open Tour China (english)Cloud Foundry Open Tour China (english)
Cloud Foundry Open Tour China (english)marklucovsky
 
My sql replication advanced techniques presentation
My sql replication advanced techniques presentationMy sql replication advanced techniques presentation
My sql replication advanced techniques presentationepee
 
Jaoo Michael Neale 09
Jaoo Michael Neale 09Jaoo Michael Neale 09
Jaoo Michael Neale 09
Michael Neale
 
RubyGems 3 & 4
RubyGems 3 & 4RubyGems 3 & 4
RubyGems 3 & 4
Hiroshi SHIBATA
 
TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011
Lance Ball
 
When Ruby Meets Java - The Power of Torquebox
When Ruby Meets Java - The Power of TorqueboxWhen Ruby Meets Java - The Power of Torquebox
When Ruby Meets Java - The Power of Torquebox
rockyjaiswal
 
JUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinderJUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinder
marekgoldmann
 

What's hot (20)

Apache camel overview dec 2011
Apache camel overview dec 2011Apache camel overview dec 2011
Apache camel overview dec 2011
 
Cloud Foundry Open Tour China
Cloud Foundry Open Tour ChinaCloud Foundry Open Tour China
Cloud Foundry Open Tour China
 
TorqueBox at DC:JBUG - November 2011
TorqueBox at DC:JBUG - November 2011TorqueBox at DC:JBUG - November 2011
TorqueBox at DC:JBUG - November 2011
 
Apache con 2011 gd
Apache con 2011 gdApache con 2011 gd
Apache con 2011 gd
 
Introduction to Apache Camel
Introduction to Apache CamelIntroduction to Apache Camel
Introduction to Apache Camel
 
Apache Camel: The Swiss Army Knife of Open Source Integration
Apache Camel: The Swiss Army Knife of Open Source IntegrationApache Camel: The Swiss Army Knife of Open Source Integration
Apache Camel: The Swiss Army Knife of Open Source Integration
 
Complex Made Simple: Sleep Better with TorqueBox
Complex Made Simple: Sleep Better with TorqueBoxComplex Made Simple: Sleep Better with TorqueBox
Complex Made Simple: Sleep Better with TorqueBox
 
At Scale With Style
At Scale With StyleAt Scale With Style
At Scale With Style
 
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...TorqueBox: The beauty of Ruby with the power of JBoss.  Presented at Devnexus...
TorqueBox: The beauty of Ruby with the power of JBoss. Presented at Devnexus...
 
Rails Metal, Rack, and Sinatra
Rails Metal, Rack, and SinatraRails Metal, Rack, and Sinatra
Rails Metal, Rack, and Sinatra
 
Ruby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developerRuby on Rails survival guide of an aged Java developer
Ruby on Rails survival guide of an aged Java developer
 
DataMapper on Infinispan
DataMapper on InfinispanDataMapper on Infinispan
DataMapper on Infinispan
 
Cloud Foundry Open Tour China (english)
Cloud Foundry Open Tour China (english)Cloud Foundry Open Tour China (english)
Cloud Foundry Open Tour China (english)
 
My sql replication advanced techniques presentation
My sql replication advanced techniques presentationMy sql replication advanced techniques presentation
My sql replication advanced techniques presentation
 
Jaoo Michael Neale 09
Jaoo Michael Neale 09Jaoo Michael Neale 09
Jaoo Michael Neale 09
 
Devignition 2011
Devignition 2011Devignition 2011
Devignition 2011
 
RubyGems 3 & 4
RubyGems 3 & 4RubyGems 3 & 4
RubyGems 3 & 4
 
TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011TorqueBox - Ruby Hoedown 2011
TorqueBox - Ruby Hoedown 2011
 
When Ruby Meets Java - The Power of Torquebox
When Ruby Meets Java - The Power of TorqueboxWhen Ruby Meets Java - The Power of Torquebox
When Ruby Meets Java - The Power of Torquebox
 
JUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinderJUDCon 2010 Boston : BoxGrinder
JUDCon 2010 Boston : BoxGrinder
 

Viewers also liked

Claretiano 2009
Claretiano 2009Claretiano 2009
Claretiano 2009
Fabio Akita
 
Rails Summit - De Volta Ao Básico
Rails Summit - De Volta Ao BásicoRails Summit - De Volta Ao Básico
Rails Summit - De Volta Ao Básico
Fabio Akita
 
Encontro de TI - Arteccom
Encontro de TI - ArteccomEncontro de TI - Arteccom
Encontro de TI - Arteccom
Fabio Akita
 
Fisl - Deployment
Fisl - DeploymentFisl - Deployment
Fisl - Deployment
Fabio Akita
 
Campus Party 2010
Campus Party 2010Campus Party 2010
Campus Party 2010
Fabio Akita
 
Making Rails Really restful
Making Rails Really restfulMaking Rails Really restful
Making Rails Really restfulFabio Akita
 
Oxente on Rails 2009
Oxente on Rails 2009Oxente on Rails 2009
Oxente on Rails 2009
Fabio Akita
 
Rails Admin - Guru SP
Rails Admin - Guru SPRails Admin - Guru SP
Rails Admin - Guru SP
Fabio Akita
 
Evolución y retos de la educación virtual diapositivas
Evolución y retos de la educación virtual diapositivasEvolución y retos de la educación virtual diapositivas
Evolución y retos de la educación virtual diapositivas
Sinuhe Robles
 
Back exercises 1
Back exercises 1Back exercises 1
Back exercises 1
cguella
 
Equipo 3 redes sociales
Equipo 3 redes socialesEquipo 3 redes sociales
Equipo 3 redes sociales
alexcir
 
TIENDA DE ROPA
TIENDA DE ROPATIENDA DE ROPA
TIENDA DE ROPA
samitha24
 
G2 Marketing Digital - Rio Country Fest
G2 Marketing Digital - Rio Country FestG2 Marketing Digital - Rio Country Fest
G2 Marketing Digital - Rio Country FestPedro Divério
 
Garrido Saúde
Garrido SaúdeGarrido Saúde
Garrido Saúde
Cauê Belarmino Silva
 
Class Exercise1-Image size
Class Exercise1-Image sizeClass Exercise1-Image size
Class Exercise1-Image sizeSlushieNyappy
 
Guia j clic_br
Guia j clic_brGuia j clic_br
Guia j clic_br
Arley Riascos El Press
 
Halloween =)
Halloween =)Halloween =)
Halloween =)
niko2001
 
hbstudy37 doc
hbstudy37 dochbstudy37 doc
hbstudy37 doc
Fujishiro Takuya
 

Viewers also liked (20)

Claretiano 2009
Claretiano 2009Claretiano 2009
Claretiano 2009
 
Rails Summit - De Volta Ao Básico
Rails Summit - De Volta Ao BásicoRails Summit - De Volta Ao Básico
Rails Summit - De Volta Ao Básico
 
Encontro de TI - Arteccom
Encontro de TI - ArteccomEncontro de TI - Arteccom
Encontro de TI - Arteccom
 
Fisl - Deployment
Fisl - DeploymentFisl - Deployment
Fisl - Deployment
 
Campus Party 2010
Campus Party 2010Campus Party 2010
Campus Party 2010
 
Making Rails Really restful
Making Rails Really restfulMaking Rails Really restful
Making Rails Really restful
 
Oxente on Rails 2009
Oxente on Rails 2009Oxente on Rails 2009
Oxente on Rails 2009
 
Rails Admin - Guru SP
Rails Admin - Guru SPRails Admin - Guru SP
Rails Admin - Guru SP
 
Evolución y retos de la educación virtual diapositivas
Evolución y retos de la educación virtual diapositivasEvolución y retos de la educación virtual diapositivas
Evolución y retos de la educación virtual diapositivas
 
Back exercises 1
Back exercises 1Back exercises 1
Back exercises 1
 
Ql
QlQl
Ql
 
Prezentatsia111
Prezentatsia111Prezentatsia111
Prezentatsia111
 
Equipo 3 redes sociales
Equipo 3 redes socialesEquipo 3 redes sociales
Equipo 3 redes sociales
 
TIENDA DE ROPA
TIENDA DE ROPATIENDA DE ROPA
TIENDA DE ROPA
 
G2 Marketing Digital - Rio Country Fest
G2 Marketing Digital - Rio Country FestG2 Marketing Digital - Rio Country Fest
G2 Marketing Digital - Rio Country Fest
 
Garrido Saúde
Garrido SaúdeGarrido Saúde
Garrido Saúde
 
Class Exercise1-Image size
Class Exercise1-Image sizeClass Exercise1-Image size
Class Exercise1-Image size
 
Guia j clic_br
Guia j clic_brGuia j clic_br
Guia j clic_br
 
Halloween =)
Halloween =)Halloween =)
Halloween =)
 
hbstudy37 doc
hbstudy37 dochbstudy37 doc
hbstudy37 doc
 

Similar to .NET Architects Day - DNAD 2011

Rack
RackRack
Rack
shen liu
 
Rails in the bowels
Rails in the bowelsRails in the bowels
Rails in the bowels
Creditas
 
Ruby on Rails workshop for beginner
Ruby on Rails workshop for beginnerRuby on Rails workshop for beginner
Ruby on Rails workshop for beginner
Umair Amjad
 
Speedy TDD with Rails
Speedy TDD with RailsSpeedy TDD with Rails
Speedy TDD with Rails
PatchSpace Ltd
 
RoR 101: Session 3
RoR 101: Session 3RoR 101: Session 3
RoR 101: Session 3
Rory Gianni
 
Rs on Rails 2011
Rs on Rails 2011Rs on Rails 2011
Rs on Rails 2011
Fabio Akita
 
Ruby projects of interest for DevOps
Ruby projects of interest for DevOpsRuby projects of interest for DevOps
Ruby projects of interest for DevOpsRicardo Sanchez
 
Ricardo Sanchez - Ruby projects of interest for devops
Ricardo Sanchez - Ruby projects of interest for devopsRicardo Sanchez - Ruby projects of interest for devops
Ricardo Sanchez - Ruby projects of interest for devopsSVDevOps
 
StrongLoop Overview
StrongLoop OverviewStrongLoop Overview
StrongLoop Overview
Shubhra Kar
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
Eric Berry
 
Connecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRubyConnecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRuby
Nick Sieger
 
Going serverless
Going serverlessGoing serverless
Going serverless
Jeremy Green
 
Sinatra for REST services
Sinatra for REST servicesSinatra for REST services
Sinatra for REST services
Emanuele DelBono
 
Introduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman OrtegaIntroduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman Ortega
arman o
 
Ruby on Rails : 簡介與入門
Ruby on Rails : 簡介與入門Ruby on Rails : 簡介與入門
Ruby on Rails : 簡介與入門Wen-Tien Chang
 

Similar to .NET Architects Day - DNAD 2011 (20)

Rack
RackRack
Rack
 
Deployment de Rails
Deployment de RailsDeployment de Rails
Deployment de Rails
 
Rails in the bowels
Rails in the bowelsRails in the bowels
Rails in the bowels
 
Ruby on Rails workshop for beginner
Ruby on Rails workshop for beginnerRuby on Rails workshop for beginner
Ruby on Rails workshop for beginner
 
Speedy TDD with Rails
Speedy TDD with RailsSpeedy TDD with Rails
Speedy TDD with Rails
 
RoR 101: Session 3
RoR 101: Session 3RoR 101: Session 3
RoR 101: Session 3
 
Rs on Rails 2011
Rs on Rails 2011Rs on Rails 2011
Rs on Rails 2011
 
Intro to Rack
Intro to RackIntro to Rack
Intro to Rack
 
Asp.Net MVC3 - Basics
Asp.Net MVC3 - BasicsAsp.Net MVC3 - Basics
Asp.Net MVC3 - Basics
 
Ruby projects of interest for DevOps
Ruby projects of interest for DevOpsRuby projects of interest for DevOps
Ruby projects of interest for DevOps
 
Ricardo Sanchez - Ruby projects of interest for devops
Ricardo Sanchez - Ruby projects of interest for devopsRicardo Sanchez - Ruby projects of interest for devops
Ricardo Sanchez - Ruby projects of interest for devops
 
StrongLoop Overview
StrongLoop OverviewStrongLoop Overview
StrongLoop Overview
 
Wider than rails
Wider than railsWider than rails
Wider than rails
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Connecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRubyConnecting the Worlds of Java and Ruby with JRuby
Connecting the Worlds of Java and Ruby with JRuby
 
Going serverless
Going serverlessGoing serverless
Going serverless
 
Sinatra for REST services
Sinatra for REST servicesSinatra for REST services
Sinatra for REST services
 
Introduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman OrtegaIntroduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman Ortega
 
Sinatra
SinatraSinatra
Sinatra
 
Ruby on Rails : 簡介與入門
Ruby on Rails : 簡介與入門Ruby on Rails : 簡介與入門
Ruby on Rails : 簡介與入門
 

More from Fabio Akita

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

More from Fabio Akita (20)

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

Recently uploaded

IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
Abida Shariff
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
DianaGray10
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Product School
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
Product School
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
Product School
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Tobias Schneck
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
RTTS
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
Thijs Feryn
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Inflectra
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
Product School
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
Bhaskar Mitra
 

Recently uploaded (20)

IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
FIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdfFIDO Alliance Osaka Seminar: Overview.pdf
FIDO Alliance Osaka Seminar: Overview.pdf
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
Connector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a buttonConnector Corner: Automate dynamic content and events by pushing a button
Connector Corner: Automate dynamic content and events by pushing a button
 
Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...Mission to Decommission: Importance of Decommissioning Products to Increase E...
Mission to Decommission: Importance of Decommissioning Products to Increase E...
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
From Daily Decisions to Bottom Line: Connecting Product Work to Revenue by VP...
 
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
AI for Every Business: Unlocking Your Product's Universal Potential by VP of ...
 
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024
 
JMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and GrafanaJMeter webinar - integration with InfluxDB and Grafana
JMeter webinar - integration with InfluxDB and Grafana
 
Accelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish CachingAccelerate your Kubernetes clusters with Varnish Caching
Accelerate your Kubernetes clusters with Varnish Caching
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualitySoftware Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered Quality
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
From Siloed Products to Connected Ecosystem: Building a Sustainable and Scala...
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Search and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical FuturesSearch and Society: Reimagining Information Access for Radical Futures
Search and Society: Reimagining Information Access for Radical Futures
 

.NET Architects Day - DNAD 2011

  • 1. Discutindo Rails e Arquiteturas a apresentação já vai começar ...
  • 2. Discutindo Rails e Arquiteturas
  • 4. Fabio Akita www.akitaonrails.com @akitaonrails 1990
  • 5. Anos 80 Fim Anos 90 Século XXI
  • 6. 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
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 13.
  • 14.
  • 15. 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
  • 17.
  • 18. LOL
  • 21.
  • 22.
  • 23. Pattern PADRÃO
  • 24. STANDARD Pattern PADRÃO Default
  • 26.
  • 27.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34. 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
  • 35.
  • 36. 2 + 2 = 5!
  • 37. 2 + 2 = 5!
  • 38. 2 + 2 = 4!
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44. Aqui estão os fatos. Que Aqui está a conclusão. conclusões podemos Que fatos podemos chegar com eles? suportar com eles?
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56. 80
  • 57. 20 80
  • 58. 20 80 “Long Tail”
  • 59.
  • 61.
  • 62. Pequenos (Startups?) Grandes (Enterprisey?)
  • 63. Pequenos (Startups?) D DD Grandes (Enterprisey?)
  • 64. Pequenos (Startups?) DD ” D ht Grandes “Lig (Enterprisey?)
  • 65. Pequenos (Startups?) Grandes (Enterprisey?)
  • 66.
  • 68.
  • 69. Ruby on Rails é a melhor forma de desenvolver qualquer aplicação Web.
  • 70.
  • 71. Todas as outras formas de desenvolver aplicações Web são inferiores a Ruby on Rails.
  • 72.
  • 73. Ruby on Rails é uma das maneiras competentes de se desenvolver aplicações Web em alguns cenários.
  • 74. 1994 (linguagem) 2004 (framework web)
  • 75. 1.8.7 1.9.2 1.9.3-dev 2.3.11 3.0.7 3.1-RC1
  • 76. 1.8.7 1.9.2 1.9.3-dev 2.3.11 3.0.7 3.1-RC1
  • 77. 1.8.7 1.9.2 1.9.3-dev 2.3.11 3.0.7 3.1-RC1
  • 78. 1.8.7 1.9.2 1.9.3-dev 2.3.11 3.0.7 3.1-RC1
  • 79.
  • 80. gem install rails rails new nome_do_projeto
  • 81. gem install rails rails new nome_do_projeto
  • 82. gem install rails rails new nome_do_projeto SIM! Via CLI! :-P
  • 83. Request Web Server Rack Middlewares Routes Controller View Model
  • 84. Request Web Server Rack Middlewares Routes Controller View Model
  • 85. Request Web Server Rack Middlewares Routes Controller View Model
  • 86. Request Web Server Rack Middlewares Routes Controller View Model
  • 87. Request Web Server Rack Middlewares Routes Controller View Model
  • 88. Request Web Server Rack Middlewares Routes Controller View Model
  • 89. Request Web Server Rack Middlewares Routes Controller View Model
  • 90. Request Web Server Rack Middlewares Routes Controller View Model
  • 91. Request Web Server Rack Middlewares Routes Controller View Model
  • 92. Request Web Server Rack Middlewares Routes Controller View Model
  • 93. Response Request Web Server Rack Middlewares Routes Controller View Model
  • 94.
  • 95.
  • 96. ~30 mil gems ~15 GB
  • 97.
  • 99. RubyGems Library Assembly (DLL) Rake MSBuild Bundler NuGet
  • 100. > bundle list Gems included by the bundle: * mail (2.2.19) * abstract (1.0.0) * mime-types (1.16) * actionmailer (3.0.7) * polyglot (0.3.1) * actionpack (3.0.7) * rack (1.2.2) * activemodel (3.0.7) * rack-mount (0.6.14) * activerecord (3.0.7) * rack-test (0.5.7) * activeresource (3.0.7) * rails (3.0.7) * activesupport (3.0.7) * railties (3.0.7) * arel (2.0.9) * rake (0.8.7) * builder (2.1.2) * sqlite3 (1.3.3) * bundler (1.0.13) * thor (0.14.6) * erubis (2.6.6) * treetop (1.4.9) * i18n (0.5.0) * tzinfo (0.3.27)
  • 101. > bundle list Gems included by the bundle: * mail (2.2.19) * abstract (1.0.0) * mime-types (1.16) * actionmailer (3.0.7) * polyglot (0.3.1) * actionpack (3.0.7) * rack (1.2.2) * activemodel (3.0.7) * rack-mount (0.6.14) * activerecord (3.0.7) * rack-test (0.5.7) * activeresource (3.0.7) * rails (3.0.7) * activesupport (3.0.7) * railties (3.0.7) * arel (2.0.9) * rake (0.8.7) * builder (2.1.2) * sqlite3 (1.3.3) * bundler (1.0.13) * thor (0.14.6) * erubis (2.6.6) * treetop (1.4.9) * i18n (0.5.0) * tzinfo (0.3.27)
  • 102. > rake -T rake log:clear rake about rake middleware rake db:create rake notes rake db:drop rake notes:custom rake db:fixtures:load rake rails:template rake db:migrate rake rails:update rake db:migrate:status rake routes rake db:rollback rake secret rake db:schema:dump rake stats rake db:schema:load rake test rake db:seed rake test:recent rake db:setup rake test:uncommitted rake db:structure:dump rake time:zones:all rake db:version rake tmp:clear rake doc:app rake tmp:create
  • 103. > rails generate Usage: rails generate GENERATOR [args] [options] General options: -h, [--help] # Print generator's options and usage -p, [--pretend] # Run but do not make any changes -f, [--force] # Overwrite files that already exist -s, [--skip] # Skip files that already exist -q, [--quiet] # Suppress status output Please choose a generator below. Rails: observer controller performance_test generator plugin helper resource integration_test scaffold mailer scaffold_controller migration session_migration model stylesheets
  • 104. > rake middleware Rack Middlewares use ActionDispatch::Static use Rack::Lock use ActiveSupport::Cache::Strategy::LocalCache use Rack::Runtime use Rails::Rack::Logger use ActionDispatch::ShowExceptions use ActionDispatch::RemoteIp use Rack::Sendfile use ActionDispatch::Callbacks use ActiveRecord::ConnectionAdapters::ConnectionManagement use ActiveRecord::QueryCache use ActionDispatch::Cookies use ActionDispatch::Session::CookieStore use ActionDispatch::Flash use ActionDispatch::ParamsParser use Rack::MethodOverride use ActionDispatch::Head use ActionDispatch::BestStandardsSupport run Demo::Application.routes
  • 105. Response Request Web Server Rack Middlewares Routes Controller View Model
  • 106. Response Request Web Server Rack Middlewares Routes Controller View Model
  • 107. Response Request Web Server Application Rack Middlewares Server Rack: Mongrel, Routes Thin, Passenger, Controller Unicorn View Model
  • 108. Web Server: NginX Response Request Apache Web Server Application Rack Middlewares Server Rack: Mongrel, Routes Thin, Passenger, Controller Unicorn View Model
  • 109. NginX, Apache, Lighty, IIS Reverse Proxy Mongrel, Thin, Unicorn, Passenger ActiveRecord/DataMapper RDBMS/NoSQL
  • 110. NginX, Apache, Lighty, IIS Reverse Proxy Mongrel, Thin, Unicorn, Passenger TidyTDS ActiveRecord/DataMapper SQL Server SQL Azure RDBMS/NoSQL
  • 111. NginX, Apache, Lighty, IIS Reverse Proxy Mongrel, Thin, Unicorn, Passenger ActiveRecord/DataMapper ActiveResource/RestClient/Savon WCF RDBMS/NoSQL Web Services (REST, SOAP)
  • 112. HAProxy NginX, Apache, Lighty, IIS Reverse Proxy Mongrel, Thin, Unicorn, Passenger ActiveRecord/DataMapper ActiveResource/RestClient/Savon RDBMS/NoSQL Web Services (REST, SOAP)
  • 113. HAProxy NginX, Apache, Lighty, IIS Varnish Reverse Proxy Mongrel, Thin, Unicorn, Passenger ActiveRecord/DataMapper ActiveResource/RestClient/Savon RDBMS/NoSQL Web Services (REST, SOAP)
  • 114. HAProxy NginX, Apache, Lighty, IIS Varnish Reverse Proxy Mongrel, Thin, Unicorn, Passenger ActiveRecord/DataMapper ActiveResource/RestClient/Savon Memcache RDBMS/NoSQL Web Services (REST, SOAP)
  • 115. 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
  • 116. 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
  • 117. 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!
  • 120.
  • 121.
  • 122. $(':checkbox').map(function() { return this.id; }).get().join(',');
  • 123.
  • 124.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 133. 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
  • 134. Request Request Request Request Request Request NginX Event Machine RDBMS
  • 135. Request Request Request Request Request Request NginX Event Machine “Look Ma! No Threads!” RDBMS
  • 136. Request Request Request Request Request Request NginX 5k ~ 10k conexões Event Machine “Look Ma! No Threads!” RDBMS
  • 137. Request Request Request Request Request Request NginX 5k ~ 10k conexões Conexões Longas Event Machine “Look Ma! No Threads!” RDBMS
  • 138.
  • 139. <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>
  • 140. <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>
  • 141. <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>
  • 142. myChannel.bind('coisa-criada', function(thing) { alert('Uma coisa foi criada: ' + thing.name); });
  • 143. myChannel.bind('coisa-criada', function(thing) { alert('Uma coisa foi criada: ' + thing.name); });
  • 144. myChannel.bind('coisa-criada', function(thing) { alert('Uma coisa foi criada: ' + thing.name); });
  • 145. 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
  • 146. 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
  • 147. 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
  • 148. 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
  • 150. (
  • 152.
  • 153. IN GOD WE TRUST Todos os outros devem trazer dados
  • 154.
  • 155. EXPERIENCE BY ITSELF BRINGS NOTHING
  • 156. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C
  • 157. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C STANDARD
  • 158. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C
  • 159. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C
  • 160. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C
  • 161. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C
  • 162. )
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170. Perl
  • 171.
  • 172. Python
  • 173.
  • 174. PHP
  • 175.
  • 176. Ruby
  • 177. OMG!
  • 178. 2011 2010 2009 2008 2007 Ruby on Rails
  • 179. 2011 2010 2009 2.0.5 2008 6 2007 Ruby on Rails 2.0.0
  • 180. 2011 2010 2009 2.1.2 2.0.5 3 2.1.0 2008 6 2007 Ruby on Rails 2.0.0
  • 181. 2011 2010 2.2.3 2009 2.1.2 4 2.2.0 2.0.5 3 2.1.0 2008 6 2007 Ruby on Rails 2.0.0
  • 182. 2011 2.3.11 2010 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
  • 183. 3.0.7 2.3.11 8 2011 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
  • 184. 3.0.7 2011 2.3.11 2010 3.0.0 2.2.3 2009 2.1.2 2.3.0 31 2.2.0 Versões! 2.0.5 2.1.0 2008 2007 Ruby on Rails 2.0.0
  • 185.
  • 186. Request Web Server Rails App /public/stylesheets
  • 187. Request Web Server Arquivos Estáticos Rails App /public/stylesheets
  • 188.
  • 189. 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; } }
  • 190. 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; } }
  • 191. 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; } }
  • 192. 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; }
  • 193.
  • 194. 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()
  • 195. 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
  • 196.
  • 197.
  • 198. 102
  • 199. Request Request Web Server Web Server (Desenvolvimento) (Produção) Rails App /app/assets /public
  • 200. Request Request Web Server Web Server (Desenvolvimento) (Produção) Rails Sprockets App /app/assets /public
  • 201. Request Request Web Server Web Server (Desenvolvimento) (Produção) Rails Sprockets App Tilt /app/assets /public
  • 202. Request Request Web Server Web Server (Desenvolvimento) (Produção) Rails Sprockets App Tilt Ugli er /app/assets /public
  • 203. 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
  • 205.
  • 206.
  • 207.
  • 208.
  • 209.
  • 210. RubyConf Brasil 3 e 4 de Novembro www.rubyconf.com.br
  • 212. Pedro Franceschi @pedroh96
  • 216. Pedro Franceschi @pedroh96
  • 217.
  • 218.
  • 219.
  • 220.
  • 222. Obrigado! www.akitaonrails.com u.akita.ws/dnad11 .com.br