SlideShare uma empresa Scribd logo
1 de 141
Baixar para ler offline
A apresentação já vai começar ...




Friday, April 16, 2010
AkitaOnRails.com




Friday, April 16, 2010
~ 50 min
                         ~ 85 slides



Friday, April 16, 2010
www.slideshare.net/akitaonrails
             http://dl.dropbox.com/u/1732133/dicas-de-desenvolvimento-web-com-rails.zip




                             fabioakita@gmail.com




Friday, April 16, 2010
Entendendo a Web
                     Dicas sobre Desenvolvimento Web com Ruby



                                 Fabio Akita



Friday, April 16, 2010
Friday, April 16, 2010
Recapitulando ...


Friday, April 16, 2010
Rails não Escala


Friday, April 16, 2010
(TM)

                     Rails não Escala


Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Blaine Cook

                         http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter


Friday, April 16, 2010
Para colocar as coisas em
         perspectiva, o Friendster foi
       escrito em Java e eles mudaram
        para PHP. MySpace foi escrito
       em ColdFusion e eles mudaram
                para ASP.NET.




                                                                              Blaine Cook

                         http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter


Friday, April 16, 2010
Para colocar as coisas em
         perspectiva, o Friendster foi
       escrito em Java e eles mudaram
        para PHP. MySpace foi escrito
       em ColdFusion e eles mudaram
                para ASP.NET.


         Quando as pessoas caem em
         problemas de escalabilidade,
          normalmente acham que a
        linguagem é o problema, mas
        eu acho que isso raramente é a
                  realidade.                                                  Blaine Cook

                         http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter


Friday, April 16, 2010
“O The New York Times usou Ruby on Rails para
                 agregar, analizar e mostrar os resultados das
                eleições em quase tempo real em um de seus
                  sites mais acessados de todos os tempos.”



                         http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise?fp=16&fpid=1




Friday, April 16, 2010
“O The New York Times usou Ruby on Rails para
                 agregar, analizar e mostrar os resultados das
                eleições em quase tempo real em um de seus
                  sites mais acessados de todos os tempos.”



                         http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise?fp=16&fpid=1




Friday, April 16, 2010
Browser




                         Web Server




                          MySQL




Friday, April 16, 2010
Browser


                                      Varnish/HAProxy


                         Web Server




                          MySQL




Friday, April 16, 2010
Browser


                                      Varnish/HAProxy


                         Web Server


                                        Memcached


                          MySQL




Friday, April 16, 2010
Browser


                                       Varnish/HAProxy


                         Web Server


                                         Memcached


                          MySQL

                                      CouchDB/MongoDB




Friday, April 16, 2010
Ruby é Lento


Friday, April 16, 2010
(TM)
                         Ruby é Lento


Friday, April 16, 2010
Existem mentiras,
              mentiras malditas e
                 estatísticas.

Friday, April 16, 2010
Existem mentiras,
              mentiras malditas e
                 estatísticas.

Friday, April 16, 2010
Existem mentiras,
              mentiras malditas e
                 estatísticas.

Friday, April 16, 2010
Friday, April 16, 2010
x mais lento que C++




Friday, April 16, 2010
x mais lento que C++


                         0   32.5             65           97.5   130

  Python 2


   Ruby 1.9


       JRuby


          Perl


    Python 3


          PHP


     Ruby 1.8




Friday, April 16, 2010
Homepage: 331 ms




Friday, April 16, 2010
Homepage: 331 ms

                         Total: 5.45 s

Friday, April 16, 2010
Performance
                               !=
                         Escalabilidade

Friday, April 16, 2010
Exemplo


Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
6
                         Técnicas



Friday, April 16, 2010
Menos Requisições



Friday, April 16, 2010
Mini que CSS e
                           Javascript



Friday, April 16, 2010
Juicer
                         http://github.com/cjohansen/juicer/




Friday, April 16, 2010
gem install juicer



    script/plugin install git://github.com/ktheory/juicer-rails.git




Friday, April 16, 2010
gem install juicer



    script/plugin install git://github.com/ktheory/juicer-rails.git




Friday, April 16, 2010
juicer install yuicompressor

           juicer install jslint

           juicer install closure_compiler


Friday, April 16, 2010
juicer install yuicompressor

           juicer install jslint

           juicer install closure_compiler


Friday, April 16, 2010
juicer install yuicompressor

           juicer install jslint

           juicer install closure_compiler


Friday, April 16, 2010
/app/views/layouts/application.html.erb




                         <%= juiced_tag '/stylesheets/application.css' %>
                         <%= yield(:head) %>
                  </head>
                  <body>
                         ...
                         <%= juiced_tag '/javascripts/application.js' %>
                  </body>




Friday, April 16, 2010
/app/views/layouts/application.html.erb




                         <%= juiced_tag '/stylesheets/application.css' %>
                         <%= yield(:head) %>
                  </head>
                  <body>
                         ...
                         <%= juiced_tag '/javascripts/application.js' %>
                  </body>




Friday, April 16, 2010
/public/stylesheets/application.css




                                 @import url("reset.css");
                                 @import url("base.css");
                                 @import url("fonts.css");

                                 ...

        /public/javascripts/application.js




                                 /*
                                      @depends jquery-1.4.min.js
                                      @depends jquery.edit_in_place.js
                                      @depends jqueryamail.js
                                 */

                                 ...



Friday, April 16, 2010
/public/stylesheets/application.css




                                 @import url("reset.css");
                                 @import url("base.css");
                                 @import url("fonts.css");

                                 ...

        /public/javascripts/application.js




                                 /*
                                      @depends jquery-1.4.min.js
                                      @depends jquery.edit_in_place.js
                                      @depends jqueryamail.js
                                 */

                                 ...



Friday, April 16, 2010
juicer merge public/stylesheets/application.css

  public/stylesheets/application.min.css

  juicer merge -i public/javascripts/application.js

  public/javascripts/application.min.js



Friday, April 16, 2010
juicer merge public/stylesheets/application.css

  public/stylesheets/application.min.css

  juicer merge -i public/javascripts/application.js

  public/javascripts/application.min.js



Friday, April 16, 2010
juicer merge public/stylesheets/application.css

  public/stylesheets/application.min.css

  juicer merge -i public/javascripts/application.js

  public/javascripts/application.min.js



Friday, April 16, 2010
juicer merge public/stylesheets/application.css

  public/stylesheets/application.min.css

  juicer merge -i public/javascripts/application.js

  public/javascripts/application.min.js



Friday, April 16, 2010
DEVELOPMENT

Friday, April 16, 2010
PRODUCTION

Friday, April 16, 2010
Asset Hosts
                         Navegadores abrem poucas conexões
                              simultâneas por domínio




Friday, April 16, 2010
Friday, April 16, 2010
/app/controllers/hello_controller.rb


           def gallery
                gallery_path = File.join(Rails.root, "public/images/gallery/")
                @images = Dir.glob(gallery_path + "*").map{ |f|
                    f.gsub(gallery_path, "") }
           end




Friday, April 16, 2010
/app/controllers/hello_controller.rb


           def gallery
                gallery_path = File.join(Rails.root, "public/images/gallery/")
                @images = Dir.glob(gallery_path + "*").map{ |f|
                    f.gsub(gallery_path, "") }
           end

       /app/views/hello/gallery.html.erb



           <% title "Gallery" %>


           <% @images.each do |image| -%>
                <%= image_tag "gallery/#{image}" %>
           <% end -%>




Friday, April 16, 2010
/app/controllers/hello_controller.rb


           def gallery
                gallery_path = File.join(Rails.root, "public/images/gallery/")
                @images = Dir.glob(gallery_path + "*").map{ |f|
                    f.gsub(gallery_path, "") }
           end

       /app/views/hello/gallery.html.erb



           <% title "Gallery" %>


           <% @images.each do |image| -%>
                <%= image_tag "gallery/#{image}" %>
           <% end -%>




Friday, April 16, 2010
DEVELOPMENT

Friday, April 16, 2010
DEVELOPMENT

Friday, April 16, 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




Friday, April 16, 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




Friday, April 16, 2010
/etc/hosts




     ##
     # Host Database
     #
     # localhost is used to configure the loopback interface
     # when the system is booting. Do not change this entry.
     ##
     127.0.0.1 localhost
     255.255.255.255 broadcasthost
     ::1             localhost
     fe80::1%lo0 localhost
     127.0.0.1       asset1.akitaonrails.local
     asset2.akitaonrails.local asset3.akitaonrails.local
     asset4.akitaonrails.local asset5.akitaonrails.local
     asset6.akitaonrails.local www.akitaonrails.local




Friday, April 16, 2010
PRODUCTION

Friday, April 16, 2010
PRODUCTION

Friday, April 16, 2010
Javascript embaixo!



Friday, April 16, 2010
/app/views/layouts/application.html.erb



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




Friday, April 16, 2010
/app/views/layouts/application.html.erb



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




Friday, April 16, 2010
/app/views/layouts/application.html.erb



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




Friday, April 16, 2010
/app/views/layouts/application.html.erb



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




Friday, April 16, 2010
Gzip



Friday, April 16, 2010
a2enmod de ate


        editar
        /etc/apache2/mods-available/de ate.conf



Friday, April 16, 2010
a2enmod de ate


        editar
        /etc/apache2/mods-available/de ate.conf



Friday, April 16, 2010
/etc/apache2/mods-available/de ate.conf


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


Friday, April 16, 2010
Cabeçalhos de
                           Expiração



Friday, April 16, 2010
a2enmod expires


        editar
        /etc/apache2/mods-available/expires.conf



Friday, April 16, 2010
a2enmod expires


        editar
        /etc/apache2/mods-available/expires.conf



Friday, April 16, 2010
/etc/apache2/mods-available/expires.conf




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




Friday, April 16, 2010
Cache Busters



Friday, April 16, 2010
/app/views/layouts/application.html.erb




                         <%= stylesheet_link_tag 'application' %>


                         <%= javascript_include_tag 'application' %>


                         <%= image_tag "logo.png" %>




Friday, April 16, 2010
/app/views/layouts/application.html.erb




                    <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" />




Friday, April 16, 2010
/app/views/layouts/application.html.erb




                    <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" />




Friday, April 16, 2010
Use CDNs



Friday, April 16, 2010
/app/views/layouts/application.html.erb




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




Friday, April 16, 2010
/app/views/layouts/application.html.erb




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




Friday, April 16, 2010
/app/views/layouts/application.html.erb




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




Friday, April 16, 2010
Search


Friday, April 16, 2010
select * from ...
                   where ... like “%...%”



Friday, April 16, 2010
select * from ...
                   where ... like “%...%”
                    or ... like “%...%”
                    or ... like “%...%”
                    or ... like “%...%”
                    or ... like “%...%”
Friday, April 16, 2010
select * from ...
                   where ... like “%...%”
                    or ... like “%...%”
                    or ... like “%...%”
                    or ... like “%...%”
                    or ... like “%...%”
Friday, April 16, 2010
Friday, April 16, 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)


Friday, April 16, 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)


Friday, April 16, 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)


Friday, April 16, 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)


Friday, April 16, 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)


Friday, April 16, 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)


Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
select * from ...
                   where ... like “%...%”
                    or ... like “%...%”
                    or ... like “%...%”
                    or ... like “%...%”
                    or ... like “%...%”
Friday, April 16, 2010
select * from ...
                   where ... like “%...%”
                    or ... like “%...%”
                    or ... like “%...%”
                    or ... like “%...%”
                    or ... like “%...%”
Friday, April 16, 2010
Tarefas
                         Assíncronas

Friday, April 16, 2010
Friday, April 16, 2010
Requisição




Friday, April 16, 2010
Processamento
          Requisição




Friday, April 16, 2010
Processamento
          Requisição                     Resposta




Friday, April 16, 2010
Crontab



Friday, April 16, 2010
Friday, April 16, 2010
RMagick




Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
Redis
                           Workers
                         Resque-Web




Friday, April 16, 2010
Friday, April 16, 2010
Friday, April 16, 2010
291 s
                         Processamento
          Requisição




Friday, April 16, 2010
32 s
                          Processamento




          Requisição                      Resposta


                         Worker


Friday, April 16, 2010
Friday, April 16, 2010
Imagens

                          Relatórios

                         Web Services

                         Transações
Friday, April 16, 2010
Imagens

                          Relatórios

                         Web Services

                         Transações
Friday, April 16, 2010
Imagens

                          Relatórios

                         Web Services

                         Transações
Friday, April 16, 2010
Imagens

                          Relatórios

                         Web Services

                         Transações
Friday, April 16, 2010
Aprendendo
                            Mais

Friday, April 16, 2010
RAILS LABS

Friday, April 16, 2010
RAILSCASTS.com

Friday, April 16, 2010
caelum.com.br

Friday, April 16, 2010
egenial.com.br

Friday, April 16, 2010
Friday, April 16, 2010
Entenda os browsers

                            Entenda HTTP

                             Arquiteturas

                          Mundo Assíncrono

                         Mundo não Relacional
Friday, April 16, 2010
Entenda os browsers

                            Entenda HTTP

                             Arquiteturas

                          Mundo Assíncrono

                         Mundo não Relacional
Friday, April 16, 2010
Entenda os browsers

                            Entenda HTTP

                             Arquiteturas

                          Mundo Assíncrono

                         Mundo não Relacional
Friday, April 16, 2010
Entenda os browsers

                            Entenda HTTP

                             Arquiteturas

                          Mundo Assíncrono

                         Mundo não Relacional
Friday, April 16, 2010
Entenda os browsers

                            Entenda HTTP

                             Arquiteturas

                          Mundo Assíncrono

                         Mundo não Relacional
Friday, April 16, 2010
Friday, April 16, 2010
Thx!
        www.slideshare.net/akitaonrails
             http://dl.dropbox.com/u/1732133/dicas-de-desenvolvimento-web-com-rails.zip




                             fabioakita@gmail.com

Friday, April 16, 2010

Mais conteúdo relacionado

Semelhante a Caelum dicas web 2010

Edted 2010 Dicas de Web
Edted 2010 Dicas de WebEdted 2010 Dicas de Web
Edted 2010 Dicas de WebFabio Akita
 
IE9 для разработчиков
IE9 для разработчиковIE9 для разработчиков
IE9 для разработчиковYuriy Artyukh
 
Document-Oriented Databases: Couchdb Primer
Document-Oriented Databases: Couchdb PrimerDocument-Oriented Databases: Couchdb Primer
Document-Oriented Databases: Couchdb Primerjsiarto
 
The Mobile Web @ 2010 JSConf
The Mobile Web @ 2010 JSConfThe Mobile Web @ 2010 JSConf
The Mobile Web @ 2010 JSConfdion
 
Html5 apps nikolaionken-08-06
Html5 apps nikolaionken-08-06Html5 apps nikolaionken-08-06
Html5 apps nikolaionken-08-06Skills Matter
 
Webmontag München Cross Platform
Webmontag München Cross PlatformWebmontag München Cross Platform
Webmontag München Cross Platformwolframkriesing
 
Persistence Smoothie: Blending SQL and NoSQL (RubyNation Edition)
Persistence  Smoothie: Blending SQL and NoSQL (RubyNation Edition)Persistence  Smoothie: Blending SQL and NoSQL (RubyNation Edition)
Persistence Smoothie: Blending SQL and NoSQL (RubyNation Edition)Michael Bleigh
 
let's talk web standards
let's talk web standardslet's talk web standards
let's talk web standardsZi Bin Cheah
 
Cutting Edge CSS3 @ WebExpo Tour 2010
Cutting Edge CSS3 @ WebExpo Tour 2010Cutting Edge CSS3 @ WebExpo Tour 2010
Cutting Edge CSS3 @ WebExpo Tour 2010Zi Bin Cheah
 
Mwrc2011 cookbook design patterns
Mwrc2011 cookbook design patternsMwrc2011 cookbook design patterns
Mwrc2011 cookbook design patternsjtimberman
 
Opening up the Social Web - Standards that are bridging the Islands
Opening up the Social Web - Standards that are bridging the Islands Opening up the Social Web - Standards that are bridging the Islands
Opening up the Social Web - Standards that are bridging the Islands Bastian Hofmann
 
Human APIs - expanding the mobile web or are robots coming to JavaScript?
Human APIs - expanding the mobile web or are robots coming to JavaScript? Human APIs - expanding the mobile web or are robots coming to JavaScript?
Human APIs - expanding the mobile web or are robots coming to JavaScript? Nikolai Onken
 
Mobile Development with uPortal and Infusion
Mobile Development with uPortal and InfusionMobile Development with uPortal and Infusion
Mobile Development with uPortal and Infusioncolinbdclark
 
Campus Party 2010
Campus Party 2010Campus Party 2010
Campus Party 2010Fabio Akita
 
In depth with html5 java2days 2010
In depth with html5 java2days 2010In depth with html5 java2days 2010
In depth with html5 java2days 2010Mystic Coders, LLC
 
Standards: politics, case studies
Standards: politics, case studiesStandards: politics, case studies
Standards: politics, case studiesZi Bin Cheah
 

Semelhante a Caelum dicas web 2010 (20)

Edted 2010 Dicas de Web
Edted 2010 Dicas de WebEdted 2010 Dicas de Web
Edted 2010 Dicas de Web
 
IE9 для разработчиков
IE9 для разработчиковIE9 для разработчиков
IE9 для разработчиков
 
Document-Oriented Databases: Couchdb Primer
Document-Oriented Databases: Couchdb PrimerDocument-Oriented Databases: Couchdb Primer
Document-Oriented Databases: Couchdb Primer
 
Node.js and Ruby
Node.js and RubyNode.js and Ruby
Node.js and Ruby
 
The Mobile Web @ 2010 JSConf
The Mobile Web @ 2010 JSConfThe Mobile Web @ 2010 JSConf
The Mobile Web @ 2010 JSConf
 
Html5 apps nikolaionken-08-06
Html5 apps nikolaionken-08-06Html5 apps nikolaionken-08-06
Html5 apps nikolaionken-08-06
 
Webmontag München Cross Platform
Webmontag München Cross PlatformWebmontag München Cross Platform
Webmontag München Cross Platform
 
Persistence Smoothie: Blending SQL and NoSQL (RubyNation Edition)
Persistence  Smoothie: Blending SQL and NoSQL (RubyNation Edition)Persistence  Smoothie: Blending SQL and NoSQL (RubyNation Edition)
Persistence Smoothie: Blending SQL and NoSQL (RubyNation Edition)
 
let's talk web standards
let's talk web standardslet's talk web standards
let's talk web standards
 
Cutting Edge CSS3 @ WebExpo Tour 2010
Cutting Edge CSS3 @ WebExpo Tour 2010Cutting Edge CSS3 @ WebExpo Tour 2010
Cutting Edge CSS3 @ WebExpo Tour 2010
 
HTML5 offline
HTML5 offlineHTML5 offline
HTML5 offline
 
Mwrc2011 cookbook design patterns
Mwrc2011 cookbook design patternsMwrc2011 cookbook design patterns
Mwrc2011 cookbook design patterns
 
Opening up the Social Web - Standards that are bridging the Islands
Opening up the Social Web - Standards that are bridging the Islands Opening up the Social Web - Standards that are bridging the Islands
Opening up the Social Web - Standards that are bridging the Islands
 
Human APIs - expanding the mobile web or are robots coming to JavaScript?
Human APIs - expanding the mobile web or are robots coming to JavaScript? Human APIs - expanding the mobile web or are robots coming to JavaScript?
Human APIs - expanding the mobile web or are robots coming to JavaScript?
 
Mobile Development with uPortal and Infusion
Mobile Development with uPortal and InfusionMobile Development with uPortal and Infusion
Mobile Development with uPortal and Infusion
 
Campus Party 2010
Campus Party 2010Campus Party 2010
Campus Party 2010
 
In depth with html5 java2days 2010
In depth with html5 java2days 2010In depth with html5 java2days 2010
In depth with html5 java2days 2010
 
Ruby off Rails
Ruby off RailsRuby off Rails
Ruby off Rails
 
Standards: politics, case studies
Standards: politics, case studiesStandards: politics, case studies
Standards: politics, case studies
 
Flash on a shoestring
Flash on a shoestringFlash on a shoestring
Flash on a shoestring
 

Mais de Fabio Akita

Devconf 2019 - São Carlos
Devconf 2019 - São CarlosDevconf 2019 - São Carlos
Devconf 2019 - São CarlosFabio 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 LanguagesFabio 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 2018Fabio Akita
 
Desmistificando Blockchains - 20o Encontro Locaweb SP
Desmistificando Blockchains - 20o Encontro Locaweb SPDesmistificando Blockchains - 20o Encontro Locaweb SP
Desmistificando Blockchains - 20o Encontro Locaweb SPFabio Akita
 
Desmistificando Blockchains - Insiter Goiania
Desmistificando Blockchains - Insiter GoianiaDesmistificando Blockchains - Insiter Goiania
Desmistificando Blockchains - Insiter GoianiaFabio Akita
 
Blockchain em 7 minutos - 7Masters
Blockchain em 7 minutos - 7MastersBlockchain em 7 minutos - 7Masters
Blockchain em 7 minutos - 7MastersFabio 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 CampinasFabio 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 2017Fabio 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 RubyFabio 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 TIFabio Akita
 
THE CONF - Opening Keynote
THE CONF - Opening KeynoteTHE CONF - Opening Keynote
THE CONF - Opening KeynoteFabio 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 2017Fabio Akita
 
Desmistificando Mitos de Startups - Sebrae - AP
Desmistificando Mitos de Startups - Sebrae - APDesmistificando Mitos de Startups - Sebrae - AP
Desmistificando Mitos de Startups - Sebrae - APFabio 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 2017Fabio 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 2017Fabio 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 DayFabio 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 2016Fabio Akita
 
Premature Optimization 2.0 - Intercon 2016
Premature Optimization 2.0 - Intercon 2016Premature Optimization 2.0 - Intercon 2016
Premature Optimization 2.0 - Intercon 2016Fabio Akita
 
Conexão Kinghost - Otimização Prematura
Conexão Kinghost - Otimização PrematuraConexão Kinghost - Otimização Prematura
Conexão Kinghost - Otimização PrematuraFabio 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 EvilFabio Akita
 

Mais de 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
 

Último

Introduction - IPLOOK NETWORKS CO., LTD.
Introduction - IPLOOK NETWORKS CO., LTD.Introduction - IPLOOK NETWORKS CO., LTD.
Introduction - IPLOOK NETWORKS CO., LTD.IPLOOK Networks
 
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENTSIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENTxtailishbaloch
 
Scenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenariosScenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenariosErol GIRAUDY
 
.NET 8 ChatBot with Azure OpenAI Services.pptx
.NET 8 ChatBot with Azure OpenAI Services.pptx.NET 8 ChatBot with Azure OpenAI Services.pptx
.NET 8 ChatBot with Azure OpenAI Services.pptxHansamali Gamage
 
Oracle Database 23c Security New Features.pptx
Oracle Database 23c Security New Features.pptxOracle Database 23c Security New Features.pptx
Oracle Database 23c Security New Features.pptxSatishbabu Gunukula
 
Trailblazer Community - Flows Workshop (Session 2)
Trailblazer Community - Flows Workshop (Session 2)Trailblazer Community - Flows Workshop (Session 2)
Trailblazer Community - Flows Workshop (Session 2)Muhammad Tiham Siddiqui
 
March Patch Tuesday
March Patch TuesdayMarch Patch Tuesday
March Patch TuesdayIvanti
 
Automation Ops Series: Session 2 - Governance for UiPath projects
Automation Ops Series: Session 2 - Governance for UiPath projectsAutomation Ops Series: Session 2 - Governance for UiPath projects
Automation Ops Series: Session 2 - Governance for UiPath projectsDianaGray10
 
Extra-120324-Visite-Entreprise-icare.pdf
Extra-120324-Visite-Entreprise-icare.pdfExtra-120324-Visite-Entreprise-icare.pdf
Extra-120324-Visite-Entreprise-icare.pdfInfopole1
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
 
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInOutage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInThousandEyes
 
My key hands-on projects in Quantum, and QAI
My key hands-on projects in Quantum, and QAIMy key hands-on projects in Quantum, and QAI
My key hands-on projects in Quantum, and QAIVijayananda Mohire
 
3 Pitfalls Everyone Should Avoid with Cloud Data
3 Pitfalls Everyone Should Avoid with Cloud Data3 Pitfalls Everyone Should Avoid with Cloud Data
3 Pitfalls Everyone Should Avoid with Cloud DataEric D. Schabell
 
TrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie WorldTrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie WorldTrustArc
 
Planetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile BrochurePlanetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile BrochurePlanetek Italia Srl
 
CyberSecurity - Computers In Libraries 2024
CyberSecurity - Computers In Libraries 2024CyberSecurity - Computers In Libraries 2024
CyberSecurity - Computers In Libraries 2024Brian Pichman
 
Introduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its applicationIntroduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its applicationKnoldus Inc.
 
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - TechWebinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - TechProduct School
 
Flow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First FrameFlow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First FrameKapil Thakar
 

Último (20)

SheDev 2024
SheDev 2024SheDev 2024
SheDev 2024
 
Introduction - IPLOOK NETWORKS CO., LTD.
Introduction - IPLOOK NETWORKS CO., LTD.Introduction - IPLOOK NETWORKS CO., LTD.
Introduction - IPLOOK NETWORKS CO., LTD.
 
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENTSIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
SIM INFORMATION SYSTEM: REVOLUTIONIZING DATA MANAGEMENT
 
Scenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenariosScenario Library et REX Discover industry- and role- based scenarios
Scenario Library et REX Discover industry- and role- based scenarios
 
.NET 8 ChatBot with Azure OpenAI Services.pptx
.NET 8 ChatBot with Azure OpenAI Services.pptx.NET 8 ChatBot with Azure OpenAI Services.pptx
.NET 8 ChatBot with Azure OpenAI Services.pptx
 
Oracle Database 23c Security New Features.pptx
Oracle Database 23c Security New Features.pptxOracle Database 23c Security New Features.pptx
Oracle Database 23c Security New Features.pptx
 
Trailblazer Community - Flows Workshop (Session 2)
Trailblazer Community - Flows Workshop (Session 2)Trailblazer Community - Flows Workshop (Session 2)
Trailblazer Community - Flows Workshop (Session 2)
 
March Patch Tuesday
March Patch TuesdayMarch Patch Tuesday
March Patch Tuesday
 
Automation Ops Series: Session 2 - Governance for UiPath projects
Automation Ops Series: Session 2 - Governance for UiPath projectsAutomation Ops Series: Session 2 - Governance for UiPath projects
Automation Ops Series: Session 2 - Governance for UiPath projects
 
Extra-120324-Visite-Entreprise-icare.pdf
Extra-120324-Visite-Entreprise-icare.pdfExtra-120324-Visite-Entreprise-icare.pdf
Extra-120324-Visite-Entreprise-icare.pdf
 
Key Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdfKey Trends Shaping the Future of Infrastructure.pdf
Key Trends Shaping the Future of Infrastructure.pdf
 
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedInOutage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
Outage Analysis: March 5th/6th 2024 Meta, Comcast, and LinkedIn
 
My key hands-on projects in Quantum, and QAI
My key hands-on projects in Quantum, and QAIMy key hands-on projects in Quantum, and QAI
My key hands-on projects in Quantum, and QAI
 
3 Pitfalls Everyone Should Avoid with Cloud Data
3 Pitfalls Everyone Should Avoid with Cloud Data3 Pitfalls Everyone Should Avoid with Cloud Data
3 Pitfalls Everyone Should Avoid with Cloud Data
 
TrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie WorldTrustArc Webinar - How to Live in a Post Third-Party Cookie World
TrustArc Webinar - How to Live in a Post Third-Party Cookie World
 
Planetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile BrochurePlanetek Italia Srl - Corporate Profile Brochure
Planetek Italia Srl - Corporate Profile Brochure
 
CyberSecurity - Computers In Libraries 2024
CyberSecurity - Computers In Libraries 2024CyberSecurity - Computers In Libraries 2024
CyberSecurity - Computers In Libraries 2024
 
Introduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its applicationIntroduction to RAG (Retrieval Augmented Generation) and its application
Introduction to RAG (Retrieval Augmented Generation) and its application
 
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - TechWebinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
Webinar: The Art of Prioritizing Your Product Roadmap by AWS Sr PM - Tech
 
Flow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First FrameFlow Control | Block Size | ST Min | First Frame
Flow Control | Block Size | ST Min | First Frame
 

Caelum dicas web 2010

  • 1. A apresentação já vai começar ... Friday, April 16, 2010
  • 3. ~ 50 min ~ 85 slides Friday, April 16, 2010
  • 4. www.slideshare.net/akitaonrails http://dl.dropbox.com/u/1732133/dicas-de-desenvolvimento-web-com-rails.zip fabioakita@gmail.com Friday, April 16, 2010
  • 5. Entendendo a Web Dicas sobre Desenvolvimento Web com Ruby Fabio Akita Friday, April 16, 2010
  • 8. Rails não Escala Friday, April 16, 2010
  • 9. (TM) Rails não Escala Friday, April 16, 2010
  • 12. Blaine Cook http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter Friday, April 16, 2010
  • 13. Para colocar as coisas em perspectiva, o Friendster foi escrito em Java e eles mudaram para PHP. MySpace foi escrito em ColdFusion e eles mudaram para ASP.NET. Blaine Cook http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter Friday, April 16, 2010
  • 14. Para colocar as coisas em perspectiva, o Friendster foi escrito em Java e eles mudaram para PHP. MySpace foi escrito em ColdFusion e eles mudaram para ASP.NET. Quando as pessoas caem em problemas de escalabilidade, normalmente acham que a linguagem é o problema, mas eu acho que isso raramente é a realidade. Blaine Cook http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter Friday, April 16, 2010
  • 15. “O The New York Times usou Ruby on Rails para agregar, analizar e mostrar os resultados das eleições em quase tempo real em um de seus sites mais acessados de todos os tempos.” http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise?fp=16&fpid=1 Friday, April 16, 2010
  • 16. “O The New York Times usou Ruby on Rails para agregar, analizar e mostrar os resultados das eleições em quase tempo real em um de seus sites mais acessados de todos os tempos.” http://www.computerworld.com.au/article/268003/ruby_rails_rolls_into_enterprise?fp=16&fpid=1 Friday, April 16, 2010
  • 17. Browser Web Server MySQL Friday, April 16, 2010
  • 18. Browser Varnish/HAProxy Web Server MySQL Friday, April 16, 2010
  • 19. Browser Varnish/HAProxy Web Server Memcached MySQL Friday, April 16, 2010
  • 20. Browser Varnish/HAProxy Web Server Memcached MySQL CouchDB/MongoDB Friday, April 16, 2010
  • 21. Ruby é Lento Friday, April 16, 2010
  • 22. (TM) Ruby é Lento Friday, April 16, 2010
  • 23. Existem mentiras, mentiras malditas e estatísticas. Friday, April 16, 2010
  • 24. Existem mentiras, mentiras malditas e estatísticas. Friday, April 16, 2010
  • 25. Existem mentiras, mentiras malditas e estatísticas. Friday, April 16, 2010
  • 27. x mais lento que C++ Friday, April 16, 2010
  • 28. x mais lento que C++ 0 32.5 65 97.5 130 Python 2 Ruby 1.9 JRuby Perl Python 3 PHP Ruby 1.8 Friday, April 16, 2010
  • 29. Homepage: 331 ms Friday, April 16, 2010
  • 30. Homepage: 331 ms Total: 5.45 s Friday, April 16, 2010
  • 31. Performance != Escalabilidade Friday, April 16, 2010
  • 42. 6 Técnicas Friday, April 16, 2010
  • 44. Mini que CSS e Javascript Friday, April 16, 2010
  • 45. Juicer http://github.com/cjohansen/juicer/ Friday, April 16, 2010
  • 46. gem install juicer script/plugin install git://github.com/ktheory/juicer-rails.git Friday, April 16, 2010
  • 47. gem install juicer script/plugin install git://github.com/ktheory/juicer-rails.git Friday, April 16, 2010
  • 48. juicer install yuicompressor juicer install jslint juicer install closure_compiler Friday, April 16, 2010
  • 49. juicer install yuicompressor juicer install jslint juicer install closure_compiler Friday, April 16, 2010
  • 50. juicer install yuicompressor juicer install jslint juicer install closure_compiler Friday, April 16, 2010
  • 51. /app/views/layouts/application.html.erb <%= juiced_tag '/stylesheets/application.css' %> <%= yield(:head) %> </head> <body> ... <%= juiced_tag '/javascripts/application.js' %> </body> Friday, April 16, 2010
  • 52. /app/views/layouts/application.html.erb <%= juiced_tag '/stylesheets/application.css' %> <%= yield(:head) %> </head> <body> ... <%= juiced_tag '/javascripts/application.js' %> </body> Friday, April 16, 2010
  • 53. /public/stylesheets/application.css @import url("reset.css"); @import url("base.css"); @import url("fonts.css"); ... /public/javascripts/application.js /* @depends jquery-1.4.min.js @depends jquery.edit_in_place.js @depends jqueryamail.js */ ... Friday, April 16, 2010
  • 54. /public/stylesheets/application.css @import url("reset.css"); @import url("base.css"); @import url("fonts.css"); ... /public/javascripts/application.js /* @depends jquery-1.4.min.js @depends jquery.edit_in_place.js @depends jqueryamail.js */ ... Friday, April 16, 2010
  • 55. juicer merge public/stylesheets/application.css public/stylesheets/application.min.css juicer merge -i public/javascripts/application.js public/javascripts/application.min.js Friday, April 16, 2010
  • 56. juicer merge public/stylesheets/application.css public/stylesheets/application.min.css juicer merge -i public/javascripts/application.js public/javascripts/application.min.js Friday, April 16, 2010
  • 57. juicer merge public/stylesheets/application.css public/stylesheets/application.min.css juicer merge -i public/javascripts/application.js public/javascripts/application.min.js Friday, April 16, 2010
  • 58. juicer merge public/stylesheets/application.css public/stylesheets/application.min.css juicer merge -i public/javascripts/application.js public/javascripts/application.min.js Friday, April 16, 2010
  • 61. Asset Hosts Navegadores abrem poucas conexões simultâneas por domínio Friday, April 16, 2010
  • 63. /app/controllers/hello_controller.rb def gallery gallery_path = File.join(Rails.root, "public/images/gallery/") @images = Dir.glob(gallery_path + "*").map{ |f| f.gsub(gallery_path, "") } end Friday, April 16, 2010
  • 64. /app/controllers/hello_controller.rb def gallery gallery_path = File.join(Rails.root, "public/images/gallery/") @images = Dir.glob(gallery_path + "*").map{ |f| f.gsub(gallery_path, "") } end /app/views/hello/gallery.html.erb <% title "Gallery" %> <% @images.each do |image| -%> <%= image_tag "gallery/#{image}" %> <% end -%> Friday, April 16, 2010
  • 65. /app/controllers/hello_controller.rb def gallery gallery_path = File.join(Rails.root, "public/images/gallery/") @images = Dir.glob(gallery_path + "*").map{ |f| f.gsub(gallery_path, "") } end /app/views/hello/gallery.html.erb <% title "Gallery" %> <% @images.each do |image| -%> <%= image_tag "gallery/#{image}" %> <% end -%> Friday, April 16, 2010
  • 68. /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 Friday, April 16, 2010
  • 69. /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 Friday, April 16, 2010
  • 70. /etc/hosts ## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost fe80::1%lo0 localhost 127.0.0.1 asset1.akitaonrails.local asset2.akitaonrails.local asset3.akitaonrails.local asset4.akitaonrails.local asset5.akitaonrails.local asset6.akitaonrails.local www.akitaonrails.local Friday, April 16, 2010
  • 74. /app/views/layouts/application.html.erb <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> ... Friday, April 16, 2010
  • 75. /app/views/layouts/application.html.erb <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> ... Friday, April 16, 2010
  • 76. /app/views/layouts/application.html.erb ... <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> Friday, April 16, 2010
  • 77. /app/views/layouts/application.html.erb ... <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> Friday, April 16, 2010
  • 79. a2enmod de ate editar /etc/apache2/mods-available/de ate.conf Friday, April 16, 2010
  • 80. a2enmod de ate editar /etc/apache2/mods-available/de ate.conf Friday, April 16, 2010
  • 81. /etc/apache2/mods-available/de ate.conf <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> Friday, April 16, 2010
  • 82. Cabeçalhos de Expiração Friday, April 16, 2010
  • 83. a2enmod expires editar /etc/apache2/mods-available/expires.conf Friday, April 16, 2010
  • 84. a2enmod expires editar /etc/apache2/mods-available/expires.conf Friday, April 16, 2010
  • 85. /etc/apache2/mods-available/expires.conf <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> Friday, April 16, 2010
  • 87. /app/views/layouts/application.html.erb <%= stylesheet_link_tag 'application' %> <%= javascript_include_tag 'application' %> <%= image_tag "logo.png" %> Friday, April 16, 2010
  • 88. /app/views/layouts/application.html.erb <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" /> Friday, April 16, 2010
  • 89. /app/views/layouts/application.html.erb <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" /> Friday, April 16, 2010
  • 91. /app/views/layouts/application.html.erb <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> Friday, April 16, 2010
  • 92. /app/views/layouts/application.html.erb <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> Friday, April 16, 2010
  • 93. /app/views/layouts/application.html.erb <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> Friday, April 16, 2010
  • 95. select * from ... where ... like “%...%” Friday, April 16, 2010
  • 96. select * from ... where ... like “%...%” or ... like “%...%” or ... like “%...%” or ... like “%...%” or ... like “%...%” Friday, April 16, 2010
  • 97. select * from ... where ... like “%...%” or ... like “%...%” or ... like “%...%” or ... like “%...%” or ... like “%...%” Friday, April 16, 2010
  • 99. 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) Friday, April 16, 2010
  • 100. 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) Friday, April 16, 2010
  • 101. 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) Friday, April 16, 2010
  • 102. 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) Friday, April 16, 2010
  • 103. 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) Friday, April 16, 2010
  • 104. 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) Friday, April 16, 2010
  • 107. select * from ... where ... like “%...%” or ... like “%...%” or ... like “%...%” or ... like “%...%” or ... like “%...%” Friday, April 16, 2010
  • 108. select * from ... where ... like “%...%” or ... like “%...%” or ... like “%...%” or ... like “%...%” or ... like “%...%” Friday, April 16, 2010
  • 109. Tarefas Assíncronas Friday, April 16, 2010
  • 112. Processamento Requisição Friday, April 16, 2010
  • 113. Processamento Requisição Resposta Friday, April 16, 2010
  • 119. Redis Workers Resque-Web Friday, April 16, 2010
  • 122. 291 s Processamento Requisição Friday, April 16, 2010
  • 123. 32 s Processamento Requisição Resposta Worker Friday, April 16, 2010
  • 125. Imagens Relatórios Web Services Transações Friday, April 16, 2010
  • 126. Imagens Relatórios Web Services Transações Friday, April 16, 2010
  • 127. Imagens Relatórios Web Services Transações Friday, April 16, 2010
  • 128. Imagens Relatórios Web Services Transações Friday, April 16, 2010
  • 129. Aprendendo Mais Friday, April 16, 2010
  • 135. Entenda os browsers Entenda HTTP Arquiteturas Mundo Assíncrono Mundo não Relacional Friday, April 16, 2010
  • 136. Entenda os browsers Entenda HTTP Arquiteturas Mundo Assíncrono Mundo não Relacional Friday, April 16, 2010
  • 137. Entenda os browsers Entenda HTTP Arquiteturas Mundo Assíncrono Mundo não Relacional Friday, April 16, 2010
  • 138. Entenda os browsers Entenda HTTP Arquiteturas Mundo Assíncrono Mundo não Relacional Friday, April 16, 2010
  • 139. Entenda os browsers Entenda HTTP Arquiteturas Mundo Assíncrono Mundo não Relacional Friday, April 16, 2010
  • 141. Thx! www.slideshare.net/akitaonrails http://dl.dropbox.com/u/1732133/dicas-de-desenvolvimento-web-com-rails.zip fabioakita@gmail.com Friday, April 16, 2010