<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>THLopes.com &#187; tecnologia</title>
	<atom:link href="http://www.thlopes.com/category/tecnologia/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thlopes.com</link>
	<description>Web, Ciência, Computação e Poesia</description>
	<lastBuildDate>Mon, 02 Jan 2012 20:29:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Curso Engenharia Web propõe desenvolvimento sistemático de aplicações para internet</title>
		<link>http://www.thlopes.com/2011/11/curso-engenharia-web-propoe-desenvolvimento-sistematico-de-aplicacoes-para-internet/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=curso-engenharia-web-propoe-desenvolvimento-sistematico-de-aplicacoes-para-internet</link>
		<comments>http://www.thlopes.com/2011/11/curso-engenharia-web-propoe-desenvolvimento-sistematico-de-aplicacoes-para-internet/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 10:36:09 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Cultura]]></category>
		<category><![CDATA[Fatos]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[curso]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[senac]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=1255</guid>
		<description><![CDATA[Nova pós-graduação é voltada a profissionais de tecnologia da informação e interessados em ter uma compreensão mais abrangente da área O mercado de tecnologia da informação tem buscado profissionais capazes de analisar criticamente o ambiente de desenvolvimento web, com visão &#8230; <a href="http://www.thlopes.com/2011/11/curso-engenharia-web-propoe-desenvolvimento-sistematico-de-aplicacoes-para-internet/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>Nova pós-graduação é voltada a profissionais de tecnologia da informação e interessados em ter uma compreensão mais abrangente da área</em></p>
<p><a href="http://www.thlopes.com/2011/11/curso-engenharia-web-propoe-desenvolvimento-sistematico-de-aplicacoes-para-internet/logotipo-senac-sp/" rel="attachment wp-att-1259"><img class="alignleft size-thumbnail wp-image-1259" style="border-style: initial; border-color: initial; border-width: 0px; margin: 5px;" title="logotipo-senac-sp" src="http://www.thlopes.com/wp-content/uploads/2011/11/logotipo-senac-sp-150x150.jpg" alt="" width="150" height="150" /></a>O mercado de tecnologia da informação tem buscado profissionais capazes de analisar criticamente o ambiente de desenvolvimento web, com visão orientada para qualidade e melhoria de processos. Atento a esse cenário, o Centro Universitário Senac lança a pós-graduação Engenharia Web, a primeira dessa categoria no Estado de São Paulo. Duas unidades, Senac Lapa Tito e Senac Santo André, vão oferecer o curso no próximo ano, capacitando em 366 horas interessados em planejar e coordenar projetos nesse segmento.</p>
<p>“Definida como o uso sistemático da engenharia no desenvolvimento, na implantação e manutenção de aplicações web de alta complexidade, trata-se de uma nova área do conhecimento, ainda pouco explorada. No Brasil, percebe-se que esse trabalho representa uma parte significativa da produção de empresas de softwares”, comenta Richard Martelli, técnico da área de tecnologia da informação do Senac São Paulo. Além dessas organizações, o engenheiro web pode atuar em instituições de comércio eletrônico, de design, de publicidade, portais de conteúdo, comunidades virtuais, bem como órgãos governamentais e ONGs.</p>
<p>Apesar de fortemente baseado na engenharia de software, o curso apresenta como diferencial ao aluno o tratamento multidisciplinar, tendo como público-alvo é formado por profissionais de análise de sistemas, ciências da computação, sistemas de informação, engenharia de software, web design e mídias interativas, além de pessoas que já atuam na área e desejam uma compreensão mais abrangente.</p>
<p>Mais informações podem ser obtidas em <a title="Centro Universitário SENAC" href="http://www.sp.senac.br">www.sp.senac.br</a> ou diretamente no Senac Lapa Tito e Senac Santo André.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2011/11/curso-engenharia-web-propoe-desenvolvimento-sistematico-de-aplicacoes-para-internet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Meu Ambiente de trabalho em 7 itens</title>
		<link>http://www.thlopes.com/2011/02/meu-ambiente-de-trabalho-em-7-itens/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=meu-ambiente-de-trabalho-em-7-itens</link>
		<comments>http://www.thlopes.com/2011/02/meu-ambiente-de-trabalho-em-7-itens/#comments</comments>
		<pubDate>Fri, 25 Feb 2011 20:07:16 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Cultura]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Projetos]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ambiente]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[Django]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[lista]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=978</guid>
		<description><![CDATA[Seguindo a "corrente do bem" que chegou até mim via Rocha C. Bruno, segue minha lista para Meu ambiente de trabalho em 7 items (Nossa, um número realmente pequeno para esse tipo de brincadeira...), vamos lá: Python, Django, Javascript, jQuery, Firebug, Mercurial-HG, Eclipse <a href="http://www.thlopes.com/2011/02/meu-ambiente-de-trabalho-em-7-itens/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-full wp-image-989" src="http://www.thlopes.com/files/2011/02/environment.development.tools.thlopes.300x224.jpg" alt="Development tools, THLopes.com" width="300" height="224" />Seguindo a &#8220;corrente do bem&#8221; que chegou até mim via <a href="http://rochacbruno.com.br/blog/">Rocha C. Bruno</a>, segue minha lista para <em>Meu ambiente de trabalho em 7 items </em>(Nossa, um número realmente pequeno para esse tipo de brincadeira&#8230;), vamos lá:</p>
<ol>
<li><strong><a href="http://www.python.org">Python</a></strong>: A linguagem mestre, sempre liderando qualquer projeto. Curiosamente, até em projetos onde o Python não é a linguagem principal, ele exerce sua influência: estou sempre pensando &#8220;Pythonicamente&#8221; para resolver problemas, aplicando o Zen que a comunidade e linguagem prega. Não é apenas linguagem: é Filosofia!</li>
<li><strong><a href="http://www.djangoproject.com">Django</a></strong>: Nem todos projetos são Web, ou 100% Web. Mas os que atendem a esse requisito, sempre tem esse maravilhoso framework direcionando os trabalhos.</li>
<li><strong><a href="http://pt.wikipedia.org/wiki/JavaScript">Javascript</a></strong>: Para muitos, é algo bizarro. Para mim, que trabalho a maior parte com interfaces e interação do usuário com os sistemas, é a arma. E como já disse para muitos amigos de trabalho: &#8220;Para mim, Javascript é o Python rodando diretamente no Browser.</li>
<li><strong><a href="http://www.jquery.com">jQuery</a></strong>: Muitas vezes esse framework chega a se sobrepôr a própria linguagem. Em muitos projetos, dá até pra dizer que temos &#8220;mais linhas jQuery do que Javascript puro&#8221;. Mas o que isso quer dizer? Que Web sem jQuery realmente é muito mais difícil e demorado! Gosto tanto do framework que criei até uns plugins</li>
<li><strong><a href="http://getfirebug.com/">Firebug</a></strong>: Se eu tiver de nomear um dos items como minha Shuriken, o Firebug seria sem dúvida! Muito prático, rápido e a ferramenta ideal para &#8220;prototipar&#8221; qualquer interface. Ainda mais se o cliente estiver do seu lado, esperando uma resposta sua: Você abre o console, algumas linhas e opções depois, você mostra pra ele como pode resolver  o problema&#8230; e negócio mais próximo de estar fechado!</li>
<li><strong><a href="http://mercurial.selenic.com/">Mercurial-HG</a></strong>: Devo confessar, antes usava SVN, e quando a vida me exigiu mudar para Mercurial, tive um pouco de resistência. Mas hoje, alguns meses depois, só vejo vantagens, principalmente  após usar os excelentes recursos do <a href="https://bitbucket.org/THLopes/">Bitbucket </a>e saber que várias boas ferramentas que utilizo, inclusive o próprio Python, tem seu código armazenado por lá, e também que Mercurial é uma ferramenta escrita em Python.</li>
<li><strong><a href="http://www.eclipse.org/">Eclipse</a></strong>: Não vou morrer se o Eclipse não abrir&#8230; mas vou ganhar várias horas de lazer com algumas praticidades que ele traz: com essa IDE, eu centralizo diversas outras ferramentas, libraries, automatizo alguns procedimentos, debugs, vários ambientes de execução e depuração customizados com fácil acesso&#8230; enfim, um verdadeiro Canivete Suíço! Claro, ele tem que estar turbinado com alguns plugins, tais como: <strong><a href="http://www.aptana.com/">Aptana</a></strong>, <strong><a href="http://pydev.sourceforge.net/">PyDev</a></strong>, <strong>Mercurial</strong>, etc.</li>
</ol>
<p>E assim como outros fizeram, vamos às menções honrosas de outras ferramentas que fazer uma pontinha no ambiente com menos frequência. Percebam que muitas ferramentas são claramente feitas para rodar em Windows, geralmente para suprir necessidades que são padrão no Linux</p>
<ol>
<li><strong><a href="http://www.ubuntu.com/">Ubuntu</a></strong>: Companheiro de cada dia! Geralmente uso Windows por conveniência (sempre compro notebooks com Windows original pré-instalado, e dá uma preguiça de instalar e configurar um novo sistema&#8230; apesar de que nas últimas versões de Ubuntu esse processo estar facílimo!). Certas coisas na vida de um desenvolvedor só são possíveis num sistema Linux, e Ubuntu é o mestre nesse aspecto. Um exemplo é um projeto recente que estou trabalhando que envolve processamento de vídeo, usando FFMpeg e PyFFMpeg. Praticamente impossível de rodar em Windows&#8230; porém, no Linux, é <em>mamão-com-açúcar</em>&#8230;</li>
<li><strong><a href="http://code.google.com/appengine/">Google App Engine SDK</a></strong>: Ferramenta essencial para projetos dentro da plataforma do Google. Quando usando com Eclipse, basta integrar no ambiente ou no projeto e o Eclipse/Pydev faz toda a interface pra você.</li>
<li><strong><a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/">Putty</a></strong>: Quando não no Linux, uma ferramenta essencial para conectar-se a sistemas remotos.</li>
<li><strong><a href="http://ipython.scipy.org/">iPython</a></strong>: Mão na roda para agilizar alguns comandos experimentais e em testes (Experimentando o <a href="http://dreampie.sourceforge.net/">DreamPie</a> também)</li>
<li><strong><a href="http://www.apachefriends.org/pt_br/xampp.html">XAMPP</a></strong>: Outra ferramenta indispensável quando desenvolvendo fora do Linux</li>
<li><strong><a href="http://www.phpmyadmin.net/">phpMyAdmin</a></strong>: Muita gente torce o nariz, mas essa ferramenta é muito boa e prática. Só não é melhor por não ser em Python, <img src='http://www.thlopes.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</li>
<li><strong><a href="http://www.skype.com/intl/pt/home/">Skype</a></strong>: Para conversar com a equipe, clientes, e até fazer pequenos treinamentos</li>
<li><strong><a href="http://db.tt/RKATEsN">DropBox</a></strong>: Backup e compartilhamento entre máquinas remotas. Uso principalmente como backup automatizado do meu ambiente de desenvolvimento remoto e até apaga alguns</li>
<li><strong><a href="http://www.vmware.com/products/player/">VMWare Player</a></strong>: Para rodar mais de um sistema de uma vez, permitindo testes (compatibilidade e usabilidade) mais rápidos e práticos</li>
<li><strong><a href="http://www.realvnc.com/">VNC</a> / <a href="http://sourceforge.net/projects/win2vnc/">Win2VNC</a></strong>: Também para rodar mais de um sistema de uma vez, mas aqui, para controlar mais de uma máquina com um único teclado e mouse, não para visualização remota (inclusive, acho horrível&#8230;)</li>
<li><strong><a href="http://pencil.evolus.vn/">Pencil</a></strong> (Firefox Add-on): Para fazer Wireframes</li>
</ol>
<p>Para dar continuidade, convido os amigos para seguir nesse trend:</p>
<p><a href="http://twitter.com/#!/mauriciosl">@mauriciosl</a><br />
<a href="http://twitter.com/#!/jeanwainer"> @jeanwainer</a><br />
<a href="http://twitter.com/#!/ergalassi"> @ergalassi</a><br />
<a href="http://twitter.com/#!/marcelohonorio"> @marcelohonorio</a><br />
<a href="http://twitter.com/#!/odranoel"> @odranoel</a><br />
<a href="http://twitter.com/#!/ericgoes"> @Ericgoes</a><br />
<a href="http://twitter.com/#!/marcosriso"> @marcosriso</p>
<p></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2011/02/meu-ambiente-de-trabalho-em-7-itens/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>zipando arrays javascript como no python</title>
		<link>http://www.thlopes.com/2011/01/zipando-arrays-javascript-como-no-python/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zipando-arrays-javascript-como-no-python</link>
		<comments>http://www.thlopes.com/2011/01/zipando-arrays-javascript-como-no-python/#comments</comments>
		<pubDate>Wed, 26 Jan 2011 19:00:39 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[array]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[zip]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=964</guid>
		<description><![CDATA[Essa dica rápida é para aqueles que estão procurando uma forma de mesclar (merge) arrays em Javascript como é feito em Python através da função zip. <a href="http://www.thlopes.com/2011/01/zipando-arrays-javascript-como-no-python/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Essa dica rápida é para aqueles que estão procurando uma forma de mesclar (merge) arrays em Javascript como é feito em Python através da função zip():</p>
<pre>function zip() {
    var merged=[],arrays=[],lengths=[];
    for(var i=0; i&lt;arguments.length; i++) {
        arrays.push(arguments[i]);
        lengths.push(arguments[i].length);
    }
    for (var i=0; i &lt; Math.min.apply(null,lengths); i++) {
        merged[i] = arrays.map(function(value) { return value[i]; });
    }
    return merged;
}</pre>
<p>Enjoy!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2011/01/zipando-arrays-javascript-como-no-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Republicando: jQuery, de olho nos gaps</title>
		<link>http://www.thlopes.com/2010/08/republicando-jquery-de-olho-nos-gaps/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=republicando-jquery-de-olho-nos-gaps</link>
		<comments>http://www.thlopes.com/2010/08/republicando-jquery-de-olho-nos-gaps/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 00:54:50 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=902</guid>
		<description><![CDATA[Estou republicando esse artigo pois o mesmo recebeu um comentário, e ao mesmo tempo, é um assunto que ainda assola muitas pessoas que utilizam jQuery, principalmente quem começou com ela há pouco tempo. <a href="http://www.thlopes.com/2010/08/republicando-jquery-de-olho-nos-gaps/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>Estou republicando </em><a href="http://old.thlopes.com/content/view/141/46/"><em>esse artigo</em></a><em> pois o mesmo recebeu um comentário, e ao mesmo tempo, é um assunto que ainda assola muitas pessoas que utilizam </em><a href="http://docs.jquery.com"><em>jQuery</em></a><em>, principalmente quem começou com ela há pouco tempo.</em></p>
<p>Qual webdeveloper nunca usou <a class="bbli" href="http://sledge.boo-box.com/list/page/alF1ZXJ5XyMjX2JveF8jI190YWdnaW5nLXRvb2wtd3BfIyNfMjM5MzQ=-56">jQuery<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a>? Muito difícil&#8230; Bom, mas vamos falar de algo que nem todos os <a class="bbli" href="http://sledge.boo-box.com/list/page/cHJvZ3JhbW1pbmdfIyNfYm94XyMjX3RhZ2dpbmctdG9vbC13cF8jI18yMzkzNA==-64">developers<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a> que usam jQuery se atentam ao programar. Eu mesmo fui pego hoje por um gap que me tomou alguns minutos da tarde&#8230;</p>
<p>Algumas funções (na verdade, a maioria nesse framework) recebem outras funções como <em>callback</em>, aquela função que será chamada assim que a instrução/função chamada acabar seu procedimento. Um exemplo muito utilizado em aplicações reais são as</p>
<h2>Funções Ajax</h2>
<p style="background-color: #ffffff;padding: 2px;border: 1px solid #cccccc"><em>load</em>( url, data, <strong>callback </strong>)<br />
Returns: jQuery. Load HTML from a remote file and inject it into the DOM.</p>
<p style="background-color: #ffffff;padding: 2px;border: 1px solid #cccccc">jQuery.<em>get</em>( url, data, <strong>callback</strong>, type )<br />
Returns: XMLHttpRequest. Load a remote page using an HTTP GET request.</p>
<p style="background-color: #ffffff;padding: 2px;border: 1px solid #cccccc">jQuery.<em>getJSON</em>( url, data, <strong>callback </strong>)<br />
Returns: XMLHttpRequest. Load JSON data using an HTTP GET request.</p>
<p><span id="more-902"></span></p>
<p>Ao usar a função load, você carrega um arquivo remoto (seja ele html puro ou um arquivo dinâmico, como PHP ou outra linguagem), mas o tempo que ele leva para ser processado nem sempre é igual. E se você precisa esperar que o conteúdo seja totalmente carregado antes de proceder com o script?Colocar um timeout? No way, uma vez que você não tem controle sobre o tempo de execução em todas as plataformas e clientes&#8230; Logo, o Callback está aí para sanar essa questão.</p>
<h2>Porém&#8230;</h2>
<p>Temos que tomar cuidado ao usar o Callback, uma vez que o desempenho dos sistemas ainda podem afetar a funcionalidade de seu código, e fazer você perder várias horas de seu precioso descanso&#8230;Veja esse trecho de código que trabalhei recentemente:</p>
<pre>jQuery().ready(function() {
   jQuery.getJSON('/php/data.drafts.php?l=10&amp;f=json', function(data){
      jQuery.each(data, function(i, item){
         jQuery('#latestDraftsTable tbody').append('&lt;tr&gt;&lt;td&gt;'+item.id+'&lt;/td&gt;&lt;td&gt;' + item.title + '&lt;/td&gt;&lt;td&gt;' + item.date+ '&lt;/td&gt;&lt;/tr&gt;');
      });
   });
   jQuery('#latestDraftsTable').tablesorter({widgets: ['zebra']});
);</pre>
<p>Alguém consegue perceber o erro, ou melhor, a Zebra? Muito difícil. Mas ao rodar o código, não acontecia o esperado: que minha tabela apresentasse o comportamento de uma tabela ordenável que o jQuery UI tablesorter plugin proporciona (ou seja, deu Zebra e não ocorreu a <em>Zebra</em>). Aí eu descobri o problema: a penúltima linha do código nem estava sendo executada&#8230; Seriam Gaps de performance?</p>
<h2>Diferentes paradigmas</h2>
<p>Fosse uma linguagem das antigas qualquer, onde o paradigma procedural imperava, esse código não teria problema, pois cada instrução só seria disparada ao final da anterior. No Javascript, a coisa não é bem assim, ainda mais quando se trata de AJAX -<em><strong>Assynchronous</strong> Jacascript and XML</em> &#8211; uma requisição que é disparada e outra estrutura interna fica encarregada de processar os resultados quando eles chegarem. Ao efetuar a função getJSON, a requisição é disparada, e já passamos para a próxima linha (onde eu chamo o tablesorter na tabela), porém, não deu tempo da requisição JSON retornar e popular a tabela. Resultado: minha tabela fica populada mas não fica ordenável.</p>
<p>Graças a um amigo developer fera em JS, eu consegui perceber isso e reordenaro código de maneira que ele funcionasse como o esperado:</p>
<h3>Código corrigido</h3>
<pre>jQuery().ready(function() {
   jQuery.getJSON('/php/data.drafts.php?l=10&amp;f=json', function(data){
      jQuery.each(data, function(i, item){
         jQuery('#latestDraftsTable tbody').append('&lt;tr&gt;&lt;td&gt;'+item.id+'&lt;/td&gt;&lt;td&gt;' + item.title + '&lt;/td&gt;&lt;td&gt;' + item.date+ '&lt;/td&gt;&lt;/tr&gt;');
      });
      <strong>jQuery('#latestDraftsTable').tablesorter({widgets: ['zebra']});</strong>
   });
);</pre>
<p>Assim, o tablesorter vai ocorrer dentro do <em>callback</em>, logo após ter terminado de ser populada a tabela. Na realidade, os callbacks foram feitos exatamente para situações como essa: <em>quando a coisa vai demorar um pouco e você não tem certeza do quanto&#8230;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2010/08/republicando-jquery-de-olho-nos-gaps/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>IBM adota Firefox como browser padrão</title>
		<link>http://www.thlopes.com/2010/07/ibm-adota-firefox-como-browser-padrao/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ibm-adota-firefox-como-browser-padrao</link>
		<comments>http://www.thlopes.com/2010/07/ibm-adota-firefox-como-browser-padrao/#comments</comments>
		<pubDate>Mon, 05 Jul 2010 15:11:27 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Fatos]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[ibm]]></category>
		<category><![CDATA[internet explorer]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=863</guid>
		<description><![CDATA[Algumas coisas as vezes demoram pra acontecer. Mas quando falamos de grandes companhias, é comum uma mudança demorar pra propagar. É o que aconteceu somente agora: IBM adota Firefox como seu browser padrão. Desde antes da época que trabalhei no &#8230; <a href="http://www.thlopes.com/2010/07/ibm-adota-firefox-como-browser-padrao/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Algumas coisas as vezes demoram pra acontecer. Mas quando falamos de grandes companhias, é comum uma mudança demorar pra propagar. É o que aconteceu somente agora: <a href="http://www.ibm.com/br/pt/">IBM </a>adota <a href="http://br.mozdev.org/">Firefox </a>como seu browser padrão. Desde antes da época que trabalhei no departamento web aqui no Brasil, os profissionais do departamento já brigavam para emplacar o Firefox dentro da companhia, mas devido à cultura corporativa adotada, o IE ainda reinava.</p>
<p>Lembro até de campanhas internas para lembrar alguns desenvolvedores que o IE deveria estar instalado em suas máquinas para entrar no esquema de testes. Espero que o IE6 não esteja mais na maioria das máquinas, como acontecia também (afinal, ter um IE6 em sua máquina é um risco considerável&#8230;).</p>
<p>Como disse a <a href="http://tecnologia.ig.com.br/noticia/2010/07/02/firefox+e+o+novo+browser+padrao+da+ibm+9528637.html">editoria de Tecnologia do IG</a>, a IBM adotou o browser por sua veia OpenSource (uma quebra de rotina dessas só poderia partir mesmo do braço livre da empresa), por ter melhor suporte para extensões (aqui com certeza os desenvolvedores quem bateram o pé) e a meu ver, principalmente por ser mais customizável (e assim, a gigante poder ter um melhor controle das ferramentas utilizadas por seus colaboradores, como recursos). Claro, podemos esperar outros motivos ainda, afinal, empresas desse porte nunca fazem mudanças globais sem antes calcular minuciosamente o quanto poderão economizar/ganhar com uma ação dessas. Talvez vejamos em alguns meses alguma nova ferramenta interna sendo vendida globalmente, baseada na tecnologia do browser.</p>
<p>Mas claro, quem conhece, sabe que os benefícios de adotar um browser mais robusto são muito bem vindos, seja sua empresa pequena ou gigante.</p>
<p>Confira mais no<a href="http://tecnologia.ig.com.br/noticia/2010/07/02/firefox+e+o+novo+browser+padrao+da+ibm+9528637.html"> iG &#8211; Tecnologia</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2010/07/ibm-adota-firefox-como-browser-padrao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nerdcast sobre programadores</title>
		<link>http://www.thlopes.com/2010/05/nerdcast-sobre-programadores/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nerdcast-sobre-programadores</link>
		<comments>http://www.thlopes.com/2010/05/nerdcast-sobre-programadores/#comments</comments>
		<pubDate>Fri, 28 May 2010 20:10:05 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Fatos]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[profissão]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=836</guid>
		<description><![CDATA[Quem acompanha o blog sabe que esporadicamente posto links para podcasts de assuntos relacionados a THLopes. E aqui está mais: o Nerdcast de hoje, cujo tema é Profissão: Programador. Como este que vos escreve atua nessa profissão, recomendo ouvir esse excelente podcast para fechar sua sexta-feira. Boas risadas e descobertas! <a href="http://www.thlopes.com/2010/05/nerdcast-sobre-programadores/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="Nerdcast #211 Profissão: programador por thlopes, no Flickr" href="http://www.thlopes.com/2010/05/nerdcast-sobre-programadores/"><img src="http://farm5.static.flickr.com/4062/4647820359_286829fea9_o.jpg" alt="Nerdcast #211 Profissão: programador" width="440" height="235" /></a></p>
<p>Quem acompanha o blog sabe que esporadicamente posto links para podcasts de assuntos relacionados a THLopes. E aqui está mais: o Nerdcast de hoje, cujo tema é Profissão: Programador. Como este que vos escreve atua nessa profissão, recomendo <a title="Nerdcast 211 -0 profissão programador" href="http://jovemnerd.ig.com.br/nerdcast/nerdcast-211-profissao-programador/">ouvir esse excelente podcast para fechar sua sexta-feira</a>. Boas risadas e descobertas!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2010/05/nerdcast-sobre-programadores/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Todos querem Cassandra</title>
		<link>http://www.thlopes.com/2010/03/todos-querem-cassandra/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=todos-querem-cassandra</link>
		<comments>http://www.thlopes.com/2010/03/todos-querem-cassandra/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 11:00:01 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Banco de dados]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Projetos]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=759</guid>
		<description><![CDATA[Com esse título (e com esse logo), poderiamos começar uma novela. Mas estamos falando de outra novela: a da migração de banco de dados MySQL para Cassandra. Depois do Twitter, agora é o Digg quem decidiu migrar suas bases de dados para esse banco com um nome bem interessante. <a href="http://www.thlopes.com/2010/03/todos-querem-cassandra/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="Cassandra database por thlopes, no Flickr" href="http://www.flickr.com/photos/thlopes/4433994858/"><img src="http://farm5.static.flickr.com/4054/4433994858_2ccd5f3998_o.png" alt="Cassandra database" width="500" height="100" /></a></p>
<p>Com esse título (e com esse logo), poderiamos começar uma novela. Mas estamos falando de outra novela: a da migração de banco de dados <a title="Site oficial do banco de dados MySQL" href="http://www.mysql.com/">MySQL</a> para <a title="Site oficial do banco de dados Cassandra" href="http://incubator.apache.org/cassandra/">Cassandra</a>. Depois do <a href="http://br-linux.org/2010/crescimento-faz-twitter-trocar-o-mysql-pelo-cassandra/">Twitter</a>, agora é o <a title="Digg migra base de MySQL para Cassandra" href="http://www.h-online.com/open/news/item/Digg-switches-to-NoSQL-Cassandra-952045.html">Digg quem decidiu migrar suas bases de dados</a> para esse banco com um nome bem interessante.</p>
<p>Cassandra é um banco de dados pós-relacional. Mas como esse termo não é muito conhecido, utilizaremos o termo <a title="Verbete NoSQL na Wikipedia, em inglês." href="http://en.wikipedia.org/wiki/Nosql">NoSQL</a>. Um repositório de dados leve, feito em Java, similar aos famosos <a href="http://couchdb.apache.org/">CouchDB</a> (outro projeto que, assim como o Cassandra, é incubado na <a href="http://incubator.apache.org/">Apache Incubator</a>) e <a href="http://labs.google.com/papers/bigtable.html">BigTable</a>, utilizando ferramentas similares ao <a href="http://hadoop.apache.org/">Hadoop</a> (coincidência? Mais um projeto incubado na Apache) e conceitos como <a href="http://en.wikipedia.org/wiki/MapReduce">MapReduce</a> (para bancos distribuídos). Agora vem o fato mais curioso: Esse projeto foi inicialmente desenvolvido pelo Facebook, e <a href="http://www.new.facebook.com/note.php?note_id=24413138919">foi aberto (open source) em 2008</a>. Mais uma rede social, crescendo e migrando para bases não-relacionais. Que ironia: justamente as redes sociais, onde as relações são muito valiosas.</p>
<p>Apesar do ganho no desempenho, sei que esse tipo de transição é muito &#8220;dolorosa&#8221;. Esses tipos de banco de dados não-relacionais realmente podem dar um nó no cérebro dos desenvolvedores. É muito complicado viver sem os joins depois de algum tempo trabalhando com eles.</p>
<p>Segundo os engenheiros do Twitter, precisavam de um banco de dados escalável que &#8220;crescesse sozinho&#8221;. Realmente, imaginar monstros como Twitter &#8211; que cresceu mais de 20 vezes em menos de um ano, alcançado a marca de 50 milhões de Tweets diários &#8211; e do Digg (onde muitos usuários compartilham notícias e comentários o tempo todo) e seus dba&#8217;s brigando todos os dias para conter a bomba do MySQL, enxertando cada vez mais hardware para que não exploda na cara dos usuários. Nessa hora, é questão de escolha: onde vamos quebrar a cabeça para resolver o problema? Os desenvolvedores decidem.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2010/03/todos-querem-cassandra/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>corMVC, framework MVC para Javascript</title>
		<link>http://www.thlopes.com/2010/03/cormvc-framework-mvc-para-javascript/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cormvc-framework-mvc-para-javascript</link>
		<comments>http://www.thlopes.com/2010/03/cormvc-framework-mvc-para-javascript/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 11:30:39 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=730</guid>
		<description><![CDATA[corMVC é um framework MVC para Javascript, baseado em jQuery. Voltado para aplicações web de uma página só, onde você executa todas suas operações em estilo Ajax, na própria página.  <a href="http://www.thlopes.com/2010/03/cormvc-framework-mvc-para-javascript/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="corMVC - um framework MVC para Javascript por thlopes, no Flickr" href="http://www.bennadel.com/projects/cormvc-jquery-framework.htm"><img src="http://farm3.static.flickr.com/2791/4420020518_e0616ea7a2_o.jpg" alt="corMVC - um framework MVC para Javascript" width="525" height="244" /></a></p>
<p><a title="Framework Javascript baseado em jQuery" href="http://www.bennadel.com/projects/cormvc-jquery-framework.htm">corMVC </a>é um framework MVC para Javascript, baseado em jQuery. Voltado para aplicações web de uma página só, onde você executa todas suas operações em estilo Ajax, na própria página. Segundo os criadores, é execelente como ponto de entrada para aprendizado da arquitetura de &#8216;single-page application&#8217; (aplicação de página única, como mencionado anteriormente).</p>
<p>É simples de começar a usar, não necessita de nenhum linha de comando, basta extrair tudo numa pasta e abrir no browser. Estou testando aqui e em breve posto meus comentários a respeito.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2010/03/cormvc-framework-mvc-para-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Motion: animação web sem flash</title>
		<link>http://www.thlopes.com/2010/03/motion-animacao-web-sem-flash/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=motion-animacao-web-sem-flash</link>
		<comments>http://www.thlopes.com/2010/03/motion-animacao-web-sem-flash/#comments</comments>
		<pubDate>Fri, 05 Mar 2010 14:53:02 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Projetos]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=721</guid>
		<description><![CDATA[Encontrei esse projeto através do LinkedIn. Incrível, o autor consegue gerar um ambiente animado, onde você pode interagir com outros elementos, o cenário tem profundidade, e você pode guiar seu personagem através desse ambiente, usando o teclado, para qualquer direção. Até aí normal, porém, ele fez tudo usando apenas Javascript, sem nenhum Flash sequer. Ver essa audácia me relembrou a época em que desenvolvi um game 2d em Java, na faculdade. <a href="http://www.thlopes.com/2010/03/motion-animacao-web-sem-flash/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="Motion: animação sem flash por thlopes, no Flickr" href="http://www.flickr.com/photos/thlopes/4408148145/"><img src="http://farm3.static.flickr.com/2745/4408148145_a6ede04f16.jpg" alt="Motion: animação sem flash" width="500" height="82" /></a></p>
<p>Encontrei esse p<a href="http://www.linkedin.com/groupAnswers?viewQuestionAndAnswers=&amp;discussionID=12806687&amp;gid=100943&amp;trk=EML_anet_qa_ttle-0Ut79xs2RVr6JBpnsJt7dBpSBA">rojeto através do LinkedIn</a>. Incrível, o autor consegue gerar um ambiente animado, onde você pode interagir com outros elementos, o cenário tem profundidade, e você pode guiar seu personagem através desse ambiente, usando o teclado, para qualquer direção. Até aí normal, porém, ele fez tudo usando apenas Javascript, sem nenhum Flash sequer. Ver essa audácia me relembrou a época em que desenvolvi um game 2d em Java, na faculdade, o K-Libre99, totalmente do zero.</p>
<p>O mais bacana é que ele demonstra que podemos sim ter coisas complexas feitas na web, com Javascript (que é nativo de qualquer browser hoje em dia), sem depender de plugins externos, como o Flash. Realmente, um trabalho excelente, demonstrando que a web não é dependente de Flash para criar experiências de usuário dinâmicas. Confira mais em <a title="Motion, by Mathew Dunham" href="http://www.geektestbox.com/devfiles/mdunham/brookside_beta/">http://www.geektestbox.com/devfiles/mdunham/brookside_beta/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2010/03/motion-animacao-web-sem-flash/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Otimizando desempenho</title>
		<link>http://www.thlopes.com/2010/01/otimizando-desempenho/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=otimizando-desempenho</link>
		<comments>http://www.thlopes.com/2010/01/otimizando-desempenho/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 23:20:12 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Projetos]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=618</guid>
		<description><![CDATA[Com o advento da computação em nuvem, alguns perceberam que realmente deveriam otimizar suas aplicações, pois cada KB gasto vai representar algum valor que será, com certeza, debitado num cartão de crédito futuramente. Enquanto antigamente, bastava planejar a compra de uma máquina muito além das necessidades e ter um custo fixo, agora, a briga é para sempre diminuir a conta no fim do mês, como numa economia doméstica (certa vez, ouvi que toda economia é de migalhas. Concordo). <a href="http://www.thlopes.com/2010/01/otimizando-desempenho/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a title="Cronômetro de Corrida por thlopes, no Flickr" href="http://www.flickr.com/photos/thlopes/4311711754/"><img src="http://farm5.static.flickr.com/4046/4311711754_0b9d33890c_o.jpg" alt="Cronômetro de Corrida" width="570" height="120" /></a></p>
<p>Nos últimos dias, temos brigado muito por coisas muito pequenas, as vezes passageiras. Cada migalha desperdiçada é motivo para um nova discussão que acaba mudando o rumo das coisas&#8230; Calma gente, não estou tendo problemas de relacionamento não, são apenas discussões sadias de trabalho para se melhorar os níveis de performance nos aplicativos.</p>
<p>Quando se atinge um certo número de usuários de uma única aplicação, devemos tomar certos cuidados. Muitas vezes, ignoramos alguns pontos que podemos melhorar, deixando 1KByte, 2KB mais leves, pois afinal, para um usuário parece tão pouco, mas quanto representa 2KB multiplicado por 100 mil usuários? 195 MB. É, assusta, e as cifras só tendem a aumentar.</p>
<p>Com o advento da <a title="Leia mais sobre na Wikipedia" href="http://pt.wikipedia.org/wiki/Computa%C3%A7%C3%A3o_em_nuvem">computação em nuvem</a>, alguns perceberam que realmente deveriam otimizar suas aplicações, pois cada KB gasto vai representar algum valor que será, com certeza, debitado num cartão de crédito futuramente. Enquanto antigamente, bastava planejar a compra de uma máquina muito além das necessidades e ter um custo fixo, agora, a briga é para sempre diminuir a conta no fim do mês, como numa economia doméstica (certa vez, ouvi que toda economia é de migalhas. Concordo).</p>
<p>Mas muitas vezes, desenvolvedores de aplicações esquecem de alguns detalhes como por exemplo, o peso dos arquivos da camada de apresentação de suas aplicações. Na Web, isso também deve entrar na conta: tamanho do HTML, <span class="bbused"><a class="bbli" href="http://sledge.boo-box.com/list/page/Q1NTXyMjX2JveF8jI19ib28tYm94ZnlfIyNfMjM5MzQ=-44">CSS<img class="bbic" src="http://boo-box.com/bbli" alt="[bb]" /></a></span>, JS e imagens. E hoje em dia, são relativamente conhecidas técnicas para aprimorar esses estáticos para uma melhor experiência do usuário. Digo relativamente porque ainda me deparo com muitos websites, sistemas e gadgets por aí sem nenhuma otimização nesse sentido. No Brasil ainda temos muitos usuários que não dispõe de banda larga, e eles agradecem cada byte salvo.</p>
<p><span id="more-618"></span></p>
<h3>Primeiro passo: Limpeza</h3>
<p>Um arquivo limpo de tudo que não é necessário é muito melhor, sem dúvida. Elimine dos arquivos aquelas linhas velhas, cheias de comentários inúteis, atributos desnecessários, funções que não são usadas, variáveis zumbis (que estão ali apenas para &#8230; nada). Em minha última façanha do tipo, deu pra economizar cerca de 10KB. Como vamos usar uma ferramenta mais pra frente, não precisa deletar nada do arquivo ainda, a não ser que queira ver o quanto você ganhou com esse processo. Comentários podem ser mantidos, e métodos &#8220;depreciados&#8221; podem ser mantidos comentados também (eu faço isso para armazenar código que venha a ser útil ou que queira manter no histórico para referência rápida).</p>
<h3>Reavaliação</h3>
<p>Depois desse passo, é a hora de fazer uma certa mágica. Esse passo depende de experiência do usuário, e que tenha um bom conhecimento de lógica e da linguagem em si: reavaliar seu código, diminuindo estruturas de código sem aumentar a quantidade de cálculos, quando não diminuindo o custo computacional (<a title="Leia mais sobre análise assintótica" href="http://pt.wikipedia.org/wiki/An%C3%A1lise_assint%C3%B3tica">análise assintótica</a>). Isso pode envolver uma análise mais  matemática do código, estimando o número máximo de comparações e operações que ele pode executar. Por isso demanda um profissional graduado. Mas lembre-se: <em>não sacrifique o processamento em troca de tamanho de código!</em> Diversas vezes um código maior e mais específico pode rodar muitas vezes mais rápido. Também, outras vezes, uma simples instrução a mais pode representar um <a title="Leia mais sobre Estruturas de repetição" href="http://pt.wikipedia.org/wiki/Estrutura_de_repeti%C3%A7%C3%A3o">laço </a>a menos.</p>
<h3>Comprimindo o código: YUI Compressor</h3>
<p>Esse compactador transforma seus arquivos JS e CSS em versões <em>minificadas</em>: com sintaxe reduzida, sem quebras e espaços desnecessários, sem comentários, tudo numa única linha. Isso pode reduzir drasticamente o tamanho do arquivo sem alterar seu conteúdo (eu consegui em minha última utilização a marca de reduzir um <em>.js</em> de 135KB para 84KB!!!), o que é o que buscamos (afinal, quem quer codificar duas vezes a mesma coisa? Otimizar tempo também é muito importante! O <a title="Saiba mais sobre o YUI compressor" href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a> é muito prático e rápido para essa tarefa.</p>
<p>Apenas para exemplificar: ele também altera as assinaturas das suas funções/classes:</p>
<pre>function xyz(value_1, value_2) {
    this.param_1 = value_1;
    this.param_2 = value_2;
    ....</pre>
<p>Ficará assim, num primeiro momento, assim:</p>
<pre>function xyz(f, g) {
    this.param_1 = f;
    this.param_2 = g;
    ....</pre>
<p>E depois, assim:</p>
<pre>function xyz(f,g){this.param_1=f;this.param_2=g;....</pre>
<p>Não se preocupe! Tudo vai funcionar normalmente. Mas podemos perceber que esse compressor realmente vai diminuir seus arquivos. Na tabela abaixo, pode ver o que esses três métodos podem fazer com o peso da sua aplicação:</p>
<p style="text-align: center"><a class="flickr-image aligncenter" title="Compressão de Arquivos" rel="flickr-mgr" href="http://www.flickr.com/photos/thlopes/4304960458/"><img class="flickr-original aligncenter" longdesc="http://farm5.static.flickr.com/4032/4304960458_8c18ef0715_o.png" src="http://farm5.static.flickr.com/4032/4304960458_8c18ef0715_o.png" alt="Compressão de Arquivos" /></a></p>
<p style="text-align: left">Um ganho de ~<strong>50%</strong> no peso total da aplicação, apenas na parte de <em>storage </em>e fileserv.</p>
<h3>A União faz a <span style="text-decoration: line-through">Força</span> Velocidade</h3>
<p style="text-align: left">Se possível, junto todos os arquivos num único. Tem vários .js? Faça apenas um. O mesmo para os CSS. No protocolo <a title="Mais sobre a HTTP 1.1" href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.1.4">HTTP/1.1</a>, temos uma definição que recomenda não ter maiss de duas requisições sendo processadas ao mesmo tempo para o mesmo servidor. Alguns browsers, como o I.E., seguem isso a risca. Logo, quanto mais arquivos tiver para carregar, pior: mais conexões serão necessárias para atender a demanda, e como o browser só fará duas ao mesmo  tempo, o usuário vai ter que esperar. Aposto que você até teve aquele momento &#8220;lâmpada sobre a cabeça&#8221; agora, imaginando se poderia fazer isso também para as imagens&#8230; e poderá! Veja a seguir no próximo tópico. Uma outra dica para sanar esse problema das conexões simultâneas é manter arquivos em vários servers diferentes.</p>
<p style="text-align: center">
<h3>Sprites</h3>
<p>Essa já é mais complicada (principalmente para os desenvolvedores não designers, pelo skill necessário), mas pode significar um gadget/site muito mais rápido para o usuário final. Assim, imagine você carregando vários arquivos .png, os ícones da sua aplicação, por exemplo. Seguindo esse conceito, eles vão ser carregados apenas 2 a 2, mesmo que o usuário tenha uma banda larga suficiente e seu servidor um canhão para carregar muito mais do que isso (falando em tamanho).</p>
<p>Para sanar essa deficiência indireta, uma técnica utilizada são os sprites: você coloca todas as imagens num único arquivo .png (pode ser outra extensão, se aplicável, mas eu recomendo essa), e com os comandos CSS, você seleciona apenas a parte que deseja. Assim será possível usar todo o potencial da banda disponível para trazer todos seus ícones numa única conexão com o servidor, enquanto a segunda concorrente pode ser uma fonte de dados essencial para seu funcionamento.</p>
<p>Nesse <a title="Tutorial sobre Sprites com CSS, em inglês" href="http://www.alistapart.com/articles/sprites">tutorial do A List Apart</a> você encontra uma extensa referencia sobre a técnica de sprites.</p>
<h3>Concluindo</h3>
<p>Bom, com estas ações simples, aposto que sua aplicação será bem melhor carregada, economizará até alguns $$$ para poder me pagar uma cerveja. Sendo assim, deixe seus comentários e dicas nos comentários, caso eu tenha deixado passar alguma! Em breve, um artigo sobre otimização de banco de dados e de fluxo de aplicações.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2010/01/otimizando-desempenho/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

