<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>sergiolopes.org</title>
 <link href="http://sergiolopes.org/atom.xml" rel="self"/>
 <link href="http://sergiolopes.org"/>
 <updated>2020-12-17T13:15:08.456Z</updated>
 <id>http://sergiolopes.org</id>
 <author>
   <name>Sérgio Lopes</name>
 </author>

   
      <entry>
         <title>Hipsters.tech #144: Tendências em Tecnologia pra 2020</title>
         <link href="https://hipsters.tech/tendencias-em-tecnologia-pra-2020-hipsters-144/"/>
         <updated>2019-04-16T00:00:00.000Z</updated>
         <id>https://hipsters.tech/tendencias-em-tecnologia-pra-2020-hipsters-144/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://hipsters.tech/tendencias-em-tecnologia-pra-2020-hipsters-144/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #114: Performance e Otimizações na Web</title>
         <link href="https://hipsters.tech/performance-e-otimizacoes-na-web-hipsters-114/"/>
         <updated>2018-09-18T00:00:00.000Z</updated>
         <id>https://hipsters.tech/performance-e-otimizacoes-na-web-hipsters-114/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://hipsters.tech/performance-e-otimizacoes-na-web-hipsters-114/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #104: As Super Apps: o caso da Rapiddo</title>
         <link href="https://hipsters.tech/as-super-apps-o-caso-da-rapiddo-hipsters-104/"/>
         <updated>2018-07-10T00:00:00.000Z</updated>
         <id>https://hipsters.tech/as-super-apps-o-caso-da-rapiddo-hipsters-104/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://hipsters.tech/as-super-apps-o-caso-da-rapiddo-hipsters-104/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #100: Por trás do Hipsters: Caelum, Alura e Casa do Código</title>
         <link href="https://hipsters.tech/por-tras-do-hipsters-caelum-alura-e-casa-do-codigo-hipsters-100/"/>
         <updated>2018-06-12T00:00:00.000Z</updated>
         <id>https://hipsters.tech/por-tras-do-hipsters-caelum-alura-e-casa-do-codigo-hipsters-100/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://hipsters.tech/por-tras-do-hipsters-caelum-alura-e-casa-do-codigo-hipsters-100/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #98: Fake News</title>
         <link href="https://hipsters.tech/fake-news-hipsters-98/"/>
         <updated>2018-05-29T00:00:00.000Z</updated>
         <id>https://hipsters.tech/fake-news-hipsters-98/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://hipsters.tech/fake-news-hipsters-98/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Nerdtech #26: Breve história da Apple</title>
         <link href="https://jovemnerd.com.br/nerdcast/nerdtech/breve-historia-da-apple/"/>
         <updated>2018-04-06T00:00:00.000Z</updated>
         <id>https://jovemnerd.com.br/nerdcast/nerdtech/breve-historia-da-apple/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://jovemnerd.com.br/nerdcast/nerdtech/breve-historia-da-apple/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>PHP Experience: Performance Web, Criptomoedas e mais – Hipsters On The Road #01</title>
         <link href="https://hipsters.tech/php-experience-performance-web-criptomoedas-e-mais-hipsters-on-the-road-01/"/>
         <updated>2018-03-20T00:00:00.000Z</updated>
         <id>https://hipsters.tech/php-experience-performance-web-criptomoedas-e-mais-hipsters-on-the-road-01/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://hipsters.tech/php-experience-performance-web-criptomoedas-e-mais-hipsters-on-the-road-01/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #78: Ember</title>
         <link href="https://hipsters.tech/javascript-ember-js-hipsters-78/"/>
         <updated>2018-01-09T00:00:00.000Z</updated>
         <id>https://hipsters.tech/javascript-ember-js-hipsters-78/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://hipsters.tech/javascript-ember-js-hipsters-78/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #77: Tendências para 2018</title>
         <link href="https://hipsters.tech/tendencias-em-tecnologia-para-2018-hipsters-77/"/>
         <updated>2018-01-02T00:00:00.000Z</updated>
         <id>https://hipsters.tech/tendencias-em-tecnologia-para-2018-hipsters-77/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://hipsters.tech/tendencias-em-tecnologia-para-2018-hipsters-77/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #72: Wordpress</title>
         <link href="https://hipsters.tech/hipsters-72-por-tras-do-wordpress/"/>
         <updated>2017-11-28T00:00:00.000Z</updated>
         <id>https://hipsters.tech/hipsters-72-por-tras-do-wordpress/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://hipsters.tech/hipsters-72-por-tras-do-wordpress/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Nerdtech #21: Software Livre</title>
         <link href="https://jovemnerd.com.br/?podcast=software-livre"/>
         <updated>2017-11-03T00:00:00.000Z</updated>
         <id>https://jovemnerd.com.br/?podcast=software-livre</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://jovemnerd.com.br/?podcast=software-livre&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Nerdtech #20: Tecnologias Mortas</title>
         <link href="https://jovemnerd.com.br/?podcast=tecnologias-mortas"/>
         <updated>2017-10-06T00:00:00.000Z</updated>
         <id>https://jovemnerd.com.br/?podcast=tecnologias-mortas</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://jovemnerd.com.br/?podcast=tecnologias-mortas&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #60: Startups, E-commerce e Deploys</title>
         <link href="https://hipsters.tech/startups-ecommerce-e-deploys/"/>
         <updated>2017-09-05T00:00:00.000Z</updated>
         <id>https://hipsters.tech/startups-ecommerce-e-deploys/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://hipsters.tech/startups-ecommerce-e-deploys/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #58: Evolução e Especificação do JavaScript Moderno</title>
         <link href="https://hipsters.tech/evolucao-e-especificacao-do-javascript-moderno/"/>
         <updated>2017-08-22T00:00:00.000Z</updated>
         <id>https://hipsters.tech/evolucao-e-especificacao-do-javascript-moderno/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://hipsters.tech/evolucao-e-especificacao-do-javascript-moderno/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #56: Ionic</title>
         <link href="https://hipsters.tech/ionic-e-o-desenvolvimento-mobile-hipsters-56/"/>
         <updated>2017-08-08T00:00:00.000Z</updated>
         <id>https://hipsters.tech/ionic-e-o-desenvolvimento-mobile-hipsters-56/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://hipsters.tech/ionic-e-o-desenvolvimento-mobile-hipsters-56/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Progressive Web Apps: a palavra-chave é Web, não App</title>
         <link href="https://imasters.com.br/desenvolvimento/progressive-web-apps-palavra-chave-e-web-nao-app/"/>
         <updated>2017-04-24T00:00:00.000Z</updated>
         <id>https://imasters.com.br/desenvolvimento/progressive-web-apps-palavra-chave-e-web-nao-app/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://imasters.com.br/desenvolvimento/progressive-web-apps-palavra-chave-e-web-nao-app/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Revisitando práticas de performance front-end depois do HTTP/2</title>
         <link href="https://imasters.com.br/desenvolvimento/revisitando-praticas-de-performance-front-end-depois-do-http2/"/>
         <updated>2017-04-10T00:00:00.000Z</updated>
         <id>https://imasters.com.br/desenvolvimento/revisitando-praticas-de-performance-front-end-depois-do-http2/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://imasters.com.br/desenvolvimento/revisitando-praticas-de-performance-front-end-depois-do-http2/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Sprites ou imagens separadas?</title>
         <link href="http://blog.alura.com.br/sprites-ou-imagens-separadas/"/>
         <updated>2017-04-10T00:00:00.000Z</updated>
         <id>http://blog.alura.com.br/sprites-ou-imagens-separadas/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.alura.com.br/sprites-ou-imagens-separadas/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Nerdtech #14: Filmes com programadores</title>
         <link href="https://jovemnerd.com.br/nerdcast/nerdtech/filmes-com-programadores/"/>
         <updated>2017-04-07T00:00:00.000Z</updated>
         <id>https://jovemnerd.com.br/nerdcast/nerdtech/filmes-com-programadores/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://jovemnerd.com.br/nerdcast/nerdtech/filmes-com-programadores/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #38: O reino encantado do JavaScript</title>
         <link href="http://hipsters.tech/o-reino-encantado-do-javascript-hipsters-38/"/>
         <updated>2017-04-04T00:00:00.000Z</updated>
         <id>http://hipsters.tech/o-reino-encantado-do-javascript-hipsters-38/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://hipsters.tech/o-reino-encantado-do-javascript-hipsters-38/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Como é trabalhar no Grupo Caelum</title>
         <link href="https://medium.com/trainingcenter/como-%C3%A9-trabalhar-no-grupo-caelum-por-s%C3%A9rgio-lopes-9923324971e"/>
         <updated>2017-04-03T00:00:00.000Z</updated>
         <id>https://medium.com/trainingcenter/como-%C3%A9-trabalhar-no-grupo-caelum-por-s%C3%A9rgio-lopes-9923324971e</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://medium.com/trainingcenter/como-%C3%A9-trabalhar-no-grupo-caelum-por-s%C3%A9rgio-lopes-9923324971e&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Performance é UX</title>
         <link href="https://imasters.com.br/design-ux/performance-e-ux/"/>
         <updated>2017-03-29T00:00:00.000Z</updated>
         <id>https://imasters.com.br/design-ux/performance-e-ux/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://imasters.com.br/design-ux/performance-e-ux/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Quais impactos de performance ao usar serviços externos de fontes?</title>
         <link href="http://blog.alura.com.br/quais-impactos-de-performance-ao-usar-servicos-externos-de-fontes/"/>
         <updated>2017-03-27T00:00:00.000Z</updated>
         <id>http://blog.alura.com.br/quais-impactos-de-performance-ao-usar-servicos-externos-de-fontes/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.alura.com.br/quais-impactos-de-performance-ao-usar-servicos-externos-de-fontes/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Como estimar a janela inicial de uma nova conexão TCP com Wireshark?</title>
         <link href="http://blog.caelum.com.br/como-estimar-a-janela-inicial-de-uma-nova-conexao-tcp-com-wireshark/"/>
         <updated>2017-03-14T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/como-estimar-a-janela-inicial-de-uma-nova-conexao-tcp-com-wireshark/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/como-estimar-a-janela-inicial-de-uma-nova-conexao-tcp-com-wireshark/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Nerdtech #13: Os navegadores da Internet</title>
         <link href="https://jovemnerd.com.br/nerdcast/nerdtech/os-navegadores-da-internet/"/>
         <updated>2017-03-03T00:00:00.000Z</updated>
         <id>https://jovemnerd.com.br/nerdcast/nerdtech/os-navegadores-da-internet/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://jovemnerd.com.br/nerdcast/nerdtech/os-navegadores-da-internet/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #31: Carreira em tecnologia</title>
         <link href="http://hipsters.tech/carreira-em-tecnologia-hipsters-31/"/>
         <updated>2017-02-14T00:00:00.000Z</updated>
         <id>http://hipsters.tech/carreira-em-tecnologia-hipsters-31/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://hipsters.tech/carreira-em-tecnologia-hipsters-31/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #25: Startups, música e Educação</title>
         <link href="http://hipsters.tech/startups-musica-e-educacao-hipsters-25/"/>
         <updated>2017-01-03T00:00:00.000Z</updated>
         <id>http://hipsters.tech/startups-musica-e-educacao-hipsters-25/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://hipsters.tech/startups-musica-e-educacao-hipsters-25/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #21: Acessibilidade na Web</title>
         <link href="http://hipsters.tech/acessibilidade-web-hipsters-21/"/>
         <updated>2016-12-06T00:00:00.000Z</updated>
         <id>http://hipsters.tech/acessibilidade-web-hipsters-21/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://hipsters.tech/acessibilidade-web-hipsters-21/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Nerdtech #10: Page Rank e SEO</title>
         <link href="https://jovemnerd.com.br/nerdcast/nerdtech/page-ranking/"/>
         <updated>2016-12-02T00:00:00.000Z</updated>
         <id>https://jovemnerd.com.br/nerdcast/nerdtech/page-ranking/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://jovemnerd.com.br/nerdcast/nerdtech/page-ranking/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #13: HTTP/2, magia com o novo protocolo</title>
         <link href="http://hipsters.tech/http2-magia-com-o-novo-protocolo/"/>
         <updated>2016-11-10T00:00:00.000Z</updated>
         <id>http://hipsters.tech/http2-magia-com-o-novo-protocolo/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://hipsters.tech/http2-magia-com-o-novo-protocolo/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #16: Single Page Applications</title>
         <link href="http://hipsters.tech/single-page-applications-hipsters-16/"/>
         <updated>2016-11-01T00:00:00.000Z</updated>
         <id>http://hipsters.tech/single-page-applications-hipsters-16/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://hipsters.tech/single-page-applications-hipsters-16/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Por que você deve ficar sempre de olho na performance do seu site</title>
         <link href="http://blog.alura.com.br/por-que-voce-deve-ficar-sempre-de-olho-na-performance-do-seu-site/"/>
         <updated>2016-09-29T00:00:00.000Z</updated>
         <id>http://blog.alura.com.br/por-que-voce-deve-ficar-sempre-de-olho-na-performance-do-seu-site/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.alura.com.br/por-que-voce-deve-ficar-sempre-de-olho-na-performance-do-seu-site/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #09: CSS, cansei de ser simples</title>
         <link href="http://hipsters.tech/css-cansei-de-ser-simples-hipsters-09/"/>
         <updated>2016-09-13T00:00:00.000Z</updated>
         <id>http://hipsters.tech/css-cansei-de-ser-simples-hipsters-09/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://hipsters.tech/css-cansei-de-ser-simples-hipsters-09/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #06: Web Components</title>
         <link href="http://hipsters.tech/web-components-hipsters-06/"/>
         <updated>2016-08-23T00:00:00.000Z</updated>
         <id>http://hipsters.tech/web-components-hipsters-06/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://hipsters.tech/web-components-hipsters-06/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Nerdtech #6: Ecossistema Mobile</title>
         <link href="https://jovemnerd.com.br/nerdcast/nerdtech/nerdtech-6-ecossistema-mobile/"/>
         <updated>2016-08-05T00:00:00.000Z</updated>
         <id>https://jovemnerd.com.br/nerdcast/nerdtech/nerdtech-6-ecossistema-mobile/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://jovemnerd.com.br/nerdcast/nerdtech/nerdtech-6-ecossistema-mobile/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Hipsters.tech #03: Progressive Web Apps</title>
         <link href="http://hipsters.tech/progressive-web-apps-hipsters-03/"/>
         <updated>2016-08-02T00:00:00.000Z</updated>
         <id>http://hipsters.tech/progressive-web-apps-hipsters-03/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://hipsters.tech/progressive-web-apps-hipsters-03/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Nerdtech #4: Plataformas e Arquitetura de Sistemas</title>
         <link href="https://jovemnerd.com.br/nerdcast/nerdtech/nerdtech-04-plataformas-e-arquitetura-de-sistemas/"/>
         <updated>2016-06-03T00:00:00.000Z</updated>
         <id>https://jovemnerd.com.br/nerdcast/nerdtech/nerdtech-04-plataformas-e-arquitetura-de-sistemas/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://jovemnerd.com.br/nerdcast/nerdtech/nerdtech-04-plataformas-e-arquitetura-de-sistemas/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>HTTP/2 Server Push na prática</title>
         <link href="http://blog.caelum.com.br/http2-server-push-na-pratica/"/>
         <updated>2016-04-25T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/http2-server-push-na-pratica/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/http2-server-push-na-pratica/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Performance Web no mundo real: porque o site do Alura voa</title>
         <link href="http://blog.caelum.com.br/performance-web-no-mundo-real-porque-o-site-do-alura-voa/"/>
         <updated>2016-03-07T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/performance-web-no-mundo-real-porque-o-site-do-alura-voa/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/performance-web-no-mundo-real-porque-o-site-do-alura-voa/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Nerdtech #3: Velocidade, performance e otimização</title>
         <link href="https://jovemnerd.com.br/nerdcast/nerdtech/nerdtech-03-velocidade-performance-e-otimizacao/"/>
         <updated>2016-03-04T00:00:00.000Z</updated>
         <id>https://jovemnerd.com.br/nerdcast/nerdtech/nerdtech-03-velocidade-performance-e-otimizacao/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://jovemnerd.com.br/nerdcast/nerdtech/nerdtech-03-velocidade-performance-e-otimizacao/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Nerdtech #1: Os buracos da tecnologia</title>
         <link href="https://jovemnerd.com.br/nerdcast/nerdtech/nerdtech-01-os-buracos-da-tecnologia/"/>
         <updated>2016-03-04T00:00:00.000Z</updated>
         <id>https://jovemnerd.com.br/nerdcast/nerdtech/nerdtech-01-os-buracos-da-tecnologia/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://jovemnerd.com.br/nerdcast/nerdtech/nerdtech-01-os-buracos-da-tecnologia/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>A arquitetura do novo site do Alura</title>
         <link href="http://blog.alura.com.br/a-arquitetura-do-novo-site-do-alura/"/>
         <updated>2016-03-03T00:00:00.000Z</updated>
         <id>http://blog.alura.com.br/a-arquitetura-do-novo-site-do-alura/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.alura.com.br/a-arquitetura-do-novo-site-do-alura/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>O site do Alura está de cara nova</title>
         <link href="http://blog.alura.com.br/o-site-do-alura-esta-de-cara-nova/"/>
         <updated>2016-03-01T00:00:00.000Z</updated>
         <id>http://blog.alura.com.br/o-site-do-alura-esta-de-cara-nova/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.alura.com.br/o-site-do-alura-esta-de-cara-nova/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Touch-first: como otimizar seu design responsivo para o mundo das touch screens</title>
         <link href="http://blog.alura.com.br/touch-first-como-otimizar-seu-design-responsivo-para-o-mundo-das-touch-screens/"/>
         <updated>2015-11-03T00:00:00.000Z</updated>
         <id>http://blog.alura.com.br/touch-first-como-otimizar-seu-design-responsivo-para-o-mundo-das-touch-screens/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.alura.com.br/touch-first-como-otimizar-seu-design-responsivo-para-o-mundo-das-touch-screens/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Vídeo – Progressive Web Apps #7Masters</title>
         <link href="https://imasters.com.br/design-ux/design-responsivo/video-progressive-web-apps-7masters/"/>
         <updated>2015-10-29T00:00:00.000Z</updated>
         <id>https://imasters.com.br/design-ux/design-responsivo/video-progressive-web-apps-7masters/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;https://imasters.com.br/design-ux/design-responsivo/video-progressive-web-apps-7masters/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Quem disse que eu preciso de jQuery?</title>
         <link href="http://blog.alura.com.br/quem-disse-que-eu-preciso-de-jquery/"/>
         <updated>2015-10-21T00:00:00.000Z</updated>
         <id>http://blog.alura.com.br/quem-disse-que-eu-preciso-de-jquery/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.alura.com.br/quem-disse-que-eu-preciso-de-jquery/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Use Geolocation API do HTML5 e OpenStreetMaps para um formulário mais amigável</title>
         <link href="http://blog.caelum.com.br/use-geolocation-api-do-html5-e-openstreetmaps-para-um-formulario-mais-amigavel/"/>
         <updated>2015-07-11T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/use-geolocation-api-do-html5-e-openstreetmaps-para-um-formulario-mais-amigavel/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/use-geolocation-api-do-html5-e-openstreetmaps-para-um-formulario-mais-amigavel/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Porque você não deveria ligar para o tempo do onload (ou: as métricas que importam para performance real na Web)</title>
         <link href="http://blog.caelum.com.br/porque-voce-nao-deveria-ligar-para-o-tempo-do-onload-ou-as-metricas-que-importam-para-performance-real-na-web/"/>
         <updated>2015-07-07T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/porque-voce-nao-deveria-ligar-para-o-tempo-do-onload-ou-as-metricas-que-importam-para-performance-real-na-web/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/porque-voce-nao-deveria-ligar-para-o-tempo-do-onload-ou-as-metricas-que-importam-para-performance-real-na-web/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Browser-sync, indispensável para desenvolver sites em vários dispositivos</title>
         <link href="http://blog.caelum.com.br/browser-sync-indispensavel-para-desenvolver-sites-em-varios-dispositivos/"/>
         <updated>2015-06-17T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/browser-sync-indispensavel-para-desenvolver-sites-em-varios-dispositivos/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/browser-sync-indispensavel-para-desenvolver-sites-em-varios-dispositivos/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Segunda edição do meu livro “A Web Mobile”, revista e ampliada</title>
         <link href="http://sergiolopes.org/livro-web-mobile-2a-edicao/"/>
         <updated>2015-05-27T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/livro-web-mobile-2a-edicao/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Dois anos depois da &lt;a href=&quot;/lancamento-livro-web-mobile/&quot;&gt;publicação&lt;/a&gt; de &lt;a href=&quot;/livro-web-mobile/&quot;&gt;&amp;quot;A Web Mobile&amp;quot;&lt;/a&gt;, chegou a hora de uma revisão. Curioso que imaginei que precisaria atualizar muita coisa que já estaria velha. E não foi o caso. A maior parte do livro continua se aplicando agora em 2015 como se aplicava em 2013.&lt;/p&gt;
&lt;p&gt;Tivemos novidades, claro. Como o lançamento do Microsoft Edge. Novos dispositivos. Até sites abrindo em smartwatches agora. Mas os pilares, os conceitos fundamentais da Web mobile continuam os mesmos. Falo sobre design responsivo, media queries, telas retina, touch screens, mobile-first, RESS e muito mais. Se você me acompanha aqui no blog, certamente vai gostar do livro.&lt;/p&gt;
&lt;p&gt;Você pode ver &lt;a href=&quot;/livro-web-mobile/#sumario&quot;&gt;lista completa de tópicos&lt;/a&gt;. Nesta segunda edição, as grandes novidades são:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Novos capítulos sobre &lt;strong&gt;imagens responsivas&lt;/strong&gt;. Em especial sobre os novos &lt;code&gt;&amp;lt;picture&amp;gt;&lt;/code&gt; e &lt;code&gt;srcset&lt;/code&gt;. Mudei algumas recomendações de antes também. Recomendo.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Há também um novo capítulo sobre ::Coreografia de Conteúdo:: para sites responsivos, bem interessante.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Outras mudanças mais pontuais incluem seções sobre &lt;em&gt;viewport units&lt;/em&gt;, negação de media queries, sobre o famoso atraso de 300ms no onclick em touch screen, explicações sobre novos dispositivos, atualização de screenshots, correção de bugs, novos exemplos e outros detalhes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O livro custa &lt;strong&gt;R$ 29 em ebook&lt;/strong&gt;, &lt;strong&gt;R$ 59 na versão impressa&lt;/strong&gt; e &lt;strong&gt;R$ 69 ebook + impresso&lt;/strong&gt;. Você pode comprar direto &lt;a href=&quot;https://casadocodigo.refersion.com/l/fdf.1465&quot;&gt;no site da editora Casa do Código&lt;/a&gt;. Se você comprou a 1ª edição digital, vai receber &lt;strong&gt;o update gratuito para 2ª edição&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/posts/livro-web-mobile/capa-web-mobile-1200px.png&quot; style=&quot;max-width:600px&quot; alt=&quot;Capa do livro A Web Mobile&quot;&gt;&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Porque usar ‘em’ no seu CSS hoje em dia?</title>
         <link href="http://blog.caelum.com.br/porque-usar-em-no-seu-css-hoje-em-dia"/>
         <updated>2014-09-30T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/porque-usar-em-no-seu-css-hoje-em-dia</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/porque-usar-em-no-seu-css-hoje-em-dia&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Entrevista no 'Setup' do Loopinfinito</title>
         <link href="http://setup.loopinfinito.com.br/sergio-lopes/"/>
         <updated>2014-09-18T00:00:00.000Z</updated>
         <id>http://setup.loopinfinito.com.br/sergio-lopes/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://setup.loopinfinito.com.br/sergio-lopes/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Como negar uma media query</title>
         <link href="http://sergiolopes.org/negando-media-queries/"/>
         <updated>2014-08-27T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/negando-media-queries/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Nessa altura do campeonato, todo mundo já escreveu alguma media query na vida. A sintaxe parece simples. Taca um &lt;code&gt;@media (min-width: 600px)&lt;/code&gt; lá e pronto. Mas alguns desafios começam a surgir no dia a dia. Um interessante é como negar uma media query, &lt;strong&gt;escrever seu inverso&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pegue essa media query mesmo: &lt;code&gt;@media (min-width: 600px)&lt;/code&gt;. Ela seleciona &lt;em&gt;telas com largura maior ou igual a 600 pixels&lt;/em&gt;. Simples. Agora quero escrever o inverso disso. Parece simples certo?&lt;/p&gt;
&lt;p&gt;A primeira tentativa pode ser um &lt;code&gt;@media (max-width: 600px)&lt;/code&gt;. Faz sentido até. Mas aí lembramos que as media queries consideram seu valor &lt;strong&gt;inclusive&lt;/strong&gt;. Isso quer dizer que quando a tela for exatamente &lt;strong&gt;600px&lt;/strong&gt;, ambas as media queries vão ser verdadeiras. Não é o que queremos.&lt;/p&gt;
&lt;p&gt;Podemos pensar então em um ajuste e chegar a &lt;code&gt;@media (max-width: 599px)&lt;/code&gt;. Isso pega &lt;em&gt;telas até 599 pixels inclusive&lt;/em&gt;. E a outra pegava &lt;em&gt;de 600 pixels pra cima, inclusive&lt;/em&gt;. Pronto. Será? &lt;strong&gt;Não.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Isso só funcionaria se você imaginar que não existe valor entre 599 e 600, o que pode fazer sentido pensando em &lt;em&gt;pixels físicos na tela&lt;/em&gt; (ou não, hoje temos subpixels). Mas o &lt;strong&gt;px&lt;/strong&gt; no CSS é uma medida relativa diferente de um pixel físico - a gente chama de &lt;strong&gt;CSS pixel&lt;/strong&gt;. E muita coisa afeta o tamanho de um CSS pixel, como por exemplo o &lt;a href=&quot;/media-queries-zoom/&quot;&gt;zoom do usuário&lt;/a&gt;. Outro fator são &lt;a href=&quot;/resolucoes-dpi-pixel-ratio-retina/&quot;&gt;as telas retina e seus device pixel ratios&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Resumindo: muita água pode rolar entre 599px e 600px na Web de hoje em dia. De volta a prancheta.&lt;/p&gt;
&lt;p&gt;Lembramos então que as media queries têm uma keyword &lt;strong&gt;not&lt;/strong&gt;. Parece fácil. Tentamos um &lt;code&gt;@media not (min-width: 600px)&lt;/code&gt; e... bam, não funciona. Sintaxe inválida. Mas a ideia é essa mesmo, usar o &lt;strong&gt;not&lt;/strong&gt;. A sintaxe final fica:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs arduino&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;@&lt;span class=&quot;hljs-function&quot; style=&quot;color: #4271ae;&quot;&gt;media &lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;not&lt;/span&gt; all &lt;span class=&quot;hljs-title&quot; style=&quot;color: #8e908c;&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;hljs-params&quot; style=&quot;color: #f5871f;&quot;&gt;(&lt;span class=&quot;hljs-built_in&quot; style=&quot;color: #f5871f;&quot;&gt;min&lt;/span&gt;-&lt;span class=&quot;hljs-built_in&quot; style=&quot;color: #f5871f;&quot;&gt;width&lt;/span&gt;: &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;600&lt;/span&gt;px)&lt;/span&gt; &lt;/span&gt;{}

&lt;span class=&quot;hljs-comment&quot; style=&quot;color: #8e908c;&quot;&gt;/* negativa de @media (min-width: 600px){} */&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Aqui é importante ressaltar o funcionamento do &lt;code&gt;not&lt;/code&gt;. Ele nega a expressão inteira, por isso usei o &lt;code&gt;all and&lt;/code&gt;. É como falar &lt;code&gt;not(all and (min-width:600px))&lt;/code&gt;. O &lt;code&gt;all&lt;/code&gt; é verdadeiro sempre então a lógica acaba ficando equivalente a &lt;code&gt;not(min-width:600px)&lt;/code&gt;, justo o que queríamos.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Meu novo Workshop Web Design Responsivo na Caelum</title>
         <link href="http://sergiolopes.org/workshop-web-design-responsivo/"/>
         <updated>2014-07-07T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/workshop-web-design-responsivo/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Está querendo começar em design responsivo e não sabe por onde? Ou conhece algum amigo nesse estágio? Meu novo &lt;a href=&quot;https://www.caelum.com.br/workshop-web-design-responsivo/&quot;&gt;workshop de web design responsivo&lt;/a&gt; é pra você. É um dia inteiro com diversos temas de design responsivo na prática, com muitas dicas e conhecimento. Além, claro, de poder tirar suas dúvidas e discutir em aula comigo.&lt;/p&gt;
&lt;p&gt;O workshop é vendido e mantido pela Caelum. Por enquanto, só temos a primeira turma marcada em &lt;strong&gt;São Paulo, dia 26/07&lt;/strong&gt;. Mais turmas em breve também.&lt;/p&gt;
&lt;p&gt;Escrever um site responsivo não é só pegar seu site desktop, colocar meia dúzia de media queries e ver ele redimensionar bonitinho no seu Chrome. &lt;strong&gt;Design responsivo é repensar a Web com flexibilidade e adaptabilidade em mente.&lt;/strong&gt; No workshop, quero ir além das media queries básicas e mostrar como entregar uma experiência fantástica para o usuário.&lt;/p&gt;
&lt;p&gt;Criei esse workshop depois de muito programar sites responsivos, de palestrar bastante sobre o tema, de lançar o livro &lt;a href=&quot;/livro-web-mobile/&quot;&gt;A Web Mobile&lt;/a&gt; e dar muitas aulas. Percebi como existem muitos desafios e dúvidas, e muita gente fazendo coisas não tão recomendadas.&lt;/p&gt;
&lt;p&gt;Um diferencial do workshop é poder tirar dúvidas comigo pessoalmente, levantar tópicos para discussão e ver o que outras pessoas também estão fazendo.&lt;/p&gt;
&lt;p&gt;Os tópicos detalhados do &lt;a href=&quot;https://www.caelum.com.br/workshop-web-design-responsivo/&quot;&gt;workshop&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Design Responsivo&lt;ul&gt;
&lt;li&gt;Porque o design responsivo é o único caminho viável para a Web do futuro;&lt;/li&gt;
&lt;li&gt;Layout fluídos e a mágica por trás das medidas flexíveis da Web;&lt;/li&gt;
&lt;li&gt;Media queries para adaptação condicional;&lt;/li&gt;
&lt;li&gt;Uso do viewport e os conceitos por trás dele;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Técnicas de responsividade&lt;ul&gt;
&lt;li&gt;Boas práticas para media queries;&lt;/li&gt;
&lt;li&gt;Imagens e mídias flexíveis;&lt;/li&gt;
&lt;li&gt;Adaptação com código JavaScript;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Mobile-first&lt;ul&gt;
&lt;li&gt;Mobile-first, touch-first e web-first!&lt;/li&gt;
&lt;li&gt;Progressive enhancemente an Web moderna;&lt;/li&gt;
&lt;li&gt;Feature detection com Modernizr e JS;&lt;/li&gt;
&lt;li&gt;Umas palavrinhas sobre RESS;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Técnicas avançadas&lt;ul&gt;
&lt;li&gt;Como entender telas de alta resolução e retina&lt;/li&gt;
&lt;li&gt;Uso de imagens retina&lt;/li&gt;
&lt;li&gt;Como usar SVG, imagens vetoriais, CSS3 e icon fonts&lt;/li&gt;
&lt;li&gt;Conditional loading para conteúdo&lt;/li&gt;
&lt;li&gt;Algumas palavras sobre performance focado em mobile&lt;/li&gt;
&lt;li&gt;Debug e workflow de desenvolvimento de sites mobiles&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Discussão de tópicos levantados pela turma.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Interessado? Veja o &lt;a href=&quot;https://www.caelum.com.br/workshop-web-design-responsivo/&quot;&gt;workshop de design responsivo&lt;/a&gt; no site da Caelum e faça sua reserva.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>O que muda nas práticas de otimizações de performance na Web com o HTTP 2.0 e o SPDY</title>
         <link href="http://blog.caelum.com.br/o-que-muda-nas-praticas-de-otimizacoes-de-performance-na-web-com-o-http-2-0-e-o-spdy/"/>
         <updated>2014-06-18T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/o-que-muda-nas-praticas-de-otimizacoes-de-performance-na-web-com-o-http-2-0-e-o-spdy/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/o-que-muda-nas-praticas-de-otimizacoes-de-performance-na-web-com-o-http-2-0-e-o-spdy/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>As fantásticas novidades do HTTP 2.0 e do SPDY</title>
         <link href="http://blog.caelum.com.br/as-fantasticas-novidades-do-http-2-0-e-do-spdy/"/>
         <updated>2014-06-02T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/as-fantasticas-novidades-do-http-2-0-e-do-spdy/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/as-fantasticas-novidades-do-http-2-0-e-do-spdy/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Lançamento do livro “Coletânea Front-end: uma antologia da comunidade front-end brasileira.”</title>
         <link href="http://sergiolopes.org/lancamento-coletanea-front-end/"/>
         <updated>2014-04-01T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/lancamento-coletanea-front-end/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Acabo de lançar pela editora &lt;em&gt;Casa do Código&lt;/em&gt; mais um projeto: um livro que junta 10 autores de renome da comunidade front-end brasileira. É um projeto ambicioso que reuniu bastante trabalho nos últimos meses e acaba de sair. É a &lt;a href=&quot;https://casadocodigo.refersion.com/l/f49.5558&quot;&gt;Coletânea Front-end&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Inspirado em iniciativas lá de fora (como o famoso &lt;em&gt;Smashing Book&lt;/em&gt;), nossa coletânea conta com 10 capítulos de diversos assuntos. Eu fui o editor e organizador da coletânea.&lt;/p&gt;
&lt;p&gt;O livro custa &lt;strong&gt;R$ 29 em ebook&lt;/strong&gt;, &lt;strong&gt;R$ 59 na versão impressa&lt;/strong&gt; e &lt;strong&gt;R$ 69 ebook + impresso&lt;/strong&gt;. Você pode comprar direto &lt;a href=&quot;https://casadocodigo.refersion.com/l/f49.5558&quot;&gt;no site da editora Casa do Código&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://casadocodigo.refersion.com/l/f49.5558&quot;&gt;&lt;img src=&quot;/img/posts/coletanea-front-end.png&quot; alt=&quot;Capa do livro Coletânea Front-end&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A lista de autores é simplesmente &lt;strong&gt;fantástica&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Almir Filho - Globo / Loopinfinito&lt;/li&gt;
&lt;li&gt;Bernard De Luna - Videolog / Freteiros&lt;/li&gt;
&lt;li&gt;Caio Gondim - Booking / Loopinfinito&lt;/li&gt;
&lt;li&gt;Deivid Marques - Locaweb&lt;/li&gt;
&lt;li&gt;Diego Eis - Tableless / Locaweb&lt;/li&gt;
&lt;li&gt;Eduardo Shiota - Booking&lt;/li&gt;
&lt;li&gt;Giovanni Keppelen - Planedia&lt;/li&gt;
&lt;li&gt;Jaydson Gomes - Terra&lt;/li&gt;
&lt;li&gt;Luiz Real - Caelum&lt;/li&gt;
&lt;li&gt;Reinaldo Ferraz - W3C&lt;/li&gt;
&lt;li&gt;Sérgio Lopes - Caelum&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O resultado é um livro plural com assuntos bacanas escritos por pessoas de destaque na comunidade. Os capítulos da coletânea:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Progressive Enhancement: construindo um site melhor para todos?&lt;/li&gt;
&lt;li&gt;Responsive, Adaptive e Fault Tolerance&lt;/li&gt;
&lt;li&gt;Tudo que você precisa saber para criar um framework de sucesso&lt;/li&gt;
&lt;li&gt;Tornando a web mais dinâmica com AngularJS&lt;/li&gt;
&lt;li&gt;As diretrizes de acessibilidade para conteúdo na Web – WCAG&lt;/li&gt;
&lt;li&gt;Aplicações web super acessíveis com WAI-ARIA&lt;/li&gt;
&lt;li&gt;APIs geniais da Web moderna&lt;/li&gt;
&lt;li&gt;As APIs de acesso a dispositivos do HTML5&lt;/li&gt;
&lt;li&gt;Debugando sua Web App — ou, Como se estressar menos&lt;/li&gt;
&lt;li&gt;Testando códigos JavaScript&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;O livro foi pensado para ser um marco para o mercado de front-end brasileiro. Há muito conteúdo e muito conhecimento nesses 10 capítulos. &lt;a href=&quot;https://casadocodigo.refersion.com/l/f49.5558&quot;&gt;Compre o seu&lt;/a&gt; e nos mande o feedback.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Palestra: Repensando o front-end para telas de alta resolução</title>
         <link href="http://sergiolopes.org/palestra-retina-web/"/>
         <updated>2013-11-19T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/palestra-retina-web/</id>

         <content type="html">
            
            
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;Essa palestra é completamente interativa, o que não é suportado nos feeds RSS. Recomendo que visite o site e leia por lá. (é otimizado também para mobile)&lt;/i&gt;
                  &lt;/p&gt;

                  &lt;p&gt;Telas de alta resolução? Imagens responsivas? Retina? Gráficos vetoriais? SVG, icon fonts? Veja nessa palestra como suportar telas de resoluções diferentes.&lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Media queries também ajudam na acessibilidade</title>
         <link href="http://sergiolopes.org/media-queries-zoom/"/>
         <updated>2013-08-28T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/media-queries-zoom/</id>

         <content type="html">
            
            

               
               

               
               
                  
                  
                     &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;&lt;i&gt;
                        Esse post foi atualizado recentemente com mais informações (data de publicação original: 29 Jan 2013).
                     &lt;/i&gt;&lt;/p&gt;
                  
               

               
               &lt;p&gt;Sempre que alguém fala em &lt;a href=&quot;http://blog.caelum.com.br/flexibilidade-em-paginas-para-dispositivos-moveis-com-media-queries/&quot;&gt;medias queries&lt;/a&gt;, a primeira coisa que vem à cabeça é &lt;em&gt;design responsivo&lt;/em&gt; e &lt;em&gt;mobile&lt;/em&gt;. Mas elas ajudam também em outro cenário: &lt;strong&gt;acessibilidade&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Aliás, é sempre bom lembrar que &lt;a href=&quot;http://a11yproject.com/posts/myth-accessibility-is-blind-people/&quot;&gt;acessibilidade não é só sobre usuários cegos&lt;/a&gt;. Há várias categorias, incluindo os que enxergam mas com &lt;strong&gt;dificuldade de ler texto pequeno&lt;/strong&gt;. Pode ser uma doença, pode ser uma pessoa mais idosa, ou até um usuário &amp;quot;comum&amp;quot; desconfortável com um texto pequeno.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/media-queries/media-queries-zoom.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
&lt;/figure&gt;

&lt;p&gt;Pra isso, os navegadores têm a capacidade de &lt;strong&gt;zoom nas páginas&lt;/strong&gt;. Eu mesmo, apesar de não ter nenhum problema na vista, uso direto: gosto de ler textos com pelo menos 18px de tamanho, então dou zoom em todas as páginas menores que isso. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;E, só pra ficar claro, estou falando do que chamamos de &lt;a href=&quot;http://trac.webkit.org/wiki/ScalesAndZooms&quot;&gt;page zoom&lt;/a&gt;, que aumenta tudo na página, usado geralmente no Desktop; não estou falando do gesto de &lt;a href=&quot;http://trac.webkit.org/wiki/ScalesAndZooms&quot;&gt;page scale&lt;/a&gt;, comum no celular, que não afeta a renderização da página, só a visualização do usuário.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Mas dar zoom na página tem um problema: se você aumentar muito, o &lt;strong&gt;design do site pode quebrar&lt;/strong&gt;, principalmente medidas flexíveis como porcentagens e &lt;code&gt;em&lt;/code&gt;, tão comuns em design responsivo.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/media-queries/zoom-quebrando.jpg&quot; alt=&quot;Screenshot do blog com zoom de 200% quebrando o layout&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Um zoom de 200% deixa o artigo do blog bem estranho. O texto fica grande mas apertado, e a foto fica grande demais sem necessidade.&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;A parte mais curiosa é que o inimigo desse layout estranho é justo o design flexível. Se tivesse feito o &lt;strong&gt;layout todo fixo em px&lt;/strong&gt;, o zoom iria aumentá-lo proporcionalmente e nada quebraria. O ruim só é que o usuário teria que dar scroll horizontal pra ver o site todo.&lt;/p&gt;
&lt;h2 id=&quot;media-queries-ajudam-no-zoom&quot;&gt;Media queries ajudam no zoom&lt;/h2&gt;
&lt;p&gt;Mas a grande sacada é que as &lt;strong&gt;media queries são aplicadas quando o usuário dá zoom&lt;/strong&gt;. &lt;/p&gt;
&lt;p&gt;Um zoom de 200%, na prática, faz 1px no CSS ser renderizado como 2px na tela. No fim, se você estiver em um notebook de 1280px de tela, a página passaria a renderizar com um &lt;em&gt;viewport&lt;/em&gt; de 640px. &lt;em&gt;(aliás, há muita semelhança disso com meu post sobre &lt;a href=&quot;/resolucoes-dpi-pixel-ratio-retina/&quot;&gt;resoluções, pixel ratio e telas retina&lt;/a&gt;.)&lt;/em&gt; &lt;/p&gt;
&lt;p&gt;E a vantagem do viewport mudar de tamanho de acordo com o zoom é que as &lt;strong&gt;media queries&lt;/strong&gt; são aplicadas de acordo com o viewport. Com isso, as suas media queries criadas originalmente para celulares e tablets começam a ser aplicadas para o usuário com zoom. Seu layout passa a se &lt;strong&gt;adaptar corretamente&lt;/strong&gt; sem problema algum.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/media-queries/zoom-ok.jpg&quot; alt=&quot;Screenshot do blog com zoom de 200% aplicando as media queries&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Media queries ajustam o layout no Desktop com zoom de 200% como se estivesse num tablet pequeno. O design fica grande mas bem mais harmônico e proporcional.&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;Todos os navegadores suportam esse tipo de recurso: Firefox, Chrome, Android, Opera, Internet Explorer e Safari. Só há um &lt;a href=&quot;https://bugs.webkit.org/show_bug.cgi?id=41063&quot;&gt;bug no WebKit&lt;/a&gt; -- Safari, Android -- que faz a media query ser aplicada apenas se o usuário der zoom e depois um &lt;em&gt;refresh&lt;/em&gt; na página; em todos os outros (incluindo Chrome com Blink), a media query é aplicada imediatamente de acordo com o zoom.&lt;/p&gt;
&lt;p&gt;Então, se você por acaso não gosta de &lt;a href=&quot;/responsive-web-design/&quot;&gt;design responsivo&lt;/a&gt; e ainda faz site Desktop e mobile separado, tá aí um motivo pra usar media queries mesmo assim: garantir acesso de pessoas com visão reduzida.&lt;/p&gt;
&lt;h2 id=&quot;use-media-queries-com-em-por-causa-do-webkit&quot;&gt;Use media queries com &amp;#39;em&amp;#39; por causa do WebKit&lt;/h2&gt;
&lt;p&gt;Aliás, falando em WebKit, há outra questão importante. Quando o zoom aumenta, o cálculo dos pixels não afeta as media queries. Isso quer dizer que, se você usou &lt;code&gt;(max-width: 960px)&lt;/code&gt; no CSS, o WebKit não irá considerar metade desse valor quando o zoom estiver em 200%. Ele deveria fazer isso -- como todo os outros browsers fazem --, já que a media query é sobre o &lt;strong&gt;tamanho do viewport e não o tamanho da janela&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Mas o WebKit consegue reaplicar as media queries no zoom corretamente sim, apenas &lt;strong&gt;precisamos declará-las com &lt;code&gt;em&lt;/code&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs css&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;max-width:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;44em&lt;/span&gt;) { ... } &lt;span class=&quot;hljs-comment&quot; style=&quot;color: #8e908c;&quot;&gt;/* equivalente a 704px */&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;max-width:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;37em&lt;/span&gt;) { ... } &lt;span class=&quot;hljs-comment&quot; style=&quot;color: #8e908c;&quot;&gt;/* equivalente a 592px */&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A conta é simples: é só usar como base o &lt;code&gt;font-size&lt;/code&gt; em 16px e você chega no valor em &lt;code&gt;em&lt;/code&gt;. Os browsers WebKit consideram que o &lt;code&gt;font-size&lt;/code&gt; base muda conforme o zoom o que faz sua media query ser aplicada (depois de um refresh, por causa do bug que falei antes). &lt;strong&gt;Importante&lt;/strong&gt;: o Chrome não sofre mais desse problema desde que mudou para o Blink.&lt;/p&gt;
&lt;p&gt;E não se engane: isso é um &lt;strong&gt;bug do Safari/Android e cia&lt;/strong&gt;. Usar media queries em &lt;code&gt;em&lt;/code&gt; não deveria ser necessário para ganharmos acessibilidade no zoom. &lt;strong&gt;Até o IE funciona direito!&lt;/strong&gt; Mas, com o WebKit dominando completamente o mundo mobile, é bom &lt;strong&gt;fazer sempre suas media queries em &lt;code&gt;em&lt;/code&gt;&lt;/strong&gt; pra evitar problemas. Pelo menos até corrigirem esse bug.&lt;/p&gt;
&lt;h2 id=&quot;media-queries-de-resolu-o-aplicadas-no-zoom&quot;&gt;Media queries de resolução aplicadas no zoom&lt;/h2&gt;
&lt;p&gt;Uma desvantagem pra quem usa o zoom do browser é que as &lt;strong&gt;imagens costumam ficar pixeladas&lt;/strong&gt;. Ela fica menos definida, o que deixa a página feia e até com imagens piores pro deficiente visual entender.&lt;/p&gt;
&lt;p&gt;Mas, você lembra que temos &lt;a href=&quot;/media-queries-retina/&quot;&gt;media queries para lidar com resoluções diferentes&lt;/a&gt;? Elas foram pensadas para serem aplicadas em aparelhos com pixel ratio diferentes (como celulares Retina), mas também &lt;strong&gt;servem pra acessibilidade&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Após um &lt;a href=&quot;http://w3-org.9356.n7.nabble.com/Behavior-of-device-pixel-ratio-under-zoom-td6589.html&quot;&gt;longo debate no W3C&lt;/a&gt;, todos os navegadores concordaram que &lt;strong&gt;alterar o zoom do navegador altera o devicePixelRatio&lt;/strong&gt; e, portanto, altera a forma como as media querie &lt;code&gt;resolution&lt;/code&gt; são avaliadas.&lt;/p&gt;
&lt;p&gt;Em outras palavras: se você serve uma imagem de alta resolução (2x) para telas retina, por exemplo, ela será usada quando o usuário der 200% de zoom na página. Excelente.&lt;/p&gt;
&lt;p&gt;Por enquanto, em Agosto/2013, apenas o Firefox e o Chrome implementaram isso corretamente. Mas é questão de tempo até os outros navegadores implementarem.&lt;/p&gt;
&lt;h2 id=&quot;uma-nota-sobre-a-falta-de-acessibilidade-do-ios&quot;&gt;Uma nota sobre a falta de acessibilidade do iOS&lt;/h2&gt;
&lt;p&gt;O Safari Mobile no iOS não permite mudar o zoom padrão do navegador e ter uma página ajustável como mostrei nesse post. A única opção do usuário é usar o &lt;strong&gt;gesto de page scale&lt;/strong&gt; com dois dedos no navegador (&lt;em&gt;pinch to zoom&lt;/em&gt;) e ficar arrastando a tela de um lado pro outro pra conseguir ver a página toda.&lt;/p&gt;
&lt;p&gt;E, claro, isso se o desenvolvedor do site não &lt;a href=&quot;/libere-zoom-nas-paginas-mobile/&quot;&gt;desabilitou o zoom&lt;/a&gt; -- coisa que você jamais deveria fazer. Nesse caso, a solução pro usuário é usar o recurso de &lt;strong&gt;zoom nativo do sistema&lt;/strong&gt;, que envolve uma série de gestos estranhos e difíceis com 2 e 3 dedos.&lt;/p&gt;
&lt;h2 id=&quot;outra-nota-sobre-zoom-vs-aumentar-a-fonte&quot;&gt;Outra nota, sobre zoom vs aumentar a fonte&lt;/h2&gt;
&lt;p&gt;Nesse post, falo do &lt;strong&gt;zoom dos navegadores modernos&lt;/strong&gt;, que aumenta a página toda -- texto, imagens, CSS etc. Nos navegadores antigos -- como IE6 ou IE7 --, não existia isso e era comum o usuário &lt;strong&gt;aumentar o tamanho da fonte&lt;/strong&gt;. Era bem mais simples: só o &lt;code&gt;font-size&lt;/code&gt; base mudava e a página só aumentaria se você usasse &lt;code&gt;em&lt;/code&gt; nas medidas CSS. &lt;/p&gt;
&lt;p&gt;Aliás, esse era um argumento forte a favor de &lt;code&gt;em&lt;/code&gt; na época, mas hoje em dia os browsers dão zoom inclusive em medidas com &lt;code&gt;px&lt;/code&gt; fixos.&lt;/p&gt;
&lt;p&gt;&lt;small&gt;&lt;i&gt;* Imagem que ilustra o post por &lt;a href=&quot;http://www.flickr.com/photos/m4tik/47714548/&quot; rel=&quot;nofollow&quot;&gt;@m4tik no Flickr&lt;/a&gt;.&lt;/i&gt;&lt;/small&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Atualização Ago/2013:&lt;/strong&gt; informações sobre correções dos bugs no Chrome e WebKit.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Script para debugar o Mobile Safari do iOS no Desktop</title>
         <link href="http://sergiolopes.org/debug-mobile-safari-ios/"/>
         <updated>2013-08-26T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/debug-mobile-safari-ios/</id>

         <content type="html">
            
            

               
               

               
               
                  
                  
                     &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;&lt;i&gt;
                        Esse post foi atualizado recentemente com mais informações (data de publicação original: 20 Mar 2012).
                     &lt;/i&gt;&lt;/p&gt;
                  
               

               
               &lt;p&gt;A partir do &lt;strong&gt;iOS 5&lt;/strong&gt;, é possível fazer &lt;em&gt;remote debug&lt;/em&gt; de qualquer aba aberta no Mobile Safari, através do famoso &lt;em&gt;Inspector&lt;/em&gt; do WebKit no Desktop enquanto se navega no celular/emulador.&lt;/p&gt;
&lt;p&gt;Se você tiver iOS 6 em diante, o processo é extremamente simples, bastando ter o Safari mais recente instalado no Mac. Antes, você precisa habilitar essa função no seu aparelho (ou no emulador). Vá em &lt;strong&gt;Ajustes &amp;gt; Safari &amp;gt; Avançado&lt;/strong&gt; e marque a opção &lt;strong&gt;Inspetor Web&lt;/strong&gt;:&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/debug-mobile-safari-ios/enable-ios6.png&quot; alt=&quot;Ajustes, Safari, Avançado e marque a opção Inspetor Web&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Como habilitar o debug remoto no iOS 6&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;Agora abra o Safari no Mac e vá nas &lt;strong&gt;Preferências &amp;gt; Avançado&lt;/strong&gt; e marque a opção para mostrar o menu &lt;strong&gt;Develop&lt;/strong&gt; no menu. Por fim, basta conectar o cabo USB no aparelho e no computador (ou só abrir o emulador). Para abrir o inspetor, vá no Safari do Desktop em &lt;strong&gt;Develop&lt;/strong&gt; e deve aparecer seu aparelho/emulador listado, dando acesso a todas as abas abertas.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/debug-mobile-safari-ios/debug-ios6.png&quot; alt=&quot;Develop, iPhone Simulator, abas&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Debugando meu blog no emulador do iOS pelo Safari do Mac&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;&lt;em&gt;(tenho também um post sobre &lt;a href=&quot;/remote-debug-chrome-mobile/&quot;&gt;debug remoto no Chrome Mobile do Android&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;ios-5&quot;&gt;iOS 5&lt;/h2&gt;
&lt;p&gt;No iOS 5, o debug já existe mas é um pouco mais complicado, exigindo comandos mais complexos.&lt;/p&gt;
&lt;p&gt;Criei então um script bash que abre o emulador do iOS 5 e conecta o debugger nele via Safari. É bastante útil pra desenvolvimento Web mobile. Basta rodar o script no Mac após ter instalado o &lt;strong&gt;XCode&lt;/strong&gt; mais novo que inclui o emulador do iOS 5.&lt;/p&gt;
&lt;p&gt;Após rodar no terminal, abra o Mobile Safari dentro do emulador e navegue até a página que quer debugar. Depois, volte ao terminal e dê &lt;em&gt;enter&lt;/em&gt; para o script continuar e capturar o debug. Ele vai abrir o Safari no seu Desktop com o &lt;em&gt;Web Inspector&lt;/em&gt;.&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs bash&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;#!/bin/bash
&lt;/span&gt;
&lt;span class=&quot;hljs-comment&quot; style=&quot;color: #8e908c;&quot;&gt;# Open iPhone Simulator on default location for XCode 4.3&lt;/span&gt;
open /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Applications/iPhone\ Simulator.app

&lt;span class=&quot;hljs-comment&quot; style=&quot;color: #8e908c;&quot;&gt;# Open mobile safari&lt;/span&gt;
&lt;span class=&quot;hljs-built_in&quot; style=&quot;color: #f5871f;&quot;&gt;echo&lt;/span&gt; Open mobile safari on emulator and press &lt;span class=&quot;hljs-built_in&quot; style=&quot;color: #f5871f;&quot;&gt;return&lt;/span&gt;
&lt;span class=&quot;hljs-built_in&quot; style=&quot;color: #f5871f;&quot;&gt;read&lt;/span&gt;

&lt;span class=&quot;hljs-comment&quot; style=&quot;color: #8e908c;&quot;&gt;# Plug debug to MobileSafari.app&lt;/span&gt;
&lt;span class=&quot;hljs-built_in&quot; style=&quot;color: #f5871f;&quot;&gt;echo&lt;/span&gt; Debugging
MobileSafari_PID=$(ps x | grep &lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;&quot;MobileSafari&quot;&lt;/span&gt; | grep -v grep | awk &lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;'{ print $1 }'&lt;/span&gt;)

&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;if&lt;/span&gt; [ &lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;&quot;&lt;span class=&quot;hljs-variable&quot; style=&quot;color: #c82829;&quot;&gt;$MobileSafari_PID&lt;/span&gt;&quot;&lt;/span&gt; == &lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;&quot;&quot;&lt;/span&gt; ]; &lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;then&lt;/span&gt;
  &lt;span class=&quot;hljs-built_in&quot; style=&quot;color: #f5871f;&quot;&gt;echo&lt;/span&gt; &lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;&quot;Mobile Safari.app must be running in the Simulator to enable the remote inspector.&quot;&lt;/span&gt;
  &lt;span class=&quot;hljs-built_in&quot; style=&quot;color: #f5871f;&quot;&gt;exit&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;else&lt;/span&gt;

  cat &amp;lt;&amp;lt;EOM | gdb -quiet &amp;gt; /dev/null
  attach &lt;span class=&quot;hljs-variable&quot; style=&quot;color: #c82829;&quot;&gt;$MobileSafari_PID&lt;/span&gt;
  p (void *)[WebView _enableRemoteInspector]
  detach
EOM
&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;fi&lt;/span&gt;

&lt;span class=&quot;hljs-comment&quot; style=&quot;color: #8e908c;&quot;&gt;# Open debugger in Safari.app&lt;/span&gt;
open -a /Applications/Safari.app http://localhost:9999
&lt;/code&gt;&lt;/pre&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/debug-mobile-safari-ios/mobile-safari-iphone.png&quot; alt=&quot;iPhone no emulador&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;img src=&quot;/img/posts/debug-mobile-safari-ios/debug-safari.png&quot; alt=&quot;Safari com inspector aberto&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Debugando o sergiolopes.org no Mobile Safari do emulador&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;Há também um &lt;a href=&quot;https://gist.github.com/1961630&quot;&gt;gist&lt;/a&gt; disponível com esse código. O código do &lt;strong&gt;gdb&lt;/strong&gt; eu peguei nesse &lt;a href=&quot;http://atnan.com/blog/2011/11/17/enabling-remote-debugging-via-private-apis-in-mobile-safari/&quot;&gt;post aqui&lt;/a&gt; -- lá você também vê como conectar o debug a um aparelho real com iOS, além do emulador.&lt;/p&gt;
&lt;p&gt;Se você precisa debugar uma versão mais antiga do iOS ou não tem um Mac a disposição, recomendo testar as ferramentas &lt;a href=&quot;http://html.adobe.com/edge/inspect/&quot;&gt;Adobe Edge Inspect&lt;/a&gt; e &lt;a href=&quot;https://people.apache.org/~pmuellr/weinre/docs/latest/&quot;&gt;Weinre&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Atualização Ago/2013&lt;/strong&gt;: Adicionei informações sobre iOS 6.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>CSS: Você deveria usar box-sizing: border-box em todas as suas páginas</title>
         <link href="http://sergiolopes.org/css-box-sizing-border-box/"/>
         <updated>2013-08-23T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/css-box-sizing-border-box/</id>

         <content type="html">
            
            

               
               
                  
                     &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                        &lt;i&gt;Se você estiver num leitor RSS, é possível que os exemplos não funcionem adequadamente por causa do CSS. Recomendo ver o &amp;lt;a href=&amp;quot;http://sergiolopes.org/css-box-sizing-border-box/&amp;quot;&amp;gt;artigo original&amp;lt;/a&amp;gt; no site. (é otimizado pra mobile também)&lt;/i&gt;
                     &lt;/p&gt;
                  
               

               
               
                  
                  
                     &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;&lt;i&gt;
                        Esse post foi atualizado recentemente com mais informações (data de publicação original: 24 Jun 2012).
                     &lt;/i&gt;&lt;/p&gt;
                  
               

               
               &lt;style&gt;
div code {
    white-space: pre;
}
&lt;/style&gt;

&lt;p&gt;O &lt;em&gt;box model&lt;/em&gt; padrão do CSS é uma das coisas mais contra-intuitivas que existem. Mas você pode trocá-lo com o &lt;em&gt;box-sizing&lt;/em&gt; do CSS3. E, melhor, funciona em todos os navegadores -- até no IE8!&lt;/p&gt;
&lt;p&gt;Todo elemento no HTML é uma caixa. Controlamos seu tamanho com &lt;em&gt;width&lt;/em&gt;, sua borda com &lt;em&gt;border&lt;/em&gt; e ainda temos as margens externas e internas com &lt;em&gt;margin&lt;/em&gt; e &lt;em&gt;padding&lt;/em&gt;. &lt;em&gt;Box model&lt;/em&gt; é como todas essas propriedades se relacionam pra determinar o tamanho final do elemento.&lt;/p&gt;
&lt;p&gt;E o &lt;em&gt;box model&lt;/em&gt; tradicional da especificação tem uma regra bastante confusa: diz que a propriedade &lt;em&gt;width&lt;/em&gt; trata do tamanho do conteúdo do elemento, não considerando seu &lt;em&gt;padding&lt;/em&gt; e &lt;em&gt;border&lt;/em&gt; (e a mesma coisa com a altura).&lt;/p&gt;
&lt;p&gt;Isso quer dizer que, se você quiser que um elemento ocupe metade da página mas com uma borda de 10px, não funciona fazer &lt;code&gt;border: 10px solid #555; width:50%&lt;/code&gt;. O tamanho final do elemento terá 20px mais metade do tamanho do pai.&lt;/p&gt;
&lt;div style=&quot;background: #bada55; border: 10px solid #555; width: 50%; box-sizing: content-box; -moz-box-sizing: content-box;-webkit-box-sizing: content-box;&quot;&gt;
    Queria que ele ocupasse metade da tela com uma borda.

    &lt;code&gt;
    border-width: 10px;
    width: 50%;
    &lt;/code&gt;
&lt;/div&gt;

&lt;div style=&quot;background: #55bada; width: 50%; box-sizing: content-box; -moz-box-sizing: content-box;-webkit-box-sizing: content-box;&quot;&gt;
    Ele também tem width 50%, mas sem borda.

    &lt;code&gt;
    width: 50%;

    &lt;/code&gt;
&lt;/div&gt;

&lt;p&gt;É assim que as coisas funcionam mas certamente não é assim que nós pensamos. Se você pensa no tamanho de uma caixa, você não pensa só no conteúdo dela. Uma caixa termina em sua borda e isso deveria ser considerado seu tamanho.&lt;/p&gt;
&lt;h2 id=&quot;um-viva-ao-ie6-&quot;&gt;Um viva ao IE6!&lt;/h2&gt;
&lt;p&gt;O curioso é que os primeiros a perceberem que o &lt;em&gt;box model&lt;/em&gt; do CSS era esquisito foi a &lt;strong&gt;Microsoft&lt;/strong&gt;. Já no IE6 em &lt;em&gt;quirks mode&lt;/em&gt; eles trocaram o &lt;em&gt;box model&lt;/em&gt; pra que o &lt;em&gt;width&lt;/em&gt; significasse o tamanho total até a borda. A ideia era boa mas o problema foi eles atropelarem a especificação da época, o que acabou criando boa parte dos problemas de incompatibilidade entre navegadores. O IE em &lt;em&gt;standards mode&lt;/em&gt; usa o &lt;em&gt;box model&lt;/em&gt; oficial e esse é o padrão a partir do IE8.&lt;/p&gt;
&lt;p&gt;Mas como a ideia, no fim, era boa, isso acabou se transformando no &lt;strong&gt;box-sizing&lt;/strong&gt; do CSS3, que nos permite &lt;strong&gt;trocar o box model&lt;/strong&gt; que queremos usar.&lt;/p&gt;
&lt;p&gt;Por padrão, todos os elementos têm o valor &lt;code&gt;box-sizing: content-box&lt;/code&gt; o que indica que o tamanho dele é definido pelo seu conteúdo apenas -- em outras palavras, é o tal box model padrão que vimos antes. Mas podemos trocar por &lt;code&gt;box-sizing: border-box&lt;/code&gt; que indica que o tamanho agora levará em conta até a borda -- ou seja, o &lt;em&gt;width&lt;/em&gt; será a soma do conteúdo com a borda e o padding.&lt;/p&gt;
&lt;div style=&quot;background: #bada55; border: 10px solid #555; width: 50%; box-sizing: border-box; -moz-box-sizing: border-box;-webkit-box-sizing: border-box;&quot;&gt;
    Queria que ele ocupasse metade da tela com uma borda.

    &lt;code&gt;
    box-sizing: border-box;
    border-width: 10px;
    width: 50%;
    &lt;/code&gt;
&lt;/div&gt;

&lt;div style=&quot;background: #55bada; width: 50%; box-sizing: border-box; -moz-box-sizing: border-box;-webkit-box-sizing: border-box;&quot;&gt;
    Ele também tem width 50%, mas sem borda.

    &lt;code&gt;
    box-sizing: border-box;
    width: 50%;

    &lt;/code&gt;
&lt;/div&gt;

&lt;h2 id=&quot;usando-o-novo-box-sizing&quot;&gt;Usando o novo box-sizing&lt;/h2&gt;
&lt;p&gt;O &lt;a href=&quot;http://caniuse.com/css3-boxsizing&quot; title=&quot;Can I use box-sizing?&quot;&gt;suporte&lt;/a&gt; nos navegadores é excelente, indo até o IE8 -- e há um &lt;a href=&quot;https://github.com/Schepp/box-sizing-polyfill&quot;&gt;polyfill&lt;/a&gt; pra IE6 e IE7 se você precisar. O Firefox ainda precisa do prefixo &lt;strong&gt;-moz-&lt;/strong&gt; e versões mais antigas do Chrome, Safari e Android, do &lt;strong&gt;-webkit-&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Eu uso essa regra em todos os elementos de todas as minhas páginas -- inclusive aqui no blog. Então aplico o seletor universal:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs css&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;* {
    &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;-webkit-box-sizing&lt;/span&gt;: border-box;
       &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;-moz-box-sizing&lt;/span&gt;: border-box;
            &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;box-sizing&lt;/span&gt;: border-box;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Existe uma preocupação quanto à performance do seletor universal &lt;code&gt;*&lt;/code&gt; mas ela certamente não será um problema para algo tão simples e pontual como essa regra. O ruim é abusar e ter diversas regras com seletor universal e descendentes. E você nem devia estar se preocupando com performance de CSS se ainda não tem uma nota maior que 95 no PageSpeed; gzip, minificação, sprites, etc são bem mais importantes pra performance.&lt;/p&gt;
&lt;p&gt;Outro ponto importante é que o seletor &lt;code&gt;*&lt;/code&gt; não pega pseudo-elementos. Na prática, acabo usando:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs css&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;*, *&lt;span class=&quot;hljs-selector-pseudo&quot;&gt;:before&lt;/span&gt;, *&lt;span class=&quot;hljs-selector-pseudo&quot;&gt;:after&lt;/span&gt; {
    &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;-webkit-box-sizing&lt;/span&gt;: border-box;
       &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;-moz-box-sizing&lt;/span&gt;: border-box;
            &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;box-sizing&lt;/span&gt;: border-box;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Atualização Ago/2013&lt;/strong&gt;: acrescentei os pseudo-elementos na regra e removi informações sobre bug antigo do Firefox.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Bate-papo responsivo - Entrevista na RevistaW</title>
         <link href="http://revistaw.com.br/entrevistas/bate-papo-responsivo/"/>
         <updated>2013-07-31T00:00:00.000Z</updated>
         <id>http://revistaw.com.br/entrevistas/bate-papo-responsivo/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://revistaw.com.br/entrevistas/bate-papo-responsivo/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Automação de build de front-end com Grunt.js</title>
         <link href="http://blog.caelum.com.br/automacao-de-build-de-front-end-com-grunt-js/"/>
         <updated>2013-06-25T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/automacao-de-build-de-front-end-com-grunt-js/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/automacao-de-build-de-front-end-com-grunt-js/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Imagens SVG com CSS animations</title>
         <link href="http://sergiolopes.org/svg-css-animations/"/>
         <updated>2013-05-15T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/svg-css-animations/</id>

         <content type="html">
            
            

               
               
                  
                     &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                        &lt;i&gt;Esse post possui exemplos não suportados nos feeds RSS. Recomendo que visite a página e leia por lá. (é otimizado também para mobile)&lt;/i&gt;
                     &lt;/p&gt;
                  
               

               
               

               
               &lt;p&gt;No HTML5, imagens em SVG podem ser embutidas direto no documento HTML com a tag &lt;code&gt;&amp;lt;svg&amp;gt;&lt;/code&gt;. A vantagem é que você tem elementos no DOM e pode manipulá-los com CSS e JavaScript normalmente.&lt;/p&gt;
&lt;p&gt;Quando escrevi &lt;a href=&quot;/livro-web-mobile/&quot;&gt;meu livro &amp;quot;A Web Mobile&amp;quot;&lt;/a&gt;, o amigo e designer &lt;a href=&quot;https://twitter.com/thiagovilaca&quot;&gt;Thiago Vilaça&lt;/a&gt; desenhou a capa e criou um desenho que gostei muito. Aí quando fui montar o &lt;a href=&quot;/livro-web-mobile/&quot;&gt;hotsite do livro&lt;/a&gt;, claro que eu quis colocar o desenho por lá.&lt;/p&gt;
&lt;p&gt;Mas, estamos na Web! Interatividade é a regra e eu achei que o desenho tinha tudo pra receber um toque de animação. Solução? &lt;strong&gt;Usar SVG com CSS Animations&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;svg-inline-no-html5&quot;&gt;SVG inline no HTML5&lt;/h2&gt;
&lt;p&gt;Colocar um desenho SVG na página é só sair escrevendo a tag &lt;code&gt;&amp;lt;svg&amp;gt;&lt;/code&gt; e pronto. Por exemplo, se quisermos desenhar um círculo em SVG no meio da página:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs xml&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;&amp;lt;!doctype &lt;span class=&quot;hljs-meta-keyword&quot;&gt;html&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;html&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;body&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;h1&lt;/span&gt;&amp;gt;&lt;/span&gt;Meu teste de SVG&lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;h1&lt;/span&gt;&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;svg&lt;/span&gt;&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;circle&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;cx&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;&quot;50&quot;&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;cy&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;&quot;50&quot;&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;r&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;&quot;40&quot;&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;fill&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;&quot;#F90&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;svg&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;body&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;html&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;exemplo&quot;&gt;
    &lt;svg viewbox=&quot;0 0 100 100&quot; width=&quot;150&quot; height=&quot;150&quot;&gt;
        &lt;circle cx=&quot;50&quot; cy=&quot;50&quot; r=&quot;40&quot; fill=&quot;#F90&quot;&gt;
    &lt;/circle&gt;&lt;/svg&gt;
&lt;/div&gt;

&lt;p&gt;Segundo o &lt;a href=&quot;http://caniuse.com/#feat=svg-html5&quot;&gt;Can I use&lt;/a&gt;, SVGs inline no HTML5 funcionam em todos os navegadores modernos. As maiores exceções são Internet Explorer 8, Android 2.x e Opera Mini.&lt;/p&gt;
&lt;p&gt;Podemos detectar suporte a SVG com &lt;em&gt;Modernizr&lt;/em&gt; e oferecer um fallback se for o caso. No caso da página do livro, eu decidi não oferecer fallback já que é uma imagem meramente decorativa. Os navegadores sem suporte a SVG simplesmente não vêem a imagem:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs css&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;&lt;span class=&quot;hljs-selector-class&quot;&gt;.no-inlinesvg&lt;/span&gt; &lt;span class=&quot;hljs-selector-tag&quot;&gt;svg&lt;/span&gt; {
    &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;display&lt;/span&gt;: none;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;PS. há um problema de performance nisso, claro. Os navegadores velhos vão baixar o SVG mesmo sem poderem exibi-lo. Decidi ignorar isso já que o SVG é relativamente pequeno e quase não tenho visitantes desses navegadores velhos por aqui.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;css-modificando-o-svg&quot;&gt;CSS modificando o SVG&lt;/h2&gt;
&lt;p&gt;O legal do SVG também ser um formato de marcação é que você pode colocar classes e IDs nos elementos e depois referenciá-los no CSS. No desenho, por exemplo, eu queria mudar a cor das setas do desenho via CSS. Bastou dar uma classe e mudar a cor no CSS.&lt;/p&gt;
&lt;p&gt;Algo assim:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs xml&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;&lt;span class=&quot;hljs-meta&quot;&gt;&amp;lt;!doctype &lt;span class=&quot;hljs-meta-keyword&quot;&gt;html&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;html&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;body&lt;/span&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;style&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;css&quot; style=&quot;opacity: 0.5;&quot;&gt;
    &lt;span class=&quot;hljs-selector-class&quot;&gt;.seta&lt;/span&gt; {
        &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;fill&lt;/span&gt;: &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;#fcb870&lt;/span&gt;;
    }
    &lt;/span&gt;&lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;style&lt;/span&gt;&amp;gt;&lt;/span&gt;

    &lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;svg&lt;/span&gt;&amp;gt;&lt;/span&gt;
        ...
        &lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;path&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;&quot;seta&quot;&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;d&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;&quot;...&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
        ...
    &lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;svg&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;body&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;html&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;exemplo exemplo2&quot;&gt;
    &lt;svg viewbox=&quot;0 0 20 30&quot; width=&quot;100&quot; height=&quot;100&quot;&gt;
        &lt;path class=&quot;seta&quot; d=&quot;m10,0c1.48-0.037,2.71,1.14,2.75,2.62,0,0,0.086,3.73,0.078,3.82l0.274,11,4.71-0.116-7.06,13-7.69-12.6,4.71-0.116-0.271-11c-0.012-0.09-0.109-3.82-0.109-3.82-0.037-1.48,1.14-2.71,2.62-2.75&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#f89c33&quot;/&gt;
    &lt;/svg&gt;
&lt;/div&gt;

&lt;p&gt;O importante aqui é perceber como coloquei uma classe no elemento &lt;code&gt;&amp;lt;path&amp;gt;&lt;/code&gt; do SVG e depois referenciei no CSS normal da página. Repare também que estou usando propriedades CSS específicas de SVG, como a &lt;code&gt;fill&lt;/code&gt;, que serve pra pintar um elemento de certa cor (quase como um &lt;code&gt;background-color&lt;/code&gt;).&lt;/p&gt;
&lt;h2 id=&quot;css3-animations-no-svg&quot;&gt;CSS3 Animations no SVG&lt;/h2&gt;
&lt;p&gt;Sabendo modificar o SVG com CSS, o céu é o limite! No caso da seta que falei antes, queria ainda fazê-la mudar de cor ciclicamente, como se estivesse piscando entre duas cores possíveis. Fácil de fazer com &lt;strong&gt;CSS animations&lt;/strong&gt;:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs css&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@keyframes&lt;/span&gt; muda-cor {
    0%,49% {
        &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;fill&lt;/span&gt;: &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;#fcb870&lt;/span&gt;
    }
    50%,100% {
        &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;fill&lt;/span&gt;: &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;#f89c33&lt;/span&gt;
    }
}

&lt;span class=&quot;hljs-selector-class&quot;&gt;.seta&lt;/span&gt; {
    &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;animation&lt;/span&gt;: muda-cor &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;3s&lt;/span&gt; linear infinite;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;exemplo exemplo3&quot;&gt;
    &lt;svg viewbox=&quot;0 0 20 30&quot; width=&quot;100&quot; height=&quot;100&quot;&gt;
        &lt;path class=&quot;seta&quot; d=&quot;m10,0c1.48-0.037,2.71,1.14,2.75,2.62,0,0,0.086,3.73,0.078,3.82l0.274,11,4.71-0.116-7.06,13-7.69-12.6,4.71-0.116-0.271-11c-0.012-0.09-0.109-3.82-0.109-3.82-0.037-1.48,1.14-2.71,2.62-2.75&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#f89c33&quot;/&gt;
    &lt;/svg&gt;
&lt;/div&gt;

&lt;p&gt;O que estamos fazendo é alternar entre essas duas cores a cada 5 segundos sem parar. A sintaxe dos keyframes indica que a primeira cor fica fixa na metade do tempo e depois vem a outra cor na outra metade. Não coloquei os prefixos necessários para alguns browsers.&lt;/p&gt;
&lt;h2 id=&quot;anima-es-mais-complicadas&quot;&gt;Animações mais complicadas&lt;/h2&gt;
&lt;p&gt;Dá pra animar de tudo com &lt;em&gt;CSS Animations&lt;/em&gt;. Dá pra combinar com &lt;em&gt;CSS transforms&lt;/em&gt; e criar uns efeitos legais. Um que eu queria na página era fazer as engrenagens girarem. A princípio, girar algo com CSS é simples:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs css&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@keyframes&lt;/span&gt; gira {
    &lt;span class=&quot;hljs-selector-tag&quot;&gt;to&lt;/span&gt; {
        &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;transform&lt;/span&gt;: &lt;span class=&quot;hljs-built_in&quot; style=&quot;color: #f5871f;&quot;&gt;rotate&lt;/span&gt;(&lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;360deg&lt;/span&gt;);
    }
}

&lt;span class=&quot;hljs-selector-class&quot;&gt;.engrenagem&lt;/span&gt; {
    &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;animation&lt;/span&gt;: gira &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;2s&lt;/span&gt; linear infinite;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;exemplo exemplo4&quot;&gt;
    &lt;svg viewbox=&quot;0 0 80 80&quot; width=&quot;100&quot; height=&quot;100&quot;&gt;
        &lt;path class=&quot;engrenagem&quot; d=&quot;m70,40c-0.011,0.528-0.034,1.06-0.074,1.59-0.27,3.53-1.19,6.85-2.65,9.85,1.23,0.844,2.44,1.72,3.63,2.63-1.05,2.03-2.32,3.95-3.77,5.71-1.31-0.731-2.6-1.49-3.86-2.29-2.6,2.98-5.82,5.38-9.44,7.02,0.401,1.44,0.766,2.89,1.1,4.35-2.11,0.886-4.31,1.54-6.56,1.96-0.535-1.4-1.03-2.81-1.49-4.23-2.06,0.322-4.19,0.416-6.36,0.252-1.86-0.142-3.66-0.465-5.39-0.953-0.618,1.36-1.27,2.7-1.96,4.04-2.18-0.672-4.29-1.59-6.28-2.72,0.491-1.42,1.02-2.82,1.58-4.2-3.41-2.06-6.32-4.82-8.54-8.09-1.35,0.642-2.71,1.25-4.09,1.83-1.24-1.92-2.27-3.97-3.07-6.11,1.29-0.771,2.59-1.51,3.91-2.21-1.18-3.43-1.7-7.15-1.4-11,0.018-0.233,0.038-0.464,0.062-0.693-1.45-0.374-2.88-0.783-4.32-1.23,0.283-2.26,0.814-4.5,1.58-6.65,1.48,0.237,2.95,0.511,4.41,0.821,1.44-3.75,3.67-7.09,6.48-9.82-0.867-1.21-1.7-2.45-2.51-3.71,1.67-1.55,3.51-2.92,5.48-4.08,0.982,1.13,1.93,2.29,2.85,3.46,3.4-1.89,7.23-3.07,11.3-3.36,0.118-1.49,0.273-2.98,0.465-4.46,2.28-0.106,4.56,0.031,6.82,0.406,0.024,1.5,0.012,2.99-0.04,4.49,3.99,0.771,7.65,2.4,10.8,4.67,1.05-1.06,2.12-2.1,3.22-3.12,1.82,1.39,3.48,2.96,4.96,4.7-0.947,1.16-1.92,2.3-2.92,3.41,2.47,3.05,4.29,6.63,5.27,10.5,1.48-0.143,2.98-0.25,4.47-0.321,0.505,2.23,0.767,4.51,0.78,6.8-1.47,0.281-2.95,0.525-4.43,0.73&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fdb72f&quot;/&gt;
        &lt;path class=&quot;engrenagem&quot; d=&quot;m42.5,33.5c-4.06,0-7.36,3.26-7.36,7.28s3.3,7.28,7.36,7.28c4.07,0,7.36-3.26,7.36-7.28s-3.3-7.28-7.36-7.28m16.4,12.1c-0.853-0.086-1.7-0.197-2.55-0.332-0.521,1.56-1.3,3-2.3,4.26,0.587,0.611,1.16,1.24,1.72,1.89-0.854,1.03-1.83,1.97-2.91,2.78-0.639-0.565-1.26-1.15-1.86-1.75-1.32,0.935-2.8,1.66-4.39,2.12,0.11,0.836,0.199,1.68,0.264,2.52-1.31,0.342-2.66,0.527-4,0.556-0.18-0.829-0.334-1.66-0.466-2.5-1.69-0.01-3.31-0.303-4.81-0.833-0.409,0.741-0.837,1.47-1.29,2.19-1.26-0.483-2.46-1.11-3.57-1.88,0.349-0.775,0.719-1.54,1.11-2.29-1.32-0.959-2.47-2.13-3.4-3.47-0.771,0.363-1.55,0.708-2.34,1.03-0.733-1.12-1.34-2.33-1.78-3.59,0.742-0.425,1.5-0.828,2.26-1.21-0.444-1.38-0.686-2.85-0.686-4.38,0-0.134,0.002-0.269,0.006-0.404-0.84-0.153-1.68-0.329-2.51-0.526,0.076-1.33,0.305-2.66,0.697-3.94,0.853,0.088,1.7,0.199,2.55,0.331,0.521-1.55,1.3-2.99,2.3-4.26-0.587-0.615-1.16-1.24-1.72-1.89,0.855-1.04,1.83-1.97,2.91-2.78,0.638,0.566,1.26,1.15,1.86,1.75,1.32-0.936,2.8-1.66,4.39-2.12-0.111-0.835-0.199-1.68-0.264-2.52,1.31-0.343,2.66-0.528,4.01-0.557,0.179,0.83,0.334,1.66,0.466,2.5,1.69,0.009,3.31,0.3,4.81,0.831,0.408-0.741,0.836-1.47,1.29-2.2,1.26,0.485,2.46,1.12,3.57,1.88-0.349,0.776-0.717,1.54-1.11,2.29,1.32,0.961,2.47,2.14,3.4,3.47,0.77-0.364,1.55-0.707,2.34-1.03,0.734,1.12,1.34,2.33,1.78,3.59-0.741,0.425-1.49,0.83-2.26,1.21,0.444,1.38,0.684,2.85,0.684,4.38,0,0.136-0.002,0.271-0.006,0.406,0.84,0.152,1.68,0.329,2.51,0.526-0.075,1.33-0.305,2.66-0.696,3.94&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fff2d7&quot;/&gt;
    &lt;/svg&gt;
&lt;/div&gt;

&lt;p&gt;Mas o resultado não é o esperado. O elemento vai girar mas repare que o eixo de rotação não é o próprio elemento, mas o &lt;em&gt;ponto (0,0)&lt;/em&gt; do desenho SVG. Pra resolver, é preciso configurar a propriedade &lt;code&gt;transform-origin&lt;/code&gt; apontando a coordenada da origem da rotação — que deve ser o centro da engrenagem. Essa coordenada tem que ser calculada com relação à origem do desenho.&lt;/p&gt;
&lt;p&gt;Por exemplo:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs css&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;&lt;span class=&quot;hljs-selector-class&quot;&gt;.engrenagem&lt;/span&gt; {
    &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;animation&lt;/span&gt;: gira &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;8s&lt;/span&gt; linear infinite;
    &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;transform-origin&lt;/span&gt;: &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;43px&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;40px&lt;/span&gt;;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;exemplo exemplo5&quot;&gt;
    &lt;svg viewbox=&quot;0 0 80 80&quot; width=&quot;140&quot; height=&quot;140&quot;&gt;
        &lt;path class=&quot;engrenagem&quot; d=&quot;m70,40c-0.011,0.528-0.034,1.06-0.074,1.59-0.27,3.53-1.19,6.85-2.65,9.85,1.23,0.844,2.44,1.72,3.63,2.63-1.05,2.03-2.32,3.95-3.77,5.71-1.31-0.731-2.6-1.49-3.86-2.29-2.6,2.98-5.82,5.38-9.44,7.02,0.401,1.44,0.766,2.89,1.1,4.35-2.11,0.886-4.31,1.54-6.56,1.96-0.535-1.4-1.03-2.81-1.49-4.23-2.06,0.322-4.19,0.416-6.36,0.252-1.86-0.142-3.66-0.465-5.39-0.953-0.618,1.36-1.27,2.7-1.96,4.04-2.18-0.672-4.29-1.59-6.28-2.72,0.491-1.42,1.02-2.82,1.58-4.2-3.41-2.06-6.32-4.82-8.54-8.09-1.35,0.642-2.71,1.25-4.09,1.83-1.24-1.92-2.27-3.97-3.07-6.11,1.29-0.771,2.59-1.51,3.91-2.21-1.18-3.43-1.7-7.15-1.4-11,0.018-0.233,0.038-0.464,0.062-0.693-1.45-0.374-2.88-0.783-4.32-1.23,0.283-2.26,0.814-4.5,1.58-6.65,1.48,0.237,2.95,0.511,4.41,0.821,1.44-3.75,3.67-7.09,6.48-9.82-0.867-1.21-1.7-2.45-2.51-3.71,1.67-1.55,3.51-2.92,5.48-4.08,0.982,1.13,1.93,2.29,2.85,3.46,3.4-1.89,7.23-3.07,11.3-3.36,0.118-1.49,0.273-2.98,0.465-4.46,2.28-0.106,4.56,0.031,6.82,0.406,0.024,1.5,0.012,2.99-0.04,4.49,3.99,0.771,7.65,2.4,10.8,4.67,1.05-1.06,2.12-2.1,3.22-3.12,1.82,1.39,3.48,2.96,4.96,4.7-0.947,1.16-1.92,2.3-2.92,3.41,2.47,3.05,4.29,6.63,5.27,10.5,1.48-0.143,2.98-0.25,4.47-0.321,0.505,2.23,0.767,4.51,0.78,6.8-1.47,0.281-2.95,0.525-4.43,0.73&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fdb72f&quot;/&gt;
        &lt;path class=&quot;engrenagem&quot; d=&quot;m42,33c-4.06,0-7.36,3.26-7.36,7.28s3.3,7.28,7.36,7.28c4.07,0,7.36-3.26,7.36-7.28s-3.3-7.28-7.36-7.28m16.4,12.1c-0.853-0.086-1.7-0.197-2.55-0.332-0.521,1.56-1.3,3-2.3,4.26,0.587,0.611,1.16,1.24,1.72,1.89-0.854,1.03-1.83,1.97-2.91,2.78-0.639-0.565-1.26-1.15-1.86-1.75-1.32,0.935-2.8,1.66-4.39,2.12,0.11,0.836,0.199,1.68,0.264,2.52-1.31,0.342-2.66,0.527-4,0.556-0.18-0.829-0.334-1.66-0.466-2.5-1.69-0.01-3.31-0.303-4.81-0.833-0.409,0.741-0.837,1.47-1.29,2.19-1.26-0.483-2.46-1.11-3.57-1.88,0.349-0.775,0.719-1.54,1.11-2.29-1.32-0.959-2.47-2.13-3.4-3.47-0.771,0.363-1.55,0.708-2.34,1.03-0.733-1.12-1.34-2.33-1.78-3.59,0.742-0.425,1.5-0.828,2.26-1.21-0.444-1.38-0.686-2.85-0.686-4.38,0-0.134,0.002-0.269,0.006-0.404-0.84-0.153-1.68-0.329-2.51-0.526,0.076-1.33,0.305-2.66,0.697-3.94,0.853,0.088,1.7,0.199,2.55,0.331,0.521-1.55,1.3-2.99,2.3-4.26-0.587-0.615-1.16-1.24-1.72-1.89,0.855-1.04,1.83-1.97,2.91-2.78,0.638,0.566,1.26,1.15,1.86,1.75,1.32-0.936,2.8-1.66,4.39-2.12-0.111-0.835-0.199-1.68-0.264-2.52,1.31-0.343,2.66-0.528,4.01-0.557,0.179,0.83,0.334,1.66,0.466,2.5,1.69,0.009,3.31,0.3,4.81,0.831,0.408-0.741,0.836-1.47,1.29-2.2,1.26,0.485,2.46,1.12,3.57,1.88-0.349,0.776-0.717,1.54-1.11,2.29,1.32,0.961,2.47,2.14,3.4,3.47,0.77-0.364,1.55-0.707,2.34-1.03,0.734,1.12,1.34,2.33,1.78,3.59-0.741,0.425-1.49,0.83-2.26,1.21,0.444,1.38,0.684,2.85,0.684,4.38,0,0.136-0.002,0.271-0.006,0.406,0.84,0.152,1.68,0.329,2.51,0.526-0.075,1.33-0.305,2.66-0.696,3.94&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fff2d7&quot;/&gt;
    &lt;/svg&gt;
&lt;/div&gt;

&lt;p&gt;Esse número não é a coisa mais fácil de calcular mas também não é um bicho de sete cabeças.&lt;/p&gt;
&lt;h2 id=&quot;muitas-anima-es&quot;&gt;Muitas animações&lt;/h2&gt;
&lt;p&gt;O efeito final que eu criei nessa página gira duas engrenagens em sentidos opostos, altera as cores de 4 setas e ainda desloca suavemente duas nuvens de fundo de maneira alternada.&lt;/p&gt;
&lt;p&gt;Veja o efeito completo abaixo ou &lt;a href=&quot;/livro-web-mobile/&quot;&gt;no site do livro&lt;/a&gt;:&lt;/p&gt;
&lt;div class=&quot;ilustracao&quot;&gt;
    &lt;svg version=&quot;1.1&quot; viewbox=&quot;0 0 549 403&quot; width=&quot;100%&quot; height=&quot;100%&quot; preserveaspectratio=&quot;xMinYMin&quot;&gt;
        &lt;defs&gt;&lt;lineargradient id=&quot;linearGradient3906&quot; gradientunits=&quot;userSpaceOnUse&quot; gradienttransform=&quot;matrix(55.029297,0,0,-55.029297,360.83203,369.19238)&quot;&gt;&lt;stop stop-color=&quot;#373535&quot; offset=&quot;0&quot;/&gt;&lt;stop stop-color=&quot;#515152&quot; offset=&quot;0.76&quot;/&gt;&lt;stop stop-color=&quot;#373535&quot; offset=&quot;1&quot;/&gt;&lt;/lineargradient&gt;&lt;lineargradient id=&quot;linearGradient3911&quot; gradientunits=&quot;userSpaceOnUse&quot; gradienttransform=&quot;matrix(-2.7e-6,62.403278,62.403278,2.7e-6,388.34668,320.2373)&quot;&gt;&lt;stop stop-color=&quot;#373535&quot; offset=&quot;0&quot;/&gt;&lt;stop stop-color=&quot;#515152&quot; offset=&quot;0.76&quot;/&gt;&lt;stop stop-color=&quot;#373535&quot; offset=&quot;1&quot;/&gt;&lt;/lineargradient&gt;&lt;lineargradient id=&quot;linearGradient3919&quot; gradientunits=&quot;userSpaceOnUse&quot; gradienttransform=&quot;matrix(44.70459,0,0,-44.70459,132.37793,230.70312)&quot;&gt;&lt;stop stop-color=&quot;#373535&quot; offset=&quot;0&quot;/&gt;&lt;stop stop-color=&quot;#515152&quot; offset=&quot;0.76&quot;/&gt;&lt;stop stop-color=&quot;#373535&quot; offset=&quot;1&quot;/&gt;&lt;/lineargradient&gt;&lt;lineargradient id=&quot;linearGradient3924&quot; gradientunits=&quot;userSpaceOnUse&quot; gradienttransform=&quot;matrix(-2.2e-6,50.694923,50.694923,2.2e-6,154.72998,190.93262)&quot;&gt;&lt;stop stop-color=&quot;#373535&quot; offset=&quot;0&quot;/&gt;&lt;stop stop-color=&quot;#515152&quot; offset=&quot;0.76&quot;/&gt;&lt;stop stop-color=&quot;#373535&quot; offset=&quot;1&quot;/&gt;&lt;/lineargradient&gt;&lt;/defs&gt;&lt;g transform=&quot;matrix(1.25,0,0,-1.25,-48.799786,568.98625)&quot;&gt;&lt;path d=&quot;m387,328c1.86,5.33,2.98,11,3.23,16.9,1.35,32.4-23.8,59.7-56.2,61.1-13.8,0.575-26.6-3.65-37-11.2-8.74,27.1-33.6,47.1-63.7,48.4-34.7,1.45-64.6-22.6-71.4-55.6-2.11,0.497-4.29,0.806-6.53,0.904-19.1,0.798-35.2-14-36-33.1-0.232-5.52,0.85-10.8,2.96-15.5-1.19,0.103-2.39,0.186-3.6,0.238-41.3,1.73-76.1-30.3-77.8-71.6-1.72-41.3,30.3-76.1,71.6-77.8,13.2-0.549,25.7,2.35,36.8,7.91,8.15-11.1,21.3-18.3,36.1-18.3,12.4,0,23.6,5.05,31.7,13.2,7.66-10.6,19.9-17.7,34-18.3,19-0.8,35.8,10.6,42.7,27.2,6.31-8.12,16-13.5,27.1-14,12.4-0.516,23.5,5.22,30.4,14.4,7.75-3.67,16.3-5.88,25.5-6.26,36.4-1.52,67.1,26.7,68.6,63.1,1.46,34.8-24.3,64.4-58.4,68.3&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fff9eb&quot;/&gt;&lt;path d=&quot;m410,313c1.99,5.71,3.2,11.8,3.46,18.2,1.45,34.7-25.5,64.1-60.3,65.5-14.8,0.617-28.6-3.91-39.7-12-9.38,29-36,50.5-68.3,51.9-37.2,1.56-69.2-24.3-76.6-59.6-2.26,0.533-4.6,0.864-7,0.97-20.5,0.855-37.7-15-38.6-35.5-0.249-5.91,0.912-11.6,3.17-16.6-1.28,0.111-2.56,0.2-3.86,0.256-44.2,1.85-81.6-32.5-83.5-76.8-1.85-44.3,32.5-81.6,76.8-83.5,14.2-0.59,27.6,2.52,39.4,8.48,8.74-11.9,22.8-19.6,38.7-19.6,13.3,0,25.3,5.42,34,14.2,8.22-11.3,21.4-19,36.4-19.6,20.4-0.859,38.3,11.3,45.8,29.1,6.76-8.71,17.2-14.5,29-15,13.2-0.554,25.2,5.59,32.6,15.4,8.31-3.93,17.5-6.3,27.3-6.71,39-1.63,72,28.7,73.6,67.7,1.56,37.3-26.1,69.1-62.6,73.2&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fff2d7&quot;/&gt;

        &lt;!-- nuvem fundo  --&gt;
        &lt;path class=&quot;nuvem-fundo&quot; d=&quot;m177,282c0.417,1.2,0.671,2.47,0.726,3.8,0.302,7.27-5.35,13.4-12.6,13.7-3.09,0.128-5.98-0.82-8.3-2.51-1.97,6.08-7.54,10.6-14.3,10.9-7.79,0.325-14.5-5.09-16-12.5-0.475,0.113-0.963,0.181-1.47,0.204-4.28,0.178-7.9-3.15-8.08-7.43-0.053-1.24,0.191-2.42,0.664-3.48-0.267,0.023-0.536,0.042-0.808,0.052-9.26,0.39-17.1-6.81-17.5-16.1-0.387-9.27,6.81-17.1,16.1-17.5,2.97-0.124,5.78,0.528,8.25,1.78,1.83-2.49,4.78-4.11,8.11-4.11,2.79,0,5.31,1.13,7.13,2.96,1.72-2.38,4.47-3.97,7.63-4.1,4.27-0.18,8.03,2.37,9.58,6.1,1.42-1.82,3.6-3.04,6.08-3.14,2.77-0.115,5.28,1.17,6.83,3.23,1.74-0.824,3.67-1.32,5.72-1.4,8.17-0.342,15.1,6,15.4,14.2,0.328,7.81-5.46,14.5-13.1,15.3&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fff9eb&quot;/&gt;

        &lt;!-- nuvem branca --&gt;
        &lt;path class=&quot;nuvem-branca&quot; d=&quot;m194,275c0.506,1.45,0.812,2.99,0.879,4.61,0.367,8.81-6.48,16.3-15.3,16.6-3.75,0.156-7.25-0.993-10.1-3.04-2.38,7.36-9.14,12.8-17.3,13.2-9.44,0.394-17.6-6.16-19.4-15.1-0.574,0.137-1.17,0.22-1.78,0.248-5.19,0.216-9.57-3.82-9.79-9-0.065-1.5,0.23-2.93,0.805-4.22-0.325,0.028-0.651,0.051-0.981,0.064-11.2,0.471-20.7-8.25-21.2-19.5-0.467-11.2,8.25-20.7,19.5-21.2,3.59-0.149,7,0.64,10,2.15,2.22-3.02,5.79-4.98,9.82-4.98,3.38,0,6.43,1.37,8.64,3.59,2.08-2.88,5.41-4.81,9.24-4.97,5.18-0.219,9.73,2.87,11.6,7.39,1.72-2.21,4.36-3.68,7.37-3.8,3.36-0.141,6.39,1.42,8.27,3.91,2.11-0.998,4.45-1.6,6.93-1.7,9.9-0.414,18.3,7.27,18.7,17.2,0.396,9.47-6.62,17.5-15.9,18.6&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#FFF&quot;/&gt;

        &lt;path d=&quot;m214,269c0.904-3.2,1.93-6.4,3.06-9.54l3.11,1.12c-1.1,3.07-2.11,6.2-2.99,9.32l-3.18-0.898z&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m213,289-3.27-0.446c0.449-3.29,1.02-6.61,1.7-9.87l3.23,0.674c-0.661,3.18-1.22,6.42-1.66,9.64&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m221,250c1.33-3.03,2.79-6.07,4.33-9.02l2.93,1.53c-1.51,2.89-2.93,5.86-4.24,8.82l-3.02-1.33z&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m212,308c5,0.481,8.93,4.69,8.95,9.82,0.021,5.47-4.4,9.92-9.86,9.94-5.47,0.022-9.92-4.4-9.94-9.86-0.018-4.68,3.21-8.6,7.56-9.66-0.004-3.21,0.098-6.44,0.306-9.62l3.29,0.217c-0.199,3.03-0.296,6.11-0.298,9.16&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m236,325c0-3.69-2.99-6.68-6.68-6.68h-144c-3.69,0-6.68,2.99-6.68,6.68v82.8c0,3.69,2.99,6.68,6.68,6.68h144c3.69,0,6.68-2.99,6.68-6.68v-82.8z&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m81.1,413c-1.68-1.21-2.78-3.19-2.78-5.42v-82.8c0-3.69,2.99-6.68,6.68-6.68h144c3.69,0,6.68,2.99,6.68,6.68v2.5c-80.5,3.33-145,41.1-154,85.7&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#424142&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#fcb870&quot; d=&quot;m227,327-140,0,0,79.2,140,0,0-79.2z&quot;/&gt;&lt;path opacity=&quot;0.5&quot; d=&quot;m102,406-14.7,0,0-79.2,140,0,0,14.4c-62,2.1-113,30.8-125,64.8&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#f89c33&quot;/&gt;&lt;path d=&quot;m207,329c1.03,0.324,1.78,1.29,1.78,2.43,0,1.4-1.14,2.54-2.54,2.54s-2.54-1.14-2.54-2.54c0-1.14,0.749-2.1,1.78-2.43v-13.2h1.53v13.2z&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m213,332c0-1.14,0.749-2.1,1.78-2.43v-13.2h1.53v13.2c1.03,0.325,1.78,1.29,1.78,2.43,0,1.4-1.14,2.54-2.54,2.54s-2.54-1.14-2.54-2.54&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m346,261-2.26,3.02c2.99,2.23,5.93,4.58,8.74,7l2.46-2.86c-2.88-2.48-5.89-4.88-8.95-7.16&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m363,276-2.66,2.68c2.64,2.61,5.22,5.35,7.67,8.14l2.84-2.49c-2.51-2.85-5.15-5.66-7.85-8.33&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m327,249-1.82,3.3c3.26,1.8,6.49,3.73,9.61,5.74l2.04-3.17c-3.18-2.05-6.49-4.03-9.83-5.87&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m306,239-1.38,3.52c3.47,1.36,6.93,2.84,10.3,4.41l1.6-3.42c-3.42-1.61-6.96-3.12-10.5-4.51&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m395,323c5.23-3.44,6.68-10.5,3.24-15.7-2.94-4.47-8.49-6.18-13.3-4.44-2.02-3.06-4.16-6.07-6.37-8.98l-3,2.29c2.1,2.76,4.14,5.64,6.08,8.55-4.47,3.62-5.55,10.1-2.33,15,3.44,5.23,10.5,6.68,15.7,3.24&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path fill=&quot;url(#linearGradient3906)&quot; d=&quot;m372,425c-6.02,0-10.9-4.88-10.9-10.9v-89c0-6.02,4.88-10.9,10.9-10.9h33.2c6.02,0,10.9,4.88,10.9,10.9v89c0,6.02-4.88,10.9-10.9,10.9h-33.2z&quot;/&gt;&lt;path fill=&quot;url(#linearGradient3911)&quot; d=&quot;m361,414,0-89c0-6.02,4.88-10.9,10.9-10.9h33.2c6.02,0,10.9,4.88,10.9,10.9v7.38c-27.4,9.22-48.4,45.6-50.8,90.2-2.55-2-4.19-5.1-4.19-8.58&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#fcb870&quot; d=&quot;m365,325,46.3,0,0,88.5-46.3,0,0-88.5z&quot;/&gt;&lt;path opacity=&quot;0.5&quot; d=&quot;m371,413-5.36,0,0-88.5,46.3,0,0,13.4c-21.8,7.83-38.6,37.9-40.9,75.1&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#f89c33&quot;/&gt;&lt;path d=&quot;m385,329c1.19,0.375,2.06,1.49,2.06,2.8,0,1.62-1.32,2.94-2.94,2.94s-2.94-1.31-2.94-2.94c0-1.32,0.863-2.43,2.06-2.8v-15.3h1.76v15.3z&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m392,332c0-1.31,0.864-2.43,2.06-2.8v-15.3h1.76v15.3c1.19,0.375,2.06,1.49,2.06,2.8,0,1.62-1.31,2.94-2.94,2.94-1.62,0-2.94-1.32-2.94-2.94&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#febc2e&quot; d=&quot;m141,418-7.33,0,0,16.4,7.33,0,0-16.4z&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#faa932&quot; d=&quot;m141,418-7.33,0,0,4.94,7.33,0,0-4.94z&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#f79434&quot; d=&quot;m141,418-7.33,0,0,3.03,7.33,0,0-3.03z&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#f47e35&quot; d=&quot;m151,418-7.33,0,0,22.6,7.33,0,0-22.6z&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#f26a36&quot; d=&quot;m151,418-7.33,0,0,16.6,7.33,0,0-16.6z&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#f16037&quot; d=&quot;m151,418-7.33,0,0,6.52,7.33,0,0-6.52z&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#fbae31&quot; d=&quot;m161,418-7.33,0,0,26.4,7.33,0,0-26.4z&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#f9a233&quot; d=&quot;m161,418-7.33,0,0,20.9,7.33,0,0-20.9z&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#f79634&quot; d=&quot;m161,418-7.33,0,0,14.7,7.33,0,0-14.7z&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#faa932&quot; d=&quot;m170,418-7.33,0,0,30,7.33,0,0-30z&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#f47c36&quot; d=&quot;m170,418-7.33,0,0,26.6,7.33,0,0-26.6z&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#dc7233&quot; d=&quot;m170,418-7.33,0,0,17.1,7.33,0,0-17.1z&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#faa932&quot; d=&quot;m180,418-7.33,0,0,37.3,7.33,0,0-37.3z&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#ffde22&quot; d=&quot;m180,418-7.33,0,0,30.5,7.33,0,0-30.5z&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#ffca2b&quot; d=&quot;m180,418-7.33,0,0,27.3,7.33,0,0-27.3z&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#fbaf31&quot; d=&quot;m180,418-7.33,0,0,21.4,7.33,0,0-21.4z&quot;/&gt;&lt;path d=&quot;m298,391,0-16.6,15.9,0,0-4.23-15.9,0,0-16.7-4.51,0,0,16.7-15.9,0,0,4.23,15.9,0,0,16.6,4.51,0z&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#f89c33&quot;/&gt;&lt;path d=&quot;m271,423,0-9.94,9.56,0,0-2.54-9.56,0,0-10-2.71,0,0,10-9.56,0,0,2.54,9.56,0,0,9.94,2.71,0z&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fcb870&quot;/&gt;&lt;path d=&quot;m297,450,0-7.65,7.35,0,0-1.95-7.35,0,0-7.71-2.08,0,0,7.71-7.35,0,0,1.95,7.35,0,0,7.65,2.08,0z&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fedfc4&quot;/&gt;&lt;path d=&quot;m214,217-1.15-2.44c-2.46,1.16-4.91,2.42-7.27,3.74l1.32,2.35c2.31-1.29,4.7-2.52,7.11-3.66&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m200,225-1.48-2.25c-2.27,1.49-4.52,3.07-6.68,4.72l1.63,2.14c2.11-1.6,4.3-3.15,6.52-4.6&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m229,212-0.808-2.57c-2.6,0.813-5.19,1.73-7.71,2.71l0.98,2.51c2.46-0.961,5-1.85,7.54-2.65&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m170,251c3.17,3.14,8.29,3.12,11.4-0.044,2.95-2.98,3.12-7.67,0.504-10.8,1.76-1.76,3.6-3.48,5.46-5.12l-1.78-2.03c-1.96,1.72-3.88,3.52-5.73,5.37-3.12-1.9-7.25-1.5-9.94,1.21-3.14,3.17-3.12,8.29,0.044,11.4&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path fill=&quot;url(#linearGradient3919)&quot; d=&quot;m141,276c-4.89,0-8.85-3.96-8.85-8.85v-72.3c0-4.89,3.96-8.85,8.85-8.85h27c4.89,0,8.85,3.96,8.85,8.85v72.3c0,4.89-3.96,8.85-8.85,8.85h-27z&quot;/&gt;&lt;path fill=&quot;url(#linearGradient3924)&quot; d=&quot;m132,267,0-72.3c0-4.89,3.96-8.85,8.85-8.85h27c4.89,0,8.85,3.96,8.85,8.85v6c-22.3,7.49-39.3,37-41.3,73.3-2.07-1.62-3.4-4.14-3.4-6.98&quot;/&gt;&lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#fcb870&quot; d=&quot;m136,195,37.6,0,0,71.9-37.6,0,0-71.9z&quot;/&gt;&lt;path opacity=&quot;0.5&quot; d=&quot;m140,267-4.36,0,0-71.9,37.6,0,0,10.9c-17.7,6.36-31.3,30.8-33.2,61&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#f89c33&quot;/&gt;&lt;path d=&quot;m167,243c-0.242,0.771-0.961,1.33-1.81,1.33-1.05,0-1.9-0.849-1.9-1.9s0.85-1.9,1.9-1.9c0.85,0,1.57,0.559,1.81,1.33h9.88v1.14h-9.88z&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m166,248c0.85,0,1.57,0.56,1.81,1.33h9.88v1.14h-9.88c-0.242,0.77-0.961,1.33-1.81,1.33-1.05,0-1.9-0.851-1.9-1.9s0.849-1.9,1.9-1.9&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m160,313c0,0.513-0.076,1.01-0.217,1.48h-1.96c0.226-0.445,0.351-0.946,0.351-1.48,0-1.81-1.46-3.27-3.27-3.27s-3.27,1.46-3.27,3.27c0,0.531,0.128,1.03,0.353,1.48h-1.96c-0.14-0.466-0.217-0.964-0.217-1.48,0-2.65,2.02-4.83,4.61-5.08v-22.8c-1.32-0.232-2.33-1.38-2.33-2.78,0-1.56,1.26-2.82,2.82-2.82s2.82,1.26,2.82,2.82c0,1.39-1.01,2.54-2.33,2.78v22.8c2.59,0.249,4.61,2.43,4.61,5.08&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m425,154c-3.22,0-5.84-2.61-5.84-5.84v-14.6h3.53v5.52c0,1.27,1.03,2.31,2.31,2.31,1.27,0,2.3-1.03,2.3-2.31v-5.52h3.53v14.6c0,3.22-2.61,5.84-5.84,5.84&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#f89c33&quot;/&gt;&lt;path d=&quot;m425,155c-1.42,0-2.57,1.15-2.57,2.57s1.15,2.57,2.57,2.57,2.57-1.15,2.57-2.57-1.15-2.57-2.57-2.57m0,8.01c-3.01,0-5.44-2.44-5.44-5.44s2.44-5.44,5.44-5.44c3.01,0,5.44,2.44,5.44,5.44s-2.44,5.44-5.44,5.44&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#f89c33&quot;/&gt;&lt;path d=&quot;m409,151c-2.83,0-5.12-2.29-5.12-5.12v-12.8h3.1v4.84c0,1.12,0.905,2.02,2.02,2.02s2.02-0.905,2.02-2.02v-4.84h3.1v12.8c0,2.82-2.29,5.12-5.12,5.12&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fcb870&quot;/&gt;&lt;path d=&quot;m409,153c-1.24,0-2.25,1.01-2.25,2.25s1.01,2.25,2.25,2.25,2.25-1.01,2.25-2.25-1.01-2.25-2.25-2.25m0,7.02c-2.63,0-4.77-2.14-4.77-4.77s2.14-4.77,4.77-4.77c2.64,0,4.77,2.14,4.77,4.77,0,2.64-2.14,4.77-4.77,4.77&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fcb870&quot;/&gt;&lt;path d=&quot;m396,217,0-1.4-13.7,0,0,1.4,0,6.71,0,2.71,13.7,0,0-2.71,0-6.71zm0-13.3-13.7,0,0,10.1,13.7,0,0-10.1zm0-11.8-13.7,0,0,10.1,13.7,0,0-10.1zm0-11.8-13.7,0,0,10.1,13.7,0,0-10.1zm0-11.8-13.7,0,0,10.1,13.7,0,0-10.1zm0-11.8-13.7,0,0,10.1,13.7,0,0-10.1zm0-11.8-13.7,0,0,10.1,13.7,0,0-10.1zm-13.7,93.8,13.7,0,0-10.1-13.7,0,0,10.1zm0,11.8,13.7,0,0-10.1-13.7,0,0,10.1zm0,11.8,13.7,0,0-10.1-13.7,0,0,10.1zm0,11.8,13.7,0,0-10.1-13.7,0,0,10.1zm0,11.8,13.7,0,0-10.1-13.7,0,0,10.1zm0,11.8,13.7,0,0-10.1-13.7,0,0,10.1zm13.7,9.83,0-8.11-13.7,0,0,8.11-1.72,0,0-83.6,0-6.71,0-83.6,1.72,0,0,9.42,13.7,0,0-9.42,1.72,0,0,83.6,0,6.71,0,83.6-1.72,0z&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m295,229-15.1,0.358c-0.339,1.55-0.955,3.06-1.86,4.47-0.667,1.04-1.45,1.96-2.33,2.75l7.21,13.3,3.7,6.84c4.07-2.7,7.67-6.27,10.5-10.6,3.45-5.38,5.31-11.3,5.7-17.3l-7.77,0.184zm-8.03-32.6-3.79,6.79-7.38,13.2c1.92,1.78,3.24,4.04,3.9,6.48l15.1-0.357,7.77-0.185c-1.16-10.2-6.58-19.8-15.6-25.9m-34.9-3.37,3.7,6.84,7.21,13.3c2.31-0.603,4.76-0.609,7.12,0.041l7.38-13.2,3.79-6.79c-9.46-4.23-20.1-4.11-29.2-0.187m-5.74,3.1c-4.08,2.7-7.67,6.28-10.5,10.7-3.45,5.37-5.31,11.3-5.7,17.3l7.77-0.183,15.1-0.357c0.341-1.54,0.956-3.06,1.86-4.47,0.67-1.04,1.45-1.96,2.33-2.75l-7.21-13.3-3.7-6.84zm-0.385,60.4,3.79-6.79,7.38-13.2c-1.92-1.78-3.25-4.04-3.9-6.47l-15.1,0.357-7.77,0.182c1.16,10.2,6.58,19.8,15.6,25.9m30.3-23.8c3.48-5.42,1.91-12.6-3.5-16.1-5.42-3.48-12.6-1.91-16.1,3.51-3.48,5.42-1.91,12.6,3.5,16.1,5.42,3.48,12.6,1.91,16.1-3.5m4.57,27.1-3.7-6.84-7.21-13.3c-2.31,0.599-4.76,0.606-7.12-0.041l-7.38,13.2-3.79,6.79c9.46,4.23,20.1,4.11,29.2,0.187m22.5-9.76c-13.1,20.3-40.2,26.2-60.5,13.2-20.3-13.1-26.2-40.2-13.2-60.5,13.1-20.3,40.2-26.2,60.5-13.2,20.3,13.1,26.2,40.2,13.2,60.5&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#f89c33&quot;/&gt;

        &lt;!-- Engrenagem grande --&gt;
        &lt;path class=&quot;engrenagem-grande&quot; d=&quot;m294,227c-0.011,0.528-0.034,1.06-0.074,1.59-0.27,3.53-1.19,6.85-2.65,9.85,1.23,0.844,2.44,1.72,3.63,2.63-1.05,2.03-2.32,3.95-3.77,5.71-1.31-0.731-2.6-1.49-3.86-2.29-2.6,2.98-5.82,5.38-9.44,7.02,0.401,1.44,0.766,2.89,1.1,4.35-2.11,0.886-4.31,1.54-6.56,1.96-0.535-1.4-1.03-2.81-1.49-4.23-2.06,0.322-4.19,0.416-6.36,0.252-1.86-0.142-3.66-0.465-5.39-0.953-0.618,1.36-1.27,2.7-1.96,4.04-2.18-0.672-4.29-1.59-6.28-2.72,0.491-1.42,1.02-2.82,1.58-4.2-3.41-2.06-6.32-4.82-8.54-8.09-1.35,0.642-2.71,1.25-4.09,1.83-1.24-1.92-2.27-3.97-3.07-6.11,1.29-0.771,2.59-1.51,3.91-2.21-1.18-3.43-1.7-7.15-1.4-11,0.018-0.233,0.038-0.464,0.062-0.693-1.45-0.374-2.88-0.783-4.32-1.23,0.283-2.26,0.814-4.5,1.58-6.65,1.48,0.237,2.95,0.511,4.41,0.821,1.44-3.75,3.67-7.09,6.48-9.82-0.867-1.21-1.7-2.45-2.51-3.71,1.67-1.55,3.51-2.92,5.48-4.08,0.982,1.13,1.93,2.29,2.85,3.46,3.4-1.89,7.23-3.07,11.3-3.36,0.118-1.49,0.273-2.98,0.465-4.46,2.28-0.106,4.56,0.031,6.82,0.406,0.024,1.5,0.012,2.99-0.04,4.49,3.99,0.771,7.65,2.4,10.8,4.67,1.05-1.06,2.12-2.1,3.22-3.12,1.82,1.39,3.48,2.96,4.96,4.7-0.947,1.16-1.92,2.3-2.92,3.41,2.47,3.05,4.29,6.63,5.27,10.5,1.48-0.143,2.98-0.25,4.47-0.321,0.505,2.23,0.767,4.51,0.78,6.8-1.47,0.281-2.95,0.525-4.43,0.73&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fdb72f&quot;/&gt;
        &lt;path class=&quot;engrenagem-grande&quot; d=&quot;m267,219c-4.06,0-7.36,3.26-7.36,7.28s3.3,7.28,7.36,7.28c4.07,0,7.36-3.26,7.36-7.28s-3.3-7.28-7.36-7.28m16.4,12.1c-0.853-0.086-1.7-0.197-2.55-0.332-0.521,1.56-1.3,3-2.3,4.26,0.587,0.611,1.16,1.24,1.72,1.89-0.854,1.03-1.83,1.97-2.91,2.78-0.639-0.565-1.26-1.15-1.86-1.75-1.32,0.935-2.8,1.66-4.39,2.12,0.11,0.836,0.199,1.68,0.264,2.52-1.31,0.342-2.66,0.527-4,0.556-0.18-0.829-0.334-1.66-0.466-2.5-1.69-0.01-3.31-0.303-4.81-0.833-0.409,0.741-0.837,1.47-1.29,2.19-1.26-0.483-2.46-1.11-3.57-1.88,0.349-0.775,0.719-1.54,1.11-2.29-1.32-0.959-2.47-2.13-3.4-3.47-0.771,0.363-1.55,0.708-2.34,1.03-0.733-1.12-1.34-2.33-1.78-3.59,0.742-0.425,1.5-0.828,2.26-1.21-0.444-1.38-0.686-2.85-0.686-4.38,0-0.134,0.002-0.269,0.006-0.404-0.84-0.153-1.68-0.329-2.51-0.526,0.076-1.33,0.305-2.66,0.697-3.94,0.853,0.088,1.7,0.199,2.55,0.331,0.521-1.55,1.3-2.99,2.3-4.26-0.587-0.615-1.16-1.24-1.72-1.89,0.855-1.04,1.83-1.97,2.91-2.78,0.638,0.566,1.26,1.15,1.86,1.75,1.32-0.936,2.8-1.66,4.39-2.12-0.111-0.835-0.199-1.68-0.264-2.52,1.31-0.343,2.66-0.528,4.01-0.557,0.179,0.83,0.334,1.66,0.466,2.5,1.69,0.009,3.31,0.3,4.81,0.831,0.408-0.741,0.836-1.47,1.29-2.2,1.26,0.485,2.46,1.12,3.57,1.88-0.349,0.776-0.717,1.54-1.11,2.29,1.32,0.961,2.47,2.14,3.4,3.47,0.77-0.364,1.55-0.707,2.34-1.03,0.734,1.12,1.34,2.33,1.78,3.59-0.741,0.425-1.49,0.83-2.26,1.21,0.444,1.38,0.684,2.85,0.684,4.38,0,0.136-0.002,0.271-0.006,0.406,0.84,0.152,1.68,0.329,2.51,0.526-0.075,1.33-0.305,2.66-0.696,3.94&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fff2d7&quot;/&gt;

        &lt;!-- setinhas --&gt;
        &lt;path class=&quot;seta&quot; d=&quot;m411,266c1.48-0.037,2.71,1.14,2.75,2.62,0,0,0.086,3.73,0.078,3.82l0.274,11,4.71-0.116-7.06,13-7.69-12.6,4.71-0.116-0.271-11c-0.012-0.09-0.109-3.82-0.109-3.82-0.037-1.48,1.14-2.71,2.62-2.75&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#f89c33&quot;/&gt;
        &lt;path class=&quot;seta&quot; d=&quot;m411,239c0.974-0.023,1.78,0.747,1.81,1.72,0,0,0.056,2.46,0.051,2.52l0.179,7.22,3.1-0.077-4.64,8.52-5.06-8.28,3.1-0.077-0.178-7.21c-0.007-0.059-0.073-2.51-0.073-2.51-0.024-0.974,0.748-1.78,1.72-1.81&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fcb870&quot;/&gt;
        &lt;path class=&quot;seta&quot; d=&quot;m365,214c1.48-0.036,2.71,1.14,2.75,2.62,0,0,0.087,3.74,0.079,3.82l0.273,11,4.71-0.117-7.06,13-7.69-12.6,4.71-0.115-0.271-11c-0.012-0.09-0.109-3.82-0.109-3.82-0.037-1.48,1.14-2.71,2.62-2.75&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#f89c33&quot;/&gt;
        &lt;path class=&quot;seta&quot; d=&quot;m365,189c0.973-0.023,1.78,0.747,1.81,1.72,0,0,0.056,2.46,0.051,2.52l0.18,7.22,3.1-0.077-4.64,8.52-5.06-8.28,3.09-0.076-0.177-7.21c-0.008-0.059-0.072-2.51-0.072-2.51-0.025-0.974,0.747-1.78,1.72-1.81&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fcb870&quot;/&gt;

        &lt;path fill-rule=&quot;nonzero&quot; fill=&quot;#FFF&quot; d=&quot;m453,201,22.6,0,0-16.7-22.6,0,0,16.7zm0,78,22.6,0,0-16.7-22.6,0,0,16.7zm0-19.5,22.6,0,0-16.7-22.6,0,0,16.7zm22.6-55.6-22.6,0,0,16.7,22.6,0,0-16.7zm-22.6,36.2,22.6,0,0-16.7-22.6,0,0,16.7zm22.6,41.8-22.6,0,0,16.7,22.6,0,0-16.7zm0,32.8,0-13.3-22.6,0,0,13.3-2.83,0,0-149,2.83,0,0,15.5,22.6,0,0-15.5,2.82,0,0,149-2.82,0z&quot;/&gt;

        &lt;!-- engrenagem pequena --&gt;
        &lt;path class=&quot;engrenagem-pequena&quot; d=&quot;m301,307c-1.08-2.84-4.26-4.26-7.09-3.18-0.93,0.356-1.71,0.936-2.3,1.66-1.21,1.47-1.61,3.53-0.887,5.44,1.08,2.84,4.26,4.26,7.09,3.18,0.912-0.346,1.68-0.91,2.26-1.61,1.23-1.48,1.66-3.56,0.922-5.48m6.88,2.47c0.64,0.116,1.28,0.247,1.92,0.392-0.041,0.986-0.195,1.96-0.45,2.92-0.653-0.054-1.3-0.126-1.95-0.215-0.257,0.88-0.627,1.74-1.1,2.55-0.336,0.576-0.724,1.13-1.17,1.66-0.065,0.077-0.129,0.153-0.195,0.228,0.418,0.496,0.826,1,1.22,1.52-0.672,0.72-1.43,1.37-2.24,1.93-0.467-0.457-0.921-0.926-1.36-1.4-1.46,0.95-3.09,1.55-4.78,1.8,0.002,0.644-0.012,1.29-0.043,1.94-0.986,0.119-1.99,0.135-2.98,0.042-0.065-0.646-0.112-1.29-0.143-1.94-1.68-0.199-3.34-0.752-4.85-1.68-0.416,0.49-0.848,0.974-1.29,1.44-0.838-0.54-1.61-1.16-2.32-1.87,0.369-0.531,0.751-1.05,1.14-1.56-1.22-1.28-2.11-2.78-2.66-4.37-0.641,0.109-1.28,0.2-1.93,0.278-0.295-0.945-0.493-1.92-0.58-2.9,0.629-0.168,1.26-0.32,1.9-0.456-0.11-1.69,0.147-3.41,0.778-5.02-0.565-0.326-1.12-0.665-1.67-1.02,0.383-0.909,0.866-1.78,1.44-2.58,0.596,0.274,1.18,0.562,1.76,0.864,0.139-0.181,0.281-0.361,0.428-0.538,0.472-0.559,0.982-1.06,1.53-1.51,0.599-0.49,1.23-0.915,1.9-1.27-0.224-0.609-0.433-1.22-0.63-1.84,0.886-0.446,1.82-0.797,2.78-1.05,0.283,0.587,0.548,1.18,0.798,1.78,1.68-0.386,3.43-0.413,5.13-0.068,0.221-0.604,0.457-1.21,0.707-1.8,0.973,0.223,1.92,0.549,2.82,0.974-0.163,0.625-0.342,1.25-0.538,1.86,0.815,0.409,1.59,0.914,2.32,1.52,0.625,0.519,1.19,1.09,1.68,1.7,0.563-0.32,1.13-0.627,1.71-0.921,0.609,0.788,1.13,1.64,1.55,2.54-0.53,0.371-1.07,0.731-1.62,1.07,0.693,1.58,1.03,3.29,0.998,5&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#fdb72f&quot;/&gt;
        &lt;path class=&quot;engrenagem-pequena&quot; d=&quot;m293,290c-10.5,1.72-17.5,11.6-15.8,22.1,1.72,10.5,11.6,17.5,22.1,15.8,10.5-1.72,17.5-11.6,15.8-22.1-1.72-10.5-11.6-17.5-22.1-15.8m25.1,11.5c1.01,2.84,1.44,5.75,1.35,8.6,1.25,0.234,2.5,0.497,3.74,0.792-0.112,1.95-0.437,3.88-0.962,5.75-1.27-0.117-2.54-0.263-3.8-0.444-0.993,3.22-2.67,6.21-4.93,8.74,0.808,0.982,1.6,1.98,2.36,3.01-1.34,1.42-2.82,2.7-4.43,3.8-0.903-0.908-1.78-1.84-2.63-2.78-1.49,0.965-3.12,1.77-4.86,2.4-1.5,0.533-3.01,0.905-4.53,1.12-0.011,1.27-0.054,2.55-0.127,3.82-1.93,0.232-3.9,0.247-5.84,0.059-0.106-1.28-0.181-2.55-0.224-3.82-3.37-0.419-6.6-1.57-9.46-3.34-0.825,0.969-1.68,1.92-2.55,2.85-1.63-1.06-3.14-2.31-4.51-3.7,0.735-1.04,1.5-2.07,2.28-3.07-2.11-2.26-3.8-4.98-4.9-8.08-0.069-0.185-0.133-0.375-0.194-0.562-1.26,0.211-2.52,0.391-3.79,0.541-0.56-1.86-0.921-3.79-1.07-5.73,1.24-0.328,2.48-0.625,3.72-0.888-0.177-3.42,0.408-6.79,1.65-9.89-1.1-0.648-2.18-1.32-3.24-2.02,0.771-1.79,1.73-3.49,2.86-5.08,1.16,0.544,2.3,1.12,3.42,1.71,2-2.65,4.57-4.89,7.62-6.52-0.422-1.2-0.816-2.41-1.18-3.64,1.74-0.874,3.56-1.56,5.45-2.05,0.535,1.16,1.04,2.33,1.52,3.51,3.38-0.78,6.79-0.778,10-0.096,0.448-1.19,0.925-2.38,1.43-3.55,1.9,0.449,3.74,1.1,5.49,1.94-0.335,1.23-0.699,2.46-1.09,3.67,2.98,1.52,5.64,3.68,7.75,6.37,1.11-0.626,2.23-1.22,3.38-1.8,1.16,1.56,2.16,3.25,2.96,5.02-1.05,0.73-2.11,1.43-3.2,2.1,0.177,0.414,0.34,0.836,0.492,1.26&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#f89c33&quot;/&gt;

        &lt;path d=&quot;m125,230c-1.18,0-2.18-0.747-2.55-1.79h-3.42c-0.976,0-1.94,0.017-2.88,0.052-1.52,0.056-2.97,0.161-4.32,0.311-9.72,1.08-15.5,4.61-18.7,11.4-3.82,8.06-4.1,25-4.1,43.1v0.422h-1.81v-0.422c0-18.4,0.298-35.5,4.28-43.9,3.55-7.5,9.8-11.3,20.3-12.5,1.37-0.148,2.84-0.252,4.38-0.31,0.942-0.033,1.92-0.051,2.91-0.051h3.42c0.368-1.06,1.38-1.82,2.56-1.82,1.5,0,2.71,1.21,2.71,2.71s-1.21,2.71-2.71,2.71&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;path d=&quot;m90.9,302,0-5.74-5.23,0,0,5.74c0,1-0.814,1.82-1.82,1.82-1,0-1.82-0.812-1.82-1.82v-5.74h-4.29v-3.85c0-5.82,4.72-10.5,10.5-10.5,5.82,0,10.5,4.72,10.5,10.5v3.85h-4.29v5.74c0,1-0.813,1.82-1.82,1.82-1,0-1.82-0.812-1.82-1.82&quot; fill-rule=&quot;nonzero&quot; fill=&quot;#373535&quot;/&gt;&lt;/g&gt;
    &lt;/svg&gt;&lt;br&gt;&lt;/div&gt;

&lt;p&gt;O legal de usar CSS animations para detalhes assim é que elas degradam sem problemas em navegadores sem suporte. O IE9, por exemplo, suporta SVG mas não animações. Lá, o desenho vai aparecer estático sem problemas.&lt;/p&gt;
&lt;p&gt;Outro detalhe importante é que a especificação SVG tem uma parte própria de animações que poderíamos ter usado também. Nesse caso, preferi CSS Animations que já são mais conhecidas dos desenvolvedores Web e bem simples de usar.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Palestra: Truques de Web mobile</title>
         <link href="http://sergiolopes.org/palestra-mobile-web/"/>
         <updated>2013-04-30T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/palestra-mobile-web/</id>

         <content type="html">
            
            
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;Essa palestra é completamente interativa, o que não é suportado nos feeds RSS. Recomendo que visite o site e leia por lá. (é otimizado também para mobile)&lt;/i&gt;
                  &lt;/p&gt;

                  &lt;p&gt;Muitas dicas de performance, otimizações, UX, HTML5 e CSS3 pra deixar seu site mobile tinindo. Slides comentados, cheios de referências e exemplos práticos. Veja demos no smartphone/tablet.&lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Lançamento do meu livro “A Web Mobile — Programe para um mundo de muitos dispositivos.”</title>
         <link href="http://sergiolopes.org/lancamento-livro-web-mobile/"/>
         <updated>2013-04-22T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/lancamento-livro-web-mobile/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Acabo de lançar pela editora &lt;a href=&quot;https://casadocodigo.refersion.com/l/fdf.1465&quot;&gt;Casa do Código&lt;/a&gt; meu livro &lt;strong&gt;“A Web Mobile”&lt;/strong&gt;. Falo sobre design responsivo, media queries, telas retina, touch screens, mobile-first, RESS e muito mais.&lt;/p&gt;
&lt;p&gt;Se você me acompanha aqui no blog, certamente vai gostar do livro. Alguns tópicos inclusive saíram aqui do blog e aproveitei pra incrementá-los bastante. Mas, claro, a maioria dos tópicos são inéditos e recheados de conteúdo de mobile e Web — veja a &lt;a href=&quot;/livro-web-mobile/#sumario&quot;&gt;lista completa de tópicos&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;O livro custa &lt;strong&gt;R$ 29 em ebook&lt;/strong&gt;, &lt;strong&gt;R$ 59 na versão impressa&lt;/strong&gt; e &lt;strong&gt;R$ 69 ebook + impresso&lt;/strong&gt;. Você pode comprar direto &lt;a href=&quot;https://casadocodigo.refersion.com/l/fdf.1465&quot;&gt;no site da editora Casa do Código&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;/img/posts/livro-web-mobile/capa-web-mobile-1200px.png&quot; style=&quot;max-width:600px&quot; alt=&quot;Capa do livro A Web Mobile&quot;&gt;&lt;/p&gt;
&lt;p&gt;Indico o livro pra todo mundo que &lt;strong&gt;trabalha com Web mobile&lt;/strong&gt; ou quer entrar nessa área. Não é um livro introdutório de Web — você precisa saber HTML, CSS e JS. Também não é um livro com projetinho de começo ao fim — indico o &lt;a href=&quot;/review-livro-web-design-responsivo-tarcio-zemel/&quot;&gt;livro do amigo Tárcio&lt;/a&gt; pra isso. Meu livro tem &lt;strong&gt;26 tópicos&lt;/strong&gt; diversos sobre Web e mobile, discutindo até aspectos avançados como &lt;em&gt;RESS&lt;/em&gt; ou &lt;em&gt;conditional loading&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Se estiver com dúvidas, temos uma &lt;a href=&quot;https://groups.google.com/d/forum/livro-web-mobile&quot;&gt;lista de discussão do livro&lt;/a&gt; onde você pode me encontrar.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Aniversário de 1 ano do blog</title>
         <link href="http://sergiolopes.org/aniversario-1-ano/"/>
         <updated>2013-03-26T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/aniversario-1-ano/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Parece que foi ontem. Mas hoje, &lt;em&gt;26 de março de 2013&lt;/em&gt;, faz &lt;strong&gt;1 ano que lancei esse blog&lt;/strong&gt;. Já tive outros blogs pessoais antes mas nunca tinha me dedicado tanto quanto agora. Esse novo blog, focado em desenvolvimento front-end, foi um grande feito pessoal pra mim.&lt;/p&gt;
&lt;p&gt;Esse é um post comemorativo. Se você acompanha aqui com frequência, vai gostar de ler. Tem números e estatísticas. E também um pouco da minha estratégia pra fazê-lo crescer. Podem ser informações interessantes pra mais gente.&lt;/p&gt;
&lt;h2 id=&quot;1-ano-de-vida&quot;&gt;1 ano de vida&lt;/h2&gt;
&lt;p&gt;Lancei o blog em Março de 2012 já com 4 posts simples pra começar--odeio aqueles blogs que começam com um &lt;em&gt;hello world&lt;/em&gt; inútil apenas. Nesse 1 ano, publiquei &lt;strong&gt;48 posts&lt;/strong&gt;, o que dá quase 1 por semana. Uma média, na minha opinião bem boa pra um blog pessoal.&lt;/p&gt;
&lt;p&gt;Desses posts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Maioria sobre &lt;strong&gt;Web Mobile&lt;/strong&gt;. 13 posts.&lt;/li&gt;
&lt;li&gt;8 outros posts foram sobre &lt;strong&gt;Web&lt;/strong&gt; em geral.&lt;/li&gt;
&lt;li&gt;Mais 2 posts sobre &lt;strong&gt;otimizações&lt;/strong&gt; web.&lt;/li&gt;
&lt;li&gt;Outros 6 posts foram de &lt;strong&gt;reviews de livros&lt;/strong&gt; de front-end.&lt;/li&gt;
&lt;li&gt;12 posts foram cobrindo &lt;strong&gt;palestras&lt;/strong&gt; de amigos em eventos que assisti. Um formato que resolvi testar por aqui.&lt;/li&gt;
&lt;li&gt;E 7 posts eu escrevi no &lt;strong&gt;blog da Caelum&lt;/strong&gt; e só linkei aqui. Acabei linkando também pra mais 6 posts meus antigos no blog da Caelum mas que acho importantes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Eu uso os comentários do Facebook aqui já que uso o DocPad--aliás, sabia que &lt;a href=&quot;https://github.com/sergiolopes/blog&quot;&gt;o código&lt;/a&gt; do blog todo tá aberto? Foram 160 comentários esse ano e mais alguns milhares de Likes e compartilhamentos. Aliás, optei pelos comentários via Facebook pois eles são postados automaticamente na timeline do usuário, me ajudando na divulgação.&lt;/p&gt;
&lt;p&gt;Nesse 1 ano, já fiz o primeiro &lt;strong&gt;redesign&lt;/strong&gt; do blog também, na virada do ano. Sou programador e não muito bom pra isso, mas estou bem satisfeito com o design que montei agora. O design antigo, se estiver curioso, você pode ver &lt;a href=&quot;http://sergiolopes.org/img/design/2012/home.png&quot;&gt;aqui&lt;/a&gt;, &lt;a href=&quot;http://sergiolopes.org/img/design/2012/artigo.png&quot;&gt;aqui&lt;/a&gt; e &lt;a href=&quot;http://sergiolopes.org/img/design/2012/artigo-especial.png&quot;&gt;aqui&lt;/a&gt;. Sou adepto de &lt;em&gt;Flat Design&lt;/em&gt; e coisas mais minimalistas, mas vira e mexe experimento com outras ideias também.&lt;/p&gt;
&lt;p&gt;Na implementação do blog, uso &lt;a href=&quot;https://docpad.org&quot;&gt;DocPad&lt;/a&gt; pra gerar meu HTML. Uso &lt;a href=&quot;http://learnboost.github.com/stylus/&quot;&gt;Stylus&lt;/a&gt; pro CSS. O JavaScript é normal, sem framework. E otimizo tudo com o &lt;a href=&quot;https://developers.google.com/speed/pagespeed/mod&quot;&gt;mod_pagespeed&lt;/a&gt; direto no servidor. Tudo aqui, claro, é absolutamente responsivo e compatível com mobile. Como falei, você pode acompanhar o código de tudo isso &lt;a href=&quot;https://github.com/sergiolopes/blog&quot;&gt;no Github&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;estat-sticas&quot;&gt;Estatísticas&lt;/h2&gt;
&lt;p&gt;Uma parte divertida de ter um blog pessoal sem muito compromisso é poder abrir os números sem problemas. Pode ser interessante pra você comparar com suas próprias experiências.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/aniversario/2013-visitas.png&quot; alt=&quot;O gráfico mostra um crescimento mês a mês meio constante. No último mês de fevereiro, batemos o recorde com quase 7 mil visitantes.&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Visitas de Março de 2012 a Março de 2013.&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;As visitas têm crescido bastante conforme mais conteúdo é postado. Isso é bem legal. Mas o blog ainda é pequeno em tamanho. O melhor pra mim não e o número de visitas mas a qualidade delas. E devo dizer que meu público--você!--é excelente!&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/aniversario/2013-behavior.png&quot; alt=&quot;50 mil visitas. 30 mil visitantes únicos. 95 mil pageviews. 8min36 de tempo médio. 1.91 páginas por visita. bounce rate de 57% e 61% de new visits.&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Comportamento dos visitantes.&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;Eu acho impressionante o tempo médio da visita ser de &lt;strong&gt;8 minutos e meio&lt;/strong&gt;. O recorde, pra mim quase inacreditável, é na minha &lt;a href=&quot;/palestra-mobile-web/&quot;&gt;palestra sobre mobile web&lt;/a&gt; com tempo médio de &lt;strong&gt;meia hora&lt;/strong&gt;. Isso quer dizer que as pessoas realmente vêm aqui e lêem o que eu escrevo. Fantástico isso.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/aniversario/2013-browsers.png&quot; alt=&quot;65% de Chrome, 19% de Firefox e 7% de Safari. IE não dá nem 3%.&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Navegadores usados.&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;Não ter nem 3% de usuários de IE é fantástico. Aliás, nem testo nesses browsers velhos. Posso usar códigos mais modernos já que vocês são uma audiência de navegadores modernos.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/aniversario/2013-mobile.png&quot; alt=&quot;8% mobile, incluindo tablets.&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;8% dos visitantes em mobile.&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;O número de usuários mobile porém não é tão alto quanto eu gostaria. Mas já um número bem mais alto que a média por aí (média brasileira é menor que 3% e outros sites que cuido não chegam nem a 5%). O site é todo responsivo e tem atraído uma certa audiência. Acho que essa proporção deve crescer mais ainda em 2013.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/aniversario/2013-traffic-source.png&quot; alt=&quot;28% de twitter, 24% de facebook, 10% da caelum, 10% de portais como tableless, infoq e imasters.&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Porcentagem de cada site que linka aqui (referral sources).&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;Maioria das visitas vem de buscas no Google e de navegação direta. Mas boa parte é de links em outros sites. Desses, mais da metade graças a redes sociais--Twitter e Facebook. Agradeço a todos que compartilham meus posts e ajudam o blog a crescer. E também vários blogs e portais linkam pra artigos aqui--obrigado também!&lt;/p&gt;
&lt;h2 id=&quot;estrat-gias&quot;&gt;Estratégias&lt;/h2&gt;
&lt;p&gt;Não tenho grandes ambições para o blog crescer horrores, então não me cobro muito. Algumas poucas estratégias que uso:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Postar sempre no &lt;a href=&quot;https://www.facebook.com/sergio.caelum&quot;&gt;meu Facebook&lt;/a&gt; e no &lt;a href=&quot;https://twitter.com/sergio_caelum&quot;&gt;meu Twitter&lt;/a&gt;, plataformas fantásticas pra divulgação.&lt;/li&gt;
&lt;li&gt;Botões pra compartilhar no Facebook e no Twitter em todos os posts, além dos comentários via Facebook.&lt;/li&gt;
&lt;li&gt;Tirei botões de Like nos posts. O número de likes não é muito importante e não traz visitas. Compartilhar é bem mais forte e importante.&lt;/li&gt;
&lt;li&gt;Posto bastante no blog da Caelum que tem mais visibilidade e acaba trazendo visitas aqui.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Do conteúdo em si, busco artigos mais focados em um tema específico. Escrevo eles com linguagem simples e clara, quase uma conversa. Odeio aqueles posts com escrita pomposa!&lt;/p&gt;
&lt;p&gt;Tenho tentado também associar um estilo visual aos conteúdos que público. Uso o laranja (#F90) em tudo e tenho feito essa minha foto feia (e laranja!) quase como um logo. Uso isso consistentemente aqui no blog, nas palestras que dou, nos meus perfis no Twitter e no Facebook.&lt;/p&gt;
&lt;p&gt;Mas, no fundo, minha estratégia maior é escrever artigos--acredito eu--de qualidade e deixar rolar. Acredito muito que, se é interessante, as pessoas vão vir ler.&lt;/p&gt;
&lt;h2 id=&quot;futuro&quot;&gt;Futuro&lt;/h2&gt;
&lt;p&gt;O futuro é continuar esse blog e colocar cada vez mais artigos aqui. Espero que você goste de acompanhar. Aliás, pra não perder um post, assine o &lt;a href=&quot;/feed.xml&quot;&gt;RSS&lt;/a&gt; ou me siga no &lt;a href=&quot;https://www.facebook.com/sergio.caelum&quot;&gt;Facebook&lt;/a&gt; e no &lt;a href=&quot;https://twitter.com/sergio_caelum&quot;&gt;Twitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;E, se você aguentou ler tudo isso até aqui, uma novidade em primeira mão: &lt;strong&gt;acabo de lançar um &lt;a href=&quot;/livro-web-mobile/&quot;&gt;livro sobre Web Mobile&lt;/a&gt;&lt;/strong&gt;. É fruto direto do trabalho nesse blog e do resultado positivo desse ano todo. Ele tem artigos que publiquei aqui mas estendidos com mais conteúdo; e vários artigos novos e inéditos, claro. &lt;a href=&quot;/livro-web-mobile/&quot;&gt;Confere lá&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Atualização Abril/2013:&lt;/strong&gt; Migrei o blog recentemente do Jekyll pro DocPad, então atualizei as informações aqui no post.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Palestra: Dominando HTML5 offline com AppCache</title>
         <link href="http://sergiolopes.org/palestra-appcache-html5-offline/"/>
         <updated>2013-03-09T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/palestra-appcache-html5-offline/</id>

         <content type="html">
            
            
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;Essa palestra é completamente interativa, o que não é suportado nos feeds RSS. Recomendo que visite o site e leia por lá. (é otimizado também para mobile)&lt;/i&gt;
                  &lt;/p&gt;

                  &lt;p&gt;Como criar sites e webapps offline com Application Cache. Palestra completa com dicas avançadas, exemplos e explicações.&lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Internet Explorer, testes cross browsers e a política de compatibilidade</title>
         <link href="http://blog.caelum.com.br/internet-explorer-testes-cross-browsers-e-a-politica-de-compatibilidade/"/>
         <updated>2013-02-18T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/internet-explorer-testes-cross-browsers-e-a-politica-de-compatibilidade/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/internet-explorer-testes-cross-browsers-e-a-politica-de-compatibilidade/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Use sempre media queries baseadas no conteúdo da sua página</title>
         <link href="http://sergiolopes.org/media-queries-conteudo/"/>
         <updated>2013-02-15T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/media-queries-conteudo/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Ao escrever &lt;a href=&quot;http://blog.caelum.com.br/flexibilidade-em-paginas-para-dispositivos-moveis-com-media-queries/&quot;&gt;medias queries&lt;/a&gt;, você precisa escolher algum &lt;em&gt;valor&lt;/em&gt; pra colocar lá. É o que chamamos dos &lt;strong&gt;breakpoints&lt;/strong&gt;, os pontos onde seu layout vai ser ajustado por causa de uma resolução diferente. E &lt;strong&gt;escrever bons breakpoints&lt;/strong&gt; é essencial para um &lt;em&gt;design responsivo&lt;/em&gt; de qualidade.&lt;/p&gt;
&lt;p&gt;E o que mais aparece de pergunta de quem tá começando com design responsivo é: &lt;em&gt;quais os valores padrões de se colocar nas media queries&lt;/em&gt;? E logo surge uma lista parecida com essa:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs css&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;only&lt;/span&gt; screen &lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;and&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;min-width:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;480px&lt;/span&gt;) { ... }
&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;only&lt;/span&gt; screen &lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;and&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;min-width:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;600px&lt;/span&gt;) { ... }
&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;only&lt;/span&gt; screen &lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;and&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;min-width:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;768px&lt;/span&gt;) { ... }
&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;only&lt;/span&gt; screen &lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;and&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;min-width:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;992px&lt;/span&gt;) { ... }
&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;only&lt;/span&gt; screen &lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;and&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;min-width:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;1382px&lt;/span&gt;) { ... }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Péssima prática!&lt;/strong&gt; Essa lista eu copiei do famoso projeto &lt;a href=&quot;https://github.com/malarkey/320andup/blob/master/css/320andup.css&quot;&gt;320andup&lt;/a&gt; mas você acha outras parecidas, com esse valores supostamente &amp;quot;comuns&amp;quot;. &lt;em&gt;480px&lt;/em&gt; é por causa de um iPhone em landscape, &lt;em&gt;600px&lt;/em&gt; é comum em tablets de 7&amp;#39;&amp;#39;, &lt;em&gt;768px&lt;/em&gt; pega um iPad em portrait, &lt;em&gt;992px&lt;/em&gt; é um Desktop de 1024 menos as barras de rolagem e &lt;em&gt;1382px&lt;/em&gt; pra Desktops grandes.&lt;/p&gt;
&lt;p&gt;O pessoal chama essa prática de &lt;strong&gt;device-driven breakpoints&lt;/strong&gt;, pois são valores gerados a partir de tamanhos de dispositivos.&lt;/p&gt;
&lt;h2 id=&quot;n-o-use-device-driven-breakpoints&quot;&gt;Não use device-driven breakpoints&lt;/h2&gt;
&lt;p&gt;Primeiro problema: essa lista pensa em meia dúzia de tipos de dispositivos. Mas e os &lt;em&gt;360px&lt;/em&gt; de um Galaxy SIII? Ou os &lt;em&gt;533px&lt;/em&gt; do Galaxy SII em landscape? Ou o iPhone 5 com &lt;em&gt;568px&lt;/em&gt; em landscape? Qualquer lista de media queries padrão é &lt;strong&gt;muito pobre&lt;/strong&gt; quando pensamos na situação atual -- e futura -- dos &lt;strong&gt;diferentes dispositivos&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Segundo problema: quem disse que &lt;em&gt;seu design&lt;/em&gt; realmente precisa de todos esses breakpoints? Ou pior, que ele não vai ficar ruim bem entre as paradas de &lt;em&gt;480px&lt;/em&gt; e &lt;em&gt;600px&lt;/em&gt;? Usar esses valores de media queries &lt;strong&gt;não garante que seu design funcionará em todos os dispositivos&lt;/strong&gt;, mas apenas nos dispositivos &amp;quot;padrões&amp;quot; -- seja lá o que for isso.&lt;/p&gt;
&lt;h2 id=&quot;use-content-driven-breakpoints&quot;&gt;Use content-driven breakpoints&lt;/h2&gt;
&lt;p&gt;Dá uma olhada em algumas das medias queries que uso aqui no blog: &lt;em&gt;(PS. aliás, o código do blog tá disponível no &lt;a href=&quot;https://github.com/sergiolopes/blog/tree/master/_includes/css&quot;&gt;github&lt;/a&gt; e já uso tudo com &lt;code&gt;em&lt;/code&gt; por causa de &lt;a href=&quot;/media-queries-zoom/&quot;&gt;acessibilidade&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs css&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;min-width:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;37em&lt;/span&gt;) { ... } &lt;span class=&quot;hljs-comment&quot; style=&quot;color: #8e908c;&quot;&gt;/* 592px */&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;min-width:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;41em&lt;/span&gt;) { ... } &lt;span class=&quot;hljs-comment&quot; style=&quot;color: #8e908c;&quot;&gt;/* 656px */&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;min-width:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;47em&lt;/span&gt;) { ... } &lt;span class=&quot;hljs-comment&quot; style=&quot;color: #8e908c;&quot;&gt;/* 752px */&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;min-width:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;68em&lt;/span&gt;) { ... } &lt;span class=&quot;hljs-comment&quot; style=&quot;color: #8e908c;&quot;&gt;/* 1088px */&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;min-width:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;82em&lt;/span&gt;) { ... } &lt;span class=&quot;hljs-comment&quot; style=&quot;color: #8e908c;&quot;&gt;/* 1312px */&lt;/span&gt;
&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;min-width:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;100em&lt;/span&gt;) { ... } &lt;span class=&quot;hljs-comment&quot; style=&quot;color: #8e908c;&quot;&gt;/* 1600px */&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Da última vez que chequei, não consegui encontrar nenhum dispositivo com &lt;em&gt;656px&lt;/em&gt; ou &lt;em&gt;752px&lt;/em&gt;. De onde saíram então esses valores? &lt;strong&gt;Do design do meu blog&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A ideia é simples: fiz meu design responsivo com unidades flexíveis -- porcentagens e &lt;code&gt;em&lt;/code&gt; -- e pra pequenos dispositivos primeiro -- &lt;em&gt;mobile first&lt;/em&gt;. Aí fui testando as diversas resoluções pra ver onde o design não ficava tão bom e coloquei um breakpoint lá.&lt;/p&gt;
&lt;p&gt;É o que o pessoal chama de &lt;strong&gt;content-driven breakpoints&lt;/strong&gt;. Ou seja, achar suas media queries a partir do seu conteúdo e do seu design. Fica bem mais fácil garantir que sua página &lt;strong&gt;funciona em todos os dispositivos&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;como-achar-meus-breakpoints-&quot;&gt;Como achar meus breakpoints?&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Abra sua &lt;strong&gt;página original&lt;/strong&gt; no navegador;&lt;/li&gt;
&lt;li&gt;Vá &lt;strong&gt;redimensionando a janela devagar&lt;/strong&gt; até o design parecer ruim -- se fez &lt;em&gt;mobile-first&lt;/em&gt;, abra pequeno e vá aumentando a janela; senão, abra grande e vá diminuindo a janela;&lt;/li&gt;
&lt;li&gt;Quando achar um ponto em que o design quebra, copie &lt;strong&gt;o tamanho da janela&lt;/strong&gt; e crie uma media query com esse valor lá no seu CSS;&lt;/li&gt;
&lt;li&gt;Recarregue a página, veja se as mudanças melhoraram o design, e continue redimensionando pra achar o &lt;strong&gt;próximo breakpoint&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Algumas ferramentas que podem te ajudar nisso:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;O &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Tools/Responsive_Design_View&quot;&gt;responsive mode&lt;/a&gt; do Firefox;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://davatron5000.github.com/fitWeird/&quot;&gt;FitWeird&lt;/a&gt;, um excelente bookmarklet que te dá o tamanho da tela, inclusive em &lt;code&gt;em&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;Meu &lt;a href=&quot;/responsive-video-play/&quot;&gt;responsive play&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Review do livro &quot;The Tangled Web: A Guide to Securing Modern Web Applications&quot; do Michal Zalewski</title>
         <link href="http://sergiolopes.org/review-the-tangled-web-guide-to-securing-modern-web-applications/"/>
         <updated>2013-02-07T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/review-the-tangled-web-guide-to-securing-modern-web-applications/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Um dos livros mais &lt;strong&gt;divertidos&lt;/strong&gt; que já li. Foi escrito por &lt;a href=&quot;http://lcamtuf.coredump.cx/&quot;&gt;Michal Zalewski&lt;/a&gt;, especialista em segurança na Web e que trabalha no Google. Trata dos desafios de &lt;strong&gt;segurança&lt;/strong&gt; que os navegadores a desenvolvedores Web enfretam hoje em dia.&lt;/p&gt;
&lt;p&gt;O assunto é até um pouco pesado, mas o livro é muito bem escrito, didático e leve de digerir. &lt;a href=&quot;http://www.amazon.com/dp/B006FZ3UNI/&quot;&gt;&amp;quot;The Tangled Web: A Guide to Securing Modern Web Applications&amp;quot;&lt;/a&gt; não é, porém, um livro pra todo mundo. É um livro mais &lt;strong&gt;avançado&lt;/strong&gt;, voltado pra uma audiência que já sujou a mão com as coisas por trás do HTTP, ou que sabe a diferença que encodings podem fazer na aplicação, e que já toparam com siglas como &lt;a href=&quot;http://blog.caelum.com.br/seguranca-em-aplicacoes-web-xss/&quot;&gt;XSS&lt;/a&gt; e &lt;a href=&quot;http://pt.wikipedia.org/wiki/Cross-site_request_forgery&quot;&gt;CSRF&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;É um &lt;strong&gt;excelente livro&lt;/strong&gt;. Mostra com riqueza de detalhes o que acontece por trás dos navegadores -- veja &lt;a href=&quot;http://lcamtuf.coredump.cx/tangled/&quot;&gt;no site dele&lt;/a&gt; um overview dos capítulos pra ter uma ideia da quantidade de informação que ele tem. O livro expõe uma quantidade inimaginável de brechas de segurança na Web. E a conclusão dele -- e minha, após lê-lo -- é que &lt;strong&gt;a Web funciona meio que por sorte&lt;/strong&gt;. É &lt;strong&gt;impressionante&lt;/strong&gt; o que é possível fazer de ruim!&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/reviews/the-tangled-web.jpg&quot; alt=&quot;Capa do livro&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
&lt;/figure&gt;

&lt;p&gt;Eu gosto de estudar a segurança na Web meio que por hobby. Já estava familiarizado com ataques como &lt;a href=&quot;http://blog.caelum.com.br/seguranca-em-aplicacoes-web-xss/&quot;&gt;XSS&lt;/a&gt;, &lt;a href=&quot;http://pt.wikipedia.org/wiki/Cross-site_request_forgery&quot;&gt;CSRF&lt;/a&gt;, &lt;a href=&quot;http://blog.caelum.com.br/seguranca-em-aplicacoes-web-injecao-de-novos-parametros/&quot;&gt;injeção de parâmetros&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Clickjacking&quot;&gt;clickjacking&lt;/a&gt;; já conhecia algumas das novidades como &lt;a href=&quot;http://en.wikipedia.org/wiki/Cross-origin_resource_sharing&quot;&gt;CORS&lt;/a&gt; e &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Security/CSP/Introducing_Content_Security_Policy&quot;&gt;CSP&lt;/a&gt;. Mesmo assim, &lt;strong&gt;aprendi muito&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;O autor tem uma visão muito clara do que é eficaz e o que não é com relação a segurança. Mostra os princípios por trás do ataques e as limitações nos navegadores, sendo bem realista. Uma citação que mostra o tipo de comentário que você vai encontrar no livro:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Antimalware features do not make individual attacks any more difficult; they are simply meant to stop the large-scale distribution of unsophisticated malware, based on the assumption that most users are not interesting enough to be specifically targeted or attacked with something clever.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;E, uma frase ótima que está lá no final, na conclusão, quando ele reflete sobre segurança de um modo geral, e como a segurança na Web está relacionada:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Why is it that we get upset at developers who use cryptography incorrectly, but we don’t mind that the locks on our doors can be opened with a safety pin? Why do we scorn web developers who can’t get input validation right, but we don’t test our breakfast for laxatives or LSD?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Gostei muito desse livro, mas não é pra qualquer um. Ele também é um pouco mais caro (paguei quase $30 no &lt;a href=&quot;http://www.amazon.com/dp/B006FZ3UNI/&quot;&gt;ebook&lt;/a&gt;) e, como foi lançado em no fim de 2011, pode não ter as últimas novidades. &lt;/p&gt;
&lt;p&gt;Mas, se você se interessa pela área, &lt;strong&gt;definitivamente recomendo a leitura&lt;/strong&gt;.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Web Design Responsivo: as melhores referências em português pra você aprender do básico ao avançado</title>
         <link href="http://sergiolopes.org/diretorio-design-responsivo/"/>
         <updated>2013-02-04T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/diretorio-design-responsivo/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;h1&gt;
    Web Design Responsivo: as melhores referências 
    &lt;span class=&quot;verde&quot;&gt;em&lt;/span&gt; &lt;span class=&quot;azul&quot;&gt;português&lt;/span&gt; 
    pra você aprender do básico ao avançado
&lt;/h1&gt;

&lt;p&gt;Então você quer aprender &lt;strong&gt;design responsivo&lt;/strong&gt;? Ou já sabe o conceito e quer se aprofundar na técnica? Compilei uma lista de referências sobre o tema &lt;strong&gt;exclusivamente em português&lt;/strong&gt;. &lt;strong&gt;Artigos, palestras, livros, cursos e exemplos de sites responsivos brasileiros.&lt;/strong&gt; Bons estudos!&lt;/p&gt;
&lt;h2 id=&quot;1-artigos&quot;&gt;1. Artigos&lt;/h2&gt;
&lt;h3 id=&quot;introdut-rios&quot;&gt;Introdutórios&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/responsive-web-design/&quot;&gt;Design Responsivo por uma Web única&lt;/a&gt;, artigo meu aqui no Blog.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.midiatismo.com.br/o-mobile/design-responsivo-entenda-o-que-e-a-tecnica-e-como-ela-funciona&quot;&gt;Design Responsivo: Entenda o que é a técnica e como ela funciona&lt;/a&gt;, por Dennis Altermann.&lt;/li&gt;
&lt;li&gt;Série no Blog da Popup: &lt;a href=&quot;http://blog.popupdesign.com.br/design-responsivo-i-o-que-e-e-por-que-usar/&quot;&gt;parte 1&lt;/a&gt;, &lt;a href=&quot;http://blog.popupdesign.com.br/design-responsivo-grids-e-texto/&quot;&gt;parte 2&lt;/a&gt; e &lt;a href=&quot;http://blog.popupdesign.com.br/design-responsivo-iii-media-queries-e-compatibilidade/&quot;&gt;parte 3&lt;/a&gt;, por Dani Guerrato.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tableless.com.br/introducao-ao-responsive-web-design/&quot;&gt;Introdução ao Responsive Web Design&lt;/a&gt;, do &lt;a href=&quot;https://twitter.com/diegoeis/&quot;&gt;Diego Eis&lt;/a&gt;, Tableless. &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.caelum.com.br/flexibilidade-em-paginas-para-dispositivos-moveis-com-media-queries/&quot;&gt;Flexibilidade em páginas para dispositivos móveis com media queries&lt;/a&gt;, artigo meu no Blog da Caelum.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/email-newsletter-mobile-responsivo/&quot;&gt;10 dicas para fazer um email responsivo&lt;/a&gt;, artigo meu aqui no Blog.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.caelum.com.br/pixels-pixels-ou-pixels-dicas-de-web-mobile-com-viewport/&quot;&gt;Pixels, pixels ou pixels? Dicas de Web Mobile com viewport&lt;/a&gt;, artigo meu no Blog da Caelum.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tableless.com.br/responsive-web-design-adaptacao-vs-otimizacao/&quot;&gt;Responsive Web Design – Adaptação vs Otimização&lt;/a&gt;, do &lt;a href=&quot;https://twitter.com/diegoeis/&quot;&gt;Diego Eis&lt;/a&gt;, Tableless.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://imasters.com.br/linguagens/css/e-voce-jura-que-ainda-nao-sabe-o-que-e-responsive-webdesign-vamos-mudar-isso-ja/&quot;&gt;E você jura que ainda não sabe o que é Responsive Webdesign? Vamos mudar isso já!&lt;/a&gt;, do Bernard de Luna no iMasters.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;mais-avan-ados&quot;&gt;Mais avançados&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/media-queries-retina/&quot;&gt;Media queries para resoluções diferentes e retina&lt;/a&gt;, artigo meu aqui no Blog.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/media-queries-zoom/&quot;&gt;Media queries também ajudam na acessibilidade&lt;/a&gt;, artigo meu aqui no Blog.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tableless.com.br/responsive-web-design-voce-esta-fazendo-isso-errado/&quot;&gt;Responsive Web Design – focando a coisa certa&lt;/a&gt;, do &lt;a href=&quot;https://twitter.com/diegoeis/&quot;&gt;Diego Eis&lt;/a&gt;, Tableless.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/resolucoes-dpi-pixel-ratio-retina/&quot;&gt;Tudo que você precisa saber sobre resoluções, telas retina, devicePixelRatio, DPI, CSS pixels e etc&lt;/a&gt;, artigo meu aqui no Blog.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.popupdesign.com.br/design-responsivo-e-retina-display-desenvolvimento-web-em-tempos-de-alta-resolucao/&quot;&gt;Design Responsivo &amp;amp; Retina Display: desenvolvimento web em alta resolução&lt;/a&gt;, por Dani Guerrato.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://devcastbrasil.com/videos/devcast_design_responsivo_media_queries/&quot;&gt;DevCast sobre Design Responsivo&lt;/a&gt; com Leandro Lima.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.frontendbrasil.com.br/artigos/design-responsivo/media-queries-verticais/&quot;&gt;Media queries verticais&lt;/a&gt;, por &lt;a href=&quot;https://twitter.com/felquis&quot;&gt;Ofelquis Gimenes&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tableless.com.br/as-muitas-faces-do-mobile-first/&quot;&gt;As muitas faces do Mobile First&lt;/a&gt;, artigo de Brad Frost, traduzido pelo Will Sales no Tableless.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;2-palestras&quot;&gt;2. Palestras&lt;/h2&gt;
&lt;h3 id=&quot;introdut-rias&quot;&gt;Introdutórias&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.infoq.com/br/presentations/responsive-web-design&quot;&gt;Responsive Web Design: conteúdo em todos os dispositivos&lt;/a&gt;, do &lt;a href=&quot;https://twitter.com/shiota&quot;&gt;Eduardo Shiota&lt;/a&gt;, gravada no QCon SP 2012.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://zenorocha.com/layouts-responsivos/&quot;&gt;Layouts Responsivos&lt;/a&gt;, do &lt;a href=&quot;https://twitter.com/zenorocha&quot;&gt;Zeno Rocha&lt;/a&gt; e do &lt;a href=&quot;https://twitter.com/bernarddeluna&quot;&gt;Bernard de Luna&lt;/a&gt;, na Campus Party 2013.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;mais-avan-adas&quot;&gt;Mais avançadas&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/palestra-mobile-web/&quot;&gt;Uma tonela de truques de Web Mobile&lt;/a&gt;, palestra minha no QCon SP 2012 - &lt;a href=&quot;http://www.infoq.com/br/presentations/tonelada-truques-web&quot;&gt;vídeo oficial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Slides: &lt;a href=&quot;http://www.slideshare.net/horacio.soares/caminhos-domobilecampusparty2013reduzida&quot;&gt;Os Caminhos do Design Mobile&lt;/a&gt; e &lt;a href=&quot;https://www.youtube.com/watch?v=rBy08DL5b74&quot;&gt;vídeo&lt;/a&gt;, por &lt;a href=&quot;https://twitter.com/horaciosoares&quot;&gt;Horácio Soares&lt;/a&gt;, na Campus Party 2013.&lt;/li&gt;
&lt;li&gt;Slides: &lt;a href=&quot;http://www.slideshare.net/horacio.soares/mobile-first-w3c-webbr-2012&quot;&gt;Mobile First&lt;/a&gt;, por &lt;a href=&quot;https://twitter.com/horaciosoares&quot;&gt;Horácio Soares&lt;/a&gt;, na web.br 2012.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;3-livros-e-cursos&quot;&gt;3. Livros e cursos&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Meu novo livro &lt;a href=&quot;/livro-web-mobile/&quot;&gt;A Web Mobile: programe para um mundo de muitos dispositivos.&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.casadocodigo.com.br/products/livro-web-design-responsivo&quot;&gt;Web Design Responsivo&lt;/a&gt;, do &lt;a href=&quot;http://twitter.com/tarciozemel&quot;&gt;Tárcio Zemel&lt;/a&gt;, pela &lt;a href=&quot;http://www.casadocodigo.com.br/&quot;&gt;editora Casa do Código&lt;/a&gt; - meu &lt;a href=&quot;/review-livro-web-design-responsivo-tarcio-zemel/&quot;&gt;review&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.caelum.com.br/curso-html-css-javascript/&quot;&gt;Curso Web Design da Caelum - HTML, CSS e JavaScript&lt;/a&gt;. Design responsivo é um dos tópicos do curso.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;4-f-runs-listas-grupos&quot;&gt;4. Fóruns, listas, grupos&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Grupo &lt;a href=&quot;https://www.facebook.com/groups/design.responsivo/&quot;&gt;Design Responsivo&lt;/a&gt; no Facebook&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://groups.google.com/forum/#!forum/html5-css3-brasil&quot;&gt;Lista HTML5 CSS 3 Brasil&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Grupo &lt;a href=&quot;https://www.facebook.com/groups/246149505467359/&quot;&gt;Desenvolvimento Mobile&lt;/a&gt; no Facebook&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.guj.com.br/&quot;&gt;Fórum GUJ&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;5-sites-responsivos-brasileiros&quot;&gt;5. Sites Responsivos Brasileiros&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Esse blog :)&lt;/li&gt;
&lt;li&gt;Vários subsites da Globo.com, como &lt;a href=&quot;http://globotv.globo.com/&quot;&gt;Globo TV&lt;/a&gt; e &lt;a href=&quot;http://etc.globo.com/&quot;&gt;ETC&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tableless.com.br&quot;&gt;Tableless&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.arquiteturajava.com.br/&quot;&gt;Livro Arquitetura Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://plataformatec.com.br/&quot;&gt;Plataformatec&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://umobi.com.br/&quot;&gt;Umobi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;6-evento&quot;&gt;6. Evento&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.mobileconf.com.br/&quot;&gt;Mobile Conf 2013&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Certamente estão faltando vários bons links nessa lista. Tem mais algum bom para compartilhar sobre design responsivo? &lt;strong&gt;Comente&lt;/strong&gt; e atualizo aqui!&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Media queries para resoluções diferentes e retina</title>
         <link href="http://sergiolopes.org/media-queries-retina/"/>
         <updated>2013-01-28T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/media-queries-retina/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Muitas vezes, você vai querer carregar imagens e estilos diferentes em telas de resolução diferentes ou retina. Pra isso, você precisa de &lt;strong&gt;media queries de resolução&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Nesse artigo, discuto a forma correta de se atacar telas de alta resolução com CSS, as diferenças dos navegadores, que valores usar e algumas boas práticas. O resumo do artigo é que você deve usar uma &lt;strong&gt;media query parecida com essa&lt;/strong&gt;:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs css&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;-webkit-min-device-pixel-ratio:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;1.5&lt;/span&gt;),
       (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;min-resolution:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;144dpi&lt;/span&gt;) {

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Sim, eu sei que você provavelmente já viu ou usou uma &lt;a href=&quot;https://gist.github.com/4161897&quot;&gt;versão bem maior dessa media query&lt;/a&gt;, cheia de prefixos de navegadores e valores estranhos. Pois bem, não use mais, o &lt;strong&gt;correto para os browsers de hoje e do futuro&lt;/strong&gt; é essa aí de cima.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/media-queries/media-queries-resolucao.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;porque-essa-media-query-pra-telas-retina-&quot;&gt;Porque essa media query pra telas retina?&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Antes de analisar a media query em si, é bom entender direito o que significam &lt;a href=&quot;/resolucoes-dpi-pixel-ratio-retina/&quot;&gt;DPIs, devicePixelRatio, retina e outros termos&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Muito tempo atrás, quando surgiram as primeiras telas com pixel ratio diferente de 1, o pessoal do WebKit criou uma media querie pra isso, a famosa &lt;code&gt;-webkit-device-pixel-ratio&lt;/code&gt; (e suas versões com &lt;code&gt;min&lt;/code&gt; e &lt;code&gt;max&lt;/code&gt;). Alguns browsers chegaram a experimentar com isso, surgindo até a famosa aberração da Mozilla com &lt;code&gt;min--moz-device-pixel-ratio&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Mas aí veio a &lt;a href=&quot;http://www.w3.org/TR/css3-mediaqueries/#resolution&quot;&gt;especificação oficial&lt;/a&gt; e revisaram essa media query, criando uma equivalente com um nome mais simples: &lt;code&gt;resolution&lt;/code&gt;. Você pode escrever &lt;code&gt;min-resolution&lt;/code&gt; e &lt;code&gt;max-resolution&lt;/code&gt; e ela aceita várias medidas, sendo &lt;strong&gt;dpi&lt;/strong&gt; e &lt;strong&gt;dppx&lt;/strong&gt; as mais importantes.&lt;/p&gt;
&lt;p&gt;Cuidado, porém, com os valores das medidas. Você já leu meu artigo sobre &lt;a href=&quot;/resolucoes-dpi-pixel-ratio-retina/&quot;&gt;resoluções, DPI e cia&lt;/a&gt; então lembra que os &lt;strong&gt;browsers fixam a resolução lógica em 96dpi&lt;/strong&gt;, independente da resolução física. Então, quando escrevi &lt;strong&gt;144dpi&lt;/strong&gt; na media query lá em cima, o que estava dizendo é que queria 1.5x o DPI padrão de 96, pegando então telas com &lt;em&gt;pixel ratio 1.5&lt;/em&gt;, como vários aparelhos Android.&lt;/p&gt;
&lt;p&gt;A medida &lt;strong&gt;dppx&lt;/strong&gt; é nova no CSS e significa o mesmo que o &lt;em&gt;device pixel ratio&lt;/em&gt;. Então, poderíamos escrever &lt;strong&gt;1.5dppx&lt;/strong&gt; e seria equivalente a &lt;strong&gt;144dpi&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;qual-valor-usar-realmente-preciso-de-imagens-diferentes-pra-cada-resolu-o-&quot;&gt;Qual valor usar? Realmente preciso de imagens diferentes pra cada resolução?&lt;/h2&gt;
&lt;p&gt;No meu artigo sobre &lt;a href=&quot;/resolucoes-dpi-pixel-ratio-retina/&quot;&gt;device pixel ratio&lt;/a&gt;, citei os valores que encontramos no mercado hoje:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;0.75dppx&lt;/strong&gt; (= 72dpi) - Android low-end, tipo Galaxy 5.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1dppx&lt;/strong&gt; (= 96dpi) - Notebooks, desktops e vários celulares e tablets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1.33dppx&lt;/strong&gt; (= 127dpi) - Nexus 7.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1.5dppx&lt;/strong&gt; (= 144dpi) - Vários Androids, como Atrix ou S2.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2dppx&lt;/strong&gt; (= 192dpi) - Telas retina da Apple, celulares e tablets mais modernos como S3.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3dppx&lt;/strong&gt; (= 288dpi) - Celulares ultra modernos, como Droid DNA e Galaxy S4.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Você pode escrever uma media query &lt;code&gt;resolution&lt;/code&gt; pra cada um desses valores, servindo imagens adaptadas pra cada resolução. Pode até ser uma ideia se você for gerar tudo isso automaticamente (imagens e media queries), mas, na mão, fica inviável.&lt;/p&gt;
&lt;p&gt;O que vejo muito comum de se fazer é &lt;strong&gt;servir uma imagem em alta resolução para qualquer tela acima de 1dppx&lt;/strong&gt;. Você pode fazer algo como o pessoal do &lt;a href=&quot;http://core.trac.wordpress.org/changeset/22629&quot;&gt;WordPress&lt;/a&gt; que escolheu &lt;strong&gt;120dpi&lt;/strong&gt; (= 1.25dppx) como valor inicial pra servir imagens retina.&lt;/p&gt;
&lt;p&gt;Mas, veja se realmente vale a pena servir imagens diferentes só por causa do DPI. Isso vai ficar bastante complicado nos próximos anos. &lt;strong&gt;Pra suportar bem todo tipo de tela, prefira usar texto, fontes, SVG e CSS.&lt;/strong&gt; Pra fotos, uma técnica que tem ficado popular são as &lt;a href=&quot;http://filamentgroup.com/lab/rwd_img_compression/&quot;&gt;compressive images&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;e-os-browsers-&quot;&gt;E os browsers?&lt;/h2&gt;
&lt;p&gt;Todos os browsers modernos &lt;strong&gt;suportam a media query &lt;code&gt;resolution&lt;/code&gt;&lt;/strong&gt;, exceto o WebKit. Existem ainda alguns outros problemas, principalmente em dispositivos móveis. Alguns testes feitos em Janeiro/2013:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Firefox&lt;/strong&gt; e &lt;strong&gt;Opera&lt;/strong&gt; no Desktop já suportam &lt;code&gt;resolution&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No &lt;strong&gt;Webkit&lt;/strong&gt;, &lt;a href=&quot;http://trac.webkit.org/changeset/132227&quot;&gt;já existe suporte&lt;/a&gt; desde Outubro/2012 mas isso ainda não chegou no browsers finais. Por isso, usamos ainda a antiga &lt;code&gt;-webkit-device-pixel-ratio&lt;/code&gt;, pensando no Chrome, Safari, Android e iOS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Opera Mobile&lt;/strong&gt; suporta &lt;code&gt;resolution&lt;/code&gt; nativamente no Android. Único defeito é que ele reporta pixel ratio 1 no meu Galaxy 5 de pixel ratio 0.75. Mas nos celulares com 1.5 e 2, tudo funciona perfeito.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Firefox no Android&lt;/strong&gt; só aceita a velha &lt;code&gt;-moz-device-pixel-ratio&lt;/code&gt;, mas ele devolve sempre pixel ratio &lt;strong&gt;1&lt;/strong&gt; e não suporta telas retina ainda. Isso é um &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=803207&quot;&gt;bug&lt;/a&gt; e, quando for consertado, fará a &lt;code&gt;resolution&lt;/code&gt; funcionar, como no Firefox 18 pra Mac que já suporta o MacBook Retina.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Opera Mini&lt;/strong&gt; reporta sempre pixel ratio &lt;strong&gt;1&lt;/strong&gt;, tanto no Android quando no iOS, mesmo em telas retina. O problema é que ele suporta a media query &lt;code&gt;resolution&lt;/code&gt; cheia de bugs: se usar &lt;em&gt;dppx&lt;/em&gt; ele aceita qualquer valor, e o &lt;code&gt;min-resolution&lt;/code&gt; acha que o pixel ratio é 2. Conclusão: o suporte nele ainda é bem bugado, mas acrescentar &lt;code&gt;-o-device-pixel-ratio&lt;/code&gt; não vai melhorar isso.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Internet Explorer&lt;/strong&gt; suporta &lt;code&gt;resolution&lt;/code&gt; desde a versão 9 e nunca suportou &lt;code&gt;device-pixel-ratio&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Outros browsers que testei: &lt;em&gt;Dolphin Android Beta&lt;/em&gt; e &lt;em&gt;UC Browser&lt;/em&gt;. Em ambos, funciona &lt;code&gt;-webkit-device-pixel-ratio&lt;/code&gt; mas eles sempre reportam &lt;strong&gt;1&lt;/strong&gt;, mesmo em telas retina.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A conclusão de tudo isso é que precisamos ainda da &lt;code&gt;-webkit-device-pixel-ratio&lt;/code&gt; mas já podemos usar a &lt;code&gt;resolution&lt;/code&gt; pros outros browsers, sem prefixos. O ideal também é usar a unidade &lt;strong&gt;dpi&lt;/strong&gt; e &lt;strong&gt;não dppx&lt;/strong&gt;, já que o suporte nos browsers ainda é precário.&lt;/p&gt;
&lt;h2 id=&quot;a-media-query-final&quot;&gt;A media query final&lt;/h2&gt;
&lt;p&gt;Ta aí então a media query final pra suportarmos telas de alta resolução hoje e no futuro, sem problemas:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs css&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;-webkit-min-device-pixel-ratio:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;1.25&lt;/span&gt;),
       (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;min-resolution:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;120dpi&lt;/span&gt;) { 

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;small&gt;&lt;i&gt;* Imagem que ilustra o post por &lt;a href=&quot;http://www.flickr.com/photos/bcnbits/3244242527/&quot; rel=&quot;nofollow&quot;&gt;@bcnbits no Flickr&lt;/a&gt;.&lt;/i&gt;&lt;/small&gt;&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Review do livro &quot;The Mobile Book&quot; da Smashing Magazine</title>
         <link href="http://sergiolopes.org/review-mobile-book-smashing-magazine/"/>
         <updated>2013-01-21T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/review-mobile-book-smashing-magazine/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Um livro épico, reunindo diversos &lt;strong&gt;autores famosos&lt;/strong&gt; para falar sobre mobile. Muitos tópicos e diversos insights. &lt;strong&gt;Leitura obrigatória&lt;/strong&gt; pra qualquer desenvolvedor mobile (web e nativo).&lt;/p&gt;
&lt;p&gt;Lançado pela &lt;a href=&quot;http://smashingmagazine.com&quot;&gt;Smashing Magazine&lt;/a&gt;, o &lt;a href=&quot;http://www.the-mobile-book.com/&quot;&gt;The Mobile Book&lt;/a&gt; é uma coletânea de &lt;strong&gt;7 capítulos sobre mobile de autores importantes&lt;/strong&gt;. Nomes como Brad Frost, Trent Walton, Peter-Paul Koch e outros.&lt;/p&gt;
&lt;p&gt;O livro tem um viés um pouco mais de design que de código -- normal, pra quem acompanha a &lt;em&gt;Smashing Magazine&lt;/em&gt;. Há conteúdo técnico, mas boa parte é de UX, patterns visuais, mercado, análises, estratégias e futuro. E, apesar de falar de mobile como um todo, há uma preferência clara por &lt;strong&gt;web&lt;/strong&gt; e &lt;strong&gt;design responsivo&lt;/strong&gt; (o que eu gostei, claro).&lt;/p&gt;
&lt;p&gt;Tirando alguns poucos pontos que não gostei, &lt;strong&gt;recomendo o livro&lt;/strong&gt; pra todo desenvolvedor Web, front-end, designer e quem mais estiver envolvido com mobile.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/reviews/the-mobile-book.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;&amp;quot;The Mobile Book, pela Smashing Magazine&amp;quot;&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;O livro está dispoível no &lt;a href=&quot;http://www.the-mobile-book.com/&quot;&gt;site oficial&lt;/a&gt; por &lt;strong&gt;$18 na versão ebook&lt;/strong&gt; -- que inclui PDF, epub e mobi -- e $50 impresso+ebook. Tem 330 páginas no total. Ele tem um &lt;strong&gt;design muito bonito&lt;/strong&gt;. Mas a versão Kindle deixa muito a desejar, e acabei lendo no PDF mesmo, o que me irritou um pouco. Não tenho, por exemplo, minhas anotações sincronizadas. Mesmo assim, separei algumas.&lt;/p&gt;
&lt;p&gt;São 7 artigos na versão final do livro. Há a promessa de um ebook extra com mais artigos a ser liberado em breve aos compradores. Meus comentários:&lt;/p&gt;
&lt;h2 id=&quot;1-what-s-going-on-in-mobile-por-peter-paul-koch&quot;&gt;1) What’s Going on in Mobile?, por Peter-Paul Koch&lt;/h2&gt;
&lt;p&gt;Mais conhecido como &lt;a href=&quot;https://twitter.com/ppk&quot;&gt;ppk&lt;/a&gt;, é o autor do conhecidíssimo &lt;a href=&quot;http://quirksmode.org/&quot;&gt;QuirksMode.org&lt;/a&gt; e trabalha com mobile antes de isso ser moda. Nesse capítulo, ele traça um panorama do mercado mobile atual com muitas informações baseadas em sua análise do mundo todo.&lt;/p&gt;
&lt;p&gt;Gostei muito de ler sobre a mecânica por trás das forças no mundo mobile: fabricantes, operadoras e produtoras de SO. Há muitas sutilezas aí que acabam determinando como o mercado se move. Outro ponto forte é a análise dos browsers mobile, a imensa variedade, suas diferenças e números, incluindo dicas pra trabalhar com &lt;em&gt;proxy browsers&lt;/em&gt; como o Opera Mini.&lt;/p&gt;
&lt;p&gt;Das dicas gerais, ele fala pra &lt;strong&gt;evitar bibliotecas JS&lt;/strong&gt;, usar &lt;strong&gt;detecção de user-agent&lt;/strong&gt;, e montar um &lt;strong&gt;device lab&lt;/strong&gt;. Há muito mais, claro. Separei umas poucas frases de efeito:    &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Never assume anything on mobile. Never. Anything.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Operators and device vendors are afraid of commoditization and irrelevance and will defend themselves by influencing the overall user experience. Sometimes this is not a good idea.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;The Web will become an OS, but currently it’s a weapon in the hands of the losers.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;2-the-future-of-mobile-por-stephanie-rieger&quot;&gt;2) The Future of Mobile, por Stephanie Rieger&lt;/h2&gt;
&lt;p&gt;A Stephanie teve a impossível tarefa de prever o futuro, o que tornou o artigo meio irrelevante pra mim. Ninguém sabe o futuro e, pra mim, o artigo é pura especulação sob a ótica de uma única pessoa que nem trabalha em fabricantes de aparelhos ou outro grande player da indústria.&lt;/p&gt;
&lt;p&gt;Há pontos interessates, como ideias de como o &lt;strong&gt;NFC&lt;/strong&gt; pode melhorar a interação dos usuários num futuro próximo. Mas sempre que alguém fica insistindo na &lt;em&gt;ideia idiota&lt;/em&gt; de que geladeiras com Internet são o futuro, fico irritado. (e espero estar certo nessa minha previsão também individualista de que geladeiras com Internet &lt;strong&gt;não são o futuro&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;Ela fala muito de dispositivos bizarros, como uma caixa de remédios conectada na Internet e outras da &lt;em&gt;Internet das Coisas&lt;/em&gt;. Até divertido como histórias futurísticas, mas de pouca utilidade prática. A melhor citação dela é a que fecha o capítulo, transformando tudo que veio antes em irrelevante:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;My final advice is this: don’t try to predict the future. Carefully observe what’s happening today, and learn about what is coming next. Think of ways to build flexibility into each and every product you develop. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;3-responsive-design-strategies-por-trent-walton&quot;&gt;3) Responsive Design Strategies, por Trent Walton&lt;/h2&gt;
&lt;p&gt;O &lt;a href=&quot;http://trentwalton.com/&quot;&gt;Trent Walton&lt;/a&gt; escreve muito sobre Web responsiva e esteve por trás do redesign da homepage  da Microsoft. Esse artigo é um básico de &lt;em&gt;responsive design&lt;/em&gt;, revendo conceitos importantes mas não tão importante pra quem já trabalha com isso.&lt;/p&gt;
&lt;p&gt;Ele começa revendo os conceitos do &lt;a href=&quot;/review-responsive-design-ethan-marcotte/&quot;&gt;Ethan Marcotte&lt;/a&gt; de grids fluídos, mídias flexíveis e media queries. Comenta boas práticas importantes como escrever valores das media queries em &lt;code&gt;em&lt;/code&gt; e baseado no design, e ideias pra media queries verticais.&lt;/p&gt;
&lt;p&gt;Aí entra uma parte mais profunda onde ele fala de diversos assuntos. Como devemos fazer o design baseado no browser e não no Photoshop. Técnicas para priorizar contéudo quando começamos a mover tudo na tela com media queries -- que ele chama de &lt;em&gt;content coreography&lt;/em&gt;. Ou ainda, dicas para tipografia fluída em responsive design.&lt;/p&gt;
&lt;h2 id=&quot;4-responsive-design-patterns-por-brad-frost&quot;&gt;4) Responsive Design Patterns, por Brad Frost&lt;/h2&gt;
&lt;p&gt;Eu gosto muito do trabalho do Brad Frost e acompanho o &lt;a href=&quot;http://bradfrostweb.com/&quot;&gt;blog dele&lt;/a&gt; sempre. Por isso, devo dizer que o capítulo não foi muita novidade pra mim. Mas é um &lt;strong&gt;conteúdo fantástico&lt;/strong&gt;, e foi bom reler suas opiniões condensadas de uma vez.&lt;/p&gt;
&lt;p&gt;O capítulo analisa diversas formas de organizar o layout quando a tela começa a mudar de tamanho. Colocar navegação no topo, embaixo, offcanvas? São muitas questões a considerar para organizar o layout e conteúdo da página. Outro ponto é o uso de &lt;strong&gt;conditional loading&lt;/strong&gt; pra quebrar páginas grandes do desktop em diversas páginas no mobile.&lt;/p&gt;
&lt;p&gt;Além disso, ele fala como outros aspectos da página são afetados pelo design responsivo, como &lt;strong&gt;imagens&lt;/strong&gt;, &lt;strong&gt;mapas&lt;/strong&gt;, &lt;strong&gt;widgets&lt;/strong&gt;, &lt;strong&gt;tipografia&lt;/strong&gt;, &lt;strong&gt;tabelas&lt;/strong&gt;, &lt;strong&gt;formulários&lt;/strong&gt; e mais. É o capítulo mais completo do livro.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ensure that content flows logically. Users don’t want to sift through a bunch of disparate content to find what they’re looking for.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Treat layout as an enhancement. Bryan Rieger eloquently stated that, “The absence of support for @media queries is in fact the first @media query.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Find the balance between navigation accessibility and unobtrusiveness. Like a good friend, it should be there when you need it, but not always in your face, demanding attention.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Giving users different experiences is alright. However, the full functionality should remain accessible to everybody in some way, shape or form.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Make sure you actually need one. Many carousels are used to sweep content under the rug. A carousel should not be a lazy substitute for making important content strategy decisions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;5-optimization-for-mobile-por-dave-olsen&quot;&gt;5) Optimization For Mobile, por Dave Olsen&lt;/h2&gt;
&lt;p&gt;Dado meu aprofundamento nessas duas áreas -- mobile e otimizações --, esse era certamente o artigo que eu mais esperava ler. E ele é muito bom, apesar de não entrar em algumas técnicas muito avançadas e bizarras que eu tenho lido ultimamente.&lt;/p&gt;
&lt;p&gt;Ele fala de números concretos que mostram o tamanho das páginas crescendo, em como a latência das redes móveis afeta a performance e outros. Aí cita que &lt;em&gt;responsive design&lt;/em&gt; pode esconder problemas de performance tornando a página visualmente menor, mas com mesmo peso de performance que no Desktop. Isso não é necessáriamente ruim se sua página for pequena, mas com a média em torno de &lt;strong&gt;1 MB&lt;/strong&gt;, só colocar media queries não vai fazer mágicas.&lt;/p&gt;
&lt;p&gt;A parte das técnicas de otimização é bem próxima do que &lt;a href=&quot;http://blog.caelum.com.br/por-uma-web-mais-rapida-26-tecnicas-de-otimizacao-de-sites/&quot;&gt;já sabemos&lt;/a&gt; -- gzip, minificação, cache etc. Mas há algumas dicas a mais pra mobile, como não usar &lt;code&gt;display:none&lt;/code&gt; pra esconder conteúdo no celular, ou usar &lt;code&gt;localStorage&lt;/code&gt; pra cache, ou ainda como simular conexões ruins com um proxy. E, claro, ele também prega o abandono do jQuery e outras libs pesadas.&lt;/p&gt;
&lt;p&gt;Por fim, ele ainda fala de &lt;strong&gt;RESS&lt;/strong&gt;, que é o responsive design com detecção de browser pra rodar algumas coisas server-side. Mas confesso que ainda não tenho uma opinião muito certa sobre isso.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;While mobile network speeds are slower than desktop speeds, they aren’t on the whole that bad. The real Web performance difference between the two is latency. &lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;For me, the most disappointing feature of HTML5 so far has to be AppCache. [...] My advice regarding AppCache for now is simple: stay away from it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;6-hands-on-design-for-mobile-ux-perspective-por-dennis-kardys&quot;&gt;6) Hands On Design for Mobile (UX Perspective), por Dennis Kardys&lt;/h2&gt;
&lt;p&gt;Pior artigo do livro. Extremamente longo e confuso. Fala de um monte de assuntos e ao mesmo tempo não fala de nada. É um artigo mais de UX e não técnico, mas, mesmo assim, é pouco prático e cheio de bla bla bla.&lt;/p&gt;
&lt;p&gt;Ele fala da mudança de paradigma do mobile, do workflow de criação ser mais ágil, um monte de besteiras sobre rascunhos, wireframes e prototipação. Tem várias palavras bonitas que não querem dizer nada. Além de ruim, me irritou muito o fato dele ter 65 páginas, mais que qualquer outro capítulo.&lt;/p&gt;
&lt;h2 id=&quot;7-designing-with-gestures-and-touch-por-josh-clark&quot;&gt;7) Designing With Gestures and Touch, por Josh Clark&lt;/h2&gt;
&lt;p&gt;Fechando o livro veio o Josh Clark com um artigo sobre UX mas bem melhor que o anterior. O ponto principal é que touch e gestos são a base da interação com computadores agora.&lt;/p&gt;
&lt;p&gt;As novas máquinas com Windows 8 misturam tudo -- touch, mouse, teclado, trackpad -- o que torna impossível otimizar para um cenário específico. Não há mais cenários específicos e detectar tablets como diferentes de PCs é besteira. &lt;strong&gt;Devemos desenvolver agora tudo sempre pensando em touch&lt;/strong&gt;; se o usuário usar mouse, será tranquilo. O contrário não é verdade.&lt;/p&gt;
&lt;p&gt;Boa parte do capítulo é mostrando as diferenças visuais entre as plataformas móveis e as diferenças de interação do usuário entre celulares, tablets e PCs. É bem interessante ver como pequenos detalhes afetam a experiência do usuário. Ele mostra muitos exemplos de Apps e Sites e como o touch e os gestos ajudam ou atrapalham a interação. &lt;strong&gt;É um excelente capítulo&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;On iPhone, put app controls at screen bottom. On Android, put app controls at screen top. For the Web, favor navigation at page bottom (not screen bottom).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;When controls display or affect content, place them below or to the side of that content, never above.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Assume that every screen your website serves is a touch- screen.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Gestures are the keyboard shortcuts of touch.&lt;/p&gt;
&lt;/blockquote&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Seu código CSS pode ser mais limpo, flexível e reaproveitável</title>
         <link href="http://blog.caelum.com.br/seu-codigo-css-pode-ser-mais-limpo-flexivel-e-reaproveitavel/"/>
         <updated>2013-01-16T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/seu-codigo-css-pode-ser-mais-limpo-flexivel-e-reaproveitavel/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/seu-codigo-css-pode-ser-mais-limpo-flexivel-e-reaproveitavel/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Sempre libere o zoom do usuário em suas páginas mobile</title>
         <link href="http://sergiolopes.org/libere-zoom-nas-paginas-mobile/"/>
         <updated>2012-12-30T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/libere-zoom-nas-paginas-mobile/</id>

         <content type="html">
            
            

               
               

               
               
                  
                  
                     &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;&lt;i&gt;
                        Esse post foi atualizado recentemente com mais informações (data de publicação original: 19 Jul 2012).
                     &lt;/i&gt;&lt;/p&gt;
                  
               

               
               &lt;p&gt;As telas pequenas dos smartphones ensinaram algo simples para os usuários: se algo estiver pequeno, apenas arraste os dedos (pinch) e &lt;strong&gt;dê zoom&lt;/strong&gt;! É um gesto básico de dispositivos touch e conhecido por todo mundo. Mas, mesmo assim, muitos sites bloqueiam o zoom nas páginas. &lt;strong&gt;Não faça isso&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Se você trabalha com web mobile, conhece a &lt;a href=&quot;http://blog.caelum.com.br/pixels-pixels-ou-pixels-dicas-de-web-mobile-com-viewport/&quot;&gt;meta tag viewport&lt;/a&gt; e sua importância. Com ela, você consegue bloquear o zoom do usuário de algumas formas:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs xml&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;&lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;meta&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;&quot;viewport&quot;&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;content&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;&quot;width=device-width, user-scalable=no&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;hljs-tag&quot; style=&quot;color: #c82829;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;meta&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;&quot;viewport&quot;&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;content&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;&quot;width=device-width, minimum-scale=1, maximum-scale=1&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mas, na esmagadora maioria dos casos, você não deveria fazer isso. Exceções talvez sejam webapps com uma ideia de canvas fullscreen onde os gestos são tratados pela aplicação (mapas e jogos talvez). Em sites web normais? &lt;em&gt;Jamais&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Há um mito que circula por aí de que limitar o zoom faz com que nossa página fique mais parecida com uma &lt;em&gt;App&lt;/em&gt;. Primeiro: site não é App, então não tente parecer uma. Segundo: se algumas Apps têm essa &lt;em&gt;limitação&lt;/em&gt; de não deixar dar zoom, porque copiar essa &lt;em&gt;deficiência&lt;/em&gt; pra sua página?&lt;/p&gt;
&lt;h2 id=&quot;mas-meu-iphone-del-d-del-dava-zoom-quando-deito-o-aparelho-&quot;&gt;Mas meu iPhone &lt;del&gt;dá&lt;/del&gt;dava zoom quando deito o aparelho!&lt;/h2&gt;
&lt;p&gt;Eu acho que o grande culpado da proliferação de páginas com zoom desabilitado é um famoso &lt;strong&gt;bug no iOS&lt;/strong&gt; até a versão 5.x que faz com que a página dê um zoom quando você gira o aparelho em modo paisagem. Se você desabilita o zoom, o bug não acontece. Mas é um jeito covarde de resolver o problema.&lt;/p&gt;
&lt;p&gt;O &lt;strong&gt;iOS 6&lt;/strong&gt; resolve esse bug do Mobile Safari. E como a maioria dos usuários Apple atualiza rapidamente, isso quer dizer que esse bug deve ser coisa do passado em breve.&lt;/p&gt;
&lt;p&gt;Mas mesmo que o bug do iOS seja um problema pra você e seus usuários com iOS antes do 6, pense em alguma opção:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Não faça nada&lt;/strong&gt;. Sim, uma opção é deixar o bug acontecer. Lembre que um usuário de iOS está &lt;em&gt;acostumado&lt;/em&gt; a isso, afinal todos os sites do mundo são afetados! E a maioria dos usuários com iOS 6+ está ok.&lt;/li&gt;
&lt;li&gt;Se incomodar muito e você quiser tirar o zoom do usuário por causa do bug, pelo menos faça isso &lt;strong&gt;apenas no iOS&lt;/strong&gt; e não limite todos os outros dispositivos do mundo que funcionam direito. Lembre que, principalmente no Brasil, o Android é muito mais usado que o iOS (às vezes, até em audiências mais nerds como nós).&lt;/li&gt;
&lt;li&gt;Há &lt;strong&gt;hacks em JavaScript&lt;/strong&gt; que solucionam o problema em 99% dos cenários. O mais famoso é o &lt;a href=&quot;https://github.com/scottjehl/iOS-Orientationchange-Fix&quot;&gt;do Scott Jehl&lt;/a&gt; mas há outros - até eu tenho &lt;a href=&quot;https://github.com/sergiolopes/ios-zoom-bug-fix&quot;&gt;uma solução&lt;/a&gt;, baseada em CSS. Veja um &lt;a href=&quot;https://github.com/sergiolopes/ios-zoom-bug-fix#other-solutions&quot;&gt;comparativo de hacks&lt;/a&gt; que resolvem o bug.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;controle-na-m-o-do-usu-rio-&quot;&gt;Controle na mão do usuário!&lt;/h2&gt;
&lt;p&gt;Desabilitar o zoom das páginas é tão irritante, mas tão irritante, que os browsers mobile modernos estão deixando esse controle na mão do usuário! O browser do &lt;strong&gt;Android 4 e o Chrome Mobile&lt;/strong&gt;, por exemplo, têm essa opção nas configurações:&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/mobile-user-zoom/android4.png&quot; alt=&quot;Screenshot com configurações de zoom do Android 4&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;img src=&quot;/img/posts/mobile-user-zoom/chrome.png&quot; alt=&quot;Screenshot com configurações de zoom do Chrome Mobile&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
&lt;/figure&gt;

&lt;p&gt;O Mobile Safari do iOS infelizmente ainda não tem uma opcão dessas. Também não consegui achar no Opera e no Firefox uma opção semelhante. Uma gambiarra útil pra usuários dessas plataformas, é usar um &lt;strong&gt;bookmarklet que reescreva a tag viewport&lt;/strong&gt; dos sites pra habilitar o zoom sempre:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs javascript&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;javascript:&lt;span class=&quot;hljs-built_in&quot; style=&quot;color: #f5871f;&quot;&gt;document&lt;/span&gt;.querySelector(&lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;'meta[name=viewport]'&lt;/span&gt;).setAttribute(&lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;'content'&lt;/span&gt;,&lt;span class=&quot;hljs-string&quot; style=&quot;color: #718c00;&quot;&gt;'width=device-width,initial-scale=1,maximum-scale=10,user-zoom=yes'&lt;/span&gt;);
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Atualização Dez/2012&lt;/strong&gt;: coloquei informações sobre o iOS 6 e o bug que não existe mais.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Retrospectiva 2012</title>
         <link href="http://sergiolopes.org/retrospectiva-2012/"/>
         <updated>2012-12-28T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/retrospectiva-2012/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;2012 foi o ano de lançamento desse blog e de uma guinada no foco da minha carreira de desenvolvedor. Veja os assuntos que bombaram aqui esse ano, estatísticas e planos pra 2013!&lt;/p&gt;
&lt;h2 id=&quot;novo-foco-em-2012&quot;&gt;Novo foco em 2012&lt;/h2&gt;
&lt;p&gt;Escrevi minha primeira linha de código em 1999 e ela foi em &lt;strong&gt;HTML&lt;/strong&gt;. Mas, com o tempo, como boa parte dos programadores, acabei caindo mais em &lt;em&gt;backend&lt;/em&gt;. Trabalhar com &lt;em&gt;frontend&lt;/em&gt; não era &amp;quot;ser um programador&amp;quot;, não era glamuroso.&lt;/p&gt;
&lt;p&gt;Mas o HTML5 mudou isso. Web é sexy. Frontend é um cargo de respeito hoje. E, eu que sempre gostei de Web, resolvi que &lt;strong&gt;2012 seria uma mudança na carreira em direção ao frontend&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Lancei esse &lt;a href=&quot;/o-blog/&quot;&gt;blog&lt;/a&gt; em Março. Dei várias &lt;a href=&quot;/palestras/&quot;&gt;palestras&lt;/a&gt; -- e a maior parte sobre frontend. Postei centenas de links sobre frontend no meu &lt;a href=&quot;https://twitter.com/sergio_caelum&quot;&gt;twitter&lt;/a&gt; e no meu &lt;a href=&quot;https://www.facebook.com/sergio.caelum&quot;&gt;facebook&lt;/a&gt;. Fiz opensource e li vários livros de front.&lt;/p&gt;
&lt;p&gt;Eu gosto muito de backend e Java -- até lancei um &lt;a href=&quot;http://www.arquiteturajava.com.br/&quot;&gt;livro&lt;/a&gt;. Programo o dia todo, dou aulas, escrevo e palestro sobre isso. Mas &lt;strong&gt;em 2012 tive a chance de focar mais em frontend&lt;/strong&gt; que é o que mais gosto. E o mais legal é o apoio que tive e tenho da &lt;a href=&quot;http://www.caelum.com.br&quot;&gt;Caelum&lt;/a&gt; pra essas mudanças.&lt;/p&gt;
&lt;h2 id=&quot;2012-foi-o-ano-do-mobile&quot;&gt;2012 foi o ano do mobile&lt;/h2&gt;
&lt;p&gt;No imenso leque da Web, resolvi que 2012 seria &lt;a href=&quot;http://blog.caelum.com.br/2012-e-o-ano-do-mercado-mobile-no-brasil/&quot;&gt;o ano de focar em mobile&lt;/a&gt;. Falei de &lt;a href=&quot;/responsive-web-design/&quot;&gt;design responsivo&lt;/a&gt;, outras coisas de &lt;a href=&quot;/palestra-mobile-web/&quot;&gt;mobile web&lt;/a&gt; e até &lt;a href=&quot;/email-newsletter-mobile-responsivo/&quot;&gt;emails responsivos&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Codei vários sites responsivos -- como &lt;a href=&quot;https://github.com/sergiolopes/blog&quot;&gt;esse blog&lt;/a&gt;, o site do &lt;a href=&quot;https://github.com/caelum/arquiteturajava.com.br&quot;&gt;livro de arquitetura Java&lt;/a&gt; e o novo &lt;a href=&quot;http://www.caelum.com.br/apostilas/&quot;&gt;site da Caelum&lt;/a&gt;. Montei meu device lab: comprei 2 iPod Touch, 3 celulares Android; ganhei um Kindle Fire.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/retrospectiva/mobile-2012.jpg&quot; alt=&quot;Testando em vários devices&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;top-posts-de-2012&quot;&gt;TOP posts de 2012&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/responsive-web-design/&quot;&gt;Design responsivo por uma Web única&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/palestra-mobile-web/&quot;&gt;Palestra: Truques de Web Mobile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/email-newsletter-mobile-responsivo/&quot;&gt;10 dicas para fazer um email responsivo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/css-box-sizing-border-box/&quot;&gt;CSS: Você deveria usar box-sizing: border-box em todas as suas páginas&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/frontinbh-otimizacoes-web/&quot;&gt;Front In BH 2012: palestra sobre performance e otimizações web&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E há muitos &lt;a href=&quot;/&quot;&gt;outros posts bacanas&lt;/a&gt; no blog. Eu aproveitei também pra experimentar diferentes formatos de posts, como os &lt;a href=&quot;/front-in-sampa-2012/&quot;&gt;relatos de eventos&lt;/a&gt;, &lt;a href=&quot;/tweetables-performance-web-otimizacoes/&quot;&gt;tweetables&lt;/a&gt;, &lt;a href=&quot;/review-livro-web-design-responsivo-tarcio-zemel/&quot;&gt;reviews de livros&lt;/a&gt;, &lt;a href=&quot;/palestra-mobile-web/&quot;&gt;post-palestra&lt;/a&gt; e &lt;a href=&quot;/email-newsletter-mobile-responsivo/&quot;&gt;posts com design diferente&lt;/a&gt;. &lt;em&gt;Espero muito mais pra 2013!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Escrevi também no &lt;strong&gt;blog da Caelum&lt;/strong&gt; em 2012, com destaque para:&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;destaque&quot;&gt;&lt;a href=&quot;http://blog.caelum.com.br/2012-e-o-ano-do-mercado-mobile-no-brasil/&quot;&gt;2012 é o ano do mercado mobile no Brasil&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blog.caelum.com.br/flexibilidade-em-paginas-para-dispositivos-moveis-com-media-queries/&quot;&gt;Flexibilidade em páginas para dispositivos móveis com media queries&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&quot;http://blog.caelum.com.br/pixels-pixels-ou-pixels-dicas-de-web-mobile-com-viewport/&quot;&gt;Pixels, pixels ou pixels? Dicas de Web Mobile com viewport&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;estat-sticas-do-blog-em-2012&quot;&gt;Estatísticas do blog em 2012&lt;/h2&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/retrospectiva/estatisticas-2012.png&quot; alt=&quot;Google Analytics dos 9 meses de blog&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
&lt;/figure&gt;

&lt;ul&gt;
&lt;li&gt;9 meses de vida&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;31 mil visitas&lt;/strong&gt; e &lt;strong&gt;58 mil pageviews&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;8.8%&lt;/strong&gt; de visitantes em dispositivos móveis&lt;/li&gt;
&lt;li&gt;Orgulhosamente só 3% de visitantes usando IE :-)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;2013&quot;&gt;2013&lt;/h2&gt;
&lt;p&gt;Quero continuar meu foco em frontend, em especial nas áreas de mobile web e otimizações.&lt;/p&gt;
&lt;p&gt;Quero escrever mais, palestrar mais e ensinar mais sobre Web.&lt;/p&gt;
&lt;p&gt;Quero programar mais, experimentar mais, opensourcear mais.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Obrigado por me acompanhar aqui em 2012.&lt;/em&gt; &lt;strong&gt;Nos vemos em 2013!&lt;/strong&gt;&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Tudo que você precisa saber sobre resoluções, telas retina, devicePixelRatio, DPI, CSS pixels e etc</title>
         <link href="http://sergiolopes.org/resolucoes-dpi-pixel-ratio-retina/"/>
         <updated>2012-12-06T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/resolucoes-dpi-pixel-ratio-retina/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Há &lt;strong&gt;muita confusão&lt;/strong&gt; rondando as discussões sobre resoluções de tela, densidade de pixels, usabilidade das telas, áreas útil e coisas relacionadas. &lt;em&gt;Confusão inclusive na mídia especializada&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Um artigo que me despertou para escrever esse post saiu no &lt;a href=&quot;http://gizmodo.com/5954863/the-ipad-mini-screen-sucks-compared-to-the-competition&quot;&gt;Gizmodo americano&lt;/a&gt; no lançamento do iPad Mini, comparando-o aos concorrentes. O argumento era que a tela de 1024x768 do iPad Mini era pior que a de um Nexus 7 de 1280x800 pois tinha &lt;em&gt;menor área útil&lt;/em&gt; disponível para o usuário. &lt;strong&gt;Errado!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;O Nexus 7 tem resolução &lt;strong&gt;tvdpi&lt;/strong&gt; com &lt;strong&gt;devicePixelRatio&lt;/strong&gt; de ~1.3, o que dá um &lt;strong&gt;viewport&lt;/strong&gt; de 966x603 pixels, equanto o iPad mini tem &lt;strong&gt;devicePixelRatio&lt;/strong&gt; 1, com viewport igual sua resolução, em 1024x768. &lt;/p&gt;
&lt;p&gt;Pixel ratio, viewport, CSS pixels, dpi - &lt;em&gt;parece grego?&lt;/em&gt; Leia mais.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/resolucoes/ipadmini-nexus-kindle.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;iPad Mini vs. Nexus 7 vs. Kindle Fire HD&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;resolu-es-e-dpis&quot;&gt;Resoluções e DPIs&lt;/h2&gt;
&lt;p&gt;Duas medidas são importantes numa tela: o &lt;strong&gt;tamanho físico&lt;/strong&gt; da tela em centímetros -- ou polegadas, como é mais comum -- e sua &lt;strong&gt;resolução em pixels&lt;/strong&gt;. Da divisão desses dois números, temos o &lt;strong&gt;DPI&lt;/strong&gt; -- &lt;em&gt;dots per inch&lt;/em&gt; -- que diz quantos pixels existem por polegada de tela.&lt;/p&gt;
&lt;p&gt;Conseguimos saber a resolução em pixels da tela em JavaScript com as propriedades &lt;code&gt;window.screen.width&lt;/code&gt; e &lt;code&gt;window.screen.height&lt;/code&gt;. Mas, com JavaScript, &lt;strong&gt;não é possível saber o tamanho físico da tela e nem seu DPI&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;O curioso é que o CSS tem algumas unidades para tamanho físico -- você pode criar um div com width &lt;em&gt;1cm&lt;/em&gt; ou &lt;em&gt;1in&lt;/em&gt;. Mas isso não faz o que realmente queremos (um elemento de 1 centímetro ou 1 polegada &lt;em&gt;física&lt;/em&gt;). Os navegadores em geral concordaram em um &lt;a href=&quot;https://www.webkit.org/blog/57/css-units/&quot;&gt;dpi base de 96&lt;/a&gt; e todas as contas são relativas a esse número. Então, se fizer um div de 1 polegada, na verdade você leva um de 96px, não interessando o tamanho físico real da tela ou seu dpi verdadeiro.&lt;/p&gt;
&lt;h2 id=&quot;pixel-ratio-css-pixels-e-telas-retina&quot;&gt;Pixel ratio, CSS pixels e telas retina&lt;/h2&gt;
&lt;p&gt;Telas retina são telas de alta resolução com tantos pixels que eles acabam sendo pequenos fisicamente, tornando difícil o olho identificar um individualmente. Com isso, o conteúdo mostrado ficaria muito pequeno na tela, então a grande novidade é que &lt;strong&gt;um pixel de conteúdo é renderizado com mais de um pixel físico&lt;/strong&gt;. &lt;em&gt;Ãhn?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A ideia é simples: se você desenhar uma linha de 1px na tela (com CSS ou mesmo uma app nativa), ela será renderizada como uma linha de 2px físicos. Isso melhora, e muito, a definição dos elementos na tela. Existe, então, uma &lt;em&gt;razão de multiplicação&lt;/em&gt; entre pixels lógicos e pixels físicos. Essa razão é o &lt;strong&gt;device pixel ratio&lt;/strong&gt;, acessível em JS pela propriedade &lt;code&gt;devicePixelRatio&lt;/code&gt; e nas &lt;a href=&quot;/media-queries-retina/&quot;&gt;media queries CSS de alta resolução&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;No mundo Apple, as telas retina têm &lt;em&gt;device pixel ratio&lt;/em&gt; 2, o que facilita as contas. &lt;a href=&quot;http://developer.android.com/guide/practices/screens_support.html&quot;&gt;No mundo Android&lt;/a&gt;, essas mesmas telas são chamadas de xhdpi -- como num Galaxy S3 ou num Nexus 4. Mas, no Android, temos mais possibilidades:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;xhdpi (extra high dpi) - &lt;strong&gt;pixel ratio 2&lt;/strong&gt; - ex. Galaxy S3, Galaxy Note 2, Nexus 4.&lt;/li&gt;
&lt;li&gt;hdpi (high dpi) - &lt;strong&gt;pixel ratio 1.5&lt;/strong&gt; - ex. Galaxy S2, Motorola Atrix, Nexus One.&lt;/li&gt;
&lt;li&gt;tvdpi - &lt;strong&gt;pixel ratio 1.33&lt;/strong&gt; - usado só no tablet Nexus 7.&lt;/li&gt;
&lt;li&gt;mdpi (medium dpi) - &lt;strong&gt;pixel ratio 1&lt;/strong&gt; - telas normais, comuns em smartphones simples.&lt;/li&gt;
&lt;li&gt;ldpi (low dpi) - &lt;strong&gt;pixel ratio 0.75&lt;/strong&gt; - aparelhos low-end como o Galaxy 5.&lt;/li&gt;
&lt;li&gt;dpi altíssimo (ainda sem nome) - &lt;strong&gt;pixel ratio 3&lt;/strong&gt; - aparelhos Full HD com tela 1920x1080 como o &lt;a href=&quot;http://www.gsmarena.com/htc_droid_dna-5113.php&quot;&gt;HTC Droid DNA&lt;/a&gt; e o Galaxy S4.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;(Curioso notar o ldpi com pixel ratio menor que 1. Nesse caso, o conteúdo é desenhado com menos pixels na tela. Uma linha de 4px no CSS vai ser desenhada com 3 pixels físicos. Esse downscale deixa a renderização visualmente pior, claro.)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;É muito comum também falar em &lt;strong&gt;CSS pixels&lt;/strong&gt; ou &lt;strong&gt;device independent pixels&lt;/strong&gt; pra significar as medidas que usamos no código e &lt;strong&gt;device pixels&lt;/strong&gt; pra indicar quantos pixels físicos serão usados na tela. E, claro, &lt;strong&gt;número de css pixels &amp;times; devicePixelRatio = número de device pixels&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;o-que-importa-o-tamanho-do-viewport&quot;&gt;O que importa é o tamanho do viewport&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;O &lt;em&gt;viewport&lt;/em&gt; é o quanto de conteúdo cabe na tela, em CSS pixels, não device pixels.&lt;/strong&gt; Todos os iPhones mostram 320px de conteúdo, não importando se é retina (com 640px físicos) ou não. Precisa ser assim, pois os pixels físicos são muito pequenos na tela retina. Seria péssimo pro usuário mostrar 640px de conteúdo, tudo ficaria muito pequeno.&lt;/p&gt;
&lt;p&gt;No fim, pra usabilidade, &lt;strong&gt;conta mais o tamanho do viewport que o tamanho físico da tela&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Por isso o &lt;a href=&quot;http://gizmodo.com/5954863/the-ipad-mini-screen-sucks-compared-to-the-competition&quot;&gt;artigo do Gizmodo&lt;/a&gt; que citei antes sobre o iPad mini vs. Nexus 7 estava errado. Embora com resolução física mais alta, o Nexus 7 tem um viewport menor (966x603px contra 1024x768px do iPad Mini). Um usuário que queira ver mais conteúdo na tela, vai preferir o iPad Mini.&lt;/p&gt;
&lt;p&gt;Não quer dizer claro, que ter uma tela com alta resolução e com alto &lt;em&gt;pixel ratio&lt;/em&gt; seja ruim. Embora o conteúdo fique igual de tamanho nos dois tipos de iPhone, ele fica &lt;strong&gt;mais bem definido&lt;/strong&gt; no retina, claro. Textos e gráficos ficam ótimos. Conteúdos grandes e com &lt;em&gt;zoom out&lt;/em&gt; ficam mais definidos -- como uma foto grande ou um vídeo HD ou mesmo um site Desktop visto no celular.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/resolucoes/tab-vs-fire.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Diferença de viewport em tablets do mesmo tamanho físico (&lt;a href=&quot;http://www.alistapart.com/articles/a-pixel-identity-crisis/&quot;&gt;A List Apart&lt;/a&gt;)&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;dev-amos-falar-de-dpi-de-conte-do-&quot;&gt;Devíamos falar de &amp;#39;DPI de conteúdo&amp;#39;&lt;/h2&gt;
&lt;p&gt;A confusão maior nisso é que as especificações dos aparelhos e matérias nos sites de tecnologia costumam falar apenas da resolução física do aparelho e não de viewports e pixel ratios. Claro, esses conceitos confundem muita gente, principalmente o usuário final. Mas a contradição é que &lt;strong&gt;o viewport é justamente o número mais útil pro usuário, muito mais que saber a resolução física&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Quando lemos comparativos sobre aparelhos, é comum ver as pessoas citando DPIs físicos. Por exemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;iPhone não-retina tem &lt;strong&gt;163 dpi&lt;/strong&gt; com largura de &lt;strong&gt;320px&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;iPhone retina tem &lt;strong&gt;326 dpi&lt;/strong&gt; com largura de &lt;strong&gt;640px&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Galaxy S tem &lt;strong&gt;233 dpi&lt;/strong&gt; com largura de &lt;strong&gt;480px&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Galaxy Y tem só &lt;strong&gt;133 dpi&lt;/strong&gt; com largura de &lt;strong&gt;240px&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Só vendo esses poucos exemplos, a ideia é que temos telas com resoluções bem diferentes e DPIs diversos.&lt;/p&gt;
&lt;p&gt;Mas isso não é verdade se levarmos em conta o &lt;strong&gt;viewport&lt;/strong&gt;, a área real pro conteúdo. Por isso, acho que deveria existir uma métrica de &lt;strong&gt;dpi de conteúdo&lt;/strong&gt;, que mostra a densidade da tela com base na quantidade de conteúdo que ela mostra, em CSS pixels. &lt;/p&gt;
&lt;p&gt;Olhando novamente pra lista de aparelhos vemos que todos têm a mesma largura de viewport e a variação na densidade de CSS pixels é bem menor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;iPhone não-retina tem &lt;strong&gt;163 dpi de conteúdo&lt;/strong&gt; com viewport de &lt;strong&gt;320px&lt;/strong&gt; de largura&lt;/li&gt;
&lt;li&gt;iPhone retina tem &lt;strong&gt;163 dpi de conteúdo&lt;/strong&gt; com viewport de &lt;strong&gt;320px&lt;/strong&gt; de largura&lt;/li&gt;
&lt;li&gt;Galaxy S tem &lt;strong&gt;155 dpi de conteúdo&lt;/strong&gt; com viewport de &lt;strong&gt;320px&lt;/strong&gt; de largura&lt;/li&gt;
&lt;li&gt;Galaxy Y tem &lt;strong&gt;177 dpi de conteúdo&lt;/strong&gt; com viewport de &lt;strong&gt;320px&lt;/strong&gt; de largura&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pro usuário final, essa medidade de &lt;em&gt;dpi de conteúdo&lt;/em&gt; é mais importante que o &lt;em&gt;dpi físico&lt;/em&gt;.&lt;/p&gt;
&lt;h2 id=&quot;porque-um-ipad-mini-tem-o-mesmo-viewport-que-um-ipad-normal-&quot;&gt;Porque um iPad mini tem o mesmo viewport que um iPad normal?&lt;/h2&gt;
&lt;p&gt;O lançamento do iPad mini trouxe muita discussão sobre sua usabilidade. O &lt;a href=&quot;http://www.useit.com/alertbox/specifications-vs-ux.html&quot;&gt;Jakob Nielsen&lt;/a&gt; declarou que a tela é pequena demais e com problemas de UX. &lt;a href=&quot;http://br-mac.org/2012/11/ipad-mini-brasil/&quot;&gt;Outros reviews&lt;/a&gt; chegaram na mesma conclusão, e até nomes como &lt;a href=&quot;http://storify.com/lukew/targeting-devices-that-don-t-account-for-physical&quot;&gt;Luke Wroblewski e Brad Frost&lt;/a&gt; entraram nessa discussão.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;O problema do iPad Mini é que ele tem a mesma resolução de 1024x768 do iPad normal mas em uma tela 27% menor fisicamente&lt;/strong&gt;. Pior, seu device pixel ratio é 1, o que faz com que o viewport final seja também de 1024x768. Na prática, todas as coisas do iPad abrem 27% menores em tamanho, tornando os botões mais difíceis de clicar, os textos menores pra ler e etc.&lt;/p&gt;
&lt;p&gt;Muita gente se pergunta em como a Apple chegou no tamanho de 7.9 polegadas do iPad Mini. &lt;a href=&quot;http://storify.com/lukew/viewport-on-the-ipad&quot; title=&quot;Viewport on the iPad Mini: The Numbers &amp;amp; Beyond...&quot;&gt;Esse número não é aleatório&lt;/a&gt;. Com 7.9, &lt;strong&gt;o iPad mini tem o mesmo dpi de conteúdo dos iPhones&lt;/strong&gt;. Ou seja, vai renderizar tudo do mesmo tamanho físico que um iPhone faz. Veja as contas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;iPhone não-retina (320x480) tem &lt;strong&gt;&lt;a href=&quot;https://www.google.com.br/search?q=1%2Fsqrt(4%5E2%2F(640%5E2%2B1136%5E2&quot;&gt;162.98&lt;/a&gt;)%2F2) dpi de conteúdo&lt;/strong&gt; numa tela de 3.5&amp;#39;&amp;#39; com pixel ratio 1&lt;/li&gt;
&lt;li&gt;iPhone retina (640x960) tem &lt;strong&gt;&lt;a href=&quot;https://www.google.com.br/search?q=1%2Fsqrt(4%5E2%2F(640%5E2%2B1136%5E2&quot;&gt;162.98&lt;/a&gt;)%2F2) dpi de conteúdo&lt;/strong&gt; numa tela de 3.5&amp;#39;&amp;#39; com pixel ratio 2&lt;/li&gt;
&lt;li&gt;iPad mini (1024x768) tem &lt;strong&gt;&lt;a href=&quot;https://www.google.com.br/search?q=1%2Fsqrt(7.9%5E2%2F(768%5E2%2B1024%5E2&quot;&gt;162.02&lt;/a&gt;)) dpi de conteúdo&lt;/strong&gt; numa tela de 7.9&amp;#39;&amp;#39; com pixel ratio 1&lt;/li&gt;
&lt;li&gt;iPad 4 retina (2048x1536) tem &lt;strong&gt;132 dpi de conteúdo&lt;/strong&gt; numa tela de 9.7&amp;#39;&amp;#39; com pixel ratio 2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Olhando essa lista, percebemos que o estranho é o iPad normal, com um dpi bem mais baixo. As coisas ficam maiores fisicamente no iPad normal, o que é bom já que um tablet grande costuma ser usado a uma distância maior do usuário (apoiado na mesa, no colo etc).&lt;/p&gt;
&lt;p&gt;Na prática, o que a Apple está dizendo é que o &lt;strong&gt;iPad mini foi feito para ser usado na mesma distância que você usa o iPhone&lt;/strong&gt;, e não como você usa o iPad normal.&lt;/p&gt;
&lt;div style=&quot;max-width: 70%&quot;&gt;
  &lt;figure&gt;
    &lt;img src=&quot;/img/posts/resolucoes/ipad-ipadmini.jpg&quot; alt style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;iPad Mini vs. iPad&lt;/em&gt;
  &lt;/figure&gt;
&lt;/div&gt;

&lt;h2 id=&quot;quantos-pixels-minha-tela-deveria-ter-&quot;&gt;Quantos pixels minha tela deveria ter?&lt;/h2&gt;
&lt;p&gt;A questão aqui é de &lt;strong&gt;usabilidade&lt;/strong&gt;. Pixels pequenos demais tornam a leitura do usuário mais difícil, que é grande crítica dos analistas ao iPad mini. Você precisa usar o aparelho mais perto do rosto, o que pode não ser muito natural.&lt;/p&gt;
&lt;p&gt;O W3C tem uma medida oficial pra determinar o tamanho de um pixel de conteúdo na tela, o que eles chama de &lt;a href=&quot;http://www.w3.org/TR/css3-values/#reference-pixel&quot;&gt;pixel de referência&lt;/a&gt;. Ele é medido em ângulos, claro. Um pixel num celular que usamos perto do olho tem comprimento menor que um pixel numa televisão que vemos a metros de distância. Para analisar se um pixel está do &amp;quot;tamanho certo&amp;quot;, é preciso saber a &lt;strong&gt;distância do usuário em relação à tela&lt;/strong&gt;.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/resolucoes/pixel-w3c.png&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Tamanho de um pixel de referência (&lt;a href=&quot;http://www.w3.org/TR/css3-values/#reference-pixel&quot;&gt;W3C&lt;/a&gt;)&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;O tamanho oficial do pixel de referência é de &lt;em&gt;0.0213 graus&lt;/em&gt;. Deixando a matemática um pouco de lado, isso quer dizer que:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Um &lt;strong&gt;iPhone&lt;/strong&gt; foi projetado para ser visto a uma distância de &lt;a href=&quot;https://www.google.com.br/search?q=(180+%2F+(162.98+*+0.0213+*+PI&quot;&gt;41.9cm&lt;/a&gt;)+inches) do olho.&lt;/li&gt;
&lt;li&gt;O &lt;strong&gt;iPad&lt;/strong&gt;, é melhor visto a uma distância de &lt;a href=&quot;https://www.google.com.br/search?q=(180+%2F+(132+*+0.0213+*+PI&quot;&gt;51.7cm&lt;/a&gt;)+inches).&lt;/li&gt;
&lt;li&gt;Já o &lt;strong&gt;iPad Mini&lt;/strong&gt;, é pra ser usado como um iPhone, a &lt;a href=&quot;https://www.google.com.br/search?q=(180+%2F+(162.02+*+0.0213+*+PI&quot;&gt;42.1cm&lt;/a&gt;)+inches) de distância.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Celulares Android são os que trazem a maior variação nos DPIs. Muitos trazem telas grandes fisicamente mas com &lt;em&gt;dpis de conteúdo&lt;/em&gt; dos mais variados.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Um &lt;strong&gt;Galaxy S3&lt;/strong&gt; tem 360x640 de viewport numa tela de 4.8&amp;#39;&amp;#39;. É melhor usado a &lt;a href=&quot;https://www.google.com.br/search?q=(180+%2F+(153+*+0.0213+*+PI&quot;&gt;44.6cm&lt;/a&gt;)+inches) de distância.&lt;/li&gt;
&lt;li&gt;Já um &lt;strong&gt;Galaxy Note 2&lt;/strong&gt; tem uma tela de 5.5&amp;#39;&amp;#39; com a mesma resolução física e mesmo viewport -- 360x640 -- do S3. Ou seja, é um aparelho pensado para ser usado a uma distância maior, de &lt;a href=&quot;https://www.google.com.br/search?q=(180+%2F+(133.5+*+0.0213+*+PI&quot;&gt;51.17cm&lt;/a&gt;)+inches), como um iPad, apoiado na mesa por exemplo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;E, claro, toda essa usabilidade depende de usuário para usuário. &lt;strong&gt;Depende de como você pretende usar aparelho e da qualidade da sua visão.&lt;/strong&gt; O tamanho do &lt;em&gt;pixel de referência&lt;/em&gt; é calculado pensando na resolução média do olho humano. E existe toda uma &lt;a href=&quot;http://blogs.discovermagazine.com/badastronomy/2010/06/10/resolving-the-iphone-resolution/&quot;&gt;matemática interessantíssima&lt;/a&gt; sobre a ótica do olho humano pra se calcular isso. &lt;/p&gt;
&lt;p&gt;Por exemplo: a 30cm de distância, a percepção máxima do nosso olho é, em média, de 286dpi. Qualquer coisa acima disso, e a maioria das pessoas não conseguirá distinguir os pixels individualmente. Por isso, a tela de 326dpi do iPhone retina é bastante definida pra gente. Mas o olho humano consegue atingir resolução máxima de 477dpi em quem tem visão perfeita; nesse caso, um celular FullHD de 441dpi como &lt;a href=&quot;http://www.gsmarena.com/htc_droid_dna-5113.php&quot;&gt;Droid DNA&lt;/a&gt; pode ser melhor.&lt;/p&gt;
&lt;h2 id=&quot;mais-sobre-pixels-dpis-e-cia&quot;&gt;Mais sobre pixels, DPIs e cia&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.caelum.com.br/pixels-pixels-ou-pixels-dicas-de-web-mobile-com-viewport/&quot;&gt;Pixels, pixels ou pixels? Dicas de Web Mobile com viewport&lt;/a&gt;, artigo meu no Blog da Caelum.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.quirksmode.org/blog/archives/2012/11/the_css_physica.html&quot;&gt;The CSS physical unit problem&lt;/a&gt;, do QuirksMode.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.stuffandnonsense.co.uk/blog/about/seven&quot;&gt;Seven&lt;/a&gt;, sobre a diferença nos viewports nos tablets de 7 polegadas, do Andy Clarke.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.kybervision.com/Blog/files/AppleRetinaDisplay.html&quot;&gt;Apple &amp;quot;Retina Display&amp;quot; in iPhone 4: a Vision Scientist Perspective&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.quirksmode.org/blog/archives/2010/04/a_pixel_is_not.html&quot;&gt;A pixel is not a pixel is not a pixel&lt;/a&gt;, do QuirksMode.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.alistapart.com/articles/a-pixel-identity-crisis/&quot;&gt;A Pixel Identity Crisis&lt;/a&gt;, A List Apart.&lt;/li&gt;
&lt;/ul&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Front in Sampa 2012: Design Responsivo, testes A/B, Web Mobile, WebGL, Acessibilidade, SEO e carreira</title>
         <link href="http://sergiolopes.org/front-in-sampa-2012/"/>
         <updated>2012-11-06T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/front-in-sampa-2012/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Em 3 de Novembro, tivemos o &lt;a href=&quot;http://frontinsampa.com.br/&quot;&gt;Front in Sampa 2012&lt;/a&gt;. Um excelente evento da comunidade front-end de São Paulo onde tive o prazer de participar como palestrante e espectador. Nesse post, minhas impressões do evento, &lt;strong&gt;slides&lt;/strong&gt;, &lt;strong&gt;palestras&lt;/strong&gt; e &lt;strong&gt;links&lt;/strong&gt; pros tópicos discutidos por todos os palestrantes.&lt;/p&gt;
&lt;h2 id=&quot;o-evento&quot;&gt;O evento&lt;/h2&gt;
&lt;p&gt;Foi no &lt;strong&gt;Hotel Intercontinental&lt;/strong&gt;, na Alameda Santos, um super espaço. A sala era bem confortável, com cadeiras e mesas para todos, réguas de tomada por todo lado e &lt;strong&gt;excelente infraestrutura&lt;/strong&gt;. Faltou o Wi-Fi, mas todo mundo hoje em dia tem 3G, então nem fez falta. O coffee break foi um pouco fraco.&lt;/p&gt;
&lt;p&gt;A organização foi &lt;strong&gt;impecável&lt;/strong&gt;. Impressionante o que os organizadores conseguiram fazer em um primeiro evento. Registro aqui meus parabéns!&lt;/p&gt;
&lt;p&gt;Foram &lt;strong&gt;7 palestras&lt;/strong&gt; e uma &lt;strong&gt;mesa redonda&lt;/strong&gt; no final. Ficam aqui as minhas impressões de cada uma.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/frontinsampa2012/logo.png&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;responsive-design-por-qu-e-para-qu-utilizar-um-framework-por-fernando-monteiro&quot;&gt;Responsive Design: Por quê e para quê utilizar um framework? Por Fernando Monteiro&lt;/h2&gt;
&lt;p&gt;O &lt;a href=&quot;https://twitter.com/newaeonweb&quot;&gt;Fernando&lt;/a&gt; fez uns &lt;a href=&quot;https://speakerdeck.com/newaeonweb/palestra-responsive-design-front-in-sampa-2012&quot;&gt;slides&lt;/a&gt; bem bacanas sobre &lt;em&gt;design responsivo&lt;/em&gt;. Eles têm bastante informação, tornando fácil acompanhar de casa. Pra hora da palestra, os slides muito densos acabaram atrapalhando e o tempo ficou curto.&lt;/p&gt;
&lt;p&gt;Se você quiser saber mais sobre o tema, recomendo meu &lt;a href=&quot;/responsive-web-design/&quot;&gt;artigo sobre design responsivo&lt;/a&gt; aqui no blog. Com relação a usar frameworks, sou da opinião contrária: acho que frameworks CSS com breakpoints fixos e grids responsivos só atrapalham.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/frontinsampa2012/sala.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Auditório cheio no hotel Intercontinental&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;como-manter-um-front-end-produtivo-e-eficiente-em-testes-ab-e-personaliza-o-por-mauricio-wolff&quot;&gt;Como manter um Front-End produtivo e eficiente em testes AB e Personalização. Por Mauricio Wolff&lt;/h2&gt;
&lt;p&gt;Umas das melhores palestras do evento. O &lt;a href=&quot;https://twitter.com/bitbonsai&quot;&gt;Mauricio&lt;/a&gt; trabalha na Dell no time de testes A/B e targeting, e contou a experiência deles nessa área. O site da Dell é visto em 176 versões diferentes, de países e línguas, com mais de 200 mil visitantes por hora. E eles rodam diversos testes A/B ao mesmo tempo, criados pela equipe de marketing.&lt;/p&gt;
&lt;p&gt;Ele falou bastante na palestra sobre o processo da Dell, sobre Agile e como manter código limpo e organizado. Dos testes A/B em si, ele falou da importância de se obter um resultado com &lt;strong&gt;significância estatística&lt;/strong&gt; e citou que, na Dell, isso exige geralmente 2 semanas de tráfego. Por lá, os testes costumam rodar de 4 a 6 semanas. Outro truque que ele falou que também gosto é de rodar o &lt;strong&gt;teste com dois controles&lt;/strong&gt;, pra ver se os resultados convergem.&lt;/p&gt;
&lt;p&gt;Eu ando meio frustrado com testes A/B ultimamente por não trabalhar em um site com volume de acessos grande como o da Dell. Meus testes dificilmente obtém a significância estatística necessária. Essa palestra me deixou ainda mais relutante com relação a meus testes pequenos.&lt;/p&gt;
&lt;h2 id=&quot;truques-de-web-mobile-por-s-rgio-lopes&quot;&gt;Truques de Web Mobile. Por Sérgio Lopes&lt;/h2&gt;
&lt;p&gt;Na sequência, veio minha palestra sobre &lt;strong&gt;Web Mobile&lt;/strong&gt;. Aliás, foi uma oportunidade pra eu atualizar os &lt;a href=&quot;/palestra-mobile-web/&quot;&gt;slides aqui no blog&lt;/a&gt; com &lt;strong&gt;correções e atualizações&lt;/strong&gt; - em especial, sobre o novo Internet Explorer 10.&lt;/p&gt;
&lt;p&gt;O pessoal foi bastante receptivo no twitter e em conversas depois do evento, então acho que foi boa. Foi muito bom participar do &lt;strong&gt;Front in Sampa&lt;/strong&gt; e agradeço o convite da organização do evento.&lt;/p&gt;
&lt;p&gt;Você pode seguir minha &lt;a href=&quot;/palestra-mobile-web/&quot;&gt;palestra de web mobile&lt;/a&gt; aqui no blog com slides, textos explicativos e demos dos slides pra acompanhar no celular/tablet.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/frontinsampa2012/palestrantes.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Palestrantes do Front in Sampa 2012&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;webgl-three-js-e-tquery-por-kaique-da-silva&quot;&gt;WebGL, Three.js e tQuery. Por Kaique da Silva&lt;/h2&gt;
&lt;p&gt;Pra fechar a manhã do evento, o &lt;a href=&quot;https://twitter.com/japaloc&quot;&gt;Kaique&lt;/a&gt; apresentou o Web GL de maneira bastante produtiva com o &lt;a href=&quot;https://github.com/mrdoob/three.js/&quot;&gt;Three.js&lt;/a&gt; e o &lt;a href=&quot;http://jeromeetienne.github.com/tquery/&quot;&gt;tQuery&lt;/a&gt; - que eu não conhecia. &lt;/p&gt;
&lt;p&gt;Embora essa área de 3D no browser não seja minha praia, achei bem interessante o tQuery, pareceu bem fácil de usar. O Kaique fez um post depois do evento com &lt;a href=&quot;http://cladecoders.tumblr.com/post/34992750279/tquery-zero&quot;&gt;mais informações sobre o tQuery e WebGL&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;acessibilidade-web-por-hor-cio-soares-e-cl-cio-bachini&quot;&gt;Acessibilidade Web, por Horácio Soares e Clécio Bachini&lt;/h2&gt;
&lt;p&gt;Sem dúvidas, a melhor palestra do evento. O &lt;a href=&quot;https://twitter.com/horaciosoares&quot;&gt;Horácio&lt;/a&gt; e o &lt;a href=&quot;https://twitter.com/cbachini&quot;&gt;Clécio&lt;/a&gt; falaram de acessibilidade, leis e acordos internacionais que eu nem conhecia, tipos de usabilidade e mais. Depois, fizeram uma análise completa no &lt;em&gt;novo site do Itaú&lt;/em&gt; que tem sérios problemas de usabilidade. Alguns destaques de melhorias possíveis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sempre usar ALT nas imagens.&lt;/li&gt;
&lt;li&gt;Usar headings semânticos pro usuário navegar. Criae h1, h2, h3 etc, pensando nos filhos com relação à conteudo.&lt;/li&gt;
&lt;li&gt;Performance ruim com imagens gigantes e dezenas de arquivos JS;&lt;/li&gt;
&lt;li&gt;Permitir navegação pelo teclado.&lt;/li&gt;
&lt;li&gt;Usar &lt;a href=&quot;http://www.w3.org/TR/wai-aria/roles&quot;&gt;landmarks ARIA&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Não fazer links com &amp;quot;saiba mais&amp;quot; ou &amp;quot;clique aqui&amp;quot;. Ruim pra SEO e ruim pra navegar via TABs.&lt;/li&gt;
&lt;li&gt;Não recriar elementos, como um combobox, que deveria ser um &lt;code&gt;select&lt;/code&gt; sempre, ou botão feito com div.&lt;/li&gt;
&lt;li&gt;Usar labels nos campos, e não fazer placeholder com value.&lt;/li&gt;
&lt;li&gt;Na home, não colocar link de volta pra home (como no logo no topo).&lt;/li&gt;
&lt;li&gt;Aumentar o contraste de cor entre elementos. Usar fontes maiores.&lt;/li&gt;
&lt;li&gt;Elementos de navegação, como menu, não podem parecer um banner.&lt;/li&gt;
&lt;li&gt;Nunca usar TITLE nas imagens, só ALT. (nem pra SEO serve)&lt;/li&gt;
&lt;li&gt;Não abrir janelas externas nos links.&lt;/li&gt;
&lt;li&gt;Colocar uma boa descrição nos links que fazem coisas inesperadas (download de arquivo, sair do site etc).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Você pode ver também os &lt;a href=&quot;http://www.slideshare.net/horacio.soares/frontend-com-acessibilidade-frontinsampa-nov-2012&quot;&gt;slides da palestra de front-end com acessibilidade&lt;/a&gt;.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/frontinsampa2012/horacio-clecio.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Palestra de Usabilidade com Horácio Soares e Clécio Bachini&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;seo-para-front-end-por-f-bio-ricotta&quot;&gt;SEO para front-end. Por Fábio Ricotta&lt;/h2&gt;
&lt;p&gt;O &lt;a href=&quot;https://twitter.com/fabioricotta&quot;&gt;Fábio&lt;/a&gt; é um excelente palestrante, bastante famoso por causa da MestreSEO. A palestra foi muito boa e dinâmica mas, pra mim pelo menos, sem muitas novidades.&lt;/p&gt;
&lt;p&gt;Ele falou de 10 tópicos básicos de SEO que um programador front-end precisa se preocupar: colocar title na página; colocar alt nas imagens; usar URLs amigáveis; otimizar o tempo de carregamento; usar rich snippets; usar &lt;em&gt;rel=author&lt;/em&gt; com perfil do Google+; submeter um sitemap; evitar Flash e Ajax.&lt;/p&gt;
&lt;p&gt;Achei interessante ele falar sobre &lt;a href=&quot;http://blog.caelum.com.br/por-uma-web-mais-rapida-26-tecnicas-de-otimizacao-de-sites/&quot;&gt;performance web&lt;/a&gt; como fator de SEO. O Googe fala disso há 3 anos, mas eu não imaginava que já fosse um fator tão significativo. Os slides da &lt;a href=&quot;http://www.slideshare.net/fabioricotta/seo-para-frontend&quot;&gt;palestra de SEO para front-end&lt;/a&gt; estão disponíveis.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/frontinsampa2012/ricotta.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Palestra de SEO com Fábio Ricotta&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;biografia-do-zeno-rocha-e-do-bernard-de-luna&quot;&gt;Biografia do Zeno Rocha e do Bernard de Luna&lt;/h2&gt;
&lt;p&gt;O &lt;a href=&quot;https://twitter.com/zenorocha&quot;&gt;Zeno&lt;/a&gt; e o &lt;a href=&quot;https://twitter.com/bernarddeluna&quot;&gt;Bernard&lt;/a&gt; fizeram uma palestra-show sem tema definido, mas que tratou de contar a história da carreira dos dois. Eles mostraram projetos que fizeram, principalmente open source, e mostrarm o impacto que isso teve no sucesso profissional deles.&lt;/p&gt;
&lt;p&gt;Advogaram contra o pessoal que faz freelas, o que foi bastante polêmico e gerou muita controvérsia. Falaram bastante de você reservar um tempo para brincar com novas tecnologias, fazer projetos, se divertir. No fim, fizeram um demo com música usando a Audio API.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/frontinsampa2012/painel.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;7 Masters: debate sobre front-end, Mercado, Desenvolvimento e Tendências&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;&lt;em&gt;Fotos oficiais do evento que você encontra no &lt;a href=&quot;https://www.facebook.com/media/set/?set=a.380437568703158.92613.328721007208148&amp;amp;type=1&quot;&gt;Facebook deles&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Review do livro &quot;Web Design Responsivo&quot; do Tárcio Zemel</title>
         <link href="http://sergiolopes.org/review-livro-web-design-responsivo-tarcio-zemel/"/>
         <updated>2012-10-22T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/review-livro-web-design-responsivo-tarcio-zemel/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Primeiro livro em português sobre &lt;strong&gt;Web Design Responsivo&lt;/strong&gt; é uma excelente forma de começar nessa área que &lt;a href=&quot;http://blog.caelum.com.br/2012-e-o-ano-do-mercado-mobile-no-brasil/&quot;&gt;só cresce&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Acompanho o mercado de &lt;a href=&quot;/responsive-web-design/&quot;&gt;design responsivo&lt;/a&gt; há algum tempo, e escrevo bastante sobre ele. Mas sabemos que a maior parte do conteúdo e do conhecimento ainda está em inglês. Por isso que, quando ouvi que o &lt;a href=&quot;http://twitter.com/tarciozemel&quot;&gt;Tárcio Zemel&lt;/a&gt; estava pensando em um livro em português sobre o assunto, me interessei logo de cara.&lt;/p&gt;
&lt;p&gt;O &lt;a href=&quot;http://www.casadocodigo.com.br/products/livro-web-design-responsivo&quot;&gt;livro&lt;/a&gt; &lt;strong&gt;acabou de sair&lt;/strong&gt;, editado pela &lt;a href=&quot;http://www.casadocodigo.com.br/&quot;&gt;Casa do Código&lt;/a&gt;, nova editora nacional com foco em livros de TI, ebooks, preços competitivos e grandes nomes do mercado brasileiro. Tive o prazer de participar do projeto com o Tárcio, ajudando na revisão do livro ainda em beta, e com o prefácio.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/livro-web-design-responsivo/capa-livro-responsivo.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;&amp;quot;Livro &amp;#39;Web Design Responsivo: Páginas adaptáveis para todos os dispositivos&amp;#39; de Tárcio Zemel.&amp;quot;&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;&lt;strong&gt;Recomendo o livro&lt;/strong&gt; para todos os Web Designers brasileiros que querem começar nessa área de design responsivo e web móvel -- e, aliás, recomendo que todos entrem nesse área o quanto antes, pois é o futuro. O livro é bastante inspirado nas ideias do &lt;a href=&quot;/review-responsive-design-ethan-marcotte/&quot;&gt;Ethan Marcotte&lt;/a&gt; mas traz uma abordagem mais &lt;strong&gt;atualizada&lt;/strong&gt;, além, claro, de ser em português.&lt;/p&gt;
&lt;p&gt;Um bom complemento a esse livro do Tárcio é &lt;strong&gt;meu novo livro &lt;a href=&quot;/livro-web-mobile/&quot;&gt;A Web Mobile: programe para um mundo de muitos dispositivos&lt;/a&gt;&lt;/strong&gt;, também da editora &lt;em&gt;Casa do Código&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;O livro &lt;a href=&quot;http://www.casadocodigo.com.br/products/livro-web-design-responsivo&quot;&gt;Web Design Responsivo: Páginas adaptáveis para todos os dispositivos&lt;/a&gt; está disponível diretamente na editora &lt;em&gt;Casa do Código&lt;/em&gt; em ebook -- PDF, mobi, epub -- por R$ 30, em versão impressa por R$ 60, ou o combo por R$ 70. &lt;/p&gt;
&lt;p&gt;A seguir o prefácio que escrevi para o livro:&lt;/p&gt;
&lt;h2 id=&quot;pref-cio&quot;&gt;Prefácio&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;A era pós-PC da computação pessoal chegou com tudo. Nos tablets e smartphones, a Web, finalmente, tem a chance de se tornar verdadeiramente ubíqua e onipresente. Ainda estamos no começo dessa nova fase da tecnologia, mas o futuro é inegavelmente da Web móvel e dos mais diversos aparelhos de navegação.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Essa nova perspectiva traz desafios importantes. Até ontem, Web significava um navegador instalado num Desktop controlado por mouse e teclado numa tela de tamanho confortável. Nossos sites foram construídos pensando nesse cenário. Mas, agora, temos telas pequenas, touch screen, redes móveis e muitas outras diferenças. Precisamos de uma nova Web. Uma Web que suporte essa explosão de dispositivos e, mais ainda, esteja preparada para o futuro de dispositivos que ainda nem conseguimos antever.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;O Web Design Responsivo é a chave para essa nova Web. É pensar em páginas que se adaptem a todo tipo de dispositivo e contexto de uso. É sair das limitações de um browser Desktop e seu tamanho previsível, e pensar em páginas com flexibilidade que suportem todo tamanho de tela, qualquer tipo de resolução, interfaces com touch ou mouse. Pensar responsivamente é repensar a Web para o futuro.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Este livro é a ferramenta que você precisa pra entender os desafios do Web Design Responsivo. O Tárcio mostra os pilares de uma interface responsiva, explora os aspectos técnicos do HTML e CSS, e mostra ideias para uma interface móvel usável. É um livro que recomendo para todo desenvolvedor Web que queira participar ativamente da nova Web. Espero que você aproveite a leitura como eu aproveitei.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;E, quando terminar a leitura, não deixe de conferir também meu livro &lt;a href=&quot;http://sergiolopes.org/livro-web-mobile/&quot;&gt;A Web Mobile&lt;/a&gt;, onde aprofundo em vários outros temas relacionados a dispositivos móveis e sites responsivos.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;-- Sérgio Lopes - Instrutor e desenvolvedor na Caelum&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Review do livro &quot;Retinafy your web sites &amp; apps&quot; do Thomas Fuchs</title>
         <link href="http://sergiolopes.org/review-livro-retinafy-websites-thomas-fuchs/"/>
         <updated>2012-10-10T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/review-livro-retinafy-websites-thomas-fuchs/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;É capaz de você estar fazendo a mesma pergunta que me fiz antes de ler esse livro: sério, um livro &lt;strong&gt;só&lt;/strong&gt; sobre como lidar com &lt;strong&gt;telas retina&lt;/strong&gt; na Web? Sim, e o livro é &lt;strong&gt;fantástico&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;O &lt;a href=&quot;http://retinafy.me/ Livro Retinafy web sites and apps&quot;&gt;Retinafy.me&lt;/a&gt; é um ebook curto, um PDF -- sem DRM -- de apenas 60 páginas. É publicado diretamente pelo autor, o &lt;a href=&quot;http://mir.aculo.us/&quot;&gt;Thomas Fuchs&lt;/a&gt;, e tem um preço meio salgado -- 29 dólares. Mas tem &lt;strong&gt;dicas fenomenais&lt;/strong&gt; sobre como lidar com telas de alta resolução, tão comuns em tablets e celulares, e que agora começam a chegar aos notebooks e desktops. Valeu cada centavo (&lt;em&gt;ok, comprei no beta ainda, por 19 dólares, mas ainda é um valor alto&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;O livro é bastante direto e prático, curto e grosso com as dicas de imagens, CSS, HTML e JS pra você suportar telas retina. É fruto do muito estudo feito pelo Thomas e apresenta as conclusões dele pra que você não precise pesquisar tudo de novo por conta própria. E o Thomas não é um cara qualquer; é o autor do Zepto.js, do script.aculo.us, commiter do Rails e de mais um monte de coisa importante.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/retinafy-websites/retinafy-websites-cover.png&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;&amp;quot;Livro Retinafy Web Sites and Apps de Thomas Fuchs.&amp;quot;&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;jpeg-gigante-com-qualidade-baixa&quot;&gt;JPEG gigante com qualidade baixa&lt;/h2&gt;
&lt;p&gt;Pra mim, o maior insight desse livro é a ideia de usar um &lt;strong&gt;JPEG gigante com qualidade mais baixa&lt;/strong&gt;. Como os pixels em telas retina são muito pequenos, a qualidade visual fica boa. E, nas telas normais, o downscale do browser faz a diferença de qualidade ficar imperceptível. É uma sacada genial. No fim, em muitos casos, o arquivo JPEG fica até com tamanho menor -- um JPEG com o dobro de largura mas qualidade 30 em geral é menor que um JPEG com metade da largura e qualidade 80.&lt;/p&gt;
&lt;p&gt;No livro, ele mostra &lt;a href=&quot;http://retinafy.me/jpgs/&quot;&gt;vários exemplos&lt;/a&gt;. E, depois do livro, mais gente está falando dessa técnica com ainda &lt;a href=&quot;http://blog.netvlies.nl/design-interactie/retina-revolution/&quot;&gt;mais exemplos&lt;/a&gt; comprovando a eficiência da técnica.&lt;/p&gt;
&lt;h2 id=&quot;retina-first-e-sem-malabarismos&quot;&gt;Retina first e sem malabarismos&lt;/h2&gt;
&lt;p&gt;No livro, o autor defende a ideia de criarmos sites retina desde já. No futuro, só teremos displays retina, e é bom estar preparado. Isso significa criar as imagens &lt;strong&gt;@2x&lt;/strong&gt; pra tudo no site que não for vetorizável -- texto, CSS3, icon fonts e SVG. E, para o autor, na maioria das vezes, você não precisa do trabalho de criar uma versão &lt;strong&gt;@1x&lt;/strong&gt; e do monte de CSS e gambiarras de JavaScript para trocá-las.&lt;/p&gt;
&lt;p&gt;Eu concordo completamente com essa técnica. Meu fluxo hoje de desenvolvimento pensando em mobile e telas retina é de migrar o máximo possível pra CSS3 e icon fonts, depois usar SVG, e por último um JPG, PNG ou GIF já exportado com dobro de resolução. Aí uso o &lt;code&gt;background-size&lt;/code&gt; pra adaptar a imagem no CSS e pronto. Não crio várias versões do mesmo arquivo.&lt;/p&gt;
&lt;p&gt;A principal preocupação costuma ser &lt;strong&gt;performance&lt;/strong&gt;, já que o arquivo vai ter o quádruplo de pixels -- e quem me segue sabe que sou &lt;strong&gt;bem&lt;/strong&gt; &lt;a href=&quot;/tweetables-performance-web-otimizacoes/&quot;&gt;preocupado com performance&lt;/a&gt;. Para fotos JPG, a técnica anterior de diminuir a qualidade é fantástica e eficiente. Para PNGs e gráficos, em geral, a diferença de tamanho não é significativa. E, mesmo que tenha uns KBs a mais, sou da opinião de que o maior gargalo de rede hoje quando falamos de Web é a latência de rede, e não tanto a banda. &lt;/p&gt;
&lt;p&gt;Meu único receio de performance é com relação ao uso de memória do browser, que aumenta. De qualquer forma, tudo isso é melhor, mesmo, que usar bibliotecas JavaScript pra ficar trocando imagens. Essa bibliotecas são péssimas pra performance e grandes gambiarras.&lt;/p&gt;
&lt;h2 id=&quot;cita-es-do-livro&quot;&gt;Citações do livro&lt;/h2&gt;
&lt;p&gt;Na minha leitura, separei algumas citações de pontos que me marcaram. Mas, lembre, há muito mais no livro, com códigos, exemplos práticos, dicas etc.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Always target high-density displays by default, don’t make it an afterthought.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;For many types of graphics you can just provide a single image—the &amp;quot;retina&amp;quot; version, and rely on the browser to scale down a larger image.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Some images might require special casing, for example an icon or small text rendered on a user interface element might get blurry at smaller sizes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;[To support two image variants] don’t use &lt;img&gt; tags directly, but instead just use &lt;div&gt; elements with a background image and &amp;quot;background-size&amp;quot; property of &amp;quot;100%&amp;quot;.&lt;/div&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;For [JPEG] content images, double the resolution but lower the quality. Don’t bother with two versions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;It’s better to think &amp;quot;retina-first&amp;quot;, and assume you’re running on a retina screen and make exceptions or adaptions for &amp;quot;normal&amp;quot; screens, as high-density displays will soon be the norm rather than a special thing (and they are the norm on mobile devices already!).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Don’t use JavaScript &amp;quot;retina&amp;quot; helper libraries.&lt;/p&gt;
&lt;/blockquote&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>WebSockets HTML5 em Java com Jetty: Web em tempo real</title>
         <link href="http://blog.caelum.com.br/websockets-html5-em-java-com-jetty-web-em-tempo-real/"/>
         <updated>2012-08-23T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/websockets-html5-em-java-com-jetty-web-em-tempo-real/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/websockets-html5-em-java-com-jetty-web-em-tempo-real/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>QCon SP 2012: anotações da palestra 'HTML5 Offline &amp; Storage' do Gabriel Oliveira</title>
         <link href="http://sergiolopes.org/qconsp-html5-offline-storage-gabriel-oliveira/"/>
         <updated>2012-08-20T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/qconsp-html5-offline-storage-gabriel-oliveira/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Gabriel Oliveira (&lt;a href=&quot;https://twitter.com/gabaiel&quot;&gt;twitter&lt;/a&gt;), da &lt;a href=&quot;http://www.caelum.com.br/&quot;&gt;Caelum&lt;/a&gt;, palestrou na track de &lt;strong&gt;Front End&lt;/strong&gt; do evento &lt;a href=&quot;http://www.qconsp.com/&quot;&gt;QCon SP 2012&lt;/a&gt; sobre técnicas de offline storage com o título &lt;em&gt;HTML5 Offline &amp;amp; Storage: soluções para um mundo sem conexão permanente&lt;/em&gt; (&lt;a href=&quot;http://www.slideshare.net/gabrielso/html5-offline-storage&quot;&gt;slides&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/qconsp2012/gabriel.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;&amp;quot;Palestra do Gabriel Oliveira no QCon SP 2012&amp;quot;&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;minhas-anota-es&quot;&gt;Minhas anotações&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Web é plataforma pra aplicações distribuídas&lt;/li&gt;
&lt;li&gt;Normal: fazer cache de componentes com Expires no HTTP cache&lt;/li&gt;
&lt;li&gt;Mas sem HTTP, sem cache HTTP. Não da pra fazer verificação sem ter rede.&lt;/li&gt;
&lt;li&gt;Offline Storage&lt;ul&gt;
&lt;li&gt;Armazenar no cliente mas permite obter os dados sem conexão ativa&lt;/li&gt;
&lt;li&gt;Caso util em mobile webapps, ou hibridas&lt;/li&gt;
&lt;li&gt;evita full http roundtrips&lt;/li&gt;
&lt;li&gt;menor consumo de banda&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;HTML5 AppCache (Offline)&lt;ul&gt;
&lt;li&gt;quais recursos devem ser armazenados&lt;/li&gt;
&lt;li&gt;quais não devem ser armazenados. coisas que so funcionam com conexao&lt;/li&gt;
&lt;li&gt;ou recursos alternativos caso esteja offline&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Um arquivo manifest texto plano com CACHE MANIFEST&lt;/li&gt;
&lt;li&gt;posso fazer cache de coisas relativas e outros dominios&lt;/li&gt;
&lt;li&gt;cuidado com param da URL que o cache considera recursos diferentes&lt;/li&gt;
&lt;li&gt;cuidado com mime type correto senão ele ignora o cache&lt;/li&gt;
&lt;li&gt;Algum recurso devolveu 404? Nada vai para o cache!&lt;/li&gt;
&lt;li&gt;O offline cache traz todos os recursos de uma vez, mesmo que não use no momento&lt;/li&gt;
&lt;li&gt;Mudar o manifest indica pro navegador que um novo cache precisa ser construído&lt;ul&gt;
&lt;li&gt;Faça isso com JavaScript: applicationCache.onupdateready&lt;/li&gt;
&lt;li&gt;Mostre uma mensagem pro usuário recarregar a página&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Não deixe o navegador fazer HTTP cache do Manifest, senão não consigo fazer mais updates&lt;/li&gt;
&lt;li&gt;Eventos de online e offline&lt;ul&gt;
&lt;li&gt;evento que dispara quando muda o status da conexão
 window.ononline ou onoffline&lt;/li&gt;
&lt;li&gt;faz sincronizacao no online por exemplo&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;localStorage&lt;ul&gt;
&lt;li&gt;dados no cliente, como cookies, mas sem limitações&lt;/li&gt;
&lt;li&gt;nao sao enviados pro server, como cookies&lt;/li&gt;
&lt;li&gt;key value, dados nao estruturados&lt;/li&gt;
&lt;li&gt;same origin restrito&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;usuário pode descartar dados indo nas configs do browser&lt;/li&gt;
&lt;li&gt;sessionStorage é igual o local mas só na sessão atual (fechar browser; em alguns, so fechar aba)&lt;/li&gt;
&lt;li&gt;IndexedDB&lt;ul&gt;
&lt;li&gt;dados estruturados&lt;/li&gt;
&lt;li&gt;assincrono e transacional&lt;/li&gt;
&lt;li&gt;schemaless nosql&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;criamos um object store (tipo tabela)&lt;/li&gt;
&lt;li&gt;insere objetos JS&lt;/li&gt;
&lt;li&gt;posso juntar com offline. usar indexeddb pra salvar coisas locais e depois sincronizar.&lt;ul&gt;
&lt;li&gt;cuidado so com monte de coisa assincrona junta (indexeddb, ajax)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;No mobile, pessoal prefere WebSQL que é mais leve.&lt;/li&gt;
&lt;li&gt;Limitações de espaço:&lt;ul&gt;
&lt;li&gt;appcache: indeterminado mas se recomenda no maximo 10% do espaco em disco&lt;/li&gt;
&lt;li&gt;localStorage e session: 5MB minimo&lt;/li&gt;
&lt;li&gt;IndexedDB: Indeterminado&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;meus-coment-rios&quot;&gt;Meus comentários&lt;/h2&gt;
&lt;p&gt;As soluções para offline melhoraram muito com o HTML5. E isso é essencial para o mundo mobile dos smartphones e tablets que nem sempre têm conexão disponível. Eu mesmo, na minha &lt;a href=&quot;/palestra-mobile-web/&quot;&gt;palestra do QCon&lt;/a&gt; fiz os participantes abrirem umas demonstrações no celular, e usei HTML5 offline pra evitar problemas com intermitência de rede durante a palestra.&lt;/p&gt;
&lt;p&gt;Ainda acho o o AppCache um tanto obscuro e complicado. Ele é muito voltado pra WebApps single-page cheias de JS. Infelizmente não é uma solução fácil de se aplicar na Web em geral. E me incomoda o fato de não ter uma forma de habilitar ou desabilitar o offline de acordo com desejo do usuário - imagine o usuário lendo uma notícia e apertando um botão &amp;quot;salvar offline&amp;quot;.&lt;/p&gt;
&lt;p&gt;A palestra em si foi muito boa e preencheu alguns buracos no meu conhecimento sobre essas tecnologias. Recomendo ver os &lt;a href=&quot;http://www.slideshare.net/gabrielso/html5-offline-storage&quot;&gt;slides&lt;/a&gt; pra acompanhar os códigos mostrados.&lt;/p&gt;
&lt;h2 id=&quot;outras-palestras-da-track-de-front-end-do-qcon-sp-2012&quot;&gt;Outras palestras da track de Front End do QCon SP 2012&lt;/h2&gt;
&lt;p&gt;Tem a &lt;a href=&quot;/palestra-mobile-web/&quot;&gt;minha palestra sobre mobile web&lt;/a&gt;, incluindo slides, anotações, referências e demos. O evento teve muitas palestras de vários temas. Anotei aqui apenas as da trilha de Front End que assisti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/qconsp-responsive-design-eduardo-shiota/&quot;&gt;Reponsive Design e a Ubiquidade da Web&lt;/a&gt;, com Eduardo Shiota&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/qconsp-modular-css-bernard-de-luna/&quot;&gt;Modular CSS: projetando CSS para aplicativos&lt;/a&gt;, com Bernard De Luna&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/qconsp-mitos-frontend-zeno-rocha/&quot;&gt;Mitos do Front end&lt;/a&gt;, com Zeno Rocha&lt;/li&gt;
&lt;/ul&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>QCon SP 2012: anotações da palestra 'Responsive Web Design: conteúdo em todos devices' do Eduardo Shiota</title>
         <link href="http://sergiolopes.org/qconsp-responsive-design-eduardo-shiota/"/>
         <updated>2012-08-20T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/qconsp-responsive-design-eduardo-shiota/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Eduardo Shiota (&lt;a href=&quot;http://www.eshiota.com/&quot;&gt;blog&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/shiota&quot;&gt;twitter&lt;/a&gt;) palestrou na track de &lt;strong&gt;Front End&lt;/strong&gt; do evento &lt;a href=&quot;http://www.qconsp.com/&quot;&gt;QCon SP 2012&lt;/a&gt; sobre &lt;em&gt;Responsive Design&lt;/em&gt; (&lt;a href=&quot;http://www.slideshare.net/eshiota/responsive-web-design-e-a-ubiquidade-da-web&quot;&gt;slides&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/qconsp2012/shiota.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;&amp;quot;Palestra do Eduardo Shiota no QCon SP 2012&amp;quot;&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;minhas-anota-es&quot;&gt;Minhas anotações&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;A Web em 1996 (ex. &lt;a href=&quot;http://web.archive.org/web/19961223175947/http://uol.com.br/&quot;&gt;home do UOL na época&lt;/a&gt;) era sem muitas práticas de design.&lt;/li&gt;
&lt;li&gt;Mas design existe há centenas de anos, com grids, espaçamento, harmonia etc em impressos.&lt;/li&gt;
&lt;li&gt;Designer grafico sabe fazer design. Mas e na Web?&lt;/li&gt;
&lt;li&gt;A web começou a evoluir nas práticas de design a partir de 2000/2002. Mas o código ainda era ruim (table, font)&lt;/li&gt;
&lt;li&gt;Assim surgiu o CSS, com a separação semântica das tags e apresentação (ex. css zen garden)&lt;/li&gt;
&lt;li&gt;Passamos na Web e Frontend com diversos ciclos de melhoria, a próxima leva é o Mobile.&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HTML &amp;gt; Print &amp;gt; Table &amp;gt; Tableless &amp;gt; Standards &amp;gt; Mobile&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Mobile aumenta o range de idades e tipos de pessoas acessando web e tecnologia&lt;/li&gt;
&lt;li&gt;Gama de dispositivos é gigantesca. Até Kindle e-ink acessa web.&lt;/li&gt;
&lt;li&gt;Fala-se muito de Apps, Appstore, mas isso limita o alcance. Muitas combinacoes de telas, dispositvos, hardware etc.&lt;/li&gt;
&lt;li&gt;O proximo passo do futuro da Web é Responsive Web Design&lt;/li&gt;
&lt;li&gt;Solução agnóstica à plataforma. Todo dispositivo acessa a web.&lt;/li&gt;
&lt;li&gt;Exemplo: entrada do UOL hoje.&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.uol.com.br&quot;&gt;No Desktop fica bom&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Num iPad começa a ficar meio complicado&lt;/li&gt;
&lt;li&gt;Num iPhone, abre a &lt;a href=&quot;http://m.uol.com.br&quot;&gt;página mobile&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Problema: mandar links da versão mobile e amigo abrir no Desktop, ele vai ver versão mobile&lt;/li&gt;
&lt;li&gt;Temos aqui 2 aplicações com o mesmo propósito. Retrabalho&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Exemplo: &lt;a href=&quot;http://www.bostonglobe.com&quot;&gt;Boston Globe&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;Responsável foi o Ethan Marcotte, pai do Responsive Design&lt;/li&gt;
&lt;li&gt;Mesma página, adaptada pra todo tipo de resolução desde Desktop até smartphones pequenos.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Com CSS, JS, técnica e planejamento conseguimos uma versão que funcione em todas as páginas.&lt;/li&gt;
&lt;li&gt;Como fazer responsivo? 3 partes&lt;ul&gt;
&lt;li&gt;Design flexivel&lt;/li&gt;
&lt;li&gt;Media Queries&lt;/li&gt;
&lt;li&gt;Ajusts e plugins&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Design flexivel&lt;ul&gt;
&lt;li&gt;Tipografia, grid e conteudo&lt;/li&gt;
&lt;li&gt;Golden rule: target/contexto=dimensão&lt;/li&gt;
&lt;li&gt;usar &lt;code&gt;em&lt;/code&gt; sempre&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Coloque font-size:100% sempre no body. 16px na maioria dos browsers&lt;ul&gt;
&lt;li&gt;Se o usuário mudou, todo o layout se adapta.&lt;/li&gt;
&lt;li&gt;Seta &lt;code&gt;line-height&lt;/code&gt; unitless pra ser proporcional ao &lt;code&gt;font-size&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Fazer as contas da golden rule e vai dar uns numeros bizarros. Mas muita gente tem partido pra design no browser ao inves do Photoshop. Ai usa valores mais redondos.&lt;/li&gt;
&lt;li&gt;Coloque num comentario a conta que foi feita pra chegar no valor em.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Grids: mesma coisa, fazer tudo proporcionalmente, com porcentagens.&lt;/li&gt;
&lt;li&gt;Coloque &lt;code&gt;max-width:100%&lt;/code&gt; nos componentes: img, embed, object, video&lt;/li&gt;
&lt;li&gt;Shiota recomenda &lt;a href=&quot;/css-box-sizing-border-box/&quot;&gt;box-sizing:border-box&lt;/a&gt; também.&lt;/li&gt;
&lt;li&gt;Plugin FitVids pra videos e iframes redimensionarem e plugin FitText pra ajustar texto responsivo de título.&lt;/li&gt;
&lt;li&gt;Media queries: começou com @media print lá atrás e hoje tem muitos outros&lt;/li&gt;
&lt;li&gt;2 jeitos de usar:&lt;ul&gt;
&lt;li&gt;&lt;link rel=&quot;stylesheet&quot; href=&quot;estilo.css&quot; media=&quot;(max-width: 700px)&quot;&gt;&lt;/li&gt;
&lt;li&gt;ou direto no CSS: @media (max-width: 320px) { }&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Device pixel ratio: razão de pixels virtuais com relação a pixels físicos&lt;/li&gt;
&lt;li&gt;Numa tela retina, cada 1x1 pixel virtual é 2x2 pixel fisico&lt;/li&gt;
&lt;li&gt;A imagem pro retina vai ser o dobro de tamanho em cada dimensão&lt;ul&gt;
&lt;li&gt;colocamos numa media querie min-device-pixel-ratio:2&lt;/li&gt;
&lt;li&gt;Usa &lt;code&gt;background-size: 50% 50%&lt;/code&gt; pra escalar os pixels virtuais em 0.5&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Responsive Images&lt;ul&gt;
&lt;li&gt;carregas imagens diferentes pra cada breakpoint&lt;/li&gt;
&lt;li&gt;Shiota recomenda o polyfill de &lt;picture&gt; feita pelo Scott Jehl: picturefill&lt;/picture&gt;&lt;/li&gt;
&lt;li&gt;há outros plugins JavaScript, outros com servidor, outros misturados&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Mas nada disso funciona antes do IE9&lt;ul&gt;
&lt;li&gt;há plugins como Respond.js. mas só tem max/min-width/height &lt;/li&gt;
&lt;li&gt;há o css3-mediaqueries.js&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;meus-coment-rios&quot;&gt;Meus comentários&lt;/h2&gt;
&lt;p&gt;Quem acompanha o blog sabe que sou praticante do &lt;a href=&quot;/responsive-web-design/&quot;&gt;design responsivo&lt;/a&gt; então essa palestra do Shiota me interessou bastante. Foi uma boa apresentação para introduzir o tema pra quem ainda não conhecia.&lt;/p&gt;
&lt;p&gt;Em particular, gostei bastante de ver como pensamos parecido em temas polêmicos, como usar &lt;a href=&quot;/css-box-sizing-border-box/&quot;&gt;box-sizing:border-box&lt;/a&gt;, preferir ems sempre e fazer breakpoints nas media queries de acordo com o design e não com dispositivos específicos.&lt;/p&gt;
&lt;p&gt;Pra mim, um ponto interessante foi a timeline da história do design na web que ele apresentou no início. Em especial, a conclusão sobre como as coisas evoluíram nos últimos tempos: &lt;strong&gt;HTML &amp;gt; Print &amp;gt; Table &amp;gt; Tableless &amp;gt; Standards &amp;gt; Mobile&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;outras-palestras-da-track-de-front-end-do-qcon-sp-2012&quot;&gt;Outras palestras da track de Front End do QCon SP 2012&lt;/h2&gt;
&lt;p&gt;Tem a &lt;a href=&quot;/palestra-mobile-web/&quot;&gt;minha palestra sobre mobile web&lt;/a&gt;, incluindo slides, anotações, referências e demos. O evento teve muitas palestras de vários temas. Anotei aqui apenas as da trilha de Front End que assisti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/qconsp-modular-css-bernard-de-luna/&quot;&gt;Modular CSS: projetando CSS para aplicativos&lt;/a&gt;, com Bernard De Luna&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/qconsp-html5-offline-storage-gabriel-oliveira/&quot;&gt;HTML5 Offline &amp;amp; Storage: Soluções para um mundo sem conexão permanente&lt;/a&gt;, com Gabriel Oliveira&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/qconsp-mitos-frontend-zeno-rocha/&quot;&gt;Mitos do Front end&lt;/a&gt;, com Zeno Rocha&lt;/li&gt;
&lt;/ul&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>QCon SP 2012: anotações da palestra 'Modular CSS: projetando CSS para aplicativos' do Bernard De Luna</title>
         <link href="http://sergiolopes.org/qconsp-modular-css-bernard-de-luna/"/>
         <updated>2012-08-20T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/qconsp-modular-css-bernard-de-luna/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Bernard De Luna (&lt;a href=&quot;http://bernarddeluna.com/blog/&quot;&gt;blog&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/bernarddeluna/&quot;&gt;twitter&lt;/a&gt;), da MeltDSP, palestrou palestrou na track de &lt;strong&gt;Front End&lt;/strong&gt; do evento &lt;a href=&quot;http://www.qconsp.com/&quot;&gt;QCon SP 2012&lt;/a&gt; sobre boas práticas de CSS e modularidade com o título &lt;strong&gt;Modular CSS: projetando CSS para aplicativos&lt;/strong&gt; (&lt;a href=&quot;http://www.slideshare.net/bernarddeluna/modular-css-projetando-css-para-aplicativos&quot;&gt;slides&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;minhas-anota-es&quot;&gt;Minhas anotações&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Muitos projetos são focados no visual, e produção linear, página a página. Mas é ruim. Refazemos muitas coisas.&lt;/li&gt;
&lt;li&gt;Designer projeta a interface. Se ele fizer de forma modular, já facilitaria tudo.&lt;/li&gt;
&lt;li&gt;Mas precisamos entender que Site é diferente de App.&lt;/li&gt;
&lt;li&gt;Site tem foco em: &lt;strong&gt;estilo, diagração, primeiro impacto&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;App tem foco em: estilo, funcionalidades, condução do usuário (tour ou wizard)&lt;/li&gt;
&lt;li&gt;Frameworks de grids fixos são feios. &lt;ul&gt;
&lt;li&gt;Misturam HTML e CSS. (tipo class &lt;code&gt;.grid-4-12&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Manutenção dolorosa&lt;/li&gt;
&lt;li&gt;Orienta o design e não o contrário.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Primeiro pensamento modular é pensar em &lt;strong&gt;centralização&lt;/strong&gt;, pra mudanças afetarem um lugar só&lt;/li&gt;
&lt;li&gt;Facilitamos com o &lt;em&gt;Semantic.gs&lt;/em&gt; ou SASS, LESS, Stylus. Mas gera dependência.&lt;/li&gt;
&lt;li&gt;Mas cuidado com buscar velocidade ao extremo, senão voltamos a um Fireworks da vida.&lt;/li&gt;
&lt;li&gt;Crie seu proprio framework: faça seus padrões, com seus ajustes.&lt;/li&gt;
&lt;li&gt;Evite utilizar herança&lt;ul&gt;
&lt;li&gt;Prefira &amp;#39;.widget-tt&amp;#39; a &amp;#39;.widget h2&amp;#39;&lt;/li&gt;
&lt;li&gt;Use classes independentes.&lt;/li&gt;
&lt;li&gt;Evite dependência do pai.&lt;/li&gt;
&lt;li&gt;Facilita reutilização.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Evite usar IDs pra estilização: class ainda é performatica mas ajuda a reutilizar.&lt;/li&gt;
&lt;li&gt;Foque na função e não no estilo ou conteúdo: pense em mudanças futuras.&lt;/li&gt;
&lt;li&gt;Dicas de reutilizacao:&lt;ul&gt;
&lt;li&gt;Classes globais&lt;/li&gt;
&lt;li&gt;Testar em outro local, outro contexto&lt;/li&gt;
&lt;li&gt;Testar variações&lt;/li&gt;
&lt;li&gt;Documentação.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Fazer um guia de estilo. Uma documentacao com os componentes/widgets exibidos num lugar só.&lt;/li&gt;
&lt;li&gt;Exemplo: botão com class &lt;code&gt;.b&lt;/code&gt; e um botao especial com &lt;code&gt;.b-pri&lt;/code&gt; ou &lt;code&gt;.b-small&lt;/code&gt;.&lt;ul&gt;
&lt;li&gt;Usa o prefixo igual pra ficar claro&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Num sistema, gastamos bastante tempo na formatacao de form e table: crie ou use um mini framework reaproveitável.&lt;/li&gt;
&lt;li&gt;DRY CSS: modularizado, facilmente integrado, mas é vinculado ao estilo, vinculado ao ID, id em letra maiúscula!&lt;/li&gt;
&lt;li&gt;OOCSS:&lt;ul&gt;
&lt;li&gt;separação de estrutura e estilo, container e conteudo&lt;/li&gt;
&lt;li&gt;criacao de elementos globais&lt;/li&gt;
&lt;li&gt;mas é muito dificil de aprender&lt;/li&gt;
&lt;li&gt;existe um framework (ruim) com mesmo nome da técnica.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SMACSS:&lt;ul&gt;
&lt;li&gt;robusto&lt;/li&gt;
&lt;li&gt;categorização em módulos: base, layout, modules, states e theme.&lt;/li&gt;
&lt;li&gt;modulos independentes&lt;/li&gt;
&lt;li&gt;mas é muito engessado&lt;/li&gt;
&lt;li&gt;projeto não está aberto (precisa comprar o livro ou workshop).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;BEM (block element modifier)&lt;ul&gt;
&lt;li&gt;modulos independentes completamente (nao so css, todo html, )&lt;/li&gt;
&lt;li&gt;muito complexo, nomenclatura falha (menu__item_state)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;LESS / SASS&lt;ul&gt;
&lt;li&gt;uso de variaveis pra cores, espaçamentos, estilos.&lt;/li&gt;
&lt;li&gt;mas usar preprocessador foge dos padrões, gera dependência e não é CSS.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Crie um arquivo externo&lt;ul&gt;
&lt;li&gt;&amp;#39;Standards&amp;#39; sempre atualizado com elementos que se repetem&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Modularizacao em mini classes: &lt;code&gt;.pao.maionese.tomate.hamburguer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Envolva sua equipe no processo de padronização senao não ha comprometimento da equipe&lt;/li&gt;
&lt;li&gt;Prototipe&lt;/li&gt;
&lt;li&gt;Crie caixas e containers pra deixar o conteudo mais alteravel&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;meus-coment-rios&quot;&gt;Meus comentários&lt;/h2&gt;
&lt;p&gt;Excelente palestra do Bernard. É uma das poucas pessoas que conheço que consegue falar com propriedade de arquitetura de CSS e apontas aspectos positivos e negativos não triviais. As dicas de modularização de se trabalhar com várias classes pequenas e independentes são muito boas.&lt;/p&gt;
&lt;p&gt;Apenas discordei do pé atrás que ele tem com pré-processadores. Pra mim pelo menos, tem sido ótimo usá-los. Claro que é uma dependência a mais no projeto, mas já temos tantas outras com tantos outros frameworks que não vejo tanto problema assim. Uma estratégia que uso é incluir o pré-processamento já no script de build do projeto, assim tudo fica fácil de usar por todos os desenvolvedores envolvidos. Evito envolver dependência de ferramentas gráficas pra fazer essa compilação.&lt;/p&gt;
&lt;p&gt;Por último, achei interessantíssima a comparação das técnicas de CSS que se fala tanto - como DRY, SMACSS, OOCSS e BEM. Conheço várias delas, mas confesso que nunca me aprofundei em nenhuma. Sempre achei um tanto overkill. E depois da metralhada que o Bernard deu na palestra, duvido que vá me interessar por alguma dessas técnicas. O legal é que ele criticou apontando exatamente o problema de cada uma.&lt;/p&gt;
&lt;h2 id=&quot;outras-palestras-da-track-de-front-end-do-qcon-sp-2012&quot;&gt;Outras palestras da track de Front End do QCon SP 2012&lt;/h2&gt;
&lt;p&gt;Tem a &lt;a href=&quot;/palestra-mobile-web/&quot;&gt;minha palestra sobre mobile web&lt;/a&gt;, incluindo slides, anotações, referências e demos. O evento teve muitas palestras de vários temas. Anotei aqui apenas as da trilha de Front End que assisti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/qconsp-responsive-design-eduardo-shiota/&quot;&gt;Reponsive Design e a Ubiquidade da Web&lt;/a&gt;, com Eduardo Shiota&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/qconsp-html5-offline-storage-gabriel-oliveira/&quot;&gt;HTML5 Offline &amp;amp; Storage: Soluções para um mundo sem conexão permanente&lt;/a&gt;, com Gabriel Oliveira&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/qconsp-mitos-frontend-zeno-rocha/&quot;&gt;Mitos do Front end&lt;/a&gt;, com Zeno Rocha&lt;/li&gt;
&lt;/ul&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>QCon SP 2012: anotações da palestra 'Mitos do Front end' do Zeno Rocha</title>
         <link href="http://sergiolopes.org/qconsp-mitos-frontend-zeno-rocha/"/>
         <updated>2012-08-20T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/qconsp-mitos-frontend-zeno-rocha/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Zeno Rocha (&lt;a href=&quot;http://zenorocha.com/&quot;&gt;blog&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/zenorocha&quot;&gt;twitter&lt;/a&gt;), da Liferay, palestrou na track de &lt;strong&gt;Front End&lt;/strong&gt; do evento &lt;a href=&quot;http://www.qconsp.com/&quot;&gt;QCon SP 2012&lt;/a&gt; sobre vários &lt;strong&gt;Mitos do front end&lt;/strong&gt; (&lt;a href=&quot;http://talks.zenorocha.com/2012/qconsp/&quot;&gt;slides&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;minhas-anota-es&quot;&gt;Minhas anotações&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Backend costuma ver frontend como fácil, mas não é verdade&lt;ul&gt;
&lt;li&gt;Mas CSS3 permite muita coisa avançada e complexa&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;quot;CSS é muito repetitivo&amp;quot;&lt;ul&gt;
&lt;li&gt;Use pre processadores&lt;/li&gt;
&lt;li&gt;E ainda tem o CSS4 com variáveis, por exemplo&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;quot;CSS Sprites são difíceis de manter&amp;quot;&lt;ul&gt;
&lt;li&gt;Compass generator&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;quot;Java == JavaScript&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;JS é ruim e cheio de bugs&amp;quot;&lt;ul&gt;
&lt;li&gt;[] + [] = &amp;quot;&amp;quot;&lt;/li&gt;
&lt;li&gt;{} + {}&lt;/li&gt;
&lt;li&gt;[] + {}&lt;/li&gt;
&lt;li&gt;ha explicacoes pras inconsistencias&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Mas ha novidades no EcmaScript 6&lt;ul&gt;
&lt;li&gt;&amp;quot;use strict&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;quot;JavaScript não é bem documentado&amp;quot;&lt;ul&gt;
&lt;li&gt;Acesse a MDN e não w3schools&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;quot;JS nao eh nada modular&amp;quot;&lt;ul&gt;
&lt;li&gt;require.js, head.js, backbone.js, YUI&lt;/li&gt;
&lt;li&gt;facilitam organizacao do codigo&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;quot;Código não é consistente&amp;quot;&lt;ul&gt;
&lt;li&gt;por exemplo, sem padronizacao de codigo CSS e JS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;quot;Sem comunidade&amp;quot;&lt;ul&gt;
&lt;li&gt;linguagem mais usada no github&lt;/li&gt;
&lt;li&gt;muitos eventos&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;quot;Código de qualquer jeito&amp;quot;&lt;ul&gt;
&lt;li&gt;use CSS Lint, JS Lint se quiser regras&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;quot;Codigo nao eh testado&amp;quot;&lt;ul&gt;
&lt;li&gt;da pra fazer TDD com jasmin&lt;/li&gt;
&lt;li&gt;QUnit&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;quot;Preciso do browser pra rodar testes&amp;quot;&lt;ul&gt;
&lt;li&gt;zombie.js&lt;/li&gt;
&lt;li&gt;phantom.js é um browser webkit headless&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;quot;preciso de linguagens nativas pra apps&amp;quot;&lt;ul&gt;
&lt;li&gt;appceletator, phonegap, webapp&lt;/li&gt;
&lt;li&gt;ou nem empacota, faz só css e html: Firefox OS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;quot;HTML5 é o futuro&amp;quot;&lt;ul&gt;
&lt;li&gt;html é hoje, browsers ja suportam&lt;/li&gt;
&lt;li&gt;e html5 ~ HTML + CSS3 + APIS JS&lt;/li&gt;
&lt;li&gt;old radio, wormz = HTML5&lt;/li&gt;
&lt;li&gt;WebGL&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;quot;HTML5 nao funciona no IE&amp;quot;&lt;ul&gt;
&lt;li&gt;semantica ha polyfill com shiv&lt;/li&gt;
&lt;li&gt;CSS3 tem CSS3 Pie&lt;/li&gt;
&lt;li&gt;ha muitos polyfill no site do Modernizr&lt;/li&gt;
&lt;li&gt;mas realmente precisamos que tudo rode igual em todo browser?&lt;/li&gt;
&lt;li&gt;a guerra dos browser ainda nao acabou&lt;/li&gt;
&lt;li&gt;&amp;quot;Salve a Web&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Design sem conteudo é só decoracao. Principal é o conteudo.&lt;ul&gt;
&lt;li&gt;navegador antigo é tipo TV preto e branco&lt;/li&gt;
&lt;li&gt;e a TV ja resolveu isso, melhorando o sinal pra TVs mais modernas&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&amp;quot;HTML5 vai matar o Flash&amp;quot;&lt;ul&gt;
&lt;li&gt;Occupy Flash é babaquice&lt;/li&gt;
&lt;li&gt;sucesso da aplicacao nao é a tecnologia&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;meus-coment-rios&quot;&gt;Meus comentários&lt;/h2&gt;
&lt;p&gt;Palestra divertida do Zeno com ótimos slides. É um tema que pra gente que está há mais tempo no frontend não tem muita novidade. Mas foi uma palestra essencial pro público-alvo do QCon, que tem muitos arquitetos e pessoal de infra. &lt;/p&gt;
&lt;p&gt;O Zeno mostrou vários preconceitos e mitos que envolvem o crescente mundo do frontend e esclareceu vários pontos. Foi uma palestra muito bem avaliada no evento, o que mostra que aquele público precisava mesmo ouvir o recado do que significa desenvolver frontend hoje em dia.&lt;/p&gt;
&lt;h2 id=&quot;outras-palestras-da-track-de-front-end-do-qcon-sp-2012&quot;&gt;Outras palestras da track de Front End do QCon SP 2012&lt;/h2&gt;
&lt;p&gt;Tem a &lt;a href=&quot;/palestra-mobile-web/&quot;&gt;minha palestra sobre mobile web&lt;/a&gt;, incluindo slides, anotações, referências e demos. O evento teve muitas palestras de vários temas. Anotei aqui apenas as da trilha de Front End que assisti:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/qconsp-responsive-design-eduardo-shiota/&quot;&gt;Reponsive Design e a Ubiquidade da Web&lt;/a&gt;, com Eduardo Shiota&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/qconsp-modular-css-bernard-de-luna/&quot;&gt;Modular CSS: projetando CSS para aplicativos&lt;/a&gt;, com Bernard De Luna&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/qconsp-html5-offline-storage-gabriel-oliveira/&quot;&gt;HTML5 Offline &amp;amp; Storage: Soluções para um mundo sem conexão permanente&lt;/a&gt;, com Gabriel Oliveira&lt;/li&gt;
&lt;/ul&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Não use jQuery no seu site mobile: conheça o Zepto.JS</title>
         <link href="http://blog.caelum.com.br/nao-use-jquery-no-seu-site-mobile-conheca-o-zepto-js/"/>
         <updated>2012-07-31T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/nao-use-jquery-no-seu-site-mobile-conheca-o-zepto-js/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/nao-use-jquery-no-seu-site-mobile-conheca-o-zepto-js/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Screencast com análise de performance web do datafilme.com.br</title>
         <link href="http://sergiolopes.org/screencast-analise-performance-web-datafilme/"/>
         <updated>2012-07-27T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/screencast-analise-performance-web-datafilme/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Na palestra que dei no &lt;strong&gt;Front in BH 2012&lt;/strong&gt; sobre &lt;a href=&quot;/frontinbh-otimizacoes-web/&quot; title=&quot;Descrição e slides da palestra de otimizações web do Front in BH 2012&quot;&gt;otimizações web&lt;/a&gt; lancei um desafio: quem quisesse se aprofundar no assunto podia me mandar seu site que eu ia escolher um pra analisar publicamente aqui no blog. Esse post é uma &lt;strong&gt;análise de aspectos de performance&lt;/strong&gt; do site &lt;a href=&quot;http://www.datafilme.com.br&quot;&gt;DataFilme.com.br&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;O site foi desenvolvido pelo pessoal da &lt;a href=&quot;http://bindsolution.com&quot;&gt;Bind Solution&lt;/a&gt; e o pedido para analisá-lo veio do &lt;a href=&quot;https://twitter.com/ridermansb&quot;&gt;Riderman Barbosa&lt;/a&gt;. Escolhi o site deles porque já está &lt;em&gt;muito bem feito&lt;/em&gt;. Muitas das otimizações já foram implementadas -- gzip, minificação, css no topo, js embaixo, sprites, juntar arquivos etc. Isso deu abertura pra observar e discutir &lt;strong&gt;otimizações menos triviais&lt;/strong&gt;, como carregamento assíncrono e quantização de PNGs.&lt;/p&gt;
&lt;p&gt;E este é também o &lt;strong&gt;primeiro screencast aqui no Blog&lt;/strong&gt;. Pensei que um vídeo iria me ajudar a mostrar melhor o processo de análise e as dicas, ao invés de só escrever um texto. Mas como é o primeiro vídeo que gravo, vou botar um &lt;em&gt;selo de beta&lt;/em&gt; aqui pra você não esperar um super vídeo profissional.&lt;/p&gt;
&lt;figure class=&quot;responsive video&quot;&gt;
    &lt;div class=&quot;video-wrapper&quot;&gt;
        &lt;iframe src=&quot;http://www.youtube.com/embed/f5ZZEtGCxrQ?HD=1&amp;amp;rel=0&amp;amp;showinfo=0&amp;amp;modestbranding=1&quot; frameborder=&quot;0&quot; allowfullscreen style=&quot;height: 375px; width: 500px;&quot;&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/figure&gt;


&lt;p&gt;O que achou? Acesse o site do &lt;a href=&quot;http://www.datafilme.com.br&quot;&gt;DataFilme.com.br&lt;/a&gt; também e veja o que mais melhoraria. E estou pensando em fazer mais análises como essas aqui no Blog, com sites indicados por leitores. Acha uma boa? Gosta do formato screencast? &lt;strong&gt;Deixe um comentário&lt;/strong&gt;.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Front In BH 2012: anotações da palestra 'Wordpress aliado do Front End' do Leandro Vieira</title>
         <link href="http://sergiolopes.org/front-in-bh-wordpress-leandro-vieira/"/>
         <updated>2012-07-17T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/front-in-bh-wordpress-leandro-vieira/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Leandro Vieira (&lt;a href=&quot;http://leandrovieira.com/&quot;&gt;blog&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/leandrovieira/&quot;&gt;twitter&lt;/a&gt;), da Apiki WP, palestrou no evento &lt;a href=&quot;http://www.frontinbh.com.br/&quot;&gt;Front In BH 2012&lt;/a&gt; sobre Wordpress com o título &lt;strong&gt;O WordPress como aliado do Desenvolvedor FrontEnd&lt;/strong&gt;.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/frontinbh2012/leandro.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;&amp;quot;Palestra do Leandro Vieira no Front In BH 2012&amp;quot;&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;minhas-anota-es&quot;&gt;Minhas anotações&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Wordpress cresce absurdamente em adoção. 22% em 2012, perspectiva de 50% pra 2017.&lt;/li&gt;
&lt;li&gt;1a fase: blog. 2a fase: CMS. 3a fase: plataforma de aplicação.&lt;/li&gt;
&lt;li&gt;iMasters tá sendo todo migrado pra Wordpress hoje. 10 anos de conteúdo.&lt;/li&gt;
&lt;li&gt;Diversas funções PHP pra você integrar seu tema à plataforma e plugins.&lt;/li&gt;
&lt;li&gt;Marcação gerada é semântica e cheia de classes pra estilização.&lt;/li&gt;
&lt;li&gt;Dev font-end que for criar pra WP deve conhecer essas classes e marcação pra evitar retrabalho.&lt;/li&gt;
&lt;li&gt;Novidade da próxima versão 3.5:&lt;ul&gt;
&lt;li&gt;Tema padrão novo, já sem muita cara de blog. Mais cara de site.&lt;/li&gt;
&lt;li&gt;Recurso de personalização em cima de um tema minimalista.&lt;/li&gt;
&lt;li&gt;Galerias de fotos com lightbox.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Wordpress traz funções pra facilitar a integração de JavaScript entre plugins. Ajuda a isolar JS.&lt;/li&gt;
&lt;li&gt;Declaro via PHP os arquivos JS, suas dependências etc. Depois, o WP gera as tag script satisfazendo as dependências, evitando duplicidade de frameworks etc.&lt;/li&gt;
&lt;li&gt;Otimizações: tem opção de inserir o JS no fim do body ao invés do head.&lt;/li&gt;
&lt;li&gt;O WP não inclue o jQuery com $, mas usa sempre o noConflict() e expõe só o jQuery.&lt;/li&gt;
&lt;li&gt;Já o CSS é totalmente aberto pro dev. Há muitas classes e IDs pro desenvolvedor usar.&lt;/li&gt;
&lt;li&gt;WP faz fingerprint de arquivos CSS/JS via param na URL.&lt;/li&gt;
&lt;li&gt;WP cospe HTML semântico, temas novos em HTML5. Usa microformats, tem preocupações com SEO.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;meus-coment-rios&quot;&gt;Meus comentários&lt;/h2&gt;
&lt;p&gt;Confesso que não sou o maior fã do Wordpress. Acho ele um tanto inflado demais, com muitos recursos e muita complicação pra se fazer coisas até simples. E curioso que, pra mim, o grande ponto onde o Wordpress é mais fraco é &lt;em&gt;justo no front end&lt;/em&gt;. Acho ele legal como plataforma CMS pra controlar os conteúdos, mas o HTML gerado costuma ser péssimo e os plugins só pioram isso.&lt;/p&gt;
&lt;p&gt;Aqui no blog eu uso o DocPad e fujo do Wordpress. Mas vejo seu uso sim para coisas maiores, que exijam mais controle de permissão e publicação. Curioso que, na palestra, o Leandro focou bastante no uso do Wordpress como &lt;strong&gt;plataforma de aplicações&lt;/strong&gt; quaisquer, não só blog e CMS. E eu nunca tinha pensado nisso. Mas certamente o Wordpress seria a última plataforma do mundo que eu escolheria pra um site qualquer (falou até de ecommerce em Wordpress) - blog e CMS até vai, mas usar o Wordpress pra outras coisas me parece crime grave.&lt;/p&gt;
&lt;p&gt;Esse meu ponto de vista deve ser por causa da minha origem de programador. Pra mim, prefiro uma plataforma simples e focada no backend do que uma ferramenta genérica. Talvez valha mais a pena usar o Wordpress quem não tem muita noção de backend e prefere algo pronto; mas aí pode ser que estejamos só tapando o sol com a peneira e escondendo o verdadeiro problema que é a falta de um backend mais robusto e focado no projeto.&lt;/p&gt;
&lt;p&gt;Tirando meus problemas pessoais com Wordpress de lado, aprendi muitas coisas na palestra sobre como estender o Wordpress. O Leandro mostrou como eles têm uma preocupação de expor um HTML semântico com classes bem definidas. E aprendi que dá pra otimizar os JavaScripts pra ficar no fim da página ao invés do head, um problema que vejo em muitos blog e eu achava que era culpa do Wordpress.&lt;/p&gt;
&lt;h2 id=&quot;outras-palestras-do-front-in-bh-2012&quot;&gt;Outras palestras do Front in BH 2012&lt;/h2&gt;
&lt;p&gt;Tem a &lt;a href=&quot;/frontinbh-otimizacoes-web/&quot;&gt;minha palestra sobre otimizações web&lt;/a&gt;, incluindo slides, vídeo e post complementar. E as outras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-rest-client-side-alexandre-gaigalas/&quot;&gt;Rest Client Side&lt;/a&gt;, com Alexandre Gaigalas&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-peixe-urbano-amazon-cdn-alexandre-tabor/&quot;&gt;Amazon AWS e CDN no Peixe Urbano&lt;/a&gt;, com Alexandre Tabor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-novidades-mozilla-leo-balter/&quot;&gt;Novo Cinto de Utilidades do Desenvolvedor JavaScript&lt;/a&gt;, com Leo Balter&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-desafios-design-mobile-horacio-soares/&quot;&gt;Desafios do Design Mobile&lt;/a&gt;, com Horácio Soares&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-css-sucks-zeno-rocha/&quot;&gt;CSS Sucks&lt;/a&gt;, com Zeno Rocha&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-estilizando-css-com-estilo-bernard-de-luna/&quot;&gt;Estilizando folhas de estilo com estilo&lt;/a&gt;, com Bernard de Luna&lt;/li&gt;
&lt;/ul&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Front In BH 2012: anotações da palestra 'REST client side' do Alexandre Gaigalas</title>
         <link href="http://sergiolopes.org/front-in-bh-rest-client-side-alexandre-gaigalas/"/>
         <updated>2012-07-17T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/front-in-bh-rest-client-side-alexandre-gaigalas/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Alexandre Gaigalas (&lt;a href=&quot;https://twitter.com/alganet/&quot;&gt;twitter&lt;/a&gt;), do Yahoo, palestrou no evento &lt;a href=&quot;http://www.frontinbh.com.br/&quot;&gt;Front In BH 2012&lt;/a&gt; sobre REST e HTTP com o título &lt;strong&gt;REST Client Side - Uma visão geral sobre projeto e consumo de APIs em REST no navegador e vantagens de utilizar recursos do protocolo HTTP&lt;/strong&gt; (&lt;a href=&quot;http://www.slideshare.net/Alganet/presentations&quot;&gt;slideshare&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/frontinbh2012/alexandre.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;&amp;quot;Palestra do Alexandre Gaigalas no Front In BH 2012&amp;quot;&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;minhas-anota-es&quot;&gt;Minhas anotações&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Links são as coisas mais legais na Internet.&lt;/li&gt;
&lt;li&gt;Antigamente usávamos referências estáticas, bibliografia, apontando livro, página etc.&lt;/li&gt;
&lt;li&gt;URIs apontam pra conceitos, mas não são o conceito. Trafegamos representações desses conceitos.&lt;/li&gt;
&lt;li&gt;Formatos de URIs: http:, ftp:, mailto:&lt;/li&gt;
&lt;li&gt;Como expressar links: link, a, img, script&lt;/li&gt;
&lt;li&gt;JSON não tem links, não serve pra substituir o XML&lt;/li&gt;
&lt;li&gt;Se você coloca um endereço numa propriedade do JSON, é só um texto. Não é um link.&lt;/li&gt;
&lt;li&gt;Cabeçalhos HTTP pra negociar com o servidor: Accept-Language passa língua&lt;/li&gt;
&lt;li&gt;Accept para content negotiation.&lt;/li&gt;
&lt;li&gt;Mesmo conceito, mesma URL, mas representações diferentes.&lt;/li&gt;
&lt;li&gt;XML é extensível.&lt;/li&gt;
&lt;li&gt;Você pode usar &lt;link&gt; dentro do XML pra indicar mais recursos. Ex: no twitter, devolvo links pros seguidores, pra quem eu sigo, pra listas etc.&lt;/li&gt;
&lt;li&gt;XML pode ter a mesma tag repetida, JSON não. Facilita extensibilidade.&lt;/li&gt;
&lt;li&gt;O Alexandre ama XML :)&lt;/li&gt;
&lt;li&gt;Podemos usar o jQuery pra navegar e manipular XML devolvido via Ajax, JSON não.&lt;/li&gt;
&lt;li&gt;HTTP suporta erros via status code. Muitas APIs devolvem 200 com erro dentro proprietário. Ruim.&lt;/li&gt;
&lt;li&gt;2xx: sucesso, 3xx: redirects, 4xx: client error, 5xx: server error&lt;/li&gt;
&lt;li&gt;Posso mandar texto do status code que eu quiser. E o código de acordo com o HTTP.&lt;/li&gt;
&lt;li&gt;Negociação de conteúdo: Formato, Idioma, Charset, Encoding, Range, X-...&lt;/li&gt;
&lt;li&gt;Ctrl F5 manda cabeçalhos de revalidação de caches.&lt;/li&gt;
&lt;li&gt;HTTP auth: suporte básico a autenticação&lt;/li&gt;
&lt;li&gt;HTTP digest é mais seguro que cookies, oauth&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;meus-coment-rios&quot;&gt;Meus comentários&lt;/h2&gt;
&lt;p&gt;O protocolo HTTP é realmente muito rico e extremanente interessante para basear APIs Web. Concordo com o uso do protocolo mais a fundo, ao invés de criar mini protocolos proprietários. E achei bem interessante a ideia do Alexandre de se usar os status code HTTP com mensagem customizada - sempre pensei em mandar a mensagem no body, além do status code.&lt;/p&gt;
&lt;p&gt;E ele discutiu um ponto bem interessante sobre como JSON é um formato de texto sem suporte a hipermídia ou outros conteúdos semânticos. Nesse sentido, o XML é muito mais robusto por oferecer hipermídia e um modelo extensível. Mas confesso que eu ando meio desiludido com a ideia de semântica global no REST; acho que, na prática, não ajuda tanto assim.&lt;/p&gt;
&lt;h2 id=&quot;outras-palestras-do-front-in-bh-2012&quot;&gt;Outras palestras do Front in BH 2012&lt;/h2&gt;
&lt;p&gt;Tem a &lt;a href=&quot;/frontinbh-otimizacoes-web/&quot;&gt;minha palestra sobre otimizações web&lt;/a&gt;, incluindo slides, vídeo e post complementar. E as outras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-wordpress-leandro-vieira/&quot;&gt;Wordpress aliado do Front End&lt;/a&gt;, com Leandro Vieira&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-peixe-urbano-amazon-cdn-alexandre-tabor/&quot;&gt;Amazon AWS e CDN no Peixe Urbano&lt;/a&gt;, com Alexandre Tabor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-novidades-mozilla-leo-balter/&quot;&gt;Novo Cinto de Utilidades do Desenvolvedor JavaScript&lt;/a&gt;, com Leo Balter&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-desafios-design-mobile-horacio-soares/&quot;&gt;Desafios do Design Mobile&lt;/a&gt;, com Horácio Soares&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-css-sucks-zeno-rocha/&quot;&gt;CSS Sucks&lt;/a&gt;, com Zeno Rocha&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-estilizando-css-com-estilo-bernard-de-luna/&quot;&gt;Estilizando folhas de estilo com estilo&lt;/a&gt;, com Bernard de Luna&lt;/li&gt;
&lt;/ul&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Front In BH 2012: anotações da palestra 'Desafios do Design Mobile' do Horácio Soares</title>
         <link href="http://sergiolopes.org/front-in-bh-desafios-design-mobile-horacio-soares/"/>
         <updated>2012-07-17T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/front-in-bh-desafios-design-mobile-horacio-soares/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Horácio Pastor Soares (&lt;a href=&quot;http://horaciosoares.blogspot.com.br/&quot;&gt;blog&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/horaciosoares&quot;&gt;twitter&lt;/a&gt;), da Digital Acesso, palestrou no evento &lt;a href=&quot;http://www.frontinbh.com.br/&quot;&gt;Front In BH 2012&lt;/a&gt; sobre os &lt;strong&gt;Desafios do Design Mobile&lt;/strong&gt; (&lt;a href=&quot;http://www.slideshare.net/horacio.soares/frontinbh-os-dasafios-do-desagin-mobile&quot;&gt;slides&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/frontinbh2012/horacio.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;&amp;quot;Palestra do Horácio Soares no Front In BH 2012&amp;quot;&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;minhas-anota-es&quot;&gt;Minhas anotações&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&amp;quot;Design for mobile people not mobile devices&amp;quot;&lt;/li&gt;
&lt;li&gt;Ambiente, Tempo, Cultura, Dispositivos diversos.&lt;/li&gt;
&lt;li&gt;Experiência mobile.&lt;/li&gt;
&lt;li&gt;A experiência perfeita: acho o que eu quero rapidamente.&lt;/li&gt;
&lt;li&gt;Projetamos &lt;strong&gt;para&lt;/strong&gt; a experiência de alguém&lt;/li&gt;
&lt;li&gt;Acessibilidade&lt;/li&gt;
&lt;li&gt;Usabilidade&lt;/li&gt;
&lt;li&gt;Simplicidade (o simples é poderoso)&lt;/li&gt;
&lt;li&gt;Numa interface perfeita, ninguém deveria errar&lt;/li&gt;
&lt;li&gt;Interatividade&lt;/li&gt;
&lt;li&gt;Velocidade&lt;/li&gt;
&lt;li&gt;Encontrabilidade&lt;/li&gt;
&lt;li&gt;Atratividade&lt;/li&gt;
&lt;li&gt;Agrade aos olhos sem distrair a mente.&lt;/li&gt;
&lt;li&gt;Utilidade&lt;/li&gt;
&lt;li&gt;Facilidade&lt;/li&gt;
&lt;li&gt;Portabilidade&lt;/li&gt;
&lt;li&gt;Qualidade é o diferencial&lt;/li&gt;
&lt;li&gt;Modelagem participativa.&lt;/li&gt;
&lt;li&gt;Planejamento é essencial.&lt;/li&gt;
&lt;li&gt;Projetar baseado nos fluxos do usuário.&lt;/li&gt;
&lt;li&gt;Prototipação é importante. É barato errar.&lt;/li&gt;
&lt;li&gt;Capacidades de hardware do mobile: gps, acelerometro, camera, bluetooth, nfc, multitoque.&lt;/li&gt;
&lt;li&gt;Bom suporte a HTML5&lt;/li&gt;
&lt;li&gt;One eyeball and one thumb.&lt;/li&gt;
&lt;li&gt;Contexto mobile é diferente, cheio de limitações.&lt;/li&gt;
&lt;li&gt;Te força a priorizar, a ter foco.&lt;/li&gt;
&lt;li&gt;Restrições são boas pro design.&lt;/li&gt;
&lt;li&gt;Mobile tá trazendo chance de repensarmos as coisas que fazemos no Desktop.&lt;/li&gt;
&lt;li&gt;Há muitos &lt;strong&gt;mitos&lt;/strong&gt; em mobile&lt;ul&gt;
&lt;li&gt;&amp;quot;Nunca vão ler isso em mobile&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;As pessoas nao vao se registrar&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;Nao vao comprar via mobile&amp;quot;&lt;/li&gt;
&lt;li&gt;&amp;quot;Nao vao produzir conteúdo&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Coloque labels no topo&lt;/li&gt;
&lt;li&gt;Não pedir repetição de senha/email&lt;/li&gt;
&lt;li&gt;Mostrar senhas sem máscara&lt;/li&gt;
&lt;li&gt;Evite cadastro obrigatório&lt;/li&gt;
&lt;li&gt;Diminuir os passos necessários&lt;/li&gt;
&lt;li&gt;Content First, nav depois&lt;/li&gt;
&lt;li&gt;Se for fazer site mobile diferente, fazer redirects das páginas e dar botao pra ver versao Desktop&lt;/li&gt;
&lt;li&gt;Não colocar botao de Voltar no site pq ja tem no navegador&lt;/li&gt;
&lt;li&gt;Difícil teste real de mobile, no contexto real em movimento.&lt;/li&gt;
&lt;li&gt;Devemos manter o mesmo conteúdo sempre, no mobile e desktop.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;meus-coment-rios&quot;&gt;Meus comentários&lt;/h2&gt;
&lt;p&gt;Eu acredito muito na web mobile. Falo nesse blog bastante sobre o assunto e acho que &lt;a href=&quot;http://blog.caelum.com.br/2012-e-o-ano-do-mercado-mobile-no-brasil/&quot;&gt;2012 é o ano do grande boom mobile no Brasil&lt;/a&gt;. Essa excelente palestra do Horácio trouxe novos dados e mais argumentos pra nos convencermos de que o futuro é realmente mobile.&lt;/p&gt;
&lt;p&gt;E esse mundo móvel traz novos desafios de UX impressionantes. Concordo com os pontos levantados e recomendo o &lt;a href=&quot;/review-livro-mobile-first-luke-wroblewski/&quot;&gt;livro Mobile First do Luke Wroblewski&lt;/a&gt; pra quem quiser se aprofundar. Da palestra, achei particularmente interessante a parte dos &lt;em&gt;mitos do mobile&lt;/em&gt;. Usuários móveis querem fazer tudo que os os outros usuários fazem, e temos que nos lembrar sempre disso.&lt;/p&gt;
&lt;h2 id=&quot;outras-palestras-do-front-in-bh-2012&quot;&gt;Outras palestras do Front in BH 2012&lt;/h2&gt;
&lt;p&gt;Tem a &lt;a href=&quot;/frontinbh-otimizacoes-web/&quot;&gt;minha palestra sobre otimizações web&lt;/a&gt;, incluindo slides, vídeo e post complementar. E as outras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-rest-client-side-alexandre-gaigalas/&quot;&gt;Rest Client Side&lt;/a&gt;, com Alexandre Gaigalas&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-wordpress-leandro-vieira/&quot;&gt;Wordpress aliado do Front End&lt;/a&gt;, com Leandro Vieira&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-peixe-urbano-amazon-cdn-alexandre-tabor/&quot;&gt;Amazon AWS e CDN no Peixe Urbano&lt;/a&gt;, com Alexandre Tabor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-novidades-mozilla-leo-balter/&quot;&gt;Novo Cinto de Utilidades do Desenvolvedor JavaScript&lt;/a&gt;, com Leo Balter&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-css-sucks-zeno-rocha/&quot;&gt;CSS Sucks&lt;/a&gt;, com Zeno Rocha&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-estilizando-css-com-estilo-bernard-de-luna/&quot;&gt;Estilizando folhas de estilo com estilo&lt;/a&gt;, com Bernard de Luna&lt;/li&gt;
&lt;/ul&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Front In BH 2012: anotações da palestra 'CSS sucks' do Zeno Rocha</title>
         <link href="http://sergiolopes.org/front-in-bh-css-sucks-zeno-rocha/"/>
         <updated>2012-07-17T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/front-in-bh-css-sucks-zeno-rocha/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Zeno Rocha (&lt;a href=&quot;http://zenorocha.com/&quot;&gt;blog&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/zenorocha&quot;&gt;twitter&lt;/a&gt;), da Liferay, palestrou no evento &lt;a href=&quot;http://www.frontinbh.com.br/&quot;&gt;Front In BH 2012&lt;/a&gt; sobre pré-processadores CSS com o título &lt;strong&gt;CSS Sucks&lt;/strong&gt; (&lt;a href=&quot;http://talks.zenorocha.com/frontinbh-2012/&quot;&gt;slides&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/frontinbh2012/zeno.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;&amp;quot;Palestra do Zeno Rocha no Front In BH 2012&amp;quot;&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;minhas-anota-es&quot;&gt;Minhas anotações&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CSS3 faz muitas coisas ferradas&lt;/li&gt;
&lt;li&gt;Mas é CSS é desorganizado (não tem padrão de código)&lt;/li&gt;
&lt;li&gt;CSS é repetitivo (mesma cor copiada em vários lugares)&lt;/li&gt;
&lt;li&gt;Precisa de muitos prefixos&lt;/li&gt;
&lt;li&gt;Nada intuitivo (exemplo é um gradiente grande e detalhado)&lt;/li&gt;
&lt;li&gt;Legal é usar pré-processadores pra gerar CSS&lt;/li&gt;
&lt;li&gt;Stylus: tira chaves e ponto e vírgula&lt;/li&gt;
&lt;li&gt;Prefix-free é ruim de performance. Isso não deveria ser feito em client-side. &lt;/li&gt;
&lt;li&gt;Prefixr é melhor. Tem plugin pro sublime.&lt;/li&gt;
&lt;li&gt;Mixins pra reaproveitar código.&lt;/li&gt;
&lt;li&gt;NIB são mixins prontos pro stylus&lt;/li&gt;
&lt;li&gt;SASS&lt;ul&gt;
&lt;li&gt;variáveis pra evitar repetição de valores&lt;/li&gt;
&lt;li&gt;partials com @import pra fazer include direto&lt;/li&gt;
&lt;li&gt;possível escolher SASS ou SCSS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Compass é uma extensão pro SASS com facilidades&lt;/li&gt;
&lt;li&gt;Compilador pra dev que fica observando modificações e compila&lt;/li&gt;
&lt;li&gt;Geração fácil de sprites com compass.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.caelum.com.br/css-facil-flexivel-e-dinamico-com-less/&quot;&gt;LESS&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;comentários de linha com //&lt;/li&gt;
&lt;li&gt;aninhamento de regras&lt;/li&gt;
&lt;li&gt;operações matemáticas&lt;/li&gt;
&lt;li&gt;funções de cor&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://lesselements.com/&quot;&gt;LESS elements&lt;/a&gt; são mixins prontos&lt;/li&gt;
&lt;li&gt;Há programas Desktop pra compilar essas coisas - tipo CodeKit, WinLess etc&lt;/li&gt;
&lt;li&gt;Porque o Twitter Bootstrap usa less e nao sass? Segundo eles:&lt;ul&gt;
&lt;li&gt;6x mais rápido&lt;/li&gt;
&lt;li&gt;Less é mais simples&lt;/li&gt;
&lt;li&gt;é em JavaScript&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;meus-coment-rios&quot;&gt;Meus comentários&lt;/h2&gt;
&lt;p&gt;Sou bastante fã de pré processadores, e usuário assíduo do LESS - tenho até um &lt;a href=&quot;http://blog.caelum.com.br/css-facil-flexivel-e-dinamico-com-less/&quot;&gt;post sobre LESS&lt;/a&gt; no blog da Caelum. Gostei de ver na palestra um pouco dos outros, em especial o Stylus que eu só conhecia de nome e não tinha visto código ainda.&lt;/p&gt;
&lt;p&gt;Só não gostei do título e da motivação; pra mim, CSS não é tão ruim assim. Uso pré-processadores pra ajudarem em alguma tarefa a mais, mas não vejo tão negativamente o CSS. Foram levantados uns pontos nos primeiros slides como ruins: &lt;a href=&quot;http://talks.zenorocha.com/frontinbh-2012/#10&quot;&gt;desorganizado&lt;/a&gt;, &lt;a href=&quot;http://talks.zenorocha.com/frontinbh-2012/#11&quot;&gt;repetitivo&lt;/a&gt;, &lt;a href=&quot;http://talks.zenorocha.com/frontinbh-2012/#12&quot;&gt;cheio de prefixos&lt;/a&gt; e &lt;a href=&quot;http://talks.zenorocha.com/frontinbh-2012/#13&quot;&gt;nada intuitivo&lt;/a&gt;. Pra mim, nenhum deles é culpa do CSS. A desorganização é culpa do programador (e vai acontecer usando LESS ou sass), a repetição no CSS é resolvida com classes (e variáveis no CSS4), os prefixos são culpa dos browsers que abusaram desse recurso que era pra ser uma exceção, e intuitivo ou não vai depender da qualidade do código independente se é CSS ou não.&lt;/p&gt;
&lt;p&gt;Recomendo pré-processadores de CSS. Mas os vejo mais como um complemento bacana do que como um um recurso antagônico ao CSS.&lt;/p&gt;
&lt;h2 id=&quot;outras-palestras-do-front-in-bh-2012&quot;&gt;Outras palestras do Front in BH 2012&lt;/h2&gt;
&lt;p&gt;Tem a &lt;a href=&quot;/frontinbh-otimizacoes-web/&quot;&gt;minha palestra sobre otimizações web&lt;/a&gt;, incluindo slides, vídeo e post complementar. E as outras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-rest-client-side-alexandre-gaigalas/&quot;&gt;Rest Client Side&lt;/a&gt;, com Alexandre Gaigalas&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-wordpress-leandro-vieira/&quot;&gt;Wordpress aliado do Front End&lt;/a&gt;, com Leandro Vieira&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-peixe-urbano-amazon-cdn-alexandre-tabor/&quot;&gt;Amazon AWS e CDN no Peixe Urbano&lt;/a&gt;, com Alexandre Tabor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-novidades-mozilla-leo-balter/&quot;&gt;Novo Cinto de Utilidades do Desenvolvedor JavaScript&lt;/a&gt;, com Leo Balter&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-desafios-design-mobile-horacio-soares/&quot;&gt;Desafios do Design Mobile&lt;/a&gt;, com Horácio Soares&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-estilizando-css-com-estilo-bernard-de-luna/&quot;&gt;Estilizando folhas de estilo com estilo&lt;/a&gt;, com Bernard de Luna&lt;/li&gt;
&lt;/ul&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Front In BH 2012: anotações da palestra 'Estilizando Folhas de Estilo com Estilo' do Bernard De Luna</title>
         <link href="http://sergiolopes.org/front-in-bh-estilizando-css-com-estilo-bernard-de-luna/"/>
         <updated>2012-07-17T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/front-in-bh-estilizando-css-com-estilo-bernard-de-luna/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Bernard De Luna (&lt;a href=&quot;http://bernarddeluna.com/blog/&quot;&gt;blog&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/bernarddeluna/&quot;&gt;twitter&lt;/a&gt;), da MeltDSP, palestrou no evento &lt;a href=&quot;http://www.frontinbh.com.br/&quot;&gt;Front In BH 2012&lt;/a&gt; sobre boas práticas de CSS com o título &lt;strong&gt;Estilizando Folhas de Estilo com Estilo&lt;/strong&gt; (&lt;a href=&quot;http://bernarddeluna.com/talks/&quot;&gt;slides&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id=&quot;minhas-anota-es&quot;&gt;Minhas anotações&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Ninguém sabe CSS.&lt;/li&gt;
&lt;li&gt;CSS é muito fácil e aí vc vai testando na tentativa e erro.&lt;/li&gt;
&lt;li&gt;Styleshit. A gente não sabe direito o que tá fazendo.&lt;/li&gt;
&lt;li&gt;Performance&lt;ul&gt;
&lt;li&gt;Key selector é o último seletor&lt;/li&gt;
&lt;li&gt;Browser seleciona da direita pra esquerda.&lt;/li&gt;
&lt;li&gt;class vs. id não faz muita diferença na prática&lt;/li&gt;
&lt;li&gt;não use tag.classe, só .classe&lt;/li&gt;
&lt;li&gt;Devíamos usar mais classes no HTML pra qualificar melhor no CSS.&lt;/li&gt;
&lt;li&gt;Não usar * como filho&lt;/li&gt;
&lt;li&gt;Ou &lt;em&gt; implícito: &lt;code&gt;body [type=text]&lt;/code&gt; é na verdade `body &lt;/em&gt;[type=text]`&lt;/li&gt;
&lt;li&gt;Não use @import&lt;/li&gt;
&lt;li&gt;Evite seletores CSS3: first-child, nth-child etc&lt;/li&gt;
&lt;li&gt;border-radius é bastante custoso. Mais que gradientes e shadows.&lt;/li&gt;
&lt;li&gt;Reflow e Repaint&lt;/li&gt;
&lt;li&gt;Definir tamanho das imagens no CSS ou IMG evita reflows.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Modularização&lt;ul&gt;
&lt;li&gt;OOCSS: Reuse, Reduce, Recycle&lt;/li&gt;
&lt;li&gt;Classes mais reusáveis.&lt;/li&gt;
&lt;li&gt;Use OCSS + LESS&lt;/li&gt;
&lt;li&gt;Usar variáveis é uma boa.&lt;/li&gt;
&lt;li&gt;Documente o código sempre.&lt;/li&gt;
&lt;li&gt;Crie objetos padrões e reaproveitáveis pro projeto.&lt;/li&gt;
&lt;li&gt;Crie classes baseadas na função e não no conteúdo.&lt;/li&gt;
&lt;li&gt;Smacss é uma alternativa. &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Mágica&lt;ul&gt;
&lt;li&gt;Surpreenda, reinvente, brinque, explore.&lt;/li&gt;
&lt;li&gt;Muitos potenciais hoje em dia.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/demosdetail/old-radio/launch&quot;&gt;old radio em css3 puro&lt;/a&gt; - impressionante!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;meus-coment-rios&quot;&gt;Meus comentários&lt;/h2&gt;
&lt;p&gt;O Bernard focou bastante nas questões de performance de código CSS, evitar reflows, usar seletores otimizados etc. Concordo que são pontos válidos e realmente eficazes. Só deixo uma ressalva que essas micro otimizações de código CSS só devem ser feitas depois que otimizações maiores já foram feitas - como habilitar gzip ou jogar o JS pra baixo. A não ser que você tenha uma página gigantesca, o impacto prático de usar seletores mais rápidos é bem menor do que a gente imagina.&lt;/p&gt;
&lt;p&gt;Sobre CSS modularizável e boas práticas, concordo completamente. Ultimamente tenho me deparado com muito CSS ruim e acoplado em projetos - inclusive meus de anos atrás que hoje preciso dar manutenção. Criar CSS mais flexível e reaproveitável é algo que tenho buscado ultimamente e digo: é &lt;strong&gt;muito&lt;/strong&gt; mais difícil do que parece.&lt;/p&gt;
&lt;p&gt;E um comentário especial pro demo impressionante do &lt;a href=&quot;https://developer.mozilla.org/en-US/demosdetail/old-radio/launch&quot;&gt;old radio&lt;/a&gt; que ele mostrou no final da palestra. Desenho inteiramente em CSS3 e com Web Audio API por trás. É fantástico.&lt;/p&gt;
&lt;h2 id=&quot;outras-palestras-do-front-in-bh-2012&quot;&gt;Outras palestras do Front in BH 2012&lt;/h2&gt;
&lt;p&gt;Tem a &lt;a href=&quot;/frontinbh-otimizacoes-web/&quot;&gt;minha palestra sobre otimizações web&lt;/a&gt;, incluindo slides, vídeo e post complementar. E as outras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-rest-client-side-alexandre-gaigalas/&quot;&gt;Rest Client Side&lt;/a&gt;, com Alexandre Gaigalas&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-wordpress-leandro-vieira/&quot;&gt;Wordpress aliado do Front End&lt;/a&gt;, com Leandro Vieira&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-peixe-urbano-amazon-cdn-alexandre-tabor/&quot;&gt;Amazon AWS e CDN no Peixe Urbano&lt;/a&gt;, com Alexandre Tabor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-novidades-mozilla-leo-balter/&quot;&gt;Novo Cinto de Utilidades do Desenvolvedor JavaScript&lt;/a&gt;, com Leo Balter&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-desafios-design-mobile-horacio-soares/&quot;&gt;Desafios do Design Mobile&lt;/a&gt;, com Horácio Soares&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-css-sucks-zeno-rocha/&quot;&gt;CSS Sucks&lt;/a&gt;, com Zeno Rocha&lt;/li&gt;
&lt;/ul&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Front In BH 2012: anotações da palestra 'Amazon EC2 e CDN no Peixe Urbano' do Alexandre Tabor</title>
         <link href="http://sergiolopes.org/front-in-bh-peixe-urbano-amazon-cdn-alexandre-tabor/"/>
         <updated>2012-07-17T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/front-in-bh-peixe-urbano-amazon-cdn-alexandre-tabor/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Alexandre Tabor, CTO do Peixe Urbano, palestrou no evento &lt;a href=&quot;http://www.frontinbh.com.br/&quot;&gt;Front In BH 2012&lt;/a&gt; sobre o uso da Amazon EC2, cloud e truques de CDN no Peixe Urbano.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/frontinbh2012/tabor.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;&amp;quot;Palestra do Alexandre Tabor no Front In BH 2012&amp;quot;&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;minhas-anota-es&quot;&gt;Minhas anotações&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Pioneiro em compras coletivas, 20 milhões de usuários hoje, 1.5 bilhão de reais economizados em promoções.&lt;/li&gt;
&lt;li&gt;Peixe Urbano não foi o primeiro serviço deles. Lançaram outro e não deu certo, foram pra compras coletivas.&lt;/li&gt;
&lt;li&gt;Começo era lean, MVP. Testa ideias e tira do ar as que não dão certo. Hoje já tem mais sites.&lt;/li&gt;
&lt;li&gt;Primeiro site era um teste, não foi codado muito robustamente.&lt;/li&gt;
&lt;li&gt;E foi essencial algo barato pra testar. Usaram Amazon EC2 como plataforma.&lt;/li&gt;
&lt;li&gt;Modelo de negócios gera picos (promoções chamativas tem maiores usuários). Usar cloud traz custos elásticos.&lt;/li&gt;
&lt;li&gt;Tinham problema grande de latência por usar data center da Amazon na Virgínia.&lt;/li&gt;
&lt;li&gt;Mediram tempo de 180ms de latência da Amazon pro Rio de Janeiro.&lt;/li&gt;
&lt;li&gt;Começaram a usar CDNs pra distribuição geográfica. Mas tinham problemas de que cada provedor de acesso ia pra um lugar. Alguns usavam servidor americano mesmo tendo no Brasil.&lt;/li&gt;
&lt;li&gt;Quando Amazon abriu em SP, decidiram não migrar pra cá pra economizar e por causa dos outros países do peixe urbano.&lt;/li&gt;
&lt;li&gt;Montaram então um cache na Amazon São Paulo com Squid.&lt;/li&gt;
&lt;li&gt;Usaram domínio secundário pra evitar cookies. A aplicação reescreve as URLs pro CDN.&lt;/li&gt;
&lt;li&gt;Montaram serviço de redimensionar as imagens dinamicamente e cachear no squid.&lt;/li&gt;
&lt;li&gt;Próximos passos:&lt;ul&gt;
&lt;li&gt;Mudar site pra estático e usar Ajax pra coisas dinâmicas.&lt;/li&gt;
&lt;li&gt;Implementar outras otimizações: gzip no squid, fingerprint nas URLs, minificação de JS e CSS&lt;/li&gt;
&lt;li&gt;Configurar proxies nos outros países do peixe urbano.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;meus-coment-rios&quot;&gt;Meus comentários&lt;/h2&gt;
&lt;p&gt;Foram muitas histórias sobre o Peixe Urbano, como abriram a empresa, como ela cresceu e seus desafios. Já tinha ouvido alguns no QCon SP 2011 mas ouvi novas histórias agora. O Peixe Urbano é um excelente case da Amazon AWS e seus gráficos mostram como a elasticidade do cloud é fundamental pro modelo de negócios deles. Não sou muito fã de IaaS - sou mais PaaS e SaaS -, mas é certamente bom ver casos de uso tão bacanas de cloud.&lt;/p&gt;
&lt;p&gt;Na palestra, foi abordada ainda a questão da latência de rede, e porquê servidores fora do Brasil podem não ser uma boa ideia. Foi discutida a ideia de se usar CDNs, até que o Tabor mostrou a solução deles de um proxy local no Brasil com Squid. Achei interessante, algo simples de se fazer, e eficaz se seu problema é latência. Mas curioso que ele mesmo levantou o ponto de que eles não têm gzip nem minificação ainda; eu teria feito essas otimizações antes de me preocupar com a latência de rede.&lt;/p&gt;
&lt;p&gt;Um ponto interessantíssimo pra mim da palestra foi quando o Tabor citou que a próxima versão do Peixe Urbano será estática, um HTMLzãon gerado pelo servidor. Eu cada vez mais tenho gostado dessa estratégia - esse blog é assim - e tenho visto que pode ser a solução pra muita gente.&lt;/p&gt;
&lt;h2 id=&quot;outras-palestras-do-front-in-bh-2012&quot;&gt;Outras palestras do Front in BH 2012&lt;/h2&gt;
&lt;p&gt;Tem a &lt;a href=&quot;/frontinbh-otimizacoes-web/&quot;&gt;minha palestra sobre otimizações web&lt;/a&gt;, incluindo slides, vídeo e post complementar. E as outras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-rest-client-side-alexandre-gaigalas/&quot;&gt;Rest Client Side&lt;/a&gt;, com Alexandre Gaigalas&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-wordpress-leandro-vieira/&quot;&gt;Wordpress aliado do Front End&lt;/a&gt;, com Leandro Vieira&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-novidades-mozilla-leo-balter/&quot;&gt;Novo Cinto de Utilidades do Desenvolvedor JavaScript&lt;/a&gt;, com Leo Balter&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-desafios-design-mobile-horacio-soares/&quot;&gt;Desafios do Design Mobile&lt;/a&gt;, com Horácio Soares&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-css-sucks-zeno-rocha/&quot;&gt;CSS Sucks&lt;/a&gt;, com Zeno Rocha&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-estilizando-css-com-estilo-bernard-de-luna/&quot;&gt;Estilizando folhas de estilo com estilo&lt;/a&gt;, com Bernard de Luna&lt;/li&gt;
&lt;/ul&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Front In BH 2012: anotações da palestra 'Novo Cinto de Utilidades do Desenvolvedor JavaScript' do Leo Balter</title>
         <link href="http://sergiolopes.org/front-in-bh-novidades-mozilla-leo-balter/"/>
         <updated>2012-07-17T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/front-in-bh-novidades-mozilla-leo-balter/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Leo Balter (&lt;a href=&quot;http://leobalter.net/&quot;&gt;blog&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/leobalter&quot;&gt;twitter&lt;/a&gt;), da Estante Virtual, palestrou no evento &lt;a href=&quot;http://www.frontinbh.com.br/&quot;&gt;Front In BH 2012&lt;/a&gt; sobre as novidades da Mozilla e do Firefox OS (&lt;a href=&quot;http://www.slideshare.net/leobalter/novo-cinto-de-utilidades-do-desenvolvedor-javascript-webapis-e-open-web&quot;&gt;slides&lt;/a&gt;).&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/frontinbh2012/leo.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;&amp;quot;Palestra do Leo Balter no Front In BH 2012&amp;quot;&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;minhas-anota-es&quot;&gt;Minhas anotações&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Representante Mozilla no Brasil.&lt;/li&gt;
&lt;li&gt;Missão da Mozilla é dar opções pros usuários, mesmo perdendo market share pro Chrome.&lt;/li&gt;
&lt;li&gt;Developer Tools nativo agora no Firefox, com inspetor HTML e CSS.&lt;/li&gt;
&lt;li&gt;Novo &lt;a href=&quot;/firefox-tilt-3d-inspector/&quot;&gt;Firefox Tilt pra inspeção 3D&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Scratchpad: escreve um JS e testa na hora, bom pra testes.&lt;/li&gt;
&lt;li&gt;No futuro, vai vir um novo debugger JS no Firefox.&lt;/li&gt;
&lt;li&gt;WebApps: offline, fora do browser, lançados via SO.&lt;/li&gt;
&lt;li&gt;Arquivo manifest.webapp pra descrever dados de instalação da app. (mime type application/x-web-app-manifest+json)&lt;/li&gt;
&lt;li&gt;Diferenças pra extensões/addons: webapp é independente do browser, e roda em qualquer browser.&lt;/li&gt;
&lt;li&gt;Mozilla Marketplace: lojinha de webapps.&lt;/li&gt;
&lt;li&gt;WebAPIs: geolocation, webworkers, websockets, indexeddb, video, audio&lt;/li&gt;
&lt;li&gt;Novas APIs: camera, mouse lock, power management, screen orientation, vibration, sms, telephony, fullscreen.&lt;/li&gt;
&lt;li&gt;WebApps nativos pra celular.&lt;/li&gt;
&lt;li&gt;Boot to gecko da Mozilla. Firefox OS. Lançamento no Brasil.&lt;/li&gt;
&lt;li&gt;Mozilla aposta que o mercado mobile tem espaço pra eles. No Desktop era a mesma coisa e eles conseguiram uma boa fatia.&lt;/li&gt;
&lt;li&gt;100% open source.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;meus-coment-rios&quot;&gt;Meus comentários&lt;/h2&gt;
&lt;p&gt;Acompanho com bastante esperança o desenrolar do Firefox OS e as investidas do pessoal da Mozilla no mundo mobile. Em especial, porque acho que eles são os únicos a tentar levar a ideia de &lt;strong&gt;webapps&lt;/strong&gt; pro próximo nível. A Apple tentou quando lançou o iPhone 1 mas parou aí; o Google não fez nada no Android pelas webapps, embora as promessas sejam muitas. Já a Mozilla tá investindo na criação de muitas APIs novas (telefonia, SMS etc) e, principalmente, na integração da webapp com o SO e um processo de &amp;quot;instalação&amp;quot;.&lt;/p&gt;
&lt;p&gt;Agora, minha esperança é que essas APIs sejam padronizadas e as outras plataformas adotem o mesmo padrão. Porque com relação ao Firefox OS em si, eu acho perda de tempo. O mundo mobile com os fabricantes e operadoras é muito mais complicado que o Desktop. Acho praticamente impossível o Firefox OS ser relevante pro mundo mobile. (nem a MS e seu excelente Windows Phone estão conseguindo)&lt;/p&gt;
&lt;p&gt;Espero estar errado no futuro. Porque a Mozilla realmente está com umas ideias bem bacanas. E eles têm um foco no usuário e em sua liberdade que ninguém mais tem - nem mesmo o Android. Eu gostaria que só isso fosse suficiente pra irem pra frente, mas infelizmente o mundo mobile mexe com poderes muito mais ocultos e a coisa não é tão simples.&lt;/p&gt;
&lt;h2 id=&quot;outras-palestras-do-front-in-bh-2012&quot;&gt;Outras palestras do Front in BH 2012&lt;/h2&gt;
&lt;p&gt;Tem a &lt;a href=&quot;/frontinbh-otimizacoes-web/&quot;&gt;minha palestra sobre otimizações web&lt;/a&gt;, incluindo slides, vídeo e post complementar. E as outras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-rest-client-side-alexandre-gaigalas/&quot;&gt;Rest Client Side&lt;/a&gt;, com Alexandre Gaigalas&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-wordpress-leandro-vieira/&quot;&gt;Wordpress aliado do Front End&lt;/a&gt;, com Leandro Vieira&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-peixe-urbano-amazon-cdn-alexandre-tabor/&quot;&gt;Amazon AWS e CDN no Peixe Urbano&lt;/a&gt;, com Alexandre Tabor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-desafios-design-mobile-horacio-soares/&quot;&gt;Desafios do Design Mobile&lt;/a&gt;, com Horácio Soares&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-css-sucks-zeno-rocha/&quot;&gt;CSS Sucks&lt;/a&gt;, com Zeno Rocha&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-estilizando-css-com-estilo-bernard-de-luna/&quot;&gt;Estilizando folhas de estilo com estilo&lt;/a&gt;, com Bernard de Luna&lt;/li&gt;
&lt;/ul&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Front In BH 2012: palestra sobre performance e otimizações web</title>
         <link href="http://sergiolopes.org/frontinbh-otimizacoes-web/"/>
         <updated>2012-07-14T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/frontinbh-otimizacoes-web/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Dia 14 de Julho, tive o prazer de palestrar no &lt;a href=&quot;http://www.frontinbh.com.br/&quot;&gt;FontInBH 2012&lt;/a&gt;, excelente evento de &lt;em&gt;front-end&lt;/em&gt; na capital mineira, sobre &lt;strong&gt;otimizações web&lt;/strong&gt;. Seguem os slides, anotações e links complementares.&lt;/p&gt;
&lt;h2 id=&quot;por-uma-web-mais-r-pida-t-cnicas-de-otimiza-o-de-sites&quot;&gt;Por uma Web mais rápida: técnicas de otimização de sites&lt;/h2&gt;
&lt;p&gt;Tive a oportunidade de palestrar sobre esse tema que gosto bastante e considero de máxima importância para os desenvolvedores. Os slides da palestra estão no &lt;a href=&quot;http://www.slideshare.net/caelumdev/frontinbh-2012-por-uma-web-mais-rpida-tcnicas-de-otimizaes-de-sites-por-srgio-lopes&quot; title=&quot;Slides: Por uma Web mais rápida: técnicas de otimização de sites&quot;&gt;slideshare&lt;/a&gt; pra você ver ou baixar.&lt;/p&gt;
&lt;figure class=&quot;responsive video slideshare&quot;&gt;
    &lt;div class=&quot;video-wrapper&quot;&gt;
        &lt;iframe src=&quot;http://www.slideshare.net/slideshow/embed_code/13635829&quot; frameborder=&quot;0&quot; allowfullscreen style=&quot;height: 375px; width: 500px;&quot;&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/figure&gt;


&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: coloquei também um vídeo com o áudio da palestra e os slides. Um tanto amador mas dá pra acompanhar sem problemas:&lt;/p&gt;
&lt;figure class=&quot;responsive video&quot;&gt;
    &lt;div class=&quot;video-wrapper&quot;&gt;
        &lt;iframe src=&quot;http://www.youtube.com/embed/GuPEcngbNAw?HD=1&amp;amp;rel=0&amp;amp;showinfo=0&amp;amp;modestbranding=1&quot; frameborder=&quot;0&quot; allowfullscreen style=&quot;height: 375px; width: 500px;&quot;&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/figure&gt;


&lt;p&gt;A palestra tratou de diversos tópicos de otimização, mas, claro, pelo tempo curto, não focou em detalhes de implementação. Se você gostou e quer se aprofundar no tema, sugiro alguns links:&lt;/p&gt;
&lt;h2 id=&quot;sobre-estudos-de-caso-e-impactos&quot;&gt;Sobre estudos de caso e impactos&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Tenho um post com &lt;a href=&quot;/tweetables-performance-web-otimizacoes/&quot;&gt;14 fatos tweetáveis sobre performance web&lt;/a&gt;. Lá há links pra muitos estudos de caso de empresas famosas.&lt;/li&gt;
&lt;li&gt;Um link recente do SEOmoz sobre os &lt;a href=&quot;http://www.seomoz.org/ugc/13-questions-and-answers-about-google-site-speed-and-seo&quot;&gt;impactos de performance em SEO&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Considerações sobre latência e o &lt;a href=&quot;http://zoompf.com/blog/2011/12/i-dont-care-how-big-yours-is&quot;&gt;mito da banda larga&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;pra-se-aprofundar-nas-t-cnicas-de-otimiza-o&quot;&gt;Pra se aprofundar nas técnicas de otimização&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Tenho um post bem completo no &lt;a href=&quot;http://blog.caelum.com.br/por-uma-web-mais-rapida-26-tecnicas-de-otimizacao-de-sites/&quot;&gt;blog da Caelum com 26 práticas de otimizações&lt;/a&gt;. Recomendo.&lt;/li&gt;
&lt;li&gt;Os guias de boas práticas do &lt;a href=&quot;https://developers.google.com/speed/docs/best-practices/rules_intro&quot;&gt;Google&lt;/a&gt; e do &lt;a href=&quot;http://developer.yahoo.com/performance/rules.html&quot;&gt;Yahoo&lt;/a&gt; são excelentes.&lt;/li&gt;
&lt;li&gt;Livros nós temos: &lt;em&gt;High Performance Web Sites&lt;/em&gt;, 2007, O&amp;#39;Reilly e &lt;em&gt;Even Faster Web Sites&lt;/em&gt;, 2009, O&amp;#39;Reilly, do Steve Souders.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;http://www.caelum.com.br/curso/online/otimizacoes-web/&quot;&gt;Curso Online de Otimizações Web&lt;/a&gt; da Caelum que estou fazendo (lançamento em breve)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;ferramentas-pra-implementar-as-t-cnicas-vistas&quot;&gt;Ferramentas pra implementar as técnicas vistas&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Minificação de CSS, JS e HTML: &lt;a href=&quot;http://developer.yahoo.com/yui/compressor/&quot;&gt;YUI Compressor&lt;/a&gt;, &lt;a href=&quot;https://developers.google.com/closure/compiler/&quot;&gt;Google Closure Compiler&lt;/a&gt;, &lt;a href=&quot;http://marijnhaverbeke.nl//uglifyjs&quot;&gt;uglifyjs&lt;/a&gt;, &lt;a href=&quot;http://code.google.com/p/htmlcompressor/&quot;&gt;htmlcompressor&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Compressão de imagens: &lt;a href=&quot;http://smushit.com/&quot;&gt;Smushit&lt;/a&gt;, &lt;a href=&quot;http://kraken.io/&quot;&gt;Kraken.io&lt;/a&gt;, &lt;a href=&quot;http://www.jpegmini.com/&quot;&gt;JPEGmini&lt;/a&gt;, &lt;a href=&quot;http://imageoptim.com/&quot;&gt;ImageOptim&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Diagnóstico: &lt;a href=&quot;https://developers.google.com/pagespeed/&quot;&gt;PageSpeed&lt;/a&gt;, &lt;a href=&quot;http://developer.yahoo.com/yslow/&quot;&gt;YSlow&lt;/a&gt;, &lt;a href=&quot;http://webpagetest.org/&quot;&gt;WebPageTest&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Sprites: &lt;a href=&quot;http://spriteme.org/&quot;&gt;SpriteMe&lt;/a&gt;, ou na mão com &lt;a href=&quot;http://stackoverflow.com/questions/88711/how-to-concatenate-icons-into-a-single-image-with-imagemagick&quot;&gt;ImageMagick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.scalora.org/projects/uriencoder/&quot;&gt;Conversor de data URI&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Frameworks de carregamento assíncrono de JS: &lt;a href=&quot;http://labjs.com/&quot;&gt;LABjs&lt;/a&gt;, &lt;a href=&quot;http://headjs.com/&quot;&gt;HeadJS&lt;/a&gt;, &lt;a href=&quot;http://stevesouders.com/controljs/&quot;&gt;ControlJS&lt;/a&gt;. Ou (prefiro) o simples &lt;a href=&quot;http://www.sitepoint.com/non-blocking-async-defer/&quot;&gt;async do HTML5&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&quot;outras-palestras-do-evento&quot;&gt;Outras palestras do evento&lt;/h2&gt;
&lt;p&gt;Aproveitei que estava lá no evento e fiz umas anotações sobre as outras excelentes palestras, junto com comentários meus:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-rest-client-side-alexandre-gaigalas/&quot;&gt;Rest Client Side&lt;/a&gt;, com Alexandre Gaigalas&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-wordpress-leandro-vieira/&quot;&gt;Wordpress aliado do Front End&lt;/a&gt;, com Leandro Vieira&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-peixe-urbano-amazon-cdn-alexandre-tabor/&quot;&gt;Amazon AWS e CDN no Peixe Urbano&lt;/a&gt;, com Alexandre Tabor&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-novidades-mozilla-leo-balter/&quot;&gt;Novo Cinto de Utilidades do Desenvolvedor JavaScript&lt;/a&gt;, com Leo Balter&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-desafios-design-mobile-horacio-soares/&quot;&gt;Desafios do Design Mobile&lt;/a&gt;, com Horácio Soares&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-css-sucks-zeno-rocha/&quot;&gt;CSS Sucks&lt;/a&gt;, com Zeno Rocha&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/front-in-bh-estilizando-css-com-estilo-bernard-de-luna/&quot;&gt;Estilizando folhas de estilo com estilo&lt;/a&gt;, com Bernard de Luna&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Você estava no evento? Deixe sua opinião sobre a palestra e não esqueça de participar da &lt;strong&gt;promoção aqui no blog&lt;/strong&gt;!&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>CSS fácil, flexível e dinâmico com LESS</title>
         <link href="http://blog.caelum.com.br/css-facil-flexivel-e-dinamico-com-less/"/>
         <updated>2012-06-21T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/css-facil-flexivel-e-dinamico-com-less/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/css-facil-flexivel-e-dinamico-com-less/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Como debugar remotamente uma página no Chrome Mobile do Android</title>
         <link href="http://sergiolopes.org/remote-debug-chrome-mobile/"/>
         <updated>2012-06-18T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/remote-debug-chrome-mobile/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;O desenvolvimento de página web mobile é difícil de testar por envolver outros aparelhos. Mas os browsers mais novos já possuem recurso de debug remoto. Além do &lt;a href=&quot;/debug-mobile-safari-ios/&quot; title=&quot;Meu post sobre remote debug no iOS 5&quot;&gt;iOS&lt;/a&gt;, o &lt;strong&gt;Chrome Mobile&lt;/strong&gt; também traz esse recurso.&lt;/p&gt;
&lt;p&gt;Embora ainda não haja suporte nativo para debug do browser padrão do Android, o suporte no Chrome é muito bom. Ele apenas para &lt;em&gt;Android 4&lt;/em&gt; e já foi anunciado como futuro substituto do browser padrão do Android.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(eu já escrevi aqui no blog também como debugar páginas no &lt;a href=&quot;/debug-mobile-safari-ios/&quot; title=&quot;Meu post sobre remote debug no iOS 5&quot;&gt;Mobile Safari do iOS 5+&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;pr-requisitos&quot;&gt;Pré-requisitos&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Instale o &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.android.chrome&quot;&gt;Chrome Mobile&lt;/a&gt; no seu Android 4.&lt;/li&gt;
&lt;li&gt;Baixe o &lt;a href=&quot;http://developer.android.com/sdk/index.html&quot;&gt;Android SDK&lt;/a&gt; pra sua máquina.&lt;/li&gt;
&lt;li&gt;Instale o &lt;a href=&quot;http://www.google.com/chrome&quot;&gt;Google Chrome&lt;/a&gt; no seu Desktop.&lt;/li&gt;
&lt;li&gt;Tenha um cabo USB à mão pra conectar o dispositivo no computador.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;configura-es-no-celular&quot;&gt;Configurações no celular&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Vá nas &lt;strong&gt;Configurações de sistema&lt;/strong&gt; do Android e entre em &lt;strong&gt;Opções do Desenvolvedor&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Lá, habilite a opção &lt;strong&gt;Depuração USB&lt;/strong&gt;:&lt;figure&gt;
  &lt;img src=&quot;/img/posts/debug-chrome-mobile/debug-usb.png&quot; alt=&quot;Habilite depuração de USB.&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;Abra o &lt;strong&gt;Chrome Mobile&lt;/strong&gt; no celular e vá em suas &lt;strong&gt;Configurações&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Entre no menu &lt;strong&gt;Ferramentas para desenvolvedores&lt;/strong&gt; lá no final.&lt;/li&gt;
&lt;li&gt;Lá, habilite a opção &lt;strong&gt;Ativar a depuração da web via USB&lt;/strong&gt;&lt;figure&gt;
  &lt;img src=&quot;/img/posts/debug-chrome-mobile/debug-web.png&quot; alt=&quot;Habilite depuração da web via USB.&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
&lt;/figure&gt;

&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;debug-do-celular-via-desktop&quot;&gt;Debug do celular via Desktop&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Plugue o celular no computador usando o cabo USB.&lt;/li&gt;
&lt;li&gt;No terminal, entre na pasta que você instalou o &lt;em&gt;Android SDK&lt;/em&gt; e em &lt;strong&gt;platform-tools&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;(opcional)&lt;/em&gt; Rode o &lt;em&gt;ADB&lt;/em&gt; pra listar os dispositivos e ver se seu celular foi reconhecido:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs bash&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;  ./adb devices
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Se não for reconhecido, verifique se a depuração USB está habilitada e tente plugá-lo novamente.&lt;/li&gt;
&lt;li&gt;Ainda usando o ADB, rode o comando que habilita o debug remoto no Chrome:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs bash&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;./adb forward tcp:9222 localabstract:chrome_devtools_remote
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Por fim, basta ir no seu Chrome Desktop e abrir o endereço &lt;strong&gt;&lt;a href=&quot;http://localhost:9222&quot;&gt;http://localhost:9222&lt;/a&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Todas as abas abertas no celular serão listadas. Selecione uma para debugar:&lt;figure&gt;
  &lt;img src=&quot;/img/posts/debug-chrome-mobile/pages.png&quot; alt=&quot;Escolha uma das abas abertas para debugar.&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
&lt;/figure&gt;&lt;/li&gt;
&lt;li&gt;O &lt;strong&gt;Web Inspector&lt;/strong&gt; será aberto no seu Chrome no Desktop mas linkado com o Chrome no celular. Você pode debugar normalmente e fazer alterações e vê-las em tempo real no aparelho:&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/debug-chrome-mobile/web-inspector.png&quot; alt=&quot;O Web Inspector aberto no Chrome Desktop.&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;img src=&quot;/img/posts/debug-chrome-mobile/remote-debug.jpg&quot; alt=&quot;A página no Chrome Mobile sendo alterada em real-time.&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Debugando uma página do celular no Desktop&lt;/em&gt;
&lt;/figure&gt;

               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>A funcionalidade mobile mais importante</title>
         <link href="http://sergiolopes.org/a-funcionalidade-mobile-mais-importante/"/>
         <updated>2012-06-11T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/a-funcionalidade-mobile-mais-importante/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Talvez você ainda esteja decidindo se vai de site mobile específico ou de &lt;a href=&quot;/responsive-web-design/&quot;&gt;página única responsiva&lt;/a&gt;. Ou até já começou a implementar sua estratégia mobile, mas as coisas levam tempo e você está incomodado com usuários mobile abrindo seu site Desktop atual.&lt;/p&gt;
&lt;p&gt;Ou talvez você não tenha tempo pra um &lt;a href=&quot;/responsive-web-design/&quot;&gt;design responsivo&lt;/a&gt; agora. Mas quer ter um site &lt;em&gt;mobile friendly&lt;/em&gt; enquanto aprende os truques das &lt;a href=&quot;http://blog.caelum.com.br/flexibilidade-em-paginas-para-dispositivos-moveis-com-media-queries/&quot;&gt;media queries&lt;/a&gt; e &lt;a href=&quot;http://blog.caelum.com.br/pixels-pixels-ou-pixels-dicas-de-web-mobile-com-viewport/&quot;&gt;viewport&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Se você tiver tempo para apenas uma coisa agora, foque em deixar &lt;a href=&quot;http://blog.caelum.com.br/por-uma-web-mais-rapida-26-tecnicas-de-otimizacao-de-sites/&quot;&gt;seu site mais rápido&lt;/a&gt;. Responsivo, site mobile exclusivo e até seu velho site Desktop num celular. &lt;strong&gt;Não interessa.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;a-mais-importante-funcionalidade-do-seu-site-para-um-usu-rio-mobile-performance-&quot;&gt;A mais importante funcionalidade do seu site para um usuário mobile é performance.&lt;/h2&gt;
&lt;p&gt;O site Desktop menos mobile do mundo se torna &lt;strong&gt;acessível&lt;/strong&gt; num celular se for &lt;strong&gt;rápido e otimizado&lt;/strong&gt;. E um site cuidadosamente construído pra mobile é &lt;strong&gt;lixo&lt;/strong&gt; se for &lt;strong&gt;lento e pesado&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;É verdade que &lt;a href=&quot;/tweetables-performance-web-otimizacoes/&quot;&gt;performance é importante pra todo mundo&lt;/a&gt;. Mas em mobile, é &lt;strong&gt;absolutamente essencial&lt;/strong&gt;. E apesar das limitações de hardware e rede dos aparelhos, 71% dos usuários esperam que um site abra tão rápido no celular quanto no Desktop (&lt;a href=&quot;http://www.gomez.com/wp-content/downloads/19986_WhatMobileUsersWant_Wp.pdf&quot; title=&quot;Pesquisa Gomez/Compuware em julho de 2011&quot;&gt;fonte&lt;/a&gt;). Um site mobile não otimizado simplesmente não será usado.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Sempre lembre da funcionalidade mais importante quando pensar na sua estratégia mobile e otimize seu site.&lt;/em&gt; E além de todas as &lt;a href=&quot;http://blog.caelum.com.br/por-uma-web-mais-rapida-26-tecnicas-de-otimizacao-de-sites/&quot;&gt;práticas normais de otimização&lt;/a&gt;, o mundo mobile traz alguns desafios que tratei na minha &lt;a href=&quot;/palestra-mobile-web/&quot;&gt;palestra de web mobile&lt;/a&gt;.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Review do livro &quot;Mobile First&quot; do Luke Wroblewski</title>
         <link href="http://sergiolopes.org/review-livro-mobile-first-luke-wroblewski/"/>
         <updated>2012-05-21T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/review-livro-mobile-first-luke-wroblewski/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Ok, você já se convenceu que a &lt;a href=&quot;http://blog.caelum.com.br/2012-e-o-ano-do-mercado-mobile-no-brasil/&quot; title=&quot;2012 é o ano do mercado mobile no Brasil&quot;&gt;Web é mobile&lt;/a&gt; (Desktop será a exceção :), já acorda pensando em mobile, e acha &lt;a href=&quot;/responsive-web-design/&quot;&gt;design responsivo&lt;/a&gt; a última bolacha do pacote. Mas falta ver &lt;strong&gt;boas práticas e dicas&lt;/strong&gt; de como atacar a nova Web. Conheça o &lt;strong&gt;excelente livro&lt;/strong&gt; &lt;a href=&quot;http://www.abookapart.com/products/mobile-first&quot; title=&quot;Livro Mobile First do Luke Wroblewski&quot;&gt;&lt;em&gt;&amp;quot;Mobile First&amp;quot;&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Comprei o livro no &lt;a href=&quot;http://www.abookapart.com/products/mobile-first-responsive-web-design-bundle&quot;&gt;combo junto com o &lt;em&gt;&amp;quot;Responsive Web Design&amp;quot;&lt;/em&gt;&lt;/a&gt;  do Ethan Marcotte -- aliás, excelente preço, $15 os dois ebooks. Assim como os outros livros da &lt;a href=&quot;http://www.abookapart.com/&quot;&gt;A Book Apart&lt;/a&gt;, &lt;em&gt;Mobile First&lt;/em&gt; é &lt;strong&gt;focado, curto e rápido de ler&lt;/strong&gt; -- veja também meu &lt;a href=&quot;/review-responsive-design-ethan-marcotte/&quot;&gt;review do livro &lt;em&gt;&amp;quot;Responsive Web Design&amp;quot;&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;É um livro de boas práticas de usabilidade, design e conteúdo para mobile&lt;/strong&gt;. Não há código -- o que achei bom --, apenas dicas e análises do autor sobre vários aspectos do desenvolvimento Web mobile e Desktop. A premissa básica que você já vê pelo título é que deveríamos começar nossos sites por &lt;strong&gt;mobile primeiro&lt;/strong&gt;. As restrições e limitações do mundo móvel são uma boa coisa para nos ajudar a &lt;strong&gt;priorizar conteúdo&lt;/strong&gt;, &lt;strong&gt;otimizar o site&lt;/strong&gt;, e &lt;strong&gt;focar no que realmente é importante&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Eu gostei bastante desse livro, mais até que do &lt;a href=&quot;/review-responsive-design-ethan-marcotte/&quot;&gt;&lt;em&gt;&amp;quot;Responsive Web Design&amp;quot; do Ethan Marcotte&lt;/em&gt;&lt;/a&gt;. É um livro básico mas não óbvio, com &lt;strong&gt;várias sacadas que te fazem pensar melhor seus designs mobile&lt;/strong&gt;. Um desenvolvedor iniciante consegue acompanhá-lo, e um mais experiente certamente irá aproveitar vários pontos.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/livro-mobile-first-luke/livro-mobile-first.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;&amp;quot;Livro Mobile First de Luke Wroblewski. Editora A Book Apart.&amp;quot;&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;Luke Wroblewski começa destacando as vantagens de ir &lt;em&gt;mobile first&lt;/em&gt; com excelentes argumentos. Trata das restrições comuns dos smartphones e tablets, e também das suas capacidades únicas -- como geolocalização, sensores e câmeras. Depois, parte para aspectos práticos de mobile sobre organização de conteúdo, como lidar com ações e input de usuário, e como organizar o layout da página.&lt;/p&gt;
&lt;p&gt;Separei algumas &lt;strong&gt;excelentes passagens&lt;/strong&gt; detacadas durante minha leitura no Kindle, começando pela minha favorita:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If your start to hear customers asking for your desktop web experience to be more like the simple, easy-to-use mobile one -- you&amp;#39;re doing it right.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;mobile-first-bom-pra-todo-mundo&quot;&gt;Mobile first é bom pra todo mundo&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;If you design for mobile first, you can create agreement up front on what matters most. You can then apply the same rationale to the desktop [...]. If you can agree on the most important set of features and content for your customers and business, why should that priorization change with mode screen space?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Anything that can be done to increase performance on mobile should be done. At the highest level that means sending less stuff and using whichever browser and server technologies are available to you to speed things up.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;If you focus on mobile first and make things fast enough for spotty mobile networks, your websites and applications will be blazingly fast on the desktop and your customers will love you for it -- just another advantage to embracing mobile constraints up front.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Any actions that rely on mouse hovers in our desktop web experiences need to be rethought--and that&amp;#39;s a good thing. Many uses of hover actions on the web assume too much. Just because someone places their mouse cursor over something doesn&amp;#39;t mean they are asking for a pop-up menu of actions and options.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;n-o-corte-conte-do&quot;&gt;Não corte conteúdo&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Customers will expect to do just about everything (whitin reason) on mobile. Especially those who primarily (or only) use their mobiles to get online. So don&amp;#39;t dumb things down on mobile -- focus on what really matters most anywhere people can access your website.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;When reflecting on a lot of mobile usage patterns, I like to imagine people as &amp;quot;one eyeball and one thumb&amp;quot;. One thumb because they are likely to be holding their mobile in one hand and using a single thumb to control it; one eyeball because in many locations where mobile devices are used we only have people&amp;#39;s partial attention.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;While the time and place people interact with mobile may be different, the core value of your website stays the same. So once again, don&amp;#39;t deny people content and features just because they&amp;#39;re on a mobile device.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;dicas-de-ux&quot;&gt;Dicas de UX&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;As a general rule, content takes precedence over navigation on mobile. [People] want immediate answers to their needs and not your site map.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;On mobile, your options for on-hover menus are: on screen, on tap/swipe, on a separate screen, or (my favorite) gone for good.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;While navigation menus fixed to the bottom of the screen might be a good idea in some native mobile applications, the variable presence of web browsers menus and physical controls below the screen on mobile device means they are often a poor idea in mobile web experiences. If you need a fixed menu better to fix it to the top.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Human fingers are imprecise pointing instruments: they lack the pixel-level accuracy of a mouse pointer; they come in different sizes; and it&amp;#39;s not uncommon for them to slip or move around as we interact with our devices. Bigger actions mean bigger touch targets&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Since the majority of people are right-handed [...] primary actions can be placed in the middle or bottom of the screen and arranged from left to right.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;[The core gestures for mobile experiences are] tap, drag and swipe.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;device-experiences&quot;&gt;Device experiences&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Consider the differences between connected TVs, desktop/laptops, tablets, smartphones and feature phones. Each of these devices experiences has a unique common user posture, primary input method and average display size.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Device experiences can also be useful for thinking through how each break point in a responsive web design solution should not only look but act as well. Layout and media assets can be adjusted to make the best use of available screen space and to optimize for specific input capabilities.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;The right combination of device experience-specific designs, responsive web design, and fluid interfaces can ensure your mobile web experiences work on today&amp;#39;s mobile devices and beyond.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;prioriza-o-de-conte-do&quot;&gt;Priorização de conteúdo&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Reduction is the best layout approach available to you on mobile. [...] Across all your mobile layouts, aim for the minimum amount necessary to help people meet their needs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Embracing constraints (rather than fighting them) will ultimately get you to better designs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Não deixe de ver também meu review do &lt;a href=&quot;/review-responsive-design-ethan-marcotte/&quot;&gt;livro Responsive Web Design do Ethan Marcotte&lt;/a&gt;, uma excelente companhia para esse livro.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Review do livro &quot;Responsive Web Design&quot; do Ethan Marcotte</title>
         <link href="http://sergiolopes.org/review-responsive-design-ethan-marcotte/"/>
         <updated>2012-05-14T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/review-responsive-design-ethan-marcotte/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Design responsivo é o futuro da Web. Ethan Marcotte criou o termo em 2010 em um famoso &lt;a href=&quot;http://www.alistapart.com/articles/responsive-web-design/&quot; title=&quot;Artigo original do Ethan sobre RWD&quot;&gt;artigo do A List Apart&lt;/a&gt;, que depois deu origem a seu livro &lt;a href=&quot;http://www.abookapart.com/products/responsive-web-design&quot;&gt;&amp;quot;Responsive Web Design&amp;quot;&lt;/a&gt;, editado pela &lt;em&gt;A Book Apart&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Há pouco tempo, li a versão em ebook do livro em meu Kindle Fire -- recomendo um leitor colorido como o Fire pelas imagens. Minha experiência começou no excelente processo de compra, extremamente descomplicado, da &lt;a href=&quot;http://www.abookapart.com/&quot;&gt;A Book Apart&lt;/a&gt;. Dois cliques, nenhum campo preenchido e compra feita pelo PayPal -- e eu não tinha comprado nunca com eles, não tinha cadastro anterior nem nada. &lt;em&gt;(aliás, se você for comprar, recomendo o &lt;a href=&quot;http://www.abookapart.com/products/mobile-first-responsive-web-design-bundle&quot;&gt;combo com o &amp;quot;Mobile First&amp;quot; do Luke Wroblewski&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/livro-rwd-ethan/livro-rwd.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;&amp;quot;Livro Responsive Web Design de Ethan Marcotte. Editora A Book Apart.&amp;quot;&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;Sobre o livro em si. &lt;strong&gt;Leitura bastante agradável&lt;/strong&gt;, um livro &lt;strong&gt;direto ao ponto&lt;/strong&gt; e &lt;strong&gt;curto&lt;/strong&gt;, o que eu acho uma grande vantagem. Ethan Marcotte é o pai do design responsivo, então ler o que ele tem a dizer traz uma certa &lt;strong&gt;autoridade&lt;/strong&gt;, além de ser interessante pra ver como surgiram as ideias desse movimento.&lt;/p&gt;
&lt;p&gt;São cinco capítulos, que giram em torno dos três ingredientes principais dos designs responsivos -- &lt;strong&gt;grids fluídos&lt;/strong&gt;, &lt;strong&gt;&lt;a href=&quot;http://blog.caelum.com.br/flexibilidade-em-paginas-para-dispositivos-moveis-com-media-queries/&quot; title=&quot;Artigo sobre Media queries no Blog da Caelum&quot;&gt;media queries&lt;/a&gt;&lt;/strong&gt; e &lt;strong&gt;imagens flexíveis&lt;/strong&gt;. Ele fala bastantes também sobre porque design responsivo é a única solução viável pra Web do futuro, cada vez mais fragmentada em dispositivos, telas e navegadores diferentes. É desenvolvido um exemplo no livro de ponta a ponta, que pode até ser &lt;a href=&quot;http://responsivewebdesign.com/robot/&quot; title=&quot;Exemplo do livro&quot;&gt;visto online&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Mas o livro é bastante básico&lt;/em&gt;. Não me entenda mal, livros básicos são ótimos e precisamos deles. Porém, se você já leu e estudou um pouco de responsive design, não vai achar nenhuma grande revelação no livro. A parte de media queries, por exemplo, aborda poucas opções em comparação ao que temos hoje nos navegadores; o capítulo de imagens flexíveis então, é bastante superficial dado o estado das &lt;a href=&quot;http://css-tricks.com/which-responsive-images-solution-should-you-use/&quot; title=&quot;Vários frameworks de imagens responsivas&quot;&gt;discussões atuais&lt;/a&gt; sobre o tema. Eu, que acompanho bastante a comunidade de design responsivo, leio muitos blogs e artigos sobre o assunto, não aprendi nada de muito novo. Mas &lt;strong&gt;gostei do livro pelo formato e objetividade&lt;/strong&gt;, e vou &lt;strong&gt;recomendá-lo pra quem estiver começando&lt;/strong&gt; na área.&lt;/p&gt;
&lt;p&gt;Alguns destaques das anotações que fiz no Kindle durante a leitura (e se você quiser saber mais sobre design responsivo, recomendo esse &lt;a href=&quot;/responsive-web-design/&quot; title=&quot;Artigo: Design Responsivo por uma Web Única&quot;&gt;meu artigo aqui no blog&lt;/a&gt; ou esse meu post com &lt;a href=&quot;/diretorio-design-responsivo/&quot;&gt;links de artigos, palestras, livros e cursos em português&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;We need to break our habit of translating pixels from Photoshop directly into our CSS, and focus our attention on the proportions behind our designs. It&amp;#39;s about becoming &lt;em&gt;context-aware&lt;/em&gt;: better understanding the ratio-based relationships between element and container.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;We assume mobile users need less content in part because desktop users can tolerate more. [...] But just because desktop users &lt;em&gt;can&lt;/em&gt; sift through more content, does that mean they need to? In other words, why is easy access to key tasks only the domain of mobile users? Why can&amp;#39;t all users of our sites enjoy the same level of focused, curated content?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;If you design mobile first, you create agreement on what matters most. You can then apply the same rationale to the desktop/laptop version of the web site. We agreed that this was the most important set of features and content for our customers and business -- why should that change with more screen space?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;When working with media queries, fixed-width layouts often need to be re-coded at every resolution breakpoint, whereas a design built with percentages, not pixels, maintains its proportions from one resolution to the next.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;[...] the kinds of decisions we constantly make as designers, choosing between flexibility and control. What responsive design show us, however, is that it doesn&amp;#39;t need to be a binary proposition; we can have designs founded upon a flexible layout, while still including fixed-width elements.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Responsive web design isn&amp;#39;t inteded to serve as a replacement for mobile web sites. Responsive design is,  believe, one part design philosophy, one parte front-end development strategy. And as a development strategy, it&amp;#39;s meant to ve evaluated to see if it meets the needs of the project you&amp;#39;re working on.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;Rather than simply siloing our content into different, device-specific sites, we can use progressive enhancement to ensure quality access for all, with an enhanced experience for those devices that are capable of it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;!----&gt;
&lt;blockquote&gt;
&lt;p&gt;In the age of portable 3G hotspots and wi-fi enabled phones, it can be dangerous to automatically equate screen&amp;#39;s dimensions with the bandwidth available to it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Se você prefere um conteúdo em português, confira o &lt;strong&gt;meu novo livro &lt;a href=&quot;/livro-web-mobile/&quot;&gt;A Web Mobile: programe para um mundo de muitos dispositivos.&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>A Newsletter Responsiva do QCon 2012</title>
         <link href="http://sergiolopes.org/newsletter-responsiva-qcon-2012/"/>
         <updated>2012-05-07T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/newsletter-responsiva-qcon-2012/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;O &lt;a href=&quot;http://qconsp.com&quot;&gt;QCon&lt;/a&gt;, maior evento de arquitetos e desenvolvedores do mundo, está com preço promocional de inscrição só até dia &lt;strong&gt;9 de maio&lt;/strong&gt;. Pra divulgar, montamos uma &lt;strong&gt;newsletter&lt;/strong&gt;. E aproveitei pra fazer uma &lt;a href=&quot;/email-newsletter-mobile-responsivo/&quot; title=&quot;Artigo sobre como fazer newsletter responsiva&quot;&gt;newsletter responsiva&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;O pessoal do &lt;a href=&quot;http://infoq.com/br&quot;&gt;InfoQ&lt;/a&gt; já tinha um &lt;a href=&quot;http://sergiolopes.github.com/newsletter-qcon-2012/newsletter-infoq.html&quot; title=&quot;Newsletter padrão do InfoQ&quot;&gt;modelo de newsletter&lt;/a&gt; que eles usam. Já seguem várias das boas práticas para emails que coloquei no meu &lt;a href=&quot;/email-newsletter-mobile-responsivo/&quot;&gt;artigo&lt;/a&gt; sobre newsletters. Uso de &lt;strong&gt;textos&lt;/strong&gt;, &lt;strong&gt;layout simples&lt;/strong&gt;, HTML com &lt;strong&gt;tabelas&lt;/strong&gt;, &lt;strong&gt;pouco CSS&lt;/strong&gt;, &lt;strong&gt;imagens pequenas&lt;/strong&gt;, layout não dependente de imagens etc. &lt;em&gt;Só não é responsiva&lt;/em&gt;, mas tá quase lá.&lt;/p&gt;
&lt;p&gt;Na newsletter do evento, deveríamos seguir as mesmas boas práticas já seguindas pela newsletter normal. Aí aproveite e &lt;strong&gt;fiz ela ser responsiva&lt;/strong&gt;. E, na verdade, se você já está com layout simples, poucas imagens e foco no texto, &lt;em&gt;adicionar a responsividade&lt;/em&gt; é bem mais fácil.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://sergiolopes.github.com/newsletter-qcon-2012/newsletter.html&quot; title=&quot;Newsletter Responsiva do QCon 2012&quot;&gt;Veja o resultado final&lt;/a&gt;&lt;/strong&gt;. Redimensione o navegador e veja a responsividade.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/newsletter-qcon-2012/newsletter-pequena.jpg&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Foto da newsletter responsiva do QCon 2012 (&lt;a href=&quot;http://sergiolopes.github.com/newsletter-qcon-2012/newsletter.html&quot;&gt;veja a real&lt;/a&gt;)&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;suporte-a-desktop-e-mobile&quot;&gt;Suporte a Desktop e Mobile&lt;/h2&gt;
&lt;p&gt;Com emails, porém, o mais importante é saber como eles &lt;strong&gt;funcionam de verdade&lt;/strong&gt;, nos programas de emails, webmails e dispositivos móveis reais. Veja:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/img/posts/newsletter-qcon-2012/newsletter-qcon-gmail.jpg&quot; title=&quot;Ver screenshot&quot;&gt;Gmail via web no Chrome&lt;/a&gt;: é o cenário ideal, tudo funciona.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/img/posts/newsletter-qcon-2012/newsletter-qcon-iphone.jpg&quot; title=&quot;Ver screenshot&quot;&gt;iPhone 3GS&lt;/a&gt;: ela se adapta à tela menor, &lt;em&gt;sem media queries&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/img/posts/newsletter-qcon-2012/newsletter-qcon-ipad2.jpg&quot; title=&quot;Ver screenshot&quot;&gt;iPad 2&lt;/a&gt;: funcionando perfeito, tamanho máximo.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/img/posts/newsletter-qcon-2012/newsletter-qcon-hotmail.jpg&quot; title=&quot;Ver screenshot&quot;&gt;Hotmail via web no IE&lt;/a&gt;: repare como as bordas redondas e a textura do &lt;em&gt;background&lt;/em&gt; somem. Mas a experiência para o usuário é muito boa.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Testando em outros lugares, teremos resultados muito parecidos com os cenários acima. A excessão, claro, é o &lt;strong&gt;Outlook&lt;/strong&gt;, cujas últimas versões usam um motor de renderização pior que o IE6, baseado no Word! Mas desista de combatê-lo. As pessoas usam Outlook e só podemos tentar deixar o email &lt;em&gt;aceitável&lt;/em&gt;. Veja:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/img/posts/newsletter-qcon-2012/newsletter-qcon-outlook2010.jpg&quot; title=&quot;Ver screenshot&quot;&gt;Outlook 2010&lt;/a&gt;: bordas e fundo somem. Tudo fica alinhado no centro (&lt;strong&gt;!?&lt;/strong&gt;) e aparecem quadrados brancos no topo dos blocos de conteúdo. &lt;em&gt;Mas é tudo legível e a renderização é aceitável&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/img/posts/newsletter-qcon-2012/newsletter-qcon-outlook2003.jpg&quot; title=&quot;Ver screenshot&quot;&gt;Outlook 2003&lt;/a&gt;: curioso reparar que o Outlook bem mais velho renderiza &lt;strong&gt;melhor&lt;/strong&gt; que a última versão! Isso porque o tal motor de Word só foi introduzido a partir da versão 2007, antes era baseado no IE.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;dicas-de-como-foi-feito-e-projeto-no-github&quot;&gt;Dicas de como foi feito e projeto no Github&lt;/h2&gt;
&lt;p&gt;Principalmente, segui todas as &lt;a href=&quot;/email-newsletter-mobile-responsivo/&quot; title=&quot;Artigo sobre como fazer newsletter responsiva&quot;&gt;práticas sobre newsletters resposivas&lt;/a&gt; do artigo aqui do blog.&lt;/p&gt;
&lt;p&gt;Boa parte da responsividade se deve ao layout simples baseado em uma coluna. Basta uma &lt;strong&gt;tabela com 100% de largura&lt;/strong&gt; (com um &lt;code&gt;max-width&lt;/code&gt; de 550px) e os elementos vão se ajustar lá dentro sem problemas. &lt;/p&gt;
&lt;p&gt;A exceção é onde mostramos as fotos dos participantes em duas colunas. Usei &lt;strong&gt;imagens de tamanhos pequenos&lt;/strong&gt;, sabendo que caberiam 2 imagens lado a lado mesmo na tela pequena do mobile. O nome do palestrante eu fiz num bloco de tamanho fixo com &lt;code&gt;display:inline-block&lt;/code&gt; que segue à direita da foto se houver espaço ou escorrega pra linha de baixo se não couber. &lt;strong&gt;Responsividade sem media queries&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;E o melhor: se quiser ver todos os truques, &lt;strong&gt;liberei o código da newsletter&lt;/strong&gt; num &lt;a href=&quot;https://github.com/sergiolopes/newsletter-qcon-2012&quot;&gt;projeto no Github&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Outros truques incluíram a imagem elástica do rodapé, uso do &lt;em&gt;premailer&lt;/em&gt; e &lt;em&gt;htmlcompressor&lt;/em&gt; pra gerar o HTML final e até uso de conditional comments pra Outlook. (sim, isso &lt;a href=&quot;http://www.campaignmonitor.com/blog/post/1774/using-conditional-comments-to-1/&quot; title=&quot;Sobre conditional comments pra Outlook 2007 e 2010&quot;&gt;existe&lt;/a&gt;!)&lt;/p&gt;
&lt;p&gt;Uma prática útil pra ter em mente ao montar newsletters é &lt;em&gt;&lt;a href=&quot;http://blog.caelum.com.br/css3-e-progressive-enhancement/&quot; title=&quot;Artigo no blog da Caelum sobre Progressive Enhancement e CSS3&quot;&gt;progressive enhancement&lt;/a&gt;&lt;/em&gt;. Repare como a base do layout não são as bordas redondas e a textura de fundo. A base é sólida em HTML e CSS básicos e compatíveis, e os &lt;strong&gt;recursos de CSS3 vão a mais&lt;/strong&gt;, pra quem abrir o email num cliente que suporte. Mas não são recursos necessários pro usuário visualizar tudo satisfatoriamente.&lt;/p&gt;
&lt;p&gt;O que achou dessa newsletter responsiva na prática? Não deixe de ver &lt;a href=&quot;https://github.com/sergiolopes/newsletter-qcon-2012&quot;&gt;o código no projeto&lt;/a&gt; e comente aqui!&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>10 dicas para fazer um email responsivo</title>
         <link href="http://sergiolopes.org/email-newsletter-mobile-responsivo/"/>
         <updated>2012-04-24T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/email-newsletter-mobile-responsivo/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Muita gente abre emails no celular. Falamos que a web mobile tem crescido, mas abrir emails fora do Desktop já é uma tendência ainda maior. Há &lt;a href=&quot;http://www.campaignmonitor.com/stats/email-clients/&quot; title=&quot;Email clients popularity: June 2011&quot;&gt;pesquisas&lt;/a&gt; que apontam mais de 20% de taxa de abertura de emails em mobile. E é bom estar preparado, se você manda emails para seus usuários -- newsletters, informativos, emails de confirmação, notificações. O papa da usabilidade, Jacok Nielsen, também apoia o &lt;a href=&quot;http://www.useit.com/alertbox/mobile-email-newsletters.html&quot;&gt;design responsivo como solução para emails&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Recentemente, trabalhei na reestruturação da &lt;a href=&quot;http://www.caelum.com.br/newsletter/&quot; title=&quot;Newsletter da Caelum&quot;&gt;newsletter da Caelum&lt;/a&gt; e um dos focos foi a criação de um &lt;strong&gt;email responsivo&lt;/strong&gt;. Reparamos que a taxa de visitantes mobile no site da Caelum vindas da newsletter é &lt;strong&gt;o dobro&lt;/strong&gt; dos visitantes normais. E nossa newsletter não era responsiva ainda.&lt;/p&gt;
&lt;p&gt;Conheça a nova &lt;a href=&quot;/resources/email-responsivo/newsletter.html&quot;&gt;newsletter responsiva da Caelum&lt;/a&gt; (redimensione o navegador pra vê-la em ação).&lt;/p&gt;
&lt;p&gt;Trabalhei também em uma newsletter para o evento QCon 2012 e publiquei um &lt;a href=&quot;/newsletter-responsiva-qcon-2012/&quot; title=&quot;Artigo: A Newsletter Responsiva do QCon 2012&quot;&gt;post especificamente sobre ela&lt;/a&gt;, incluindo um projeto no Github com o código fonte.&lt;/p&gt;
&lt;h2 id=&quot;one-email&quot;&gt;One email&lt;/h2&gt;
&lt;p&gt;Falamos muito que a web é única e de &lt;a href=&quot;/responsive-web-design/&quot; title=&quot;Artigo: Design Responsivo por uma Web Única&quot;&gt;web design responsivo&lt;/a&gt;. Mas, se você quiser &lt;em&gt;muito&lt;/em&gt;, pode fazer vários sites diferentes -- um mobile, um Desktop, um pra tablets etc. Na web, é sua escolha abraçar ou não a ideia de web única.&lt;/p&gt;
&lt;p&gt;Quando falamos em email, não há escolha. &lt;strong&gt;Só existe um email&lt;/strong&gt;, entregue para o usuário e lido em todo tipo de dispositivo. E você não sabe se será no Desktop ou em mobile. E você não pode &lt;em&gt;redirecioná-lo&lt;/em&gt; para um lugar específico. &lt;strong&gt;Um email, zilhões de dispositivos&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;mobile-first&quot;&gt;Mobile first&lt;/h2&gt;
&lt;p&gt;Esse é a dica que se dá normalmente para sites responsivos. Mas pensar em &lt;a href=&quot;/responsive-web-design/&quot; title=&quot;Artigo: Design Responsivo por uma Web Única&quot;&gt;mobile primeiro&lt;/a&gt;, vai ajudar &lt;strong&gt;muito&lt;/strong&gt; o desenvolvimento do seu email responsivo.&lt;/p&gt;
&lt;p&gt;Na web, podemos escolher entre &lt;em&gt;mobile first&lt;/em&gt; ou &lt;em&gt;desktop first&lt;/em&gt;. Prefiro o primeiro, mas sei que às vezes é bom ter a segunda opção. E, com as &lt;a href=&quot;http://blog.caelum.com.br/flexibilidade-em-paginas-para-dispositivos-moveis-com-media-queries/&quot; title=&quot;Flexibilidade em páginas para dispositivos móveis com media queries&quot;&gt;media queries&lt;/a&gt;, sempre conseguimos ajustar o layout para todo tipo de dispositivo. Bem, isso me leva ao &lt;em&gt;próximo ponto:&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;entenda-as-diferen-as&quot;&gt;Entenda as diferenças&lt;/h2&gt;
&lt;p&gt;Esqueça tudo que você sabe sobre &lt;em&gt;web design responsivo&lt;/em&gt;, ou quase tudo. &lt;strong&gt;Media queries&lt;/strong&gt;? Esqueça. &lt;strong&gt;&lt;a href=&quot;http://blog.caelum.com.br/pixels-pixels-ou-pixels-dicas-de-web-mobile-com-viewport/&quot; title=&quot;Pixels, pixels ou pixels? Dicas de Web Mobile com viewport&quot;&gt;Viewport&lt;/a&gt;&lt;/strong&gt;? Não. Grids flexíveis? Só se for com tabelas, esqueça &lt;em&gt;tableless&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;E não estou falando isso por causa do mané que ainda usa Lotus Notes pra ver emails. Um Gmail aberto num Chrome de última geração ainda não suporta &lt;em&gt;media queries&lt;/em&gt;. Isso sem falar no suporte &lt;strong&gt;básico de HTML e CSS1&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Se você xinga quando tem que suportar o IE6, é bom tomar uns calmantes antes de entrar no mundo dos emails HTML. Suportar IE6 é fichinha perto de suportar o Outlook. E estou comparando um browser de 11 anos de idade à &lt;em&gt;última&lt;/em&gt; versão do Outlook -- o &lt;strong&gt;Outlook 2010&lt;/strong&gt; não suporta a propriedade &lt;code&gt;height&lt;/code&gt; no CSS, entre milhares de outras coisas.&lt;/p&gt;
&lt;p&gt;Tá achando que tudo melhora com os webmails modernos? O &lt;strong&gt;Hotmail&lt;/strong&gt; não te deixa usar &lt;code&gt;background-image&lt;/code&gt; do CSS. &lt;strong&gt;Yahoo&lt;/strong&gt; e &lt;strong&gt;Gmail&lt;/strong&gt; arrancam fora todas as suas propriedades de &lt;code&gt;position&lt;/code&gt;, &lt;code&gt;top&lt;/code&gt;, &lt;code&gt;left&lt;/code&gt;. O Gmail não te deixa usar nem &lt;code&gt;display&lt;/code&gt;!&lt;/p&gt;
&lt;p&gt;As limitações são tão grandes que muita gente &lt;em&gt;simplesmente desiste&lt;/em&gt;. E mandam aquelas newsletters com uma imagem só, grandona. Mais fácil de desenhar, de controlar e não tem bugs. Mas não é acessível, não é responsiva, é menos usável e muita gente não clica pra ver as imagens.&lt;/p&gt;
&lt;h2 id=&quot;fa-a-html-e-css-porcos&quot;&gt;Faça HTML e CSS porcos&lt;/h2&gt;
&lt;p&gt;Esqueça um HTML semântico. Esqueça usar &lt;code&gt;float&lt;/code&gt; (não funciona no Outlook). Esqueça &lt;code&gt;position&lt;/code&gt; (não funciona no Outlook, Gmail, Yahoo, Android). Até &lt;code&gt;margin&lt;/code&gt; e &lt;code&gt;padding&lt;/code&gt; têm seus truques.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Escreva um HTML cheio de tabelas nojentas&lt;/strong&gt;. Muitas delas, todas não semânticas, só pra design. Use &lt;code&gt;height&lt;/code&gt; e &lt;code&gt;width&lt;/code&gt; no HTML, direto na tabela. Abuse dos &lt;code&gt;tr&lt;/code&gt; e &lt;code&gt;td&lt;/code&gt; o quanto quiser.&lt;/p&gt;
&lt;p&gt;E, graças ao Gmail, você não pode nem usar &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; ou &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; pra separar seu CSS. O Gmail arranca tudo fora, só suporta algumas poucas propriedades inline lambuzando seu HTML com &lt;code&gt;style=&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;Uma opção, &lt;em&gt;recomendadíssima&lt;/em&gt;, é criar seu CSS separado higienicamente e &lt;strong&gt;usar o &lt;a href=&quot;http://premailer.dialect.ca/&quot; title=&quot;Premailer&quot;&gt;premailer&lt;/a&gt;&lt;/strong&gt;, uma ferramenta sagaz que consegue, entre outras coisas, fazer o inline do seu CSS automaticamente. E, claro, isso significa que não dá pra ir além do básico nos seletores; pseudo-classes jamais, incluindo a básica &lt;code&gt;hover&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Pra saber o que você pode ou não usar no CSS, a referência absoluta é essa &lt;a href=&quot;http://www.campaignmonitor.com/css/&quot; title=&quot;Tabela de compatibilidade de CSS para emails&quot;&gt;tabela completíssima&lt;/a&gt; do pessoal da &lt;a href=&quot;http://campaignmonitor.com&quot; title=&quot;Campaign Monitor&quot;&gt;CampaignMonitor&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;email-responsivo&quot;&gt;Email responsivo&lt;/h2&gt;
&lt;p&gt;Você quer um email responsivo, certo? Adaptar à largura do dispositivo, desde um celular de 240px até um Desktop gigante. Parece um cenário impossível dada a falta de suporte a media queries, mas &lt;em&gt;não é&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Temos que focar no básico de responsividade, e isso significa &lt;strong&gt;trabalhar com porcentagens, ems e layouts fluídos&lt;/strong&gt;. Sua tabela principal -- sim, tabela, esqueça div -- não pode ter largura fixa em 600px como muita gente recomenda para emails. &lt;strong&gt;Coloque 100% de largura&lt;/strong&gt;. E use porcentagens para todo o resto do posicionamento e tamanhos.&lt;/p&gt;
&lt;p&gt;Lembre que você não tem como ajustar o layout para diferentes &lt;em&gt;breakpoints&lt;/em&gt; como fazemos com media queries. Então &lt;strong&gt;se atenha ao básico&lt;/strong&gt;. Em nome da sua sanidade, &lt;strong&gt;faça um layout de uma coluna só&lt;/strong&gt;, mais fácil de adaptar em pequenas e grandes resoluções. Até dá pra arriscar uns truques de duas colunas fazendo uma escorregar pra baixo da outra usando tamanhos fixos, mas teste bem antes de ir por esse caminho.&lt;/p&gt;
&lt;p&gt;Veja a nova newsletter da Caelum responsiva abrindo em diversas resoluções sem truques de media queries:&lt;/p&gt;
&lt;figure class=&quot;responsive video&quot;&gt;
    &lt;div class=&quot;video-wrapper&quot;&gt;
        &lt;iframe src=&quot;http://www.youtube.com/embed/-ReoK_nzECw?HD=1&amp;amp;rel=0&amp;amp;showinfo=0&amp;amp;modestbranding=1&quot; frameborder=&quot;0&quot; allowfullscreen style=&quot;height: 375px; width: 500px;&quot;&gt;&lt;/iframe&gt;
    &lt;/div&gt;
&lt;/figure&gt;


&lt;p&gt;Repare como, comparado a um site, a resposividade é menos... &lt;em&gt;glamurosa&lt;/em&gt;. Mas completamente &lt;strong&gt;funcional&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;use-imagens-pequenas&quot;&gt;Use imagens pequenas&lt;/h2&gt;
&lt;p&gt;Imagens grandes são grandes limitadoras de um email mobile responsivo. Não adiantar fazer um layout em porcentagens e colocar uma imagem de 500px dentro.&lt;/p&gt;
&lt;p&gt;Você pode fazer imagens flexíveis com porcentagens. Mas, sem media queries, você não vai conseguir entregar a imagem no tamanho certo pra cada dispositivo.&lt;/p&gt;
&lt;p&gt;Por isso, recomendo que você &lt;strong&gt;use apenas imagens pequenas&lt;/strong&gt;. &lt;strong&gt;No máximo, 240px&lt;/strong&gt;, largura inicial dos celulares que queremos suportar. E faça seu design em torno dessa restrição. A mesma imagem vai servir o usuário mobile e o Desktop. &lt;a href=&quot;/resources/email-responsivo/newsletter.html&quot;&gt;Reveja a newsletter da Caelum&lt;/a&gt; e observe como as imagens não são limitantes para o design responsivo.&lt;/p&gt;
&lt;p&gt;E, claro, isso não quer dizer apenas fotinhos pequenas como no nosso layout. &lt;strong&gt;Seja criativo&lt;/strong&gt;. Se quiser um banner de 500px na sua newsletter, quebre em duas imagens menores lado a lado no Desktop e uma em cima da outra no mobile.&lt;/p&gt;
&lt;h2 id=&quot;fa-a-funcionar-com-imagens-desabilitadas&quot;&gt;Faça funcionar com imagens desabilitadas&lt;/h2&gt;
&lt;p&gt;A maior parte dos clientes de email e webmails, por padrão, bloqueia todas as imagens nos emails para preservar a privacidade do usuário. O usuário precisa clicar explicitamente pra ver as imagens, o que é um passo a mais.&lt;/p&gt;
&lt;p&gt;Isso significa que &lt;strong&gt;muitos usuários verão seu email com imagens desabilitadas&lt;/strong&gt;, e é bom suportar esse cenário. Faça um design não dependente das imagens para &lt;em&gt;conteúdo&lt;/em&gt;. Use imagens apenas decorativamente. Forneça &lt;code&gt;alt=&lt;/code&gt; em todas as imagens de conteúdo e até estilize o texto alternativo.&lt;/p&gt;
&lt;p&gt;Veja a &lt;a href=&quot;/resources/email-responsivo/newsletter-noimg.html&quot;&gt;newsletter da Caelum com as imagens desabilitadas&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;PS. Tem quem me chame de exceção, mas eu, como usuário, não clico em &amp;quot;ver imagens&amp;quot; jamais, a não ser que eu &lt;em&gt;confie demais&lt;/em&gt; em quem mandou. E simplesmente jogo fora emails que não consiga ler sem imagens.&lt;/p&gt;
&lt;h2 id=&quot;use-progressive-enhancement&quot;&gt;Use Progressive Enhancement&lt;/h2&gt;
&lt;p&gt;O artigo não é todo sobre limitações e hacks. Embora os clientes de email mais usados no mundo sejam o Outlook e o Gmail -- os dois com mais limitações técnicas -- há vários bons programas de email.&lt;/p&gt;
&lt;p&gt;O Mail no iOS, por exemplo, &lt;a href=&quot;http://www.campaignmonitor.com/blog/post/3163/optimizing-your-emails-for-mobile-devices-with-media/&quot;&gt;suporta media queries&lt;/a&gt; e outros truques de CSS3. E você pode usar &lt;code&gt;:hover&lt;/code&gt; em todo lugar, exceto no Gmail e no Outlook. Até bordas redondas e sombras funcionam em algumas combinações de navegadores e webmails.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use recursos avançados de CSS para incrementar o design&lt;/strong&gt;. Mas tenha o pensamento do &lt;em&gt;progressive enhancement&lt;/em&gt;: tenha uma base sólida no HTML e CSS básicos e vá acrescentando funcionalidades para clientes mais avançados.&lt;/p&gt;
&lt;h2 id=&quot;teste-teste-teste&quot;&gt;Teste, teste, teste&lt;/h2&gt;
&lt;p&gt;Os bugs e limitações dos clientes de email são diversos e surpreendentes. &lt;strong&gt;Teste extensivamente seu email.&lt;/strong&gt; Achava que testar sites Web em meia dúzia de navegadores era trabalhoso? Bem vindo ao mundo dos emails!&lt;/p&gt;
&lt;p&gt;Teste em clientes de email Desktop como Outlook, Windows Mail, Apple Mail, Thunderbird. Teste em dispositivos móveis como iOS, Android (tanto Gmail quanto o programa de Email), Blackberry, Nokia. Teste nos webmails pelo menos do Gmail, Yahoo e Hotmail, e abra em vários navegadores diferentes. Aqui no Brasil, é bom também ter contas no UOL, Terra e iG.&lt;/p&gt;
&lt;p&gt;Se não quiser perder a cabeça, use algum serviço de testes de emails como o excelente &lt;a href=&quot;http://litmus.com/&quot; title=&quot;Litmus: ferramenta de teste para emails&quot;&gt;Litmus&lt;/a&gt; -- que, aliás, vem incluído em todos os planos do &lt;a href=&quot;http://mailchimp.com&quot; title=&quot;Mailchimp&quot;&gt;MailChimp&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;de-volta-s-origens&quot;&gt;De volta às origens&lt;/h2&gt;
&lt;p&gt;Óbvio, mas não custa lembrar: O email mais acessível, portável, usável, prático e direto é o... &lt;strong&gt;texto puro&lt;/strong&gt;. Funciona em qualquer cliente de email, é responsivo e seu usuário está acostumado.&lt;/p&gt;
&lt;p&gt;Aliás, lembre disso: &lt;strong&gt;usuários estão acostumados a emails em texto puro&lt;/strong&gt;. Você não pode fazer um site todo em txt em pleno 2012 sem parecer louco, mas, no email, é diferente. Um email texto puro passa a ideia de objetividade. &lt;/p&gt;
&lt;p&gt;Recomendo mensagens texto para emails de confirmação, notificações e alertas. Até para certas newsletters ele fica bom. Ou você pode mandar um email em HTML mas fortemente baseado em texto, quase sem formatação visual -- só uns estilos nos títulos e cores. &lt;strong&gt;Mega acessível, compatível e responsivo&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;dica-b-nus-fa-a-sua-landing-page-responsiva&quot;&gt;Dica Bônus: Faça sua landing page responsiva&lt;/h2&gt;
&lt;p&gt;Não adianta ter uma super newsletter responsiva e, quando o usuário clica no celular, cai no seu velho site Desktop. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Email é o ponto de partida para uma experiência online com seu usuário&lt;/strong&gt;. Faça seu site também mobile/responsivo e ofereça uma experiência completa e satisfatória pra quem não está no Desktop.&lt;/p&gt;
&lt;h2 id=&quot;dica-b-nus-2-html-email-boilerplate&quot;&gt;Dica bônus 2: HTML email boilerplate&lt;/h2&gt;
&lt;p&gt;O &lt;a href=&quot;http://htmlemailboilerplate.com/&quot;&gt;HTMLemailboilerplate.com&lt;/a&gt; tem muitas dicas práticas de HTML e CSS pra se criar emails ricos, inclusive com dicas de mobile. Vale bastante a pena acompanhar.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>2012 é o ano do mercado mobile no Brasil</title>
         <link href="http://blog.caelum.com.br/2012-e-o-ano-do-mercado-mobile-no-brasil/"/>
         <updated>2012-04-17T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/2012-e-o-ano-do-mercado-mobile-no-brasil/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/2012-e-o-ano-do-mercado-mobile-no-brasil/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Design Responsivo Por Uma Web Única</title>
         <link href="http://sergiolopes.org/responsive-web-design/"/>
         <updated>2012-04-16T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/responsive-web-design/</id>

         <content type="html">
            
            

               
               
                  
                     &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                        &lt;i&gt;Esse post possui design e interatividade não suportados nos feeds RSS. Recomendo que visite a página e leia por lá. (é otimizado também para mobile)&lt;/i&gt;
                     &lt;/p&gt;
                  
               

               
               

               
               &lt;h1 class=&quot;title&quot;&gt;
	&lt;span class=&quot;dr&quot;&gt;Design Responsivo&lt;/span&gt; 
	&lt;span class=&quot;pu&quot;&gt;por uma&lt;/span&gt; 
	&lt;span class=&quot;wu&quot;&gt;Web Única&lt;/span&gt;
&lt;/h1&gt;

&lt;!--
	TODO controle pra desabilitar layout customizado
--&gt;
&lt;section class=&quot;intro&quot;&gt;
	&lt;p&gt;&lt;em&gt;Mobile cresce como nunca&lt;/em&gt;. Vende-se mais smartphones e tablets que computadores. A banda larga móvel cresce assustadoramente. Web não é mais sinônimo de desktops e notebooks. Novos meios de acesso, novos usuários, novos hábitos... &lt;strong&gt;como oferecer uma boa experiência na nova Web?&lt;/strong&gt;&lt;/p&gt;
&lt;/section&gt;

&lt;section class=&quot;comeco&quot;&gt;
	&lt;p&gt;A Web mobile surgiu em 2007. Sim, dava pra navegar no celular antes disso, mas o iPhone mudou o jogo. Desde então, temos um browser completo e usável sempre à mão. Mas abrir aquele site Desktop clássico no smartphone não é lá a melhor experiência. Abrir até abre, mas costuma ser lento, com informações demais e difícil de navegar.&lt;/p&gt;

	&lt;p&gt;&lt;em&gt;E assim nasceram os sites mobile&lt;/em&gt;. Criar uma página otimizada pra iPhone é bastante fácil: basta um design de 320px e um truque com &lt;a href=&quot;http://blog.caelum.com.br/pixels-pixels-ou-pixels-dicas-de-web-mobile-com-viewport/&quot; title=&quot;Artigo: Pixels, pixels ou pixels? Dicas de Web Mobile com viewport&quot;&gt;viewport&lt;/a&gt;.&lt;/p&gt;

	&lt;p&gt;Mas o mundo mudou desde então. Bastante.&lt;/p&gt; 

	&lt;p&gt;Veio o Android com seus tamanhos e formatos variáveis. Vieram o iPad e os tablets, com resolução de computador e mobilidade de smartphone. Levaram o Android e o iOS pra TV e, agora, até pra óculos. Navegamos em todo tipo de aparelho, a todo momento, em qualquer lugar.&lt;/p&gt; 

	&lt;p&gt;Smartphones, tablets, televisões, celulares, ereaders, video games, netbooks, óculos, relógios... &lt;em&gt;até desktops e notebooks!&lt;/em&gt;&lt;/p&gt;

	&lt;p class=&quot;destaque&quot;&gt;Como, então, atacar o mundo móvel de hoje e de amanhã?&lt;/p&gt;

	&lt;p&gt;Criar um site para smartphones, outro pra tablets, outro pra Desktop, mais um pra TVs, outro pra &lt;em&gt;[insira tecnologia do futuro]&lt;/em&gt;...? Impraticável.&lt;/p&gt;
&lt;/section&gt;

&lt;section class=&quot;rwd&quot;&gt;
	&lt;h2 class=&quot;sub&quot;&gt;
		&lt;span class=&quot;r&quot;&gt;Responsive&lt;/span&gt;
		&lt;span class=&quot;w&quot;&gt;Web&lt;/span&gt;
		&lt;span class=&quot;d&quot;&gt;Design&lt;/span&gt;
	&lt;/h2&gt;

	&lt;div class=&quot;txt&quot;&gt;
		&lt;p&gt;Um site. Um design. Um conteúdo. &lt;em&gt;Incontáveis dispositivos&lt;/em&gt;.&lt;/p&gt;

		&lt;p&gt;Design responsivo é oferecer um único site pra todo mundo e, usando técnicas avançadas de CSS3, &lt;strong&gt;adaptar a experiência&lt;/strong&gt; de acordo com o dispositivo.&lt;/p&gt;

		&lt;p&gt;Há &lt;a href=&quot;http://mediaqueri.es&quot; title=&quot;Site MediaQueri.es com galeria de páginas responsivas&quot;&gt;vários bons exemplos&lt;/a&gt;. Recentemente, desenvolvi a página do nosso &lt;a href=&quot;http://www.arquiteturajava.com.br&quot;&gt;Livro Arquitetura Java&lt;/a&gt; com &lt;em&gt;design responsivo&lt;/em&gt;. Observe:&lt;/p&gt;

		&lt;button&gt;responsive play&lt;/button&gt;
	&lt;/div&gt;

	&lt;section class=&quot;demo&quot;&gt;			
		&lt;div class=&quot;wrapper&quot;&gt;
		&lt;/div&gt;
	&lt;/section&gt;

	&lt;noscript&gt;
		&lt;figure class=&quot;responsive video&quot;&gt;
	&lt;div class=&quot;video-wrapper&quot;&gt;
		&lt;iframe src=&quot;http://www.youtube.com/embed/N_17S54YNhE?HD=1&amp;amp;rel=0&amp;amp;showinfo=0&amp;amp;modestbranding=1&quot; frameborder=&quot;0&quot; allowfullscreen style=&quot;height: 375px; width: 500px;&quot;&gt;&lt;/iframe&gt;
	&lt;/div&gt;
&lt;/figure&gt;

	&lt;/noscript&gt;

	&lt;div class=&quot;txt&quot;&gt;
		&lt;p&gt;Diferente de muitos sites mobile atuais que só pensam nos 320px do iPhone, um site responsivo &lt;em&gt;se adapta a todo tipo de resolução&lt;/em&gt;, aproveitando o melhor que cada dispositivo tem a oferecer.&lt;/p&gt;

		&lt;p&gt;Queremos um site responsivo porque é a &lt;strong&gt;melhor experiência para o usuário&lt;/strong&gt;, não porque seja fácil &amp;mdash; não é! &amp;mdash; e nem porque está na moda.&lt;/p&gt;
	&lt;/div&gt;
&lt;/section&gt;


&lt;section class=&quot;como&quot;&gt;
	&lt;hgroup&gt;
		&lt;h2&gt;Como&lt;span&gt; fazer um design responsivo&lt;/span&gt;?&lt;/h2&gt;
		&lt;p class=&quot;destaque&quot;&gt;São três ingredientes principais:&lt;/p&gt;
	&lt;/hgroup&gt;

	&lt;ol&gt;
		&lt;li&gt;
			&lt;h3&gt;Media Queries&lt;/h3&gt;

			&lt;div class=&quot;txt&quot;&gt;
			&lt;p&gt;Com as media queries do CSS3, é possível criar regras no CSS que só se aplicam em determinadas situações, como em &lt;em&gt;resoluções de tela específicas&lt;/em&gt; e até de acordo com a orientação do dispositivo ou sua densidade de pixels.&lt;/p&gt;

			&lt;div class=&quot;mq&quot;&gt;
				&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs css&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;max-width:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;500px&lt;/span&gt;) {
  &lt;span class=&quot;hljs-selector-tag&quot;&gt;body&lt;/span&gt; { &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;font-size&lt;/span&gt;: &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;87.5%&lt;/span&gt;; }
}
&lt;span class=&quot;hljs-keyword&quot; style=&quot;color: #8959a8;&quot;&gt;@media&lt;/span&gt; (&lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;max-width:&lt;/span&gt; &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;390px&lt;/span&gt;) {
  &lt;span class=&quot;hljs-selector-tag&quot;&gt;body&lt;/span&gt; { &lt;span class=&quot;hljs-attribute&quot; style=&quot;color: #c82829;&quot;&gt;font-size&lt;/span&gt;: &lt;span class=&quot;hljs-number&quot; style=&quot;color: #f5871f;&quot;&gt;80%&lt;/span&gt;; }
}
&lt;/code&gt;&lt;/pre&gt;

				&lt;small&gt;(se você não conhece media queries, leia &lt;a href=&quot;http://blog.caelum.com.br/flexibilidade-em-paginas-para-dispositivos-moveis-com-media-queries/&quot; title=&quot;Artigo: Flexibilidade em páginas para dispositivos móveis com media queries&quot;&gt;esse meu post&lt;/a&gt; e depois volte aqui)&lt;/small&gt;

			&lt;/div&gt;

			&lt;p&gt;E que valores usar nas media queries? Há &lt;a href=&quot;http://stuffandnonsense.co.uk/projects/320andup/&quot; title=&quot;320andup&quot;&gt;vários&lt;/a&gt; &lt;a href=&quot;http://twitter.github.com/bootstrap/index.html&quot; title=&quot;Twitter Bootstrap&quot;&gt;frameworks&lt;/a&gt; CSS que trazem valores pré-definidos para os &lt;em&gt;breakpoints&lt;/em&gt; do layout, como os comuns 320px, 480px, 600px, 768px e 992px. Não à toa, são valores derivados de tamanhos do iPhone, do iPad e tablets de 7&quot;.&lt;/p&gt;

			&lt;p&gt;Mas um layout responsivo é aquele que se adapta a todo tipo de resolução. Usar valores pensados em dispositivos comuns (&lt;strong&gt;device driven breakpoints&lt;/strong&gt;) pode levar nosso layout a quebrar em certas resoluções intermediárias se não formos cuidadosos.&lt;/p&gt;

			&lt;p&gt;Já que queremos suportar todas as resoluções possíveis, porque não criar as media queries a partir das necessidades do nosso layout? (&lt;strong&gt;content driven breakpoints&lt;/strong&gt;). Faça a página e vá redimensionando; no pontos que o layout quebrar, coloque uma media querie pra ajustar.&lt;/p&gt;
			&lt;/div&gt;

		&lt;/li&gt;
		&lt;li class=&quot;fluido&quot;&gt;
			&lt;h3&gt;Layout fluído&lt;/h3&gt;

			&lt;div class=&quot;txt&quot;&gt;
			&lt;p&gt;Só media queries não bastam. Seria impraticável criar uma media querie para cada resolução existente &amp;mdash; seriam milhares! Devemos usar poucas media queries e fazer o &lt;em&gt;layout fluir entre os breakpoints&lt;/em&gt;.&lt;/p&gt;

			&lt;p&gt;O segredo é &lt;em&gt;não usar pixels nas medidas&lt;/em&gt;, mas priorizar um layout mais fluído e flexível baseado em &lt;strong&gt;porcentagens e ems&lt;/strong&gt;.&lt;/p&gt;

			&lt;p&gt;Seria até possível criar um site mobile apenas com essa ideia, sem usar media queries. Se tudo for porcentual, o design se adaptaria a todas as resoluções. Mas, na prática, não seria um design capaz de aproveitar o potencial de cada dispositivo. As media queries permitem ajustar o design pensando em adaptar e melhorar a experiência do usuário.&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
		&lt;li class=&quot;imagens&quot;&gt;
			&lt;h3&gt;Imagens flexíveis&lt;/h3&gt;

			&lt;div class=&quot;txt&quot;&gt;
			&lt;p&gt;Um layout verdadeiramente fluído precisa de &lt;strong&gt;imagens que se adaptem&lt;/strong&gt; à todo tipo de resolução. E isso merece uma atenção especial, já que imagens são baseadas em pixels e, portanto, não muito fáceis de flexibilizar.&lt;/p&gt;

			&lt;p&gt;Podemos usar &lt;em&gt;porcentagens para dimensionar imagens&lt;/em&gt;, mas é preciso cuidado. Aumentá-la além do seu tamanho original deixará o layout pixelizado. E carregar uma imagem de alta resolução para depois diminuí-la via código vai deixar a página muito carregada.&lt;/p&gt;

			&lt;p&gt;Precisamos de várias imagens em resoluções diferentes, uma para cada contexto. Mas ainda há o problema de como servir a imagem certa pra cada dispositivo. Com media queries, conseguimos ajustar as imagens vindas de CSS via &lt;code&gt;background-image&lt;/code&gt;.&lt;/p&gt;

			&lt;p&gt;Mas para as &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt;, não há solução muito elegante. Há &lt;a href=&quot;https://github.com/filamentgroup/Responsive-Images&quot; title=&quot;Projeto: Responsive Images&quot;&gt;alguns&lt;/a&gt; &lt;a href=&quot;http://adaptive-images.com/&quot; title=&quot;Projeto: Adaptative Images&quot;&gt;projetos&lt;/a&gt; e &lt;a href=&quot;http://www.sencha.com/learn/how-to-use-src-sencha-io/&quot; title=&quot;Sencha.io Src&quot;&gt;produtos&lt;/a&gt; com soluções razoáveis, geralmente envolvendo algum tipo de código no servidor, mas todas com algum &quot;porém&quot;. O W3C também está discutindo o assunto no &lt;a href=&quot;http://www.w3.org/community/respimg/&quot;&gt;responsive images workgroup&lt;/a&gt; já pensando em incluir algo na especificação pra facilitar.&lt;/p&gt;

			&lt;p&gt;Além disso, é importante lembrar que muitas imagens decorativas podem (e devem!) ser substituídas por &lt;strong&gt;efeitos CSS3&lt;/strong&gt; &amp;mdash; sombras, bordas redondas, gradientes etc. E ainda podemos usar &lt;strong&gt;SVG&lt;/strong&gt; para gráficos vetoriais que escalam em todo tipo de resolução.&lt;/p&gt;
			&lt;/div&gt;
		&lt;/li&gt;
	&lt;/ol&gt;
&lt;/section&gt;

&lt;section class=&quot;mas&quot;&gt;
	&lt;h2&gt;Responsivo, mas...&lt;/h2&gt;

	&lt;p&gt;Só jogar umas media queries e trocar tudo pra porcentagem no CSS não vai fazer do seu site responsivo o com a melhor experiência para o usuário.&lt;/p&gt; 

	&lt;p&gt;&lt;a href=&quot;/palestra-mobile-web/&quot;&gt;Desenvolver para mobile têm vários outros desafios&lt;/a&gt;, ainda mais se queremos que o mesmo site sirva todo mundo.&lt;/p&gt;

	&lt;h3&gt;O conteúdo que importa&lt;/h3&gt;

	&lt;p&gt;Há quem diga que é impraticável oferecer o mesmo site para todo mundo porque, quando navegamos em telas pequenas, &lt;em&gt;queremos conteúdo mais focado e páginas mais simples e diretas&lt;/em&gt;. É absolutamente verdade que usuários mobile têm menos paciência pra páginas grandes e carregadas, mas isso não inviabiliza um design responsivo.&lt;/p&gt;

	&lt;p&gt;A chave é a &lt;strong&gt;priorização de conteúdo&lt;/strong&gt;. É preciso repensar todo o conteúdo para descobrir o que realmente importa, e remover todo o excesso. Uma página mobile não deve ser apenas um design menor, mas uma &lt;em&gt;completa reestruturação de conteúdo&lt;/em&gt;. Por isso que só adaptar o design de um site Desktop já existente dificilmente funciona.&lt;/p&gt;

	&lt;p&gt;E, se você já gastou um bom tempo &lt;em&gt;cortando coisas secundárias&lt;/em&gt; e &lt;em&gt;priorizando o importante&lt;/em&gt;, porque oferecer essa versão mais simples e funcional apenas para usuários mobile? Porque temos mania de pensar que usuários Desktop devem receber páginas cheias de informações inúteis?&lt;/p&gt;

	&lt;p&gt;&lt;strong&gt;Responsive design&lt;/strong&gt; é entregar a mesma informação &amp;mdash; útil e priorizada &amp;mdash; para todo mundo!&lt;/p&gt;

	&lt;p&gt;Mais: mesmo que, após a priorização, você perceba que o conteúdo está grande, &lt;strong&gt;jamais corte conteúdo dos usuários mobile&lt;/strong&gt;. Se faz parte do conteúdo principal, deixe lá para todos. Usuários mobile não gostam de experiência capada. Otimizar para mobile não significa diminuir funcionalidades, &lt;strong&gt;significa focar&lt;/strong&gt;.&lt;/p&gt;

	&lt;!--
	CORTADO

	&lt;p&gt;Aliás, esse artigo é um exemplo disso. Pelas estatísticas de acesso, existe 20% de chance de você estar lendo isso num dispositivo móvel. E esse é um artigo grande, mesmo no Desktop. Eu poderia ter resumido em alguns parágrafos para os usuários mobile, mas isso seria piorar a experiência desses usuários. O artigo foi revisado e teve seu conteúdo priorizado &amp;mdash; acredite, eu cortei várias frases! E o &lt;em&gt;mesmo artigo é disponibilizado para todos&lt;/em&gt;.&lt;/p&gt;
	--&gt;

	&lt;h3&gt;Otimizar é essencial&lt;/h3&gt;

	&lt;p&gt;Sou grande militante de otimizações web. Acredito que cada segundo importa, e que otimizar o carregamento traz &lt;a href=&quot;/tweetables-performance-web-otimizacoes/&quot;&gt;resultados fantásticos&lt;/a&gt; de satisfação do usuário e conversões. &lt;em&gt;E isso é mais verdade ainda no mundo mobile.&lt;/em&gt;&lt;/p&gt;

	&lt;p&gt;Mesmo smartphones modernos são dispositivos bastante limitados. Baixo poder de processamento, pouca memória, imensa latência da redes 3G etc. &lt;strong&gt;Otimizar o carregamento do seu site é imprescindível&lt;/strong&gt;.&lt;/p&gt;

	&lt;p&gt;E, repito a pergunta de antes: se você gastar um tempo otimizando seu site para mobile, porquê não servi-lo também aos usuários Desktop? Porque a versão Desktop tem que ser mais lenta que a versão mobile? &lt;strong&gt;Responsive design&lt;/strong&gt; é entregar um site otimizado para todo mundo!&lt;/p&gt;

	&lt;p&gt;Aliás, se você só tiver tempo para seguir uma dica mobile desse artigo, esqueça media queries, responsividade e etc. &lt;strong&gt;Otimize o carregamento do seu site&lt;/strong&gt;, é &lt;a href=&quot;/a-funcionalidade-mobile-mais-importante/&quot;&gt;a funcionalidade mobile mais importante&lt;/a&gt;. O melhor que você pode fazer pelos usuários mobile é deixar seu site mais rápido.&lt;/p&gt;
&lt;/section&gt;

&lt;section class=&quot;mb&quot;&gt;
	&lt;h2 class=&quot;sub&quot;&gt;
		&lt;span class=&quot;m&quot;&gt;Mobile&lt;/span&gt;
		&lt;span class=&quot;f&quot;&gt;first&lt;/span&gt;
	&lt;/h2&gt;

	&lt;p&gt;Antes de criar um site responsivo você precisa escolher: começa pelo Desktop e vai ajustando até chegar no mobile ou o contrário? No site do Livro de Arquitetura Java, eu escrevi o CSS todo 2x, uma em cada abordagem. E digo, &lt;strong&gt;começar pelo mobile é muito melhor&lt;/strong&gt;.&lt;/p&gt;

	&lt;p&gt;Essa estratégia, chamada de &lt;strong&gt;Mobile First&lt;/strong&gt;, tem muitas vantagens. Como o mobile vai te forçar a &lt;em&gt;priorizar o conteúdo&lt;/em&gt;, quando chegar a parte do Desktop você não precisará mexer em conteúdo. No caso contrário, é fácil o site Desktop ter conteúdo demais e, quando chega a parte mobile, você descobre que precisava ter focado mais e priorizado melhor.&lt;/p&gt;

	&lt;p&gt;No layout é a mesma coisa. &lt;em&gt;Comece pelo layout mobile simples e incremente e ajuste as coisas para resoluções maiores&lt;/em&gt;. Começar com um layout complexo, cheio de colunas, e simplificar para mobile é bem mais complicado.&lt;/p&gt;

	&lt;p&gt;Programar mobile first é seguir o princípio do &lt;em&gt;progressive enhancement&lt;/em&gt; &amp;mdash; melhoria progressiva. Você cria uma base de conteúdo e marcação semântica ultra portável e vai incrementando-a conforme o dispositivo permitir. Com media queries, você vai ajustando o layout e, com JavaScript, pode ir adicionando capacidades novas avançadas. Mas sua &lt;strong&gt;base é simples e sólida, conteúdo puro e simples&lt;/strong&gt;, que abre até nos &lt;i&gt;dumbphones&lt;/i&gt; de 5 anos atrás.&lt;/p&gt;
&lt;/section&gt;

&lt;section class=&quot;fim&quot;&gt;
	&lt;h2&gt;Por fim&lt;/h2&gt;

	&lt;p&gt;&lt;em&gt;Criar um site responsivo não é fácil.&lt;/em&gt; Trabalhar com flexibilidade e adaptação é bem mais complicado que um site fixo em pixels. As ferramentas de desenho ainda não estão preparadas e os designer gráficos costumam ter dificuldades para criar com responsividade em mente.&lt;/p&gt;

	&lt;p&gt;O código fica mais complexo também. Há dificuldades para se trabalhar com imagens e vídeos responsivos. É bastante complicado adaptar um site Desktop já existente para ser responsivo.&lt;/p&gt;

	&lt;p&gt;Apesar de tudo isso, &lt;strong&gt;designs resposivos são o futuro&lt;/strong&gt;. Pelo simples motivo de que a &lt;strong&gt;Web é única&lt;/strong&gt; e criar sites separados para cada categoria de dispositivos é impossível.&lt;/p&gt;

	&lt;p&gt;Mas, claro que nenhuma solução é &lt;em&gt;bala de prata&lt;/em&gt;. Aplicações web complexas que exijam experiências diferentes em mobile e Desktop podem ser fortes candidatas a terem páginas completamente diferentes. Se você têm recursos e tempo, criar diversos sites separados e otimizados certamente é o que trará a melhor experiência pro usuário. Mas não faça um site Desktop e outro para iPhones e ache que acabou.&lt;/p&gt;

	&lt;p&gt;&lt;strong&gt;Faça um site responsivo&lt;/strong&gt; sempre disponível para qualquer dispositivo de hoje e do futuro. E, se for o caso, crie mais versões separadas otimizadas para dispositivos específicos.&lt;/p&gt;
	
	&lt;p&gt;Quer aprender mais sobre design reponsivo? Conheça meu &lt;strong&gt;novo livro&lt;/strong&gt; &lt;a href=&quot;/livro-web-mobile/&quot;&gt;A Web Mobile: programe para um mundo de muitos dispositivos&lt;/a&gt;.Veja também um post com um zilhão de &lt;a href=&quot;/diretorio-design-responsivo/&quot;&gt;links para posts, palestras, livros, cursos e exemplos de sites responsivos&lt;/a&gt;; tudo brasilieiro, em português.&lt;/p&gt;

	&lt;p class=&quot;ultimo&quot;&gt;E você, o que acha? Gosta de acessar sites em mobile com a experiência completa? Tem adotado qual prática em seus projetos móveis? &lt;strong&gt;Comente!&lt;/strong&gt; Tem exemplos de designs responsivos brasileiros? Comente também!&lt;/p&gt;
&lt;/section&gt;

	&lt;!--
	PRA VERSAO 2.0:

	&lt;section class=&quot;resumo&quot;&gt;
		&lt;h2&gt;Resumindo em 7 pontos&lt;/h2&gt;

		&lt;ul&gt;
			&lt;li&gt;Só existe uma Web, não fragmente-a com sites só mobile&lt;/li&gt;
			&lt;li&gt;Design responsivo é oferecer a mesma experiência independente do dispositivo&lt;/li&gt;
			&lt;li&gt;3 ingredientes: media queries, design fluído, imagens flexíveis&lt;/li&gt;
			&lt;li&gt;Priorize o conteúdo e jamais ofereça conteúdo cortado para mobile&lt;/li&gt;
			&lt;li&gt;Otimize o carregamento do seu site&lt;/li&gt;
			&lt;li&gt;Comece pelo mobile (mobile first)&lt;/li&gt;
			&lt;li&gt;Saiba quando não seguir os conselhos desse artigo&lt;/li&gt;
		&lt;/ul&gt;
	&lt;/section&gt;

	&lt;section&gt;
		&lt;h2&gt;Links&lt;/h2&gt;

		codigos: arquiteturajava, blog
		blog caelum - otimizacoes, emdia queries, viewport
		mediaqueri.es
		opera, ethan, lukew
		inspiracoes
		livros
	&lt;/section&gt;
	--&gt;


&lt;!--
bg: http://www.backgroundlabs.com/
fontes: google fonts
inspiracao: i am paddy
this is the web: http://bradfrostweb.com/blog/notes/this-is-the-web/
--&gt;

               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Meu blogroll: o que eu leio sobre Web, Mobile, Design, Otimizações e afins</title>
         <link href="http://sergiolopes.org/links-web-mobile-otimizacoes/"/>
         <updated>2012-04-10T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/links-web-mobile-otimizacoes/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Tenho mais de &lt;strong&gt;150 feeds&lt;/strong&gt; assinados no meu &lt;em&gt;Google Reader&lt;/em&gt; que acompanho diariamente. Vários desses sobre assuntos pertinentes a esse blog e seus visitantes.&lt;/p&gt;
&lt;p&gt;Então aí vai uma lista de &lt;strong&gt;feeds pra você assinar&lt;/strong&gt;. A maioria dos links é em inglês, mas há alguns em português também. E aguardo sugestões de novos blogs nos comentários!&lt;/p&gt;
&lt;h2 id=&quot;obrigat-rios-sobre-web-em-geral&quot;&gt;Obrigatórios sobre Web em geral&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.alistapart.com/&quot;&gt;A List Apart&lt;/a&gt; -- comunidade super influente, artigos que costumam mudar o rumo da Web na mundo.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.html5rocks.com/en/&quot;&gt;HTML5 Rocks&lt;/a&gt; -- excelentes artigos com o que há de mais novo em Web.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.smashingmagazine.com&quot;&gt;Smashing Magazine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.netmagazine.com&quot;&gt;Net Magazine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.caelum.com.br/category/web-design/&quot;&gt;Categoria Web no Blog da Caelum&lt;/a&gt; (português).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;web&quot;&gt;Web&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.chromium.org/&quot;&gt;Chromium&lt;/a&gt; -- novidades da equipe do Google Chrome.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dev.opera.com/&quot;&gt;Dev Opera&lt;/a&gt; -- excelentes artigos do pessoal do Opera com novidades de HTML5 etc.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://css-tricks.com&quot;&gt;CSS Tricks&lt;/a&gt; -- muitas dicas de CSS e HTML.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://developers.facebook.com/html5/blog/&quot;&gt;Facebook HTML5 Blog&lt;/a&gt; -- dos desenvolvedores Web do Facebook.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mathiasbynens.be/notes&quot;&gt;Blog do Mathias Bynens&lt;/a&gt; -- desenvolvedor famoso, autor do &lt;em&gt;HTML5 Boilerplate&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://nicolasgallagher.com&quot;&gt;Blog do Nicholas Gallagher&lt;/a&gt; -- famoso, autor do &lt;em&gt;HTML5 Boilerplate&lt;/em&gt; e do &lt;em&gt;Normalize.css&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://paulirish.com&quot;&gt;Blog do Paul Irish&lt;/a&gt; -- desenvolvedor do Google e autor de diversos projetos importantes.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://tableless.com.br&quot;&gt;Tableless&lt;/a&gt; -- mais famoso site de Web do Brasil (português).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.cssnolanche.com.br/&quot;&gt;CSS no Lanche&lt;/a&gt; (português).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;mobile&quot;&gt;Mobile&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://bradfrostweb.com/&quot;&gt;Blog do Brad Frost&lt;/a&gt; -- bastante material de Web Mobile, excelentes artigos.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.lukew.com/&quot;&gt;Blog do Luke Wroblewski&lt;/a&gt; -- famosíssimo em mobile, ótimos artigos, autor de vários livros.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://android-developers.blogspot.com/&quot;&gt;Android Developers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.cloudfour.com&quot;&gt;Cloud Four&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://googlemobile.blogspot.com/&quot;&gt;Google Mobile Blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.quirksmode.org/blog/&quot;&gt;QuirksMode Blog&lt;/a&gt; -- blog do Peter-Paul Koch sobre Web e Mobile, com muitos artigos e dados de pesquisas.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.themobilewebdesignblog.com/&quot;&gt;The Mobile Web Design Blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;otimiza-es-web-wpo-&quot;&gt;Otimizações Web (WPO)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.stevesouders.com/blog&quot;&gt;High Performance Websites&lt;/a&gt; -- blog do Steve Souders, engenheiro do Google, papa de otimizações.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.phpied.com&quot;&gt;Blog do Stoyan Stefanov&lt;/a&gt; -- ex-engenheiro do Yahoo, agora no Facebook.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.perfplanet.com/&quot;&gt;Perf Planet&lt;/a&gt; -- dezenas de blogs sobre otimizações num feed só (inclui todos os anteriores). Recomendadíssimo.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;web-marketing&quot;&gt;Web Marketing&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.conversion-rate-experts.com&quot;&gt;Conversion Rate Experts&lt;/a&gt; -- excelentes posts sobre conversões, landing pages, design, web maketing.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://analytics.blogspot.com/&quot;&gt;Blog do Google Analytics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://googlewebmastercentral.blogspot.com/&quot;&gt;Google Webmasters Central Blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;empreendedorismo-e-startups&quot;&gt;Empreendedorismo e Startups&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://sivers.org/&quot;&gt;Blog do Derek Sivers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://joelonsoftware.com&quot;&gt;Blog do Joel Spolsky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.kalzumeus.com/&quot;&gt;Blog do Patrick Mackenzie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://onstartups.com/&quot;&gt;OnStartups&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.softwarebyrob.com&quot;&gt;Software By Rob&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.startuplessonslearned.com/&quot;&gt;Startup Lessons Learned&lt;/a&gt; -- do Eric Ries, autor do &lt;em&gt;Lean Startup&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;mais-alguns&quot;&gt;Mais alguns&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://brendaneich.com/&quot;&gt;Blog do Brendan Eich&lt;/a&gt; -- engenheiro da Mozilla.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://paul.kinlan.me/&quot;&gt;Blog do Paul Kinlan&lt;/a&gt; -- engenheiro do Google Chrome.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://meyerweb.com/eric/thoughts&quot;&gt;Blog do Eric Meyer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.campaignmonitor.com&quot;&gt;Blog da CampaignMonitor&lt;/a&gt; -- dicas sobre como fazer newsletters HTML, compatibilidade, mobile.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://googleblog.blogspot.com/&quot;&gt;Google Blog&lt;/a&gt; -- blog oficial do Google, sempre com notícias interessantes da Web.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://googledevelopers.blogspot.com/&quot;&gt;Google Developers Blog&lt;/a&gt; -- blog de desenvolvimento do Google, com diversos assuntos técnicos, incluindo Web e Mobile.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.jquery.com/&quot;&gt;Blog do jQuery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://ejohn.org/&quot;&gt;Blog do John Resig&lt;/a&gt; -- criador do jQuery.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mir.aculo.us/&quot;&gt;Blog do Thomas Fuchs&lt;/a&gt; -- autor do &lt;em&gt;Scriptaculous&lt;/em&gt; e do &lt;em&gt;ZeptoJS&lt;/em&gt;, commiter do &lt;em&gt;prototype&lt;/em&gt; e do &lt;em&gt;rails&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://desenvolvimentoparaweb.com/&quot;&gt;DesevolvimentoParaWeb.com&lt;/a&gt; (português).&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.getify.com/&quot;&gt;Blog do Kyle Simpson&lt;/a&gt; -- autor do &lt;em&gt;HTML5 Cookbook&lt;/em&gt; e do &lt;em&gt;LabJS&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.imasters.com.br&quot;&gt;iMasters&lt;/a&gt; (português).&lt;/li&gt;
&lt;/ul&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Flexibilidade em páginas para dispositivos móveis com media queries</title>
         <link href="http://blog.caelum.com.br/flexibilidade-em-paginas-para-dispositivos-moveis-com-media-queries/"/>
         <updated>2012-04-03T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/flexibilidade-em-paginas-para-dispositivos-moveis-com-media-queries/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/flexibilidade-em-paginas-para-dispositivos-moveis-com-media-queries/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Tweetables: 14 fatos sobre performance Web e otimizações</title>
         <link href="http://sergiolopes.org/tweetables-performance-web-otimizacoes/"/>
         <updated>2012-04-02T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/tweetables-performance-web-otimizacoes/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Por que otimizar seu site? Quais impactos de uma página lerda? E o que outras pessoas e empresas já descobriram quando melhoraram sua velocidade? Se você precisava de fatos para se convencer -- ou convencer alguém -- a otimizar, aproveite os &lt;strong&gt;14 fatos tweetáveis&lt;/strong&gt; desse post.&lt;/p&gt;
&lt;blockquote class=&quot;tweetable&quot;&gt;
    Pra Amazon, 1s a mais no carregamento da página custa 1.6 bilhão de dólares por ano
    &lt;a href=&quot;https://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-text=&quot;undefined&quot; data-via=&quot;sergio_caelum&quot; data-related=&quot;sergio_caelum&quot; data-count=&quot;none&quot;&gt;Tweet this&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;A maior varejista americana descobriu uma relação direta entre faturamento e a performance de seu site (&lt;a href=&quot;http://www.fastcompany.com/1825005/impatient-america-needs-faster-intertubes&quot; title=&quot;Artigo da FastCompany sobre performance e Amazon&quot;&gt;fonte&lt;/a&gt;).&lt;/p&gt;
&lt;blockquote class=&quot;tweetable&quot;&gt;
    O tráfego do Yahoo! aumenta 9% a cada 400ms de melhora na velocidade
    &lt;a href=&quot;https://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-text=&quot;undefined&quot; data-via=&quot;sergio_caelum&quot; data-related=&quot;sergio_caelum&quot; data-count=&quot;none&quot;&gt;Tweet this&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;Segundo estudos do próprio Yahoo em 2008. (&lt;a href=&quot;http://www.slideshare.net/stoyan/yslow-20-presentation&quot;&gt;fonte&lt;/a&gt;)&lt;/p&gt;
&lt;blockquote class=&quot;tweetable&quot;&gt;
    Usuários expressam mais agitação e stress em sites lentos, e precisam de 50% mais concentração
    &lt;a href=&quot;https://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-text=&quot;undefined&quot; data-via=&quot;sergio_caelum&quot; data-related=&quot;sergio_caelum&quot; data-count=&quot;none&quot;&gt;Tweet this&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;Além disso, já foi constatado até aumento de pressão arterial quando o usuário tem uma navegação lenta! (&lt;a href=&quot;http://www.webperformancetoday.com/2011/02/24/website-performance-web-stress/&quot;&gt;fonte&lt;/a&gt;).&lt;/p&gt;
&lt;blockquote class=&quot;tweetable&quot;&gt;
    NYTimes: você perderá clientes para seu concorrente se sua página for mais de 250ms mais lenta
    &lt;a href=&quot;https://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-text=&quot;undefined&quot; data-via=&quot;sergio_caelum&quot; data-related=&quot;sergio_caelum&quot; data-count=&quot;none&quot;&gt;Tweet this&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;Essa matéria do New York Times de Março/2012 fala que 250ms é o número mágico da vantagem competitiva na Web. (&lt;a href=&quot;https://www.nytimes.com/2012/03/01/technology/impatient-web-users-flee-slow-loading-sites.html&quot; title=&quot;For Impatient Web Users, an Eye Blink Is Just Too Long to Wait&quot;&gt;fonte&lt;/a&gt;)&lt;/p&gt;
&lt;blockquote class=&quot;tweetable&quot;&gt;
    71% dos usuários esperam que um site abra em seu celular tão rápido quanto no desktop.
    &lt;a href=&quot;https://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-text=&quot;undefined&quot; data-via=&quot;sergio_caelum&quot; data-related=&quot;sergio_caelum&quot; data-count=&quot;none&quot;&gt;Tweet this&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;Segundo a pesquisa &lt;em&gt;&lt;a href=&quot;http://www.gomez.com/wp-content/downloads/19986_WhatMobileUsersWant_Wp.pdf&quot;&gt;What Mobile Users Want&lt;/a&gt;&lt;/em&gt; da Gomez/Compuware em julho de 2011.&lt;/p&gt;
&lt;blockquote class=&quot;tweetable&quot;&gt;
    Ao cortar 2,2s da landing page do Firefox, a Mozilla aumentou o número de downloads em 15%
    &lt;a href=&quot;https://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-text=&quot;undefined&quot; data-via=&quot;sergio_caelum&quot; data-related=&quot;sergio_caelum&quot; data-count=&quot;none&quot;&gt;Tweet this&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;No total, foram mais &lt;strong&gt;60 milhões&lt;/strong&gt; de cópias do navegador baixadas por ano. (&lt;a href=&quot;http://blog.mozilla.com/metrics/category/website-optimization/&quot; title=&quot;Estudo de otimização da Mozilla&quot;&gt;fonte&lt;/a&gt;)&lt;/p&gt;
&lt;blockquote class=&quot;tweetable&quot;&gt;
    Um experimento do Google aumentou o carregamento de 0.4s para 0.9s. O tráfego de buscas caiu 20%
    &lt;a href=&quot;https://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-text=&quot;undefined&quot; data-via=&quot;sergio_caelum&quot; data-related=&quot;sergio_caelum&quot; data-count=&quot;none&quot;&gt;Tweet this&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;Nesse experimento, o Google aumentou o número de resultados de busca de 10 para 30, impactando em apenas meio segundo a performance. (&lt;a href=&quot;http://glinden.blogspot.com/2006/11/marissa-mayer-at-web-20.html&quot;&gt;fonte&lt;/a&gt;)&lt;/p&gt;
&lt;blockquote class=&quot;tweetable&quot;&gt;
    A Microsoft mostrou que 2s a mais de latência no Bing diminuíam o faturamento em 4,3%
    &lt;a href=&quot;https://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-text=&quot;undefined&quot; data-via=&quot;sergio_caelum&quot; data-related=&quot;sergio_caelum&quot; data-count=&quot;none&quot;&gt;Tweet this&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;O experimento ainda mostrou queda no número de buscas, nos cliques e na satisfação final dos usuários (&lt;a href=&quot;http://velocityconference.blip.tv/file/2279751/&quot;&gt;fonte&lt;/a&gt;)&lt;/p&gt;
&lt;blockquote class=&quot;tweetable&quot;&gt;
    A expectativa de um comprador online em 2006 era de 4s para carregamento da página. Em 2010, 2s.
    &lt;a href=&quot;https://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-text=&quot;undefined&quot; data-via=&quot;sergio_caelum&quot; data-related=&quot;sergio_caelum&quot; data-count=&quot;none&quot;&gt;Tweet this&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;Segundo estudos da Forrester Consulting, com muitos outros dados. (&lt;a href=&quot;http://www.webperformancetoday.com/2010/06/15/everything-you-wanted-to-know-about-web-performance/&quot;&gt;fonte&lt;/a&gt;)&lt;/p&gt;
&lt;blockquote class=&quot;tweetable&quot;&gt;
    Um experimento da Caelum piorou o carregamento da página de 2s para 4s. Os pageviews caíram 28%.
    &lt;a href=&quot;https://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-text=&quot;undefined&quot; data-via=&quot;sergio_caelum&quot; data-related=&quot;sergio_caelum&quot; data-count=&quot;none&quot;&gt;Tweet this&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esse experimento fez o tamanho da página subir de 100kb para 300kb, aumentando o número de requests de 12 para 42, o que resultou em um crescimento no tempo de carregamento de 2s para 6s. Os impactos foram queda de 21% no tempo que os usuários ficam no Site, menos 28% pageviews e uma queda de 18% no conversion rate. (&lt;a href=&quot;http://blog.caelum.com.br/por-uma-web-mais-rapida-26-tecnicas-de-otimizacao-de-sites/&quot; title=&quot;Artigo sobre otimizações no Blog da Caelum&quot;&gt;fonte&lt;/a&gt;)&lt;/p&gt;
&lt;blockquote class=&quot;tweetable&quot;&gt;
    Uma diminuição de 6s para 1.2s na página do Shopzilla aumentou as vendas em 12%.
    &lt;a href=&quot;https://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-text=&quot;undefined&quot; data-via=&quot;sergio_caelum&quot; data-related=&quot;sergio_caelum&quot; data-count=&quot;none&quot;&gt;Tweet this&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;Além disso, o número de pageviews cresceu &lt;strong&gt;25%&lt;/strong&gt; e a quantidade de servidores necessários pra rodar o site &lt;strong&gt;caiu pela metade&lt;/strong&gt;. (&lt;a href=&quot;http://www.scribd.com/doc/16877317/Shopzillas-Site-Redo-You-Get-What-You-Measure&quot; title=&quot;Slides sobre otimizações no Shozilla&quot;&gt;fonte&lt;/a&gt;)&lt;/p&gt;
&lt;blockquote class=&quot;tweetable&quot;&gt;
    50% dos usuários mobile abandonam um site se ele não abre em até 10s. E 3 em cada 5 não voltam mais.
    &lt;a href=&quot;https://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-text=&quot;undefined&quot; data-via=&quot;sergio_caelum&quot; data-related=&quot;sergio_caelum&quot; data-count=&quot;none&quot;&gt;Tweet this&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;O crescimento do mercado mobile traz novos desafios. E os usuários são exigentes! (&lt;a href=&quot;https://mashable.com/2012/03/14/slow-website-stats-infographic/&quot;&gt;fonte&lt;/a&gt;)&lt;/p&gt;
&lt;blockquote class=&quot;tweetable&quot;&gt;
    Desde 2010, o Google considera a velocidade de carregamento dos sites no ranking de buscas.
    &lt;a href=&quot;https://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-text=&quot;undefined&quot; data-via=&quot;sergio_caelum&quot; data-related=&quot;sergio_caelum&quot; data-count=&quot;none&quot;&gt;Tweet this&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;Entre as diversas variáveis usadas no page rank, o Google incluiu também a velocidade das páginas. SEO é um outro excelente motivo para se otimizar! (&lt;a href=&quot;http://googlewebmastercentral.blogspot.com.br/2010/04/using-site-speed-in-web-search-ranking.html&quot;&gt;fonte&lt;/a&gt;)&lt;/p&gt;
&lt;blockquote class=&quot;tweetable&quot;&gt;
    O Walmart descobriu que compradores viam seu site carregar 2x mais rápido que não compradores.
    &lt;a href=&quot;https://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-text=&quot;undefined&quot; data-via=&quot;sergio_caelum&quot; data-related=&quot;sergio_caelum&quot; data-count=&quot;none&quot;&gt;Tweet this&lt;/a&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ao analisar os visitantes que compraram algo e os que não compraram, eles descobriram que quem compra em geral viu um site mais rápido. A performance no Walmart.com está diretamente ligada ao &lt;em&gt;bounce rate&lt;/em&gt; do site. (&lt;a href=&quot;https://minus.com/msM8y8nyh/2e&quot; title=&quot;Slides sobre otimizações e estudos do Walmart.com&quot;&gt;fonte&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Falo de performance e otimizações de Sites há algum tempo já. Tenho alguns &lt;a href=&quot;http://blog.caelum.com.br/por-uma-web-mais-rapida-26-tecnicas-de-otimizacao-de-sites/&quot; title=&quot;26 técnicas de otimizações de Sites, no Blog da Caelum&quot;&gt;artigos no blog da Caelum&lt;/a&gt; e palestras em diversos eventos, como esse meu &lt;a href=&quot;http://www.slideshare.net/caelumdev/qcon-2011-por-uma-web-mais-rpida-tcnicas-de-otimizao-de-sites&quot; title=&quot;Slides do keynote sobre otimizações no QCon SP 2011&quot;&gt;keynote no QCon SP 2011&lt;/a&gt;. Divulgue esses fatos e, principalmente, faça algo por seu site e otimize-o já.&lt;/p&gt;
&lt;p&gt;Tem mais bons links de otimizações web? Compartilhe nos comentários!&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Lançamento do blog</title>
         <link href="http://sergiolopes.org/o-blog/"/>
         <updated>2012-03-26T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/o-blog/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Aos leitores, sedentos por conteúdo, eis aqui meu novo Blog. Web, mobile, otimizações web, cloud computing e o que mais eu achar interessante. &lt;strong&gt;Bem vindos!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pra estrear, escrevi três artigos, já disponíveis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;/debug-mobile-safari-ios/&quot;&gt;Script para debugar o Mobile Safari do iOS no Desktop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/responsive-video-play/&quot;&gt;Responsive Play: Vídeo do seu site responsivo em centenas de resoluções&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;/firefox-tilt-3d-inspector/&quot;&gt;Visualize em 3D a complexidade da sua página no Firefox Tilt&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mais estão por vir!&lt;/p&gt;
&lt;h2 id=&quot;o-blog&quot;&gt;O blog&lt;/h2&gt;
&lt;p&gt;Roda Wordpress? &lt;strong&gt;Não&lt;/strong&gt;, graças a Deus. O blog é baseado no &lt;a href=&quot;http://docpad.org&quot;&gt;DocPad&lt;/a&gt;. Por isso, ele é mais &lt;strong&gt;simples&lt;/strong&gt;, mais &lt;strong&gt;rápido e otimizado&lt;/strong&gt;, &lt;strong&gt;responsivo&lt;/strong&gt;, funciona bem em &lt;strong&gt;mobile&lt;/strong&gt;. E é um &lt;a href=&quot;https://github.com/sergiolopes/blog&quot; title=&quot;Repositório do blog no Github&quot;&gt;blog opensource&lt;/a&gt; -- você pode ver o código, customizações e até posts e drafts no repositório. &lt;em&gt;Pull requests&lt;/em&gt; com correções são muito bem vindos!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Atualização Abril/2013:&lt;/strong&gt; Migrei o blog recentemente do Jekyll pro DocPad, então atualizei as informações aqui no post.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Responsive Play: Vídeo do seu site responsivo em centenas de resoluções</title>
         <link href="http://sergiolopes.org/responsive-video-play/"/>
         <updated>2012-03-24T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/responsive-video-play/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Um site responsivo deve abrir direito em quais tamanhos? 320px, 480px, 600px, 768px e 960px? &lt;strong&gt;Errado!&lt;/strong&gt; Responsividade de verdade é abrir em todo tipo de resolução, até as incomuns -- como os 533px do meu Android.&lt;/p&gt;
&lt;p&gt;Ferramentas de testes para &lt;em&gt;mobile&lt;/em&gt; e &lt;em&gt;responsive design&lt;/em&gt; costumam focar nas resoluções dos dispositivos mais famosos -- iPhones e iPads. Faltava uma ferramenta que permitisse testar um design &lt;em&gt;verdadeiramente responsivo&lt;/em&gt; em &lt;strong&gt;todas as resoluções&lt;/strong&gt; possíveis.&lt;/p&gt;
&lt;p&gt;Assim nasceu meu &lt;em&gt;pet project&lt;/em&gt; chamado &lt;strong&gt;Responsive Play&lt;/strong&gt; -- &lt;a href=&quot;https://github.com/sergiolopes/responsive-play&quot;&gt;disponível no Github&lt;/a&gt;. Com ele, você pode gerar um &lt;strong&gt;vídeo&lt;/strong&gt; mostrando seu design responsivo em centenas de resoluções. Como o vídeo abaixo do &lt;a href=&quot;http://www.arquiteturajava.com.br&quot;&gt;ArquiteturaJava.com.br&lt;/a&gt;, um site responsivo em que trabalhei:&lt;/p&gt;
&lt;figure class=&quot;responsive video&quot;&gt;
    &lt;div class=&quot;video-wrapper&quot;&gt;
        &lt;iframe src=&quot;http://www.youtube.com/embed/N_17S54YNhE?HD=1&amp;amp;rel=0&amp;amp;showinfo=0&amp;amp;modestbranding=1&quot; frameborder=&quot;0&quot; allowfullscreen style=&quot;height: 375px; width: 500px;&quot;&gt;&lt;/iframe&gt;
    &lt;/div&gt;&lt;em style=&quot;display: block; font-style: italic;&quot;&gt;ArquiteturaJava.com.br no Responsive Play&lt;/em&gt;
&lt;/figure&gt;


&lt;p&gt;Rodar o projeto é bem fácil:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs bash&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;play http://www.arquiteturajava.com.br
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Você pode ainda passar opções como o o intervalo das resoluções a ser usado e até o tempo do vídeo:&lt;/p&gt;
&lt;pre class=&quot;highlight&quot; style=&quot;padding: 1em;&quot;&gt;&lt;code class=&quot;hljs bash&quot; style=&quot;display: block; background: white; color: #4d4d4c; padding: 0.5em; word-wrap: break-word;&quot;&gt;play http://www.arquiteturajava.com.br 320 960
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mais um demo: um vídeo do &lt;a href=&quot;http://www.bostonglobe.com&quot;&gt;Boston Globe&lt;/a&gt;, um famoso caso de design responsivo que funciona em todo tipo de resolução:&lt;/p&gt;
&lt;figure class=&quot;responsive video&quot;&gt;
    &lt;div class=&quot;video-wrapper&quot;&gt;
        &lt;iframe src=&quot;http://www.youtube.com/embed/xmyYz6D-jCA?HD=1&amp;amp;rel=0&amp;amp;showinfo=0&amp;amp;modestbranding=1&quot; frameborder=&quot;0&quot; allowfullscreen style=&quot;height: 375px; width: 500px;&quot;&gt;&lt;/iframe&gt;
    &lt;/div&gt;&lt;em style=&quot;display: block; font-style: italic;&quot;&gt;BostonGlobe.com no Responsive Play&lt;/em&gt;
&lt;/figure&gt;


&lt;h2 id=&quot;browser-edition&quot;&gt;Browser edition&lt;/h2&gt;
&lt;p&gt;Além disso, o &lt;strong&gt;Responsive Play&lt;/strong&gt; tem uma versão web pra você rodar no navegador e visualizar seu site em diversas resoluções, sem gerar o vídeo. É só &lt;a href=&quot;http://sergiolopes.github.com/responsive-play/&quot;&gt;acessar a página&lt;/a&gt; e colocar o endereço de teste.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/responsive-play/browser-edition.png&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;ArquiteturaJava.com.br no Responsive Play, Browser Edition&lt;/em&gt;
&lt;/figure&gt;

&lt;h2 id=&quot;mais&quot;&gt;Mais&lt;/h2&gt;
&lt;p&gt;E o que você acha de testar sites responsivos em centenas de resoluções ao invés de algumas poucas de dispositivos famosos? Saiu &lt;a href=&quot;http://coding.smashingmagazine.com/2012/03/22/device-agnostic-approach-to-responsive-web-design/&quot;&gt;um artigo na Smashing Magazine&lt;/a&gt; essa semana que trata justo do porquê sites responsivos deveriam funcionar em todo tipo de resolução.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Visualize em 3D a complexidade da sua página no Firefox Tilt</title>
         <link href="http://sergiolopes.org/firefox-tilt-3d-inspector/"/>
         <updated>2012-03-19T00:00:00.000Z</updated>
         <id>http://sergiolopes.org/firefox-tilt-3d-inspector/</id>

         <content type="html">
            
            

               
               

               
               

               
               &lt;p&gt;Você já está acostumado a inspecionar suas páginas no &lt;strong&gt;Firebug&lt;/strong&gt; ou no &lt;strong&gt;Web Inspector&lt;/strong&gt;, mas aposto que não em &lt;strong&gt;3D&lt;/strong&gt;! O Firefox 11 traz o novo &lt;em&gt;inspector&lt;/em&gt; 3D chamado &lt;strong&gt;Tilt&lt;/strong&gt; que mostra os elementos da sua página hierarquicamente numa bela visualização em três dimensões.&lt;/p&gt;
&lt;p&gt;A ferramenta já existia antes na forma de uma extensão beta. Mas agora está incorporada ao &lt;strong&gt;Firefox 11&lt;/strong&gt;. Para acessá-la, basta abrir o &lt;em&gt;inspector&lt;/em&gt; e clicar no botão &lt;strong&gt;3D&lt;/strong&gt; -- o &lt;em&gt;inspector&lt;/em&gt; no Firefox fica em &lt;em&gt;Tools&lt;/em&gt; &amp;gt; &lt;em&gt;Web Developer&lt;/em&gt; &amp;gt; &lt;em&gt;Inspect&lt;/em&gt;.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/firefox-tilt/googlecom.png&quot; alt=&quot;Google.com no Tilt&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Google.com no Tilt&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;Ainda estou tentando achar cenários realmente úteis pra ferramenta, mas pelo menos &lt;strong&gt;ela é divertida&lt;/strong&gt;. Ela serve como indicativo, por exemplo, de um markup complexo demais. Ao rodar na &lt;a href=&quot;http://www.caelum.com.br&quot;&gt;página da Caelum&lt;/a&gt; não fiquei surpreso ao ver dois picos de complexidade exatamente onde ficam &lt;strong&gt;os widgets do Facebook&lt;/strong&gt;:&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/firefox-tilt/caelumcombr.png&quot; alt=&quot;Caelum.com.br no Tilt&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Caelum.com.br no Tilt&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;Com um markup estranho desses, não é de se estranhar que esses widgets sejam &lt;strong&gt;extremamente lentos&lt;/strong&gt; -- vilões famosos do pessoal de &lt;em&gt;web performance&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;E dá pra fazer mais brincadeiras no Tilt. Como ele roda num &lt;strong&gt;canvas infinito de WebGL&lt;/strong&gt;, ele não tem as mesmas restrições de tamanho do &lt;em&gt;viewport&lt;/em&gt; tradicional do navegador. O que isso quer dizer? &lt;strong&gt;Dá pra ver todos aqueles hacks de posicionar elementos fora da tela&lt;/strong&gt;, como esse pedaço do menu no &lt;a href=&quot;http://mozilla.org&quot;&gt;site da Mozilla&lt;/a&gt; sobrando no topo da página:&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/firefox-tilt/mozillaorg.png&quot; alt=&quot;Mozilla.org no Tilt&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Rabicó do menu da Mozilla saindo pra fora da página: visível no Tilt!&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;Ou ainda observar sua página em &lt;strong&gt;ângulos inusitados&lt;/strong&gt;:&lt;/p&gt;
&lt;figure&gt;
    &lt;img src=&quot;/img/posts/firefox-tilt/uolcombr.png&quot; alt=&quot;Uol.com.br por trás&quot; style=&quot;display: inline-block; vertical-align: middle; max-width: 100%;&quot;&gt;
    &lt;em style=&quot;display: block; font-style: italic;&quot;&gt;Toda a verdade por trás do UOL&lt;/em&gt;
&lt;/figure&gt;

&lt;p&gt;Baixa lá então o Firefox mais novo e testa o Tilt. E se conseguir pensar em cenários úteis pra usá-lo, me conta aí nos comentários.&lt;/p&gt;


               
               
                  &lt;hr&gt;
                  &lt;p&gt;Conteúdo original do blog &lt;a href=&quot;http://sergiolopes.org&quot;&gt;sergiolopes.org&lt;/a&gt;.&lt;/p&gt;
               

            
         </content>
      </entry>
   
      <entry>
         <title>Pixels, pixels ou pixels? Dicas de Web Mobile com viewport</title>
         <link href="http://blog.caelum.com.br/pixels-pixels-ou-pixels-dicas-de-web-mobile-com-viewport/"/>
         <updated>2012-02-27T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/pixels-pixels-ou-pixels-dicas-de-web-mobile-com-viewport/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/pixels-pixels-ou-pixels-dicas-de-web-mobile-com-viewport/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Por uma Web mais rápida: 26 técnicas de otimização de Sites</title>
         <link href="http://blog.caelum.com.br/por-uma-web-mais-rapida-26-tecnicas-de-otimizacao-de-sites/"/>
         <updated>2011-09-12T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/por-uma-web-mais-rapida-26-tecnicas-de-otimizacao-de-sites/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/por-uma-web-mais-rapida-26-tecnicas-de-otimizacao-de-sites/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Otimizações na Web e o carregamento assíncrono</title>
         <link href="http://blog.caelum.com.br/otimizacoes-na-web-e-o-carregamento-assincrono/"/>
         <updated>2011-04-28T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/otimizacoes-na-web-e-o-carregamento-assincrono/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/otimizacoes-na-web-e-o-carregamento-assincrono/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>CSS3 e o futuro da Web</title>
         <link href="http://blog.caelum.com.br/css3-e-o-futuro-da-web/"/>
         <updated>2010-02-17T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/css3-e-o-futuro-da-web/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/css3-e-o-futuro-da-web/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Segurança em aplicações Web: Injeção de novos parâmetros</title>
         <link href="http://blog.caelum.com.br/seguranca-em-aplicacoes-web-injecao-de-novos-parametros/"/>
         <updated>2009-04-07T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/seguranca-em-aplicacoes-web-injecao-de-novos-parametros/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/seguranca-em-aplicacoes-web-injecao-de-novos-parametros/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
   
      <entry>
         <title>Segurança em aplicações Web: XSS</title>
         <link href="http://blog.caelum.com.br/seguranca-em-aplicacoes-web-xss/"/>
         <updated>2008-11-25T00:00:00.000Z</updated>
         <id>http://blog.caelum.com.br/seguranca-em-aplicacoes-web-xss/</id>

         <content type="html">
            
            
               
               
                  &lt;p style=&quot;padding:10px; background-color:#FFF0A5&quot;&gt;
                     &lt;i&gt;
                        Escrevi esse post em um outro blog. 
                        &lt;a href=&quot;http://blog.caelum.com.br/seguranca-em-aplicacoes-web-xss/&quot;&gt;Acesse aqui para ler&lt;/a&gt;.
                     &lt;/i&gt;
                  &lt;/p&gt;
               

            
            
         </content>
      </entry>
    
</feed>