campus party 2010

Post on 06-May-2015

2.168 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Palestra sobre assuntos aleatórios de Ruby, otimização de sites com YSlow, EventMachine, Search com acts_as_solr_reloaded

TRANSCRIPT

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

top related