Discutindo Rails e Arquiteturas  a apresentação já vai começar ...
Discutindo Rails e Arquiteturas
Fabio Akitawww.akitaonrails.com  @akitaonrails
Fabio Akitawww.akitaonrails.com  @akitaonrails  1990
Anos 80   Fim Anos 90   Século XXI
Anos 80               Fim Anos 90                    Século XXI                                            PerlBasic      ...
<prólogo>
Como o cliente      Como o Líder de    Como o Analista     Como o Programador   Como o Consultor de    explicou         Pr...
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 ...
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?         ...
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 desenvolverqualquer aplicação Web.
Todas as outras formas de desenvolver aplicaçõesWeb são inferiores a Ruby on Rails.
Ruby on Rails é uma das maneiras competentesde se desenvolver aplicações Web em algunscenários.
1994  (linguagem)                  2004(framework web)
1.8.7  1.9.21.9.3-dev 2.3.11  3.0.73.1-RC1
1.8.7  1.9.21.9.3-dev 2.3.11  3.0.73.1-RC1
1.8.7  1.9.21.9.3-dev 2.3.11  3.0.73.1-RC1
1.8.7  1.9.21.9.3-dev 2.3.11  3.0.73.1-RC1
gem install railsrails new nome_do_projeto
gem install railsrails new nome_do_projeto
gem install railsrails new nome_do_projeto      SIM! Via CLI! :-P
Request       Web Server   Rack Middlewares                    Routes       ControllerView                Model
Request       Web Server   Rack Middlewares                    Routes       ControllerView                Model
Request       Web Server   Rack Middlewares                    Routes       ControllerView                Model
Request       Web Server   Rack Middlewares                    Routes       ControllerView                Model
Request       Web Server   Rack Middlewares                    Routes       ControllerView                Model
Request       Web Server   Rack Middlewares                    Routes       ControllerView                Model
Request       Web Server   Rack Middlewares                    Routes       ControllerView                Model
Request       Web Server   Rack Middlewares                    Routes       ControllerView                Model
Request       Web Server   Rack Middlewares                    Routes       ControllerView                Model
Request       Web Server   Rack Middlewares                    Routes       ControllerView                Model
Response                Request           Web Server     Rack Middlewares                        Routes           Controll...
~30 mil gems  ~15 GB
bundle install
RubyGems   Library Assembly (DLL)  Rake            MSBuild Bundler          NuGet
> bundle listGems included by the bundle:   *   mail (2.2.19)  * abstract (1.0.0)           *   mime-types (1.16)  * actio...
> bundle listGems included by the bundle:   *   mail (2.2.19)  * abstract (1.0.0)           *   mime-types (1.16)  * actio...
> rake -T                           rake   log:clearrake   about               rake   middlewarerake   db:create          ...
> rails generateUsage: rails generate GENERATOR [args] [options]General options:  -h, [--help]       #   Print generators ...
> rake middleware                                   Rack                                                 Middlewaresuse   ...
Response                Request           Web Server     Rack Middlewares                        Routes           Controll...
Response                Request           Web Server     Rack Middlewares                        Routes           Controll...
Response                Request           Web Server                                  Application     Rack Middlewares    ...
Web Server:                                    NginXResponse                Request                                   Apac...
NginX, Apache, Lighty, IIS         Reverse ProxyMongrel, Thin, Unicorn, Passenger   ActiveRecord/DataMapper         RDBMS/...
NginX, Apache, Lighty, IIS         Reverse ProxyMongrel, Thin, Unicorn, Passenger    TidyTDS   ActiveRecord/DataMapper    ...
NginX, Apache, Lighty, IIS         Reverse ProxyMongrel, Thin, Unicorn, Passenger   ActiveRecord/DataMapperActiveResource/...
HAProxy    NginX, Apache, Lighty, IIS         Reverse ProxyMongrel, Thin, Unicorn, Passenger   ActiveRecord/DataMapperActi...
HAProxy    NginX, Apache, Lighty, IIS                                    Varnish         Reverse ProxyMongrel, Thin, Unico...
HAProxy    NginX, Apache, Lighty, IIS                                     Varnish         Reverse ProxyMongrel, Thin, Unic...
Request   Request   Request     Request      Request   RequestHTTPD     HTTPD     HTTPD        HTTPD       HTTPD     HTTPD...
Request   Request   Request     Request      Request   RequestHTTPD     HTTPD     HTTPD        HTTPD       HTTPD     HTTPD...
Request   Request   Request     Request      Request   RequestHTTPD     HTTPD     HTTPD        HTTPD       HTTPD     HTTPD...
Thread Context Switch
Thread Context Switch
$(:checkbox).map(function() {  return this.id;}).get().join(,);
RailsRequest          App
Eventos AssíncronosEnvio de mensagens
Request   Request   Request     Request      Request   RequestHTTPD     HTTPD     HTTPD        HTTPD       HTTPD     HTTPD...
Request   Request   Request   Request   Request   Request                          NginX                          Event   ...
Request   Request   Request   Request   Request   Request                          NginX                          Event   ...
Request   Request   Request   Request   Request   Request                          NginX                                  ...
Request   Request   Request   Request   Request   Request                          NginX                                  ...
<script src="http://js.pusherapp.com/1.8/pusher.min.js"></script><script>var pusher = new Pusher(API_KEY);var myChannel = ...
<script src="http://js.pusherapp.com/1.8/pusher.min.js"></script><script>var pusher = new Pusher(API_KEY);var myChannel = ...
<script src="http://js.pusherapp.com/1.8/pusher.min.js"></script><script>var pusher = new Pusher(API_KEY);var myChannel = ...
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 pusherPusher.app_id = APP_IDPusher.key = API_KEYPusher.secret = SECRET_KEYclass ThingsController < ApplicationCont...
require pusherPusher.app_id = APP_IDPusher.key = API_KEYPusher.secret = SECRET_KEYclass ThingsController < ApplicationCont...
require pusherPusher.app_id = APP_IDPusher.key = API_KEYPusher.secret = SECRET_KEYclass ThingsController < ApplicationCont...
require pusherPusher.app_id = APP_IDPusher.key = API_KEYPusher.secret = SECRET_KEYclass ThingsController < ApplicationCont...
Arquitetura deAltíssima Concorrência
(
W. Edward Deming
IN GOD WE TRUSTTodos 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!
20112010200920082007   Ruby on Rails
201120102009          2.0.52008                           62007   Ruby on Rails   2.0.0
201120102009         2.1.2          2.0.5                3                       2.1.02008                           62007...
20112010         2.2.32009         2.1.2                               4                       2.2.0          2.0.5       ...
2011     2.3.112010         2.2.3                               122009                       2.3.0         2.1.2          ...
3.0.7         2.3.11                               820112010                   3.0.0         2.2.3                        ...
3.0.72011     2.3.112010                   3.0.0         2.2.32009         2.1.2                       2.3.0              ...
Request          Web Server                      Rails                      App/public/stylesheets
Request                      Web ServerArquivosEstáticos                         Rails                                  Ap...
Variáveis$blue: #3bbfce;$margin: 16px;            /* CSS */.content-navigation {     .content-navigation {  border-color: ...
Nestingtable.hl {               /* CSS */  margin: 2em 0;  td.ln {                table.hl {    text-align: right;     mar...
Mixins@mixin table-base {  th {                          /* CSS */    text-align: center;    font-weight: bold;           ...
Selector Inheritance                       /* CSS */.error {                       .error, .badError {  border: 1px #f00; ...
class Animal  constructor: (@name) ->  move: (meters) ->    alert @name + " moved " + meters + "m."class Snake extends Ani...
var Animal, Horse, Snake, sam, tom;                                              var __hasProp = Object.prototype.hasOwnPr...
102
Request          Request   Web Server       Web Server(Desenvolvimento)   (Produção)                               Rails  ...
Request          Request   Web Server       Web Server(Desenvolvimento)   (Produção)                               Rails  ...
Request          Request   Web Server       Web Server(Desenvolvimento)   (Produção)                               Rails  ...
Request          Request   Web Server       Web Server(Desenvolvimento)   (Produção)                               Rails  ...
ENGINE                 FILE EXTENSIONS         REQUIRED LIBRARIESERB                    .erb, .rhtml                      ...
Rails 3.1:Release Candidate   (may 2011)
RubyConf     Brasil3 e 4 de Novembro    www.rubyconf.com.br
<epílogo>
Pedro Franceschi     @pedroh96
15 anosPedro Franceschi     @pedroh96
9 anosPedro Franceschi     @pedroh96
6 anosPedro Franceschi     @pedroh96
Pedro Franceschi     @pedroh96
</epílogo>
Obrigado! www.akitaonrails.com  u.akita.ws/dnad11 .com.br
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
09 - Fábio Akita - Além do rails
Upcoming SlideShare
Loading in...5
×

09 - Fábio Akita - Além do rails

1,282

Published on

Ruby on Rails com certeza é a estrela que elevou Ruby ao patamar de linguagem praticamente obrigatória a todo programador moderno. Porém muitos esquecem que Rails não é a única forma de desenvolver aplicações Web e muitas vezes nem é a melhor opção. O Ecossistema Ruby evolui a passos largos, todos os novos frameworks Web em Ruby adotaram o padrão Rack, que facilita a interoperabilidade entre frameworks Ruby. Além disso muitos estão olhando para o mundo da alta concorrência com novas tecnologias como Node.JS, mas o mundo Ruby tem opções robustas e testadas em produção como EventMachine. Enfim, vamos tentar aumentar o leque de soluções web com Ruby, além do Rails, traçando um paralelo com a plataforma .NET.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,282
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
14
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

09 - Fábio Akita - Além do rails

  1. 1. Discutindo Rails e Arquiteturas a apresentação já vai começar ...
  2. 2. Discutindo Rails e Arquiteturas
  3. 3. Fabio Akitawww.akitaonrails.com @akitaonrails
  4. 4. Fabio Akitawww.akitaonrails.com @akitaonrails 1990
  5. 5. Anos 80 Fim Anos 90 Século XXI
  6. 6. Anos 80 Fim Anos 90 Século XXI PerlBasic Pascal Java C PHP dBase Delphi Python ABAP III Ruby Clipper ASP .NET ObjC VB6
  7. 7. <prólogo>
  8. 8. 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 descreveuComo o projeto foi Como Operações Como o cliente foi O que o cliente Como foi o suporte documentado instalou cobrado realmente queria
  9. 9. Requerimentos: ENTENDIDO!
  10. 10. LOL
  11. 11. DESIGN
  12. 12. DESIGN
  13. 13. Pattern PADRÃO
  14. 14. STANDARD Pattern PADRÃO Default
  15. 15. “Pattern”
  16. 16. NÃO é “Standard”!
  17. 17. Christopher Alexander
  18. 18. 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
  19. 19. 2 + 2 = 5!
  20. 20. 2 + 2 = 5!
  21. 21. 2 + 2 = 4!
  22. 22. Aqui estão os fatos. Que Aqui está a conclusão. conclusões podemos Que fatos podemos chegar com eles? suportar com eles?
  23. 23. 80
  24. 24. 20 80
  25. 25. 20 80 “Long Tail”
  26. 26. </prólogo>
  27. 27. Pequenos (Startups?) Grandes(Enterprisey?)
  28. 28. Pequenos (Startups?)D DD Grandes (Enterprisey?)
  29. 29. Pequenos (Startups?) DD ”D ht Grandes“Lig (Enterprisey?)
  30. 30. Pequenos (Startups?) Grandes(Enterprisey?)
  31. 31. Complexidade Acidental
  32. 32. Ruby on Rails é a melhor forma de desenvolverqualquer aplicação Web.
  33. 33. Todas as outras formas de desenvolver aplicaçõesWeb são inferiores a Ruby on Rails.
  34. 34. Ruby on Rails é uma das maneiras competentesde se desenvolver aplicações Web em algunscenários.
  35. 35. 1994 (linguagem) 2004(framework web)
  36. 36. 1.8.7 1.9.21.9.3-dev 2.3.11 3.0.73.1-RC1
  37. 37. 1.8.7 1.9.21.9.3-dev 2.3.11 3.0.73.1-RC1
  38. 38. 1.8.7 1.9.21.9.3-dev 2.3.11 3.0.73.1-RC1
  39. 39. 1.8.7 1.9.21.9.3-dev 2.3.11 3.0.73.1-RC1
  40. 40. gem install railsrails new nome_do_projeto
  41. 41. gem install railsrails new nome_do_projeto
  42. 42. gem install railsrails new nome_do_projeto SIM! Via CLI! :-P
  43. 43. Request Web Server Rack Middlewares Routes ControllerView Model
  44. 44. Request Web Server Rack Middlewares Routes ControllerView Model
  45. 45. Request Web Server Rack Middlewares Routes ControllerView Model
  46. 46. Request Web Server Rack Middlewares Routes ControllerView Model
  47. 47. Request Web Server Rack Middlewares Routes ControllerView Model
  48. 48. Request Web Server Rack Middlewares Routes ControllerView Model
  49. 49. Request Web Server Rack Middlewares Routes ControllerView Model
  50. 50. Request Web Server Rack Middlewares Routes ControllerView Model
  51. 51. Request Web Server Rack Middlewares Routes ControllerView Model
  52. 52. Request Web Server Rack Middlewares Routes ControllerView Model
  53. 53. Response Request Web Server Rack Middlewares Routes Controller View Model
  54. 54. ~30 mil gems ~15 GB
  55. 55. bundle install
  56. 56. RubyGems Library Assembly (DLL) Rake MSBuild Bundler NuGet
  57. 57. > bundle listGems 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)
  58. 58. > bundle listGems 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)
  59. 59. > rake -T rake log:clearrake about rake middlewarerake db:create rake notesrake db:drop rake notes:customrake db:fixtures:load rake rails:templaterake db:migrate rake rails:updaterake db:migrate:status rake routesrake db:rollback rake secretrake db:schema:dump rake statsrake db:schema:load rake testrake db:seed rake test:recentrake db:setup rake test:uncommittedrake db:structure:dump rake time:zones:allrake db:version rake tmp:clearrake doc:app rake tmp:create
  60. 60. > rails generateUsage: rails generate GENERATOR [args] [options]General options: -h, [--help] # Print generators 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 outputPlease choose a generator below.Rails: observer controller performance_test generator plugin helper resource integration_test scaffold mailer scaffold_controller migration session_migration model stylesheets
  61. 61. > rake middleware Rack Middlewaresuse ActionDispatch::Staticuse Rack::Lockuse ActiveSupport::Cache::Strategy::LocalCacheuse Rack::Runtimeuse Rails::Rack::Loggeruse ActionDispatch::ShowExceptionsuse ActionDispatch::RemoteIpuse Rack::Sendfileuse ActionDispatch::Callbacksuse ActiveRecord::ConnectionAdapters::ConnectionManagementuse ActiveRecord::QueryCacheuse ActionDispatch::Cookiesuse ActionDispatch::Session::CookieStoreuse ActionDispatch::Flashuse ActionDispatch::ParamsParseruse Rack::MethodOverrideuse ActionDispatch::Headuse ActionDispatch::BestStandardsSupportrun Demo::Application.routes
  62. 62. Response Request Web Server Rack Middlewares Routes Controller View Model
  63. 63. Response Request Web Server Rack Middlewares Routes Controller View Model
  64. 64. Response Request Web Server Application Rack Middlewares Server Rack: Mongrel, Routes Thin, Passenger, Controller Unicorn View Model
  65. 65. Web Server: NginXResponse Request Apache Web Server Application Rack Middlewares Server Rack: Mongrel, Routes Thin, Passenger, Controller Unicorn View Model
  66. 66. NginX, Apache, Lighty, IIS Reverse ProxyMongrel, Thin, Unicorn, Passenger ActiveRecord/DataMapper RDBMS/NoSQL
  67. 67. NginX, Apache, Lighty, IIS Reverse ProxyMongrel, Thin, Unicorn, Passenger TidyTDS ActiveRecord/DataMapper SQL Server SQL Azure RDBMS/NoSQL
  68. 68. NginX, Apache, Lighty, IIS Reverse ProxyMongrel, Thin, Unicorn, Passenger ActiveRecord/DataMapperActiveResource/RestClient/Savon WCF RDBMS/NoSQL Web Services (REST, SOAP)
  69. 69. HAProxy NginX, Apache, Lighty, IIS Reverse ProxyMongrel, Thin, Unicorn, Passenger ActiveRecord/DataMapperActiveResource/RestClient/Savon RDBMS/NoSQL Web Services (REST, SOAP)
  70. 70. HAProxy NginX, Apache, Lighty, IIS Varnish Reverse ProxyMongrel, Thin, Unicorn, Passenger ActiveRecord/DataMapperActiveResource/RestClient/Savon RDBMS/NoSQL Web Services (REST, SOAP)
  71. 71. HAProxy NginX, Apache, Lighty, IIS Varnish Reverse ProxyMongrel, Thin, Unicorn, Passenger ActiveRecord/DataMapperActiveResource/RestClient/Savon Memcache RDBMS/NoSQL Web Services (REST, SOAP)
  72. 72. Request Request Request Request Request RequestHTTPD HTTPD HTTPD HTTPD HTTPD HTTPD Rails Rails Rails Rails Rails Rails App App App App App App RDBMS
  73. 73. Request Request Request Request Request RequestHTTPD HTTPD HTTPD HTTPD HTTPD HTTPD Rails Rails Rails Rails Rails Rails App App App App App App RDBMS
  74. 74. Request Request Request Request Request RequestHTTPD HTTPD HTTPD HTTPD HTTPD HTTPD Rails Rails Rails Rails Rails Rails App App App App App App Mais curto RDBMS possível!
  75. 75. Thread Context Switch
  76. 76. Thread Context Switch
  77. 77. $(:checkbox).map(function() { return this.id;}).get().join(,);
  78. 78. RailsRequest App
  79. 79. Eventos AssíncronosEnvio de mensagens
  80. 80. Request Request Request Request Request RequestHTTPD HTTPD HTTPD HTTPD HTTPD HTTPD Rails Rails Rails Rails Rails Rails App App App App App App RDBMS
  81. 81. Request Request Request Request Request Request NginX Event Machine RDBMS
  82. 82. Request Request Request Request Request Request NginX Event Machine “Look Ma! No Threads!” RDBMS
  83. 83. Request Request Request Request Request Request NginX 5k ~ 10k conexões Event Machine “Look Ma! No Threads!” RDBMS
  84. 84. Request Request Request Request Request Request NginX 5k ~ 10k conexões Conexões Longas Event Machine “Look Ma! No Threads!” RDBMS
  85. 85. <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>
  86. 86. <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>
  87. 87. <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>
  88. 88. myChannel.bind(coisa-criada, function(thing) { alert(Uma coisa foi criada: + thing.name);});
  89. 89. myChannel.bind(coisa-criada, function(thing) { alert(Uma coisa foi criada: + thing.name);});
  90. 90. myChannel.bind(coisa-criada, function(thing) { alert(Uma coisa foi criada: + thing.name);});
  91. 91. require pusherPusher.app_id = APP_IDPusher.key = API_KEYPusher.secret = SECRET_KEYclass ThingsController < ApplicationController def create @thing = Thing.new(params[:thing]) if @thing.save Pusher[MEU_CANAL].trigger(coisa-criada, @thing.attributes) end endend
  92. 92. require pusherPusher.app_id = APP_IDPusher.key = API_KEYPusher.secret = SECRET_KEYclass ThingsController < ApplicationController def create @thing = Thing.new(params[:thing]) if @thing.save Pusher[MEU_CANAL].trigger(coisa-criada, @thing.attributes) end endend
  93. 93. require pusherPusher.app_id = APP_IDPusher.key = API_KEYPusher.secret = SECRET_KEYclass ThingsController < ApplicationController def create @thing = Thing.new(params[:thing]) if @thing.save Pusher[MEU_CANAL].trigger(coisa-criada, @thing.attributes) end endend
  94. 94. require pusherPusher.app_id = APP_IDPusher.key = API_KEYPusher.secret = SECRET_KEYclass ThingsController < ApplicationController def create @thing = Thing.new(params[:thing]) if @thing.save Pusher[MEU_CANAL].trigger(coisa-criada, @thing.attributes) end endend
  95. 95. Arquitetura deAltíssima Concorrência
  96. 96. (
  97. 97. W. Edward Deming
  98. 98. IN GOD WE TRUSTTodos os outros devem trazer dados
  99. 99. EXPERIENCE BY ITSELF BRINGS NOTHING
  100. 100. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C
  101. 101. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C STANDARD
  102. 102. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C
  103. 103. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C
  104. 104. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C
  105. 105. Ciclo “Plan-Do-Check-Act” (melhoria contínua) P A D C
  106. 106. )
  107. 107. Perl
  108. 108. Python
  109. 109. PHP
  110. 110. Ruby
  111. 111. OMG!
  112. 112. 20112010200920082007 Ruby on Rails
  113. 113. 201120102009 2.0.52008 62007 Ruby on Rails 2.0.0
  114. 114. 201120102009 2.1.2 2.0.5 3 2.1.02008 62007 Ruby on Rails 2.0.0
  115. 115. 20112010 2.2.32009 2.1.2 4 2.2.0 2.0.5 3 2.1.02008 62007 Ruby on Rails 2.0.0
  116. 116. 2011 2.3.112010 2.2.3 122009 2.3.0 2.1.2 4 2.2.0 2.0.5 3 2.1.02008 62007 Ruby on Rails 2.0.0
  117. 117. 3.0.7 2.3.11 820112010 3.0.0 2.2.3 122009 2.3.0 2.1.2 4 2.2.0 2.0.5 3 2.1.02008 62007 Ruby on Rails 2.0.0
  118. 118. 3.0.72011 2.3.112010 3.0.0 2.2.32009 2.1.2 2.3.0 31 2.2.0 Versões! 2.0.5 2.1.020082007 Ruby on Rails 2.0.0
  119. 119. Request Web Server Rails App/public/stylesheets
  120. 120. Request Web ServerArquivosEstáticos Rails App /public/stylesheets
  121. 121. 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; }}
  122. 122. Nestingtable.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;} }
  123. 123. 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; }}
  124. 124. 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; }
  125. 125. class Animal constructor: (@name) -> move: (meters) -> alert @name + " moved " + meters + "m."class Snake extends Animal move: -> alert "Slithering..." super 5class Horse extends Animal move: -> alert "Galloping..." super 45sam = new Snake "Sammy the Python"tom = new Horse "Tommy the Palomino"sam.move()tom.move()
  126. 126. 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
  127. 127. 102
  128. 128. Request Request Web Server Web Server(Desenvolvimento) (Produção) Rails App /app/assets /public
  129. 129. Request Request Web Server Web Server(Desenvolvimento) (Produção) Rails Sprockets App /app/assets /public
  130. 130. Request Request Web Server Web Server(Desenvolvimento) (Produção) Rails Sprockets App Tilt /app/assets /public
  131. 131. Request Request Web Server Web Server(Desenvolvimento) (Produção) Rails Sprockets App Tilt Ugli er /app/assets /public
  132. 132. ENGINE FILE EXTENSIONS REQUIRED LIBRARIESERB .erb, .rhtml noneInterpolated String .strErubis .erb, .rhtml, .erubis erubisHaml .haml hamlSass .sass sassScss .scssLess CSS .less lessBuilder .builder builderLiquid .liquid liquidRDiscount rdiscountRedcarpet redcarpetBlueCloth .markdown, .mkd, .md blueclothKramdown kramdownMaruku marukuRedCloth .textile redclothRDoc .rdoc rdocRadius .radius radiusMarkaby .mab markabyNokogiri .nokogiri nokogiriCoffeeScript .coffee coffee-scriptCreole (Wiki markup) .creole creole
  133. 133. Rails 3.1:Release Candidate (may 2011)
  134. 134. RubyConf Brasil3 e 4 de Novembro www.rubyconf.com.br
  135. 135. <epílogo>
  136. 136. Pedro Franceschi @pedroh96
  137. 137. 15 anosPedro Franceschi @pedroh96
  138. 138. 9 anosPedro Franceschi @pedroh96
  139. 139. 6 anosPedro Franceschi @pedroh96
  140. 140. Pedro Franceschi @pedroh96
  141. 141. </epílogo>
  142. 142. Obrigado! www.akitaonrails.com u.akita.ws/dnad11 .com.br
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×