SlideShare a Scribd company logo
1 of 154
Download to read offline
Ruby
A apresentação já vai começar ...
AkitaOnRails.com
 @AkitaOnRails
www.slideshare.net/akitaonrails
 http://dl.dropbox.com/u/1732133/dicas-de-desenvolvimento-web-com-rails.zip




                boss@akitaonrails.com
Entendendo a Web
Dicas sobre Desenvolvimento Web com Ruby



            Fabio Akita
Recapitulando ...
Rails não Escala
(TM)

Rails não Escala
Blaine Cook

http://www.akitaonrails.com/2008/6/17/chatting-with-blaine-cook-twitter
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
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
“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
“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
Browser




Web Server




 MySQL
Browser


             Varnish/HAProxy


Web Server




 MySQL
Browser


             Varnish/HAProxy


Web Server


               Memcached


 MySQL
Browser


              Varnish/HAProxy


Web Server


                Memcached


 MySQL

             CouchDB/MongoDB
Ruby é Lento
(TM)
Ruby é Lento
Existem mentiras,
mentiras malditas e
   estatísticas.
Existem mentiras,
mentiras malditas e
   estatísticas.
Existem mentiras,
mentiras malditas e
   estatísticas.
x mais lento que C++
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
Homepage: 331 ms
Homepage: 331 ms

Total: 5.45 s
Performance
      !=
Escalabilidade
Sempre se Lembre




Poderíamos contratar um Macaco Treinado
        para fazer seu Trabalho!
Exemplo
6
Técnicas
Menos Requisições
Mini que CSS e
  Javascript
Juicer
http://github.com/cjohansen/juicer/
gem install juicer



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



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

juicer install jslint

juicer install closure_compiler
juicer install yuicompressor

juicer install jslint

juicer install closure_compiler
juicer install yuicompressor

juicer install jslint

juicer install closure_compiler
/app/views/layouts/application.html.erb




               <%= juiced_tag '/stylesheets/application.css' %>
               <%= yield(:head) %>
           </head>
           <body>
               ...
               <%= juiced_tag '/javascripts/application.js' %>
           </body>
/app/views/layouts/application.html.erb




               <%= juiced_tag '/stylesheets/application.css' %>
               <%= yield(:head) %>
           </head>
           <body>
               ...
               <%= juiced_tag '/javascripts/application.js' %>
           </body>
/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
                          */

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

                          ...
juicer merge public/stylesheets/application.css

public/stylesheets/application.min.css

juicer merge -i public/javascripts/application.js

public/javascripts/application.min.js
juicer merge public/stylesheets/application.css

public/stylesheets/application.min.css

juicer merge -i public/javascripts/application.js

public/javascripts/application.min.js
juicer merge public/stylesheets/application.css

public/stylesheets/application.min.css

juicer merge -i public/javascripts/application.js

public/javascripts/application.min.js
juicer merge public/stylesheets/application.css

public/stylesheets/application.min.css

juicer merge -i public/javascripts/application.js

public/javascripts/application.min.js
DEVELOPMENT
PRODUCTION
Asset Hosts
Navegadores abrem poucas conexões
     simultâneas por domínio
/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/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 -%>
/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 -%>
DEVELOPMENT
DEVELOPMENT
/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
/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
/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
PRODUCTION
PRODUCTION
Javascript embaixo!
/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>
  ...
/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>
  ...
/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>
/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>
Gzip
a2enmod de ate


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


editar
/etc/apache2/mods-available/de ate.conf
/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>
Cabeçalhos de
  Expiração
a2enmod expires


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


editar
/etc/apache2/mods-available/expires.conf
/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>
Cache Busters
/app/views/layouts/application.html.erb




                     <%= stylesheet_link_tag 'application' %>


                     <%= javascript_include_tag 'application' %>


                     <%= image_tag "logo.png" %>
/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" />
/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" />
Use CDNs
/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>
/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>
/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>
Search
select * from ...
where ... like “%...%”
select * from ...
where ... like “%...%”
 or ... like “%...%”
 or ... like “%...%”
 or ... like “%...%”
 or ... like “%...%”
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)
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)
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)
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)
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)
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)
SOLR

Sphinx

Xapian
SOLR

Sphinx

Xapian
SOLR

Sphinx

Xapian
select * from ...
where ... like “%...%”
 or ... like “%...%”
 or ... like “%...%”
 or ... like “%...%”
 or ... like “%...%”
Tarefas
Assíncronas
Requisição
Processamento
Requisição
Processamento
Requisição                   Resposta
Crontab
RMagick
Redis
  Workers
Resque-Web
291 ms
             Processamento
Requisição
32 ms
              Processamento




Requisição                    Resposta


             Worker
Resque       Redis

Delayed Job     SQL

  Warren      RabbitMQ

Whenever      Cron Jobs
Resque       Redis

Delayed Job     SQL

  Warren      RabbitMQ

Whenever      Cron Jobs
Resque       Redis

Delayed Job     SQL

  Warren      RabbitMQ

Whenever      Cron Jobs
Resque       Redis

Delayed Job     SQL

  Warren      RabbitMQ

Whenever      Cron Jobs
Imagens

 Relatórios

Web Services

Transações
Imagens

 Relatórios

Web Services

Transações
Imagens

 Relatórios

Web Services

Transações
Imagens

 Relatórios

Web Services

Transações
Aprendendo
   Mais
RAILS LABS
RAILSCASTS.com
caelum.com.br
egenial.com.br
Entenda os browsers

   Entenda HTTP

    Arquiteturas

 Mundo Assíncrono

Mundo não Relacional
Entenda os browsers

   Entenda HTTP

    Arquiteturas

 Mundo Assíncrono

Mundo não Relacional
Entenda os browsers

   Entenda HTTP

    Arquiteturas

 Mundo Assíncrono

Mundo não Relacional
Entenda os browsers

   Entenda HTTP

    Arquiteturas

 Mundo Assíncrono

Mundo não Relacional
Entenda os browsers

   Entenda HTTP

    Arquiteturas

 Mundo Assíncrono

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




                boss@akitaonrails.com

More Related Content

What's hot

[jqconatx] Adaptive Images for Responsive Web Design
[jqconatx] Adaptive Images for Responsive Web Design[jqconatx] Adaptive Images for Responsive Web Design
[jqconatx] Adaptive Images for Responsive Web Design
Christopher Schmitt
 
HTML5 Who what where when why how
HTML5 Who what where when why howHTML5 Who what where when why how
HTML5 Who what where when why how
brucelawson
 
Bundling Client Side Assets
Bundling Client Side AssetsBundling Client Side Assets
Bundling Client Side Assets
Timothy Oxley
 
High Performance Mobile (SF/SV Web Perf)
High Performance Mobile (SF/SV Web Perf)High Performance Mobile (SF/SV Web Perf)
High Performance Mobile (SF/SV Web Perf)
Steve Souders
 
Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen Lju
Skills Matter
 

What's hot (20)

jQuery UI and Plugins
jQuery UI and PluginsjQuery UI and Plugins
jQuery UI and Plugins
 
[jqconatx] Adaptive Images for Responsive Web Design
[jqconatx] Adaptive Images for Responsive Web Design[jqconatx] Adaptive Images for Responsive Web Design
[jqconatx] Adaptive Images for Responsive Web Design
 
Keypoints html5
Keypoints html5Keypoints html5
Keypoints html5
 
Avoiding Common Pitfalls in Ember.js
Avoiding Common Pitfalls in Ember.jsAvoiding Common Pitfalls in Ember.js
Avoiding Common Pitfalls in Ember.js
 
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJRealize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
Realize mais com HTML 5 e CSS 3 - 16 EDTED - RJ
 
Optaros Surf Code Camp Walkthrough 1
Optaros Surf Code Camp Walkthrough 1Optaros Surf Code Camp Walkthrough 1
Optaros Surf Code Camp Walkthrough 1
 
You too can be a bedwetting antfucker: Bruce Lawson, Opera, Fronteers 2011
You too can be a bedwetting antfucker: Bruce Lawson, Opera, Fronteers 2011You too can be a bedwetting antfucker: Bruce Lawson, Opera, Fronteers 2011
You too can be a bedwetting antfucker: Bruce Lawson, Opera, Fronteers 2011
 
HTML5 and Accessibility sitting in a tree
HTML5 and Accessibility sitting in a treeHTML5 and Accessibility sitting in a tree
HTML5 and Accessibility sitting in a tree
 
HTML5 Who what where when why how
HTML5 Who what where when why howHTML5 Who what where when why how
HTML5 Who what where when why how
 
Design+Performance Velocity 2015
Design+Performance Velocity 2015Design+Performance Velocity 2015
Design+Performance Velocity 2015
 
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
Java Web Application Security with Java EE, Spring Security and Apache Shiro ...
 
Game Development Using HTML 5
Game Development Using HTML 5Game Development Using HTML 5
Game Development Using HTML 5
 
Rails Girls: Programming, Web Applications and Ruby on Rails
Rails Girls: Programming, Web Applications and Ruby on RailsRails Girls: Programming, Web Applications and Ruby on Rails
Rails Girls: Programming, Web Applications and Ruby on Rails
 
High Performance Web Components
High Performance Web ComponentsHigh Performance Web Components
High Performance Web Components
 
Learning from the Best jQuery Plugins
Learning from the Best jQuery PluginsLearning from the Best jQuery Plugins
Learning from the Best jQuery Plugins
 
Bundling Client Side Assets
Bundling Client Side AssetsBundling Client Side Assets
Bundling Client Side Assets
 
High Performance Mobile (SF/SV Web Perf)
High Performance Mobile (SF/SV Web Perf)High Performance Mobile (SF/SV Web Perf)
High Performance Mobile (SF/SV Web Perf)
 
High Performance HTML5 (SF HTML5 UG)
High Performance HTML5 (SF HTML5 UG)High Performance HTML5 (SF HTML5 UG)
High Performance HTML5 (SF HTML5 UG)
 
Ruby MVC from scratch with Rack
Ruby MVC from scratch with RackRuby MVC from scratch with Rack
Ruby MVC from scratch with Rack
 
Primefaces Nextgen Lju
Primefaces Nextgen LjuPrimefaces Nextgen Lju
Primefaces Nextgen Lju
 

Similar to Fisl 11 - Dicas de Desenvolvimento Web com Ruby

Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)
Joao Lucas Santana
 
Build Your Own CMS with Apache Sling
Build Your Own CMS with Apache SlingBuild Your Own CMS with Apache Sling
Build Your Own CMS with Apache Sling
Bob Paulin
 
20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev
Frank Rousseau
 
Integrating Browserify with Sprockets
Integrating Browserify with SprocketsIntegrating Browserify with Sprockets
Integrating Browserify with Sprockets
Spike Brehm
 

Similar to Fisl 11 - Dicas de Desenvolvimento Web com Ruby (20)

Sprockets
SprocketsSprockets
Sprockets
 
Web-Performance
Web-PerformanceWeb-Performance
Web-Performance
 
Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)Desenvolvimento web com Ruby on Rails (parte 2)
Desenvolvimento web com Ruby on Rails (parte 2)
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
Comparing Hot JavaScript Frameworks: AngularJS, Ember.js and React.js - Sprin...
 
[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC[Coscup 2012] JavascriptMVC
[Coscup 2012] JavascriptMVC
 
Rapid Prototyping FTW!!!
Rapid Prototyping FTW!!!Rapid Prototyping FTW!!!
Rapid Prototyping FTW!!!
 
Webpack
Webpack Webpack
Webpack
 
Create a new project in ROR
Create a new project in RORCreate a new project in ROR
Create a new project in ROR
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
 
Build Your Own CMS with Apache Sling
Build Your Own CMS with Apache SlingBuild Your Own CMS with Apache Sling
Build Your Own CMS with Apache Sling
 
Testable client side_mvc_apps_in_javascript
Testable client side_mvc_apps_in_javascriptTestable client side_mvc_apps_in_javascript
Testable client side_mvc_apps_in_javascript
 
20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev20130528 solution linux_frousseau_nopain_webdev
20130528 solution linux_frousseau_nopain_webdev
 
Death of a Themer
Death of a ThemerDeath of a Themer
Death of a Themer
 
Integrating Browserify with Sprockets
Integrating Browserify with SprocketsIntegrating Browserify with Sprockets
Integrating Browserify with Sprockets
 
Front End Development for Back End Java Developers - Jfokus 2020
Front End Development for Back End Java Developers - Jfokus 2020Front End Development for Back End Java Developers - Jfokus 2020
Front End Development for Back End Java Developers - Jfokus 2020
 
Rails3 asset-pipeline
Rails3 asset-pipelineRails3 asset-pipeline
Rails3 asset-pipeline
 
Everything is Awesome - Cutting the Corners off the Web
Everything is Awesome - Cutting the Corners off the WebEverything is Awesome - Cutting the Corners off the Web
Everything is Awesome - Cutting the Corners off the Web
 
Killer page load performance
Killer page load performanceKiller page load performance
Killer page load performance
 
以Vue開發電子商務網站
架構與眉角
以Vue開發電子商務網站
架構與眉角以Vue開發電子商務網站
架構與眉角
以Vue開發電子商務網站
架構與眉角
 

More from Fabio Akita

More from Fabio Akita (20)

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

Recently uploaded

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 

Fisl 11 - Dicas de Desenvolvimento Web com Ruby