Post on 06-May-2015
description
A apresentação comecará em alguns minutos ...
Wednesday, January 27, 2010
A apresentação comecará em alguns minutos ...
Wednesday, January 27, 2010
AkitaOnRails.com
Wednesday, January 27, 2010
~ 1 h> 100 slides
Wednesday, January 27, 2010
www.slideshare.net/akitaonrails
fabio.akita@locaweb.com.br
www.akitaonrails.com/!les/entendendo-a-web-movies.zip
Wednesday, January 27, 2010
Entendendo a WebLições sobre Desenvolvimento Web com Ruby
Fabio Akita
Wednesday, January 27, 2010
Pensamento Tradicional
Wednesday, January 27, 2010
Web Server
MySQL
Browser
Wednesday, January 27, 2010
Web Server
MySQL
Browser
Wednesday, January 27, 2010
Web Server
MySQL
Browser
Wednesday, January 27, 2010
/site/default.asp
Wednesday, January 27, 2010
include header
/site/default.asp
Wednesday, January 27, 2010
include header
while ...
/site/default.asp
Wednesday, January 27, 2010
include header
while ...
Response.write
/site/default.asp
Wednesday, January 27, 2010
include header
include footer
while ...
Response.write
/site/default.asp
Wednesday, January 27, 2010
Ruby?
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Ruby on Rails 2.3
Ruby 1.8
“Novo” Ruby 1.9Wednesday, January 27, 2010
Ruby on Rails 2.3
Ruby 1.8
“Novo” Ruby 1.9Wednesday, January 27, 2010
Ruby on Rails 2.3
Ruby 1.8
“Novo” Ruby 1.9Wednesday, January 27, 2010
x mais lento que C++
Wednesday, January 27, 2010
Python 2
Ruby 1.9
Perl
JRuby
Python 3
PHP
Ruby 1.8.6
0 50 100 150 200
x mais lento que C++
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Wednesday, January 27, 2010
6
Wednesday, January 27, 2010
Menos Requisições
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Wednesday, January 27, 2010
DEVELOPMENT
Wednesday, January 27, 2010
PRODUCTION
Wednesday, January 27, 2010
Mini!que CSS e Javascript
Wednesday, January 27, 2010
Juicerhttp://github.com/cjohansen/juicer/
Wednesday, January 27, 2010
Wednesday, January 27, 2010
• git clone git://github.com/cjohansen/juicer.git
Wednesday, January 27, 2010
• git clone git://github.com/cjohansen/juicer.git
• cd juicer ; rake build
Wednesday, January 27, 2010
• git clone git://github.com/cjohansen/juicer.git
• cd juicer ; rake build
• gem install pkg/juicer-0.9.9.gem
Wednesday, January 27, 2010
• git clone git://github.com/cjohansen/juicer.git
• cd juicer ; rake build
• gem install pkg/juicer-0.9.9.gem
Wednesday, January 27, 2010
• git clone git://github.com/cjohansen/juicer.git
• cd juicer ; rake build
• gem install pkg/juicer-0.9.9.gem
• ./script/plugin install git://github.com/ktheory/juicer-rails.git
Wednesday, January 27, 2010
• juicer install yuicompressor
• juicer install jslint
Wednesday, January 27, 2010
<%= juiced_tag '/stylesheets/application.css' %> <%= yield(:head) %>
</head><body>
... <%= juiced_tag '/javascripts/application.js' %>
</body>
/app/views/layouts/application.html.erb
Wednesday, January 27, 2010
<%= juiced_tag '/stylesheets/application.css' %> <%= yield(:head) %>
</head><body>
... <%= juiced_tag '/javascripts/application.js' %>
</body>
/app/views/layouts/application.html.erb
Wednesday, January 27, 2010
@import url("reset.css");@import url("base.css");@import url("fonts.css");
...
/* @depends jquery-1.4.min.js @depends jquery.edit_in_place.js @depends jqueryamail.js*/
...
/public/stylesheets/application.css
/public/javascripts/application.js
Wednesday, January 27, 2010
@import url("reset.css");@import url("base.css");@import url("fonts.css");
...
/* @depends jquery-1.4.min.js @depends jquery.edit_in_place.js @depends jqueryamail.js*/
...
/public/stylesheets/application.css
/public/javascripts/application.js
Wednesday, January 27, 2010
Wednesday, January 27, 2010
• juicer merge public/stylesheets/application.css
• public/stylesheets/application.min.css
Wednesday, January 27, 2010
• juicer merge public/stylesheets/application.css
• public/stylesheets/application.min.css
• juicer merge -i public/javascripts/application.js
• public/javascripts/application.min.js
Wednesday, January 27, 2010
DEVELOPMENT
Wednesday, January 27, 2010
PRODUCTION
Wednesday, January 27, 2010
Asset HostsNavegadores abrem poucas conexões
simultâneas por domínio
Wednesday, January 27, 2010
Wednesday, January 27, 2010
def gallery gallery_path = File.join(Rails.root, "public/images/gallery/")
@images = Dir.glob(gallery_path + "*").map{ |f| f.gsub(gallery_path, "") }
end
/app/controllers/hello_controller.rb
Wednesday, January 27, 2010
def gallery gallery_path = File.join(Rails.root, "public/images/gallery/")
@images = Dir.glob(gallery_path + "*").map{ |f| f.gsub(gallery_path, "") }
end
/app/controllers/hello_controller.rb
/app/views/hello/gallery.html.erb
<% title "Gallery" %>
<% @images.each do |image| -%> <%= image_tag "gallery/#{image}" %>
<% end -%>
Wednesday, January 27, 2010
def gallery gallery_path = File.join(Rails.root, "public/images/gallery/")
@images = Dir.glob(gallery_path + "*").map{ |f| f.gsub(gallery_path, "") }
end
/app/controllers/hello_controller.rb
/app/views/hello/gallery.html.erb
<% title "Gallery" %>
<% @images.each do |image| -%> <%= image_tag "gallery/#{image}" %>
<% end -%>
Wednesday, January 27, 2010
DEVELOPMENT
Wednesday, January 27, 2010
DEVELOPMENT
Wednesday, January 27, 2010
/con!g/environments/production.rb
config.action_controller.asset_host = Proc.new do |source, request| protocol = if request.ssl?
request.headers["USER_AGENT"] =~ /(Safari)/ ? "http" : "https" else
"http" end
"#{protocol}://asset#{rand(6) + 1}.akitaonrails.local:3000"end
Wednesday, January 27, 2010
/con!g/environments/production.rb
config.action_controller.asset_host = Proc.new do |source, request| protocol = if request.ssl?
request.headers["USER_AGENT"] =~ /(Safari)/ ? "http" : "https" else
"http" end
"#{protocol}://asset#{rand(6) + 1}.akitaonrails.local:3000"end
Wednesday, January 27, 2010
### Host Database## localhost is used to configure the loopback interface# when the system is booting. Do not change this entry.##127.0.0.1 localhost255.255.255.255 broadcasthost::1 localhost fe80::1%lo0 localhost127.0.0.1 asset1.akitaonrails.local asset2.akitaonrails.local asset3.akitaonrails.local asset4.akitaonrails.local asset5.akitaonrails.local asset6.akitaonrails.local www.akitaonrails.local
/etc/hosts
Wednesday, January 27, 2010
PRODUCTION
Wednesday, January 27, 2010
PRODUCTION
Wednesday, January 27, 2010
Javascript embaixo!
Wednesday, January 27, 2010
<head> <title><%= h(yield(:title) || "Untitled") %></title> <%= stylesheet_link_tag 'application' %> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js" type="text/javascript"></script> <%= yield(:head) %></head><body>...
/app/views/layouts/application.html.erb
Wednesday, January 27, 2010
<head> <title><%= h(yield(:title) || "Untitled") %></title> <%= stylesheet_link_tag 'application' %> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js" type="text/javascript"></script> <%= yield(:head) %></head><body>...
/app/views/layouts/application.html.erb
Wednesday, January 27, 2010
... <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js" type="text/javascript"></script> <script type="text/javascript"> // meu javascript customizado ... </script> </body></html>
/app/views/layouts/application.html.erb
Wednesday, January 27, 2010
... <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script> <script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js" type="text/javascript"></script> <script type="text/javascript"> // meu javascript customizado ... </script> </body></html>
/app/views/layouts/application.html.erb
Wednesday, January 27, 2010
Gzip
Wednesday, January 27, 2010
• a2enmod de!ate
• editar /etc/apache2/mods-available/de!ate.conf
Wednesday, January 27, 2010
<IfModule mod_deflate.c> AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE image/svg+xml AddOutputFilterByType DEFLATE image/x-icon AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-php AddOutputFilterByType DEFLATE application/x-httpd-fastphp AddOutputFilterByType DEFLATE application/x-httpd-eruby
DeflateCompressionLevel 9
# Netscape 4.X has some problems BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine BrowserMatch \bMSIE !no-gzip !gzip-only-text/html</IfModule>
/etc/apache2/mods-available/de"ate.conf
Wednesday, January 27, 2010
Cabeçalhos de Expiração
Wednesday, January 27, 2010
• a2enmod expires
• editar /etc/apache2/mods-available/expires.conf
Wednesday, January 27, 2010
<IfModule mod_expires.c> ExpiresByType image/x-icon "access plus 1 year" ExpiresByType image/png "access plus 1 year" ExpiresByType image/jpg "access plus 1 year" ExpiresByType image/gif "access plus 1 year" ExpiresByType image/jpeg "access plus 1 year" ExpiresByType application/pdf "access plus 1 year" ExpiresByType audio/x-wav "access plus 1 year" ExpiresByType audio/mpeg "access plus 1 year" ExpiresByType video/mpeg "access plus 1 year" ExpiresByType video/mp4 "access plus 1 year" ExpiresByType video/quicktime "access plus 1 year" ExpiresByType video/x-ms-wmv "access plus 1 year" ExpiresByType application/x-shockwave-flash "access 1 month" ExpiresByType text/css "access plus 1 year" ExpiresByType text/javascript "access plus 1 year"</IfModule>
/etc/apache2/mods-available/expires.conf
Wednesday, January 27, 2010
Cache Busters
Wednesday, January 27, 2010
<%= stylesheet_link_tag 'application' %>
<%= javascript_include_tag 'application' %>
<%= image_tag "logo.png" %>
/app/views/layouts/application.html.erb
Wednesday, January 27, 2010
<link href="/stylesheets/application.css?1264345891" media="screen" rel="stylesheet" type="text/css" />
<script src="/javascripts/application.js?1264345058"
type="text/javascript"></script>
<img alt="Logo" src="/images/logo.png?1268943058" />
/app/views/layouts/application.html.erb
Wednesday, January 27, 2010
<link href="/stylesheets/application.css?1264345891" media="screen" rel="stylesheet" type="text/css" />
<script src="/javascripts/application.js?1264345058"
type="text/javascript"></script>
<img alt="Logo" src="/images/logo.png?1268943058" />
/app/views/layouts/application.html.erb
Wednesday, January 27, 2010
Use CDNs
Wednesday, January 27, 2010
<script src="/javascripts/jquery-1.4.min.js" type="text/javascript"></script><script src="/javascripts/jquery-ui-1.7.2.min.js" type="text/javascript"></script><script src="/javascripts/swfobject-2.2.js" type="text/javascript"></script><script src="/javascripts/CFInstall-1.0.2.min.js" type="text/javascript"></script>
/app/views/layouts/application.html.erb
Wednesday, January 27, 2010
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script><script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script><script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script><script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js" type="text/javascript"></script>
/app/views/layouts/application.html.erb
Wednesday, January 27, 2010
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js" type="text/javascript"></script><script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js" type="text/javascript"></script><script src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script><script src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1.0.2/CFInstall.min.js" type="text/javascript"></script>
/app/views/layouts/application.html.erb
Wednesday, January 27, 2010
Search
Wednesday, January 27, 2010
select * from ... where ... like “%...%”
Wednesday, January 27, 2010
select * from ... where ... like “%...%”
or ... like “%...%”or ... like “%...%”or ... like “%...%”or ... like “%...%”
Wednesday, January 27, 2010
select * from ... where ... like “%...%”
or ... like “%...%”or ... like “%...%”or ... like “%...%”or ... like “%...%”
Wednesday, January 27, 2010
Wednesday, January 27, 2010
• Open Source Enterprise Search Platform
• Baseado no famoso Lucene
• Full Text Search, com relevância
• Indexa documentos (Word, PDF, etc)
• Interface REST
• Roda em containers de Servlet (Tomcat)
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Wednesday, January 27, 2010
select * from ... where ... like “%...%”
or ... like “%...%”or ... like “%...%”or ... like “%...%”or ... like “%...%”
Wednesday, January 27, 2010
select * from ... where ... like “%...%”
or ... like “%...%”or ... like “%...%”or ... like “%...%”or ... like “%...%”
Wednesday, January 27, 2010
RackA API mais simples possível que
representa uma aplicação web genérica
Wednesday, January 27, 2010
ServerHTTP
Wednesday, January 27, 2010
ServerHTTPRequest
Wednesday, January 27, 2010
ServerHTTPRequest
Wednesday, January 27, 2010
ServerHTTPRequest
Wednesday, January 27, 2010
ServerHTTPRequest Response
Wednesday, January 27, 2010
lambda { |env| [200, {"Content-type" => "text/plain"}, "Hello World"] }
Wednesday, January 27, 2010
lambda { |env| [200, {"Content-type" => "text/plain"}, "Hello World"] }
Requisição
Wednesday, January 27, 2010
lambda { |env| [200, {"Content-type" => "text/plain"}, "Hello World"] }
Status
Requisição
Wednesday, January 27, 2010
lambda { |env| [200, {"Content-type" => "text/plain"}, "Hello World"] }
Status Cabeçalhos
Requisição
Wednesday, January 27, 2010
lambda { |env| [200, {"Content-type" => "text/plain"}, "Hello World"] }
Status Cabeçalhos Corpo
Requisição
Wednesday, January 27, 2010
RackRequest(env)
Response(Array)
Wednesday, January 27, 2010
RackRequest(env)
Response(Array)
.call(env)
Wednesday, January 27, 2010
RackRequest
Response
Rack
Rack
Wednesday, January 27, 2010
RackRequest
Response
Rack
Rack
Wednesday, January 27, 2010
RackRequest
Response
Rack
Rack
Wednesday, January 27, 2010
RackRequest
Response
Rack
Rack
Wednesday, January 27, 2010
RackRequest
Response
Rack
Rack
Wednesday, January 27, 2010
$ rake middleware
use ActionDispatch::Staticuse Rack::Lockuse Rack::Runtimeuse Rails::Rack::Loggeruse ActionDispatch::ShowExceptionsuse ActionDispatch::Callbacksuse ActionDispatch::Cookiesuse ActionDispatch::Session::CookieStoreuse ActionDispatch::Flashuse ActionDispatch::Cascadeuse ActionDispatch::ParamsParseruse Rack::MethodOverrideuse ActionDispatch::Headuse ActiveRecord::ConnectionAdapters::ConnectionManagementuse ActiveRecord::QueryCacherun Class
Wednesday, January 27, 2010
gem install rack
Wednesday, January 27, 2010
# run with 'rackup -p 9292 config.ru'require 'rubygems'
require 'rack'
app = Proc.new { |env| [200, {"Content-Type" => "text/html"}, "Hello Rack!"] }
run app
con!g.ru
Wednesday, January 27, 2010
rackup con!g.ru
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Sinatrahttp://www.sinatrarb.com/
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Otimizações Backend
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Browser pede páginaSe existir no cache, retorna
Procura RotaChama ControllerExecuta AçãoComunica com Banco de Dados
Se existir no cache, pulaSe processar assíncrono, pula
Renderiza ViewRetorna resultado ao Browser
Wednesday, January 27, 2010
Browser pede páginaSe existir no cache, retorna
Procura RotaChama ControllerExecuta AçãoComunica com Banco de Dados
Se existir no cache, pulaSe processar assíncrono, pula
Renderiza ViewRetorna resultado ao Browser
Wednesday, January 27, 2010
Browser pede páginaSe existir no cache, retorna
Procura RotaChama ControllerExecuta AçãoComunica com Banco de Dados
Se existir no cache, pulaSe processar assíncrono, pula
Renderiza ViewRetorna resultado ao Browser
Wednesday, January 27, 2010
Browser pede páginaSe existir no cache, retorna
Procura RotaChama ControllerExecuta AçãoComunica com Banco de Dados
Se existir no cache, pulaSe processar assíncrono, pula
Renderiza ViewRetorna resultado ao Browser
Wednesday, January 27, 2010
Browser pede páginaSe existir no cache, retorna
Procura RotaChama ControllerExecuta AçãoComunica com Banco de Dados
Se existir no cache, pulaSe processar assíncrono, pula
Renderiza ViewRetorna resultado ao Browser
Wednesday, January 27, 2010
Browser pede páginaSe existir no cache, retorna
Procura RotaChama ControllerExecuta AçãoComunica com Banco de Dados
Se existir no cache, pulaSe processar assíncrono, pula
Renderiza ViewRetorna resultado ao Browser
Wednesday, January 27, 2010
Browser pede páginaSe existir no cache, retorna
Procura RotaChama ControllerExecuta AçãoComunica com Banco de Dados
Se existir no cache, pulaSe processar assíncrono, pula
Renderiza ViewRetorna resultado ao Browser
Wednesday, January 27, 2010
Browser pede páginaSe existir no cache, retorna
Procura RotaChama ControllerExecuta AçãoComunica com Banco de Dados
Se existir no cache, pulaSe processar assíncrono, pula
Renderiza ViewRetorna resultado ao Browser
Wednesday, January 27, 2010
Browser pede páginaSe existir no cache, retorna
Procura RotaChama ControllerExecuta AçãoComunica com Banco de Dados
Se existir no cache, pulaSe processar assíncrono, pula
Renderiza ViewRetorna resultado ao Browser
Wednesday, January 27, 2010
Browser pede páginaSe existir no cache, retorna
Procura RotaChama ControllerExecuta AçãoComunica com Banco de Dados
Se existir no cache, pulaSe processar assíncrono, pula
Renderiza ViewRetorna resultado ao Browser
Wednesday, January 27, 2010
Apache2+ mod_proxy_balancer
Squid
Varnish
Wednesday, January 27, 2010
Memcached
MySQL Proxy
Assíncrono (ex. Resque, RabbitMQ)
Wednesday, January 27, 2010
LoadBalancer
Wednesday, January 27, 2010
LoadBalancer
App Server
Cache
Wednesday, January 27, 2010
LoadBalancer
App Server App Server
CacheCache
Wednesday, January 27, 2010
LoadBalancer
App Server App Server
Cache
App Server
CacheCache
Wednesday, January 27, 2010
LoadBalancer
App Server App Server
Cache
App Server
CacheCache
Wednesday, January 27, 2010
LoadBalancer
App Server App Server
Cache
App Server
Cache
MySQLMaster
Cache
Wednesday, January 27, 2010
LoadBalancer
App Server App Server
Cache
App Server
Cache
MySQLMaster
MySQLSlave
MySQLSlave
Cache
Wednesday, January 27, 2010
LoadBalancer
App Server App Server
Cache
App Server
Cache
MySQL Proxy
MySQLMaster
MySQLSlave
MySQLSlave
Cache
Wednesday, January 27, 2010
LoadBalancer
App Server App Server
Cache
App Server
Cache
MySQL Proxy
MySQLMaster
MySQLSlave
MySQLSlave
Cache
Wednesday, January 27, 2010
LoadBalancer
App Server App Server
Cache
App Server
Cache
MySQL Proxy
MySQLMaster
MySQLSlave
MySQLSlave
Cache
Job Server
Wednesday, January 27, 2010
Tendências
Wednesday, January 27, 2010
C10K Problem
Wednesday, January 27, 2010
Wednesday, January 27, 2010
HTML 5
Web Sockets
Reactor/Deferrable Pattern
Wednesday, January 27, 2010
HTML 5
Web Sockets
Reactor/Deferrable Pattern
Wednesday, January 27, 2010
HTML 5
Web Sockets
Reactor/Deferrable Pattern
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Browser
App
Banco
Browser
App
Browser
App
Wednesday, January 27, 2010
Browser
App
Banco
Browser
App
Browser
App
Wednesday, January 27, 2010
Browser
App
Banco
Browser
App
Browser
App
Wednesday, January 27, 2010
Browser
App
Banco
Browser
App
Browser
App
Wednesday, January 27, 2010
Browser
App
Banco
Browser
App
Browser
App
Browser
Wednesday, January 27, 2010
Browser
App
Banco
Browser
App
Browser
App
Browser
?
Wednesday, January 27, 2010
Browser
Banco
Browser Browser
Wednesday, January 27, 2010
Browser
Banco
Browser
conexões/eventos
Browser
Wednesday, January 27, 2010
Browser
Banco
Browser
conexões/eventos
Browser
processamento/eventos
Wednesday, January 27, 2010
Browser
Banco
Browser
conexões/eventos
Browser
processamento/eventos
Wednesday, January 27, 2010
Browser
Banco
Browser
conexões/eventos
Browser
processamento/eventos
Wednesday, January 27, 2010
Browser
Banco
Browser
conexões/eventos
Browser
processamento/eventos
Wednesday, January 27, 2010
Browser
Banco
Browser
conexões/eventos
Browser
processamento/eventos
Browser
Wednesday, January 27, 2010
Browser
Banco
Browser
conexões/eventos
Browser
processamento/eventos
Browser
Wednesday, January 27, 2010
Browser
Banco
Browser
conexões/eventos
Browser
processamento/eventos
BrowserBrowser
Wednesday, January 27, 2010
Browser
Banco
Browser
conexões/eventos
Browser
processamento/eventos
BrowserBrowser
Wednesday, January 27, 2010
Browser
Banco
Browser
conexões/eventos
Browser
processamento/eventos
BrowserBrowser
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Aprendendo Mais
Wednesday, January 27, 2010
RAILS LABS
Wednesday, January 27, 2010
Wednesday, January 27, 2010
RAILSCASTS.com
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Entenda os browsers
Entenda HTTP
Arquiteturas
Mundo Assíncrono
Mundo não Relacional
Wednesday, January 27, 2010
Entenda os browsers
Entenda HTTP
Arquiteturas
Mundo Assíncrono
Mundo não Relacional
Wednesday, January 27, 2010
Entenda os browsers
Entenda HTTP
Arquiteturas
Mundo Assíncrono
Mundo não Relacional
Wednesday, January 27, 2010
Entenda os browsers
Entenda HTTP
Arquiteturas
Mundo Assíncrono
Mundo não Relacional
Wednesday, January 27, 2010
Entenda os browsers
Entenda HTTP
Arquiteturas
Mundo Assíncrono
Mundo não Relacional
Wednesday, January 27, 2010
Wednesday, January 27, 2010
Thx!www.slideshare.net/akitaonrails
fabio.akita@locaweb.com.br
www.akitaonrails.com/!les/entendendo-a-web-movies.zip
Wednesday, January 27, 2010