<?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; Desenvolvimento</title>
	<atom:link href="http://www.thlopes.com/tag/desenvolvimento/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>Testando Javascript</title>
		<link>http://www.thlopes.com/2011/10/testando-javascript/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=testando-javascript</link>
		<comments>http://www.thlopes.com/2011/10/testando-javascript/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 01:31:53 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Projetos]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[teste]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=1033</guid>
		<description><![CDATA[Realmente, mesmo usando o Synergy e uma boa configuração de rede local, ainda fica um pouco trabalhoso... Então resolvi pesquisar algumas ferramentas que poderiam ajudar nessa árdua tarefa, e creio que muitos vão agradecer pelas dicas e até colaborar com dezenas de outras nos comentários. Nem todas visam automatizar o teste em escala, mas todas vão facilitar alguma fase dos testes para que seus projetos tenham um excelente resultado <a href="http://www.thlopes.com/2011/10/testando-javascript/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.thlopes.com/?attachment_id=1053" rel="attachment wp-att-1053"><img class="alignleft size-full wp-image-1053" src="http://www.thlopes.com/files/2011/10/javascript-testing-570x190.jpg" alt="javascript-testing-570x190" width="570" height="190" /></a></p>
<p>Outro dia, <a title="Erick Galassi's Thumbler" href="http://ergalassi.tumblr.com/">um grande amigo</a> me perguntou como fazia para automatizar o teste do Javascript desenvolvido em vários browsers. Para ser bem sincero, eu não utilizo nada além de vários browsers diferentes instalados em cada uma das minhas máquinas (virtuais ou não), cada uma com um sistema operacional diferente  (<a href="http://www.ubuntu.com/">Ubuntu</a> 10.10 e 11.04 , Windows XP, Vista e 7 e carente de um Mac por enquanto&#8230;).</p>
<p>Realmente, mesmo usando o <a href="http://synergy-foss.org/">Synergy</a> e uma boa configuração de rede local, ainda fica um pouco trabalhoso&#8230; Então resolvi pesquisar algumas ferramentas que poderiam ajudar nessa árdua tarefa, e creio que muitos vão agradecer pelas dicas e até colaborar com dezenas de outras nos comentários. Nem todas visam automatizar o teste em escala, mas todas vão facilitar alguma fase dos testes para que seus projetos tenham um excelente resultado</p>
<h3><a href="http://browsershots.org/">BrowserShots</a></h3>
<p>Essa ferramenta vai mostrar pra você como seu site irá &#8220;renderizar&#8221; em diversos browsers diferentes, sem que você os tenha instalado, permitindo que você identifique problemas de compatibilidade mais rapidamente (principalmente se você se valeu de javascript para trabalhar estilos/css)</p>
<h3><a href="http://google-opensource.blogspot.com/2011/10/scriptcover-javascript-coverage.html">ScriptCover</a></h3>
<p>Recém-lançado pelo Google, essa ferramenta fornece estatísticas de cobertura de código linha-a-linha, permitindo que você analise (em tempo real até) quantas vezes uma determinada instrução foi executada durante o uso da página. Essa extensão do Chrome funciona desde o instante inicial de carregamento da página e continua enquanto o site vai sendo utilizado, sem atrapalhar o usuário. Excelente  também para debugar códigos complexos, que porventura venham a falhar misteriosamente em algum browser específico (para não dizer logo I.E.).</p>
<h3><a href="http://code.google.com/p/js-test-driver/">js-test-driver</a></h3>
<p>Esse framework permitirá que você trabalhe na filosofia <a href="http://pt.wikipedia.org/wiki/Tdd">TDD</a> (Test Driven Development), integrando-o a sua IDE (<a href="http://www.thlopes.com/2011/02/meu-ambiente-de-trabalho-em-7-itens/">Eclipse</a>, por exemplo) para automatizar a execução dos testes tão logo você modifique os arquivos do projeto. Exige uma preparação dos cases de teste, mas já que estamos falando de TDD, isso não será o problema. Confira nesse <a href="http://googletesting.blogspot.com/2009/05/yet-another-javascript-testing.html">post a apresentação na época de lançamento</a> onde é demonstrada a praticidade do mesmo.</p>
<h3><a href="http://net.tutsplus.com/tutorials/javascript-ajax/how-to-test-your-javascript-code-with-qunit/">QUnit, a filosofia jQuery também nos testes</a></h3>
<p>QUnit é um poderoso framework de Unit Test que o ajuda a depurar o código. É escrito por membros da equipe de <a href="http://www.jquery.com">jQuery</a>, e é o conjunto de testes oficial para este famoso framework. Ele é também o suficiente para testar qualquer código JavaScript regular, e é ainda capaz de testar Javascript server-side, através de algum mecanismo de JavaScript como <a href="http://www.mozilla.org/rhino/">Rhino</a> ou <a href="http://code.google.com/p/v8/">V8</a>.</p>
<h3><a href="http://pivotal.github.com/jasmine/">Jasmine</a></h3>
<p>Não, você não vai contratar uma estagiária chamada <em>Jasmine</em> para fazer o le-rê-le-rê de abrir páginas e págians em todas as máquinas do seu escritório. É um framework <a href="http://pt.wikipedia.org/wiki/Behavior_Driven_Development">BDD</a>, Behaviour Driven Development, ou seja, desenvolvimento orientado a comportamento. Para quem acha o TDD coisa do passado.</p>
<h3><a href="http://validator.w3.org/">W3C Validator</a></h3>
<p>Não menospreze-o. Alguns acham cafona, outros, nem sequer ouviram falar. Mas pense: se o código está de acordo com Standards, a chance de renderizar igual na maior parte dos browsers também é maior! E também, pode ser um excelente atalho para encontrar algum problema misterioso que não consta nos consoles.</p>
<h3><strong><a href="http://getfirebug.com/">Firebug</a></strong></h3>
<p>Apesar de usar o Chrome a maior parte do tempo, ainda acho a versão Firefox da extensão de desenvolvimento web mais prática e rápida para ajudar no debug, teste e inclusive no desenvolvimento (quem nunca desenvolveu uma linha de código javascript direto no console pra depois copiar e colar no código-fonte que atire o primeiro mouse!)</p>
<p><strong>E você</strong>, usa alguma outar ferramenta para facilitar o testes Javascript? Por favor, ajude-nos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2011/10/testando-javascript/feed/</wfw:commentRss>
		<slash:comments>6</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>Programando e se divertindo</title>
		<link>http://www.thlopes.com/2010/12/programando-e-se-divertindo/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=programando-e-se-divertindo</link>
		<comments>http://www.thlopes.com/2010/12/programando-e-se-divertindo/#comments</comments>
		<pubDate>Fri, 31 Dec 2010 19:03:06 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[loterias]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=938</guid>
		<description><![CDATA[Estava eu aqui, curtindo o "feriado", e pensando no sorteio da Mega da Virada, para o qual fiz algumas apostas. Precisava viajar até a casa de minha sogra, e resolvi fazer um script para conferir os jogos (é, meus amigos e eu fizemos uma quantidade razoável de jogos :D ) em Python. Agora que já cheguei, almocei, e acabei de concluir uma nova versão mais reutilzável, permitindo conferir outros concursos da Mega Sena também, e puxando o resultado direto da fonte oficial: o site da Caixa Econômica Federal! <a href="http://www.thlopes.com/2010/12/programando-e-se-divertindo/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.thlopes.com/2010/12/programando-e-se-divertindo/"><img class="alignright size-thumbnail wp-image-945" src="http://www.thlopes.com/files/2010/12/loteria-numeros-150x147.jpg" alt="loteria-numeros" width="150" height="147" /></a>Estava eu aqui, curtindo o &#8220;feriado&#8221;, e pensando no sorteio da Mega da Virada, para o qual fiz algumas apostas. Precisava viajar até a casa de minha sogra, e resolvi fazer um script para conferir os jogos (é, meus amigos e eu fizemos uma quantidade razoável de jogos <img src='http://www.thlopes.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  ) em Python. Agora que já cheguei, almocei, e acabei de concluir uma nova versão mais reutilzável, permitindo conferir outros concursos da Mega Sena também, e puxando o resultado direto da fonte oficial: o site da <a href="http://www.caixa.gov.br/loterias">Caixa Econômica Federal</a>!</p>
<p>E porque não compartilhar <a href="http://dev.thlopes.com/python/MegaDaVirada.zip">esse script para todos</a> aqueles programadores que também fizeram suas apostas?</p>
<p>É bem simples de usar:</p>
<p><em>$ python megadavirada.py 1245 jogos.txt</em></p>
<p>Acho que dá pra perceber a sintaxe do comando: 1245 é o argumento que representa o numero do concurso que você quer conferir, o &#8216;jogos.txt&#8217; o nome do arquivo com suas apostas, seguindo a estrutura:</p>
<p>jose<br />
9,14,16,24,38,45<br />
maria<br />
3,10,32,41,57,60<br />
6,10,21,34,48,52<br />
8,18,19,36,41,58<br />
joazinho<br />
7,13,28,31,43,59</p>
<p>Se você chamar o script sem argumentos, ele vai buscar o concurso 1245 e o arquivo jogos.txt, no mesmo diretório onde está o script. <a href="http://dev.thlopes.com/python/MegaDaVirada.zip">Faça o download através desse link</a>, e aproveite!!! O script tem apenas um pré-requisito, além do <a href="http://www.python.org">Python</a>: a Biblioteca <a href="http://www.crummy.com/software/BeautifulSoup/">BeautifulSoup</a>. Para instalá-la no Ubuntu/Debian, utilize o seguinte comando:</p>
<p><em>$ sudo apt-get install python-beautifulsoup</em></p>
<p>No Windows, basta entrar no <a href="http://www.python.org">site oficial da linguagem</a> e baixar o pacote para instalação. P.S.: Se ganhar, pode fazer uma doação pra mim também! <img src='http://www.thlopes.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Brincadeiras a parte, quero deixar aqui um Feliz Ano Novo, com mais de 200 milhões de motivos para abraçar cada um dos amigos nessa vida! Saúde e Paz, o resto a gente corre atrás!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2010/12/programando-e-se-divertindo/feed/</wfw:commentRss>
		<slash:comments>8</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>Algumas razões para não fazer um site em flash</title>
		<link>http://www.thlopes.com/2010/03/algumas-razoes-para-nao-fazer-um-site-em-flash/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=algumas-razoes-para-nao-fazer-um-site-em-flash</link>
		<comments>http://www.thlopes.com/2010/03/algumas-razoes-para-nao-fazer-um-site-em-flash/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 13:33:51 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Projetos]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[flash]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=726</guid>
		<description><![CDATA["Algumas razões para não fazer um site em flash"  mostra alguns dos motivos pelos quais o Flash não é a tecnologia mais indicada para a maioria dos projetos web, mesmo a maioria dos designers insistindo que é. <a href="http://www.thlopes.com/2010/03/algumas-razoes-para-nao-fazer-um-site-em-flash/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Estou citando aqui um artigo muito interessante que acabei de encontrar, que indico principalmente para meus clientes que ainda não decidiram qual estratégia na web adotar: <a href="http://imasters.uol.com.br/artigo/16067/flash/algumas_razoes_para_nao_fazer_um_site_em_flash/">&#8220;Algumas razões para não fazer um site em flash&#8221;</a> mostra alguns dos motivos pelos quais o Flash não é a tecnologia mais indicada para a maioria dos projetos web, mesmo a maioria dos designers insistindo que é.</p>
<p>Confiram mais detalhes no Artigo, no <a href="http://imasters.uol.com.br/artigo/16067/flash/algumas_razoes_para_nao_fazer_um_site_em_flash/">iMasters</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2010/03/algumas-razoes-para-nao-fazer-um-site-em-flash/feed/</wfw:commentRss>
		<slash:comments>0</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>
		<item>
		<title>Zapping semanal &#8211; 48/53</title>
		<link>http://www.thlopes.com/2009/12/zapping-semanal-4853/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zapping-semanal-4853</link>
		<comments>http://www.thlopes.com/2009/12/zapping-semanal-4853/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 03:14:41 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Ciência]]></category>
		<category><![CDATA[Cultura]]></category>
		<category><![CDATA[Fatos]]></category>
		<category><![CDATA[Projetos]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[redes]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=507</guid>
		<description><![CDATA[Conhecimento é poder. E poder demais, nunca é bom nas mãos de uma pessoa só. Por isso, vou compartilhar semanalmente links, artigos, dicas e tudo o mais que eu conseguir absorver pelo caminho, seja em relação a trabalho ou projetos pessoais (tudo relacionado à temática do site: Desenvolvimento Web, Computação, Ciência e poesia!). <a href="http://www.thlopes.com/2009/12/zapping-semanal-4853/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a class="flickr-image alignright" title="Conhecimento" href="http://www.flickr.com/photos/thlopes/4151356745/"><img src="http://farm3.static.flickr.com/2496/4151356745_1974fa01b1_t.jpg" alt="Conhecimento" /></a>Conhecimento é poder. E poder demais, nunca é bom nas mãos de uma pessoa só. Por isso, vou compartilhar semanalmente links, artigos, dicas e tudo o mais que eu conseguir absorver pelo caminho, seja em relação a trabalho ou projetos pessoais (tudo relacionado à temática do site: Desenvolvimento Web, Computação, Ciência e poesia!). Novidades dos projetos também entram!!! Claro, como não vou poder destrinchar todos os conteúdos aqui, conto com a ajuda de todos vocês, queridos leitores, com comentários, mais links, e mais coisas sobre os assuntos abordados. Enjoy!</p>
<ul>
<li><a href="http://www.goldsteintech.com/facebook_connect/conclusion_page.php">Facebook facilitando a autenticação de aplicações</a> &#8211; Um tutorial ensinando a integrar sua aplicação PHP com o Facebook Connect.</li>
<li><a href="http://imasters.uol.com.br/artigo/15086/css/css3_multi-column_layout/">E lá vem o CSS3, que venha logo!</a> &#8211; Você cansou de brigar com layout em monitores widescreen?</li>
<li><a href="http://twitter.com/THLopes/lists/">Confira algumas listas interessantes no Twitter</a></li>
<li><a href="http://www5.fgv.br/fgvonline/CursosGratuitos.aspx">Cursos Gratuitos Online na FGV</a> &#8211; Diversos, desde técnicos até gerenciais</li>
<li><a href="http://shop.thlopes.com">THLopes e o comércio eletrônico</a></li>
<li><a href="http://www.orkut.com.br/Main#AppInfo?appId=1051631518737">VEJA Meus Livros</a>: Faça sua Biblioteca Virtual no Orkut, divulgue para seus amigos e confira o que eles estão lendo agora</li>
<li><a href="http://www.learnsomethingeveryday.co.uk/">Learn Something Everyday</a> &#8211; Pra você que  gosta de aprender um pouquinho todo dia.</li>
<li><a href="http://www.guanabara.info/podcast/72-GuanaCast_Alta.mp3">GuanaCast com Paulino Michelazzo</a> &#8211; Empreender com Software Livre, no GuanaBara Cast</li>
<li><a href="http://www.codeemporium.com/2009/10/10/beautiful-souped-up-a-beautiful-soup-gui-utility-to-make-screen-scraping-even-easier/">Beautiful Souped Up</a> &#8211; Uma ferramenta GUI para testar queries Beautiful Soup</li>
<li><a href="http://www.thlopes.com/2009/11/orkut-novo-ou-velho/">Convites do novo Orkut</a> &#8211; Alguém quer?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2009/12/zapping-semanal-4853/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://www.guanabara.info/podcast/72-GuanaCast_Alta.mp3" length="51712985" type="audio/mpeg" />
		</item>
		<item>
		<title>Momento relax</title>
		<link>http://www.thlopes.com/2009/11/momento-relax/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=momento-relax</link>
		<comments>http://www.thlopes.com/2009/11/momento-relax/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 12:00:53 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Cultura]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Desenvolvimento]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=525</guid>
		<description><![CDATA[You are the CSS to my HTML <a href="http://www.thlopes.com/2009/11/momento-relax/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a class="flickr-image aligncenter" title="CSS to HTML" rel="flickr-mgr" href="http://www.flickr.com/photos/thlopes/4134364689/"><img class="flickr-original alignleft" longdesc="http://farm3.static.flickr.com/2798/4134364689_7692384ff2_o.jpg" src="http://farm3.static.flickr.com/2798/4134364689_1a546ca50a_m.jpg" alt="CSS to HTML" width="180" height="240" /></a> Pra quem não souber: <a title="CSS@wikipedia" href="http://pt.wikipedia.org/wiki/Cascading_Style_Sheets">CSS</a>, <a title="HTML@wikipedia" href="http://pt.wikipedia.org/wiki/HTML" target="_blank">HTML</a> (mas peraí, se você está nesse blog e não sabe o que são essas coisas, deve ter algo errado&#8230;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2009/11/momento-relax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Começando bem o dia</title>
		<link>http://www.thlopes.com/2009/09/comecando-bem-o-dia/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=comecando-bem-o-dia</link>
		<comments>http://www.thlopes.com/2009/09/comecando-bem-o-dia/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 13:01:30 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Cultura]]></category>
		<category><![CDATA[tecnologia]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.thlopes.com/?p=383</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p style="text-align: center"><a class="flickr-image aligncenter" title="Livros-Web" rel="flickr-mgr" href="http://www.flickr.com/photos/thlopes/3883564045/"><img class="flickr-large aligncenter" src="http://farm3.static.flickr.com/2592/3883564045_b2c0374ab2.jpg" alt="Livros-Web" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2009/09/comecando-bem-o-dia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Erros bizarros no IE</title>
		<link>http://www.thlopes.com/2009/05/erros-bizarros-ie/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=erros-bizarros-ie</link>
		<comments>http://www.thlopes.com/2009/05/erros-bizarros-ie/#comments</comments>
		<pubDate>Fri, 29 May 2009 20:20:22 +0000</pubDate>
		<dc:creator>Thomas Lopes</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://blog.thlopes.com/?p=44</guid>
		<description><![CDATA[Veja como evitar alguns erros bizarros de Javascript no IE <a href="http://www.thlopes.com/2009/05/erros-bizarros-ie/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Se você está tendo problemas de JavaScript no Internet Explorer, daqueles que parecem erros fantasmas, como esse:</p>
<p>Objeto esperado<br />
linha: X<br />
caractere: 1</p>
<p>Você apenas pensa, como boa parte dos filósofos: &#8220;está nos detalhes&#8221;. Aquela revisâo de código não lhe trouxe o erro? &#8220;No Firefox funciona bem&#8230;&#8221; &#8211; não é a resposta que seu cliente vai querer ouvir quando for testar no internet explorer. Ele quer ver a coisa funcionar oras! Nessa hora seus cabelos já estarão querendo tirar férias na mesa ou no teclado, pois sua cabeça estará muito quente&#8230; E você pergunta pra si mesmo: &#8220;Caramba, mas o jQuery não funciona bem no IE também?&#8221;. Calma. Veja só: provavelmente você esqueceu uma simples vírgula num objeto Javascript:</p>
<p>obj = {<br />
prop: value,<br />
prop2: value2,<br />
prop3: value3,<br />
}</p>
<p>Opa, viu só? Aquela damn virgula no value3 está quebrando o código no ie, porém o firefox nem chia. Uma forma de evitar esse &#8216;descuido&#8217;, é colocar as virgulas antes da chave/propriedade do objeto:</p>
<p>obj = {<br />
prop: value<br />
,prop2: value2<br />
,prop3: value3<br />
}</p>
<p>Assim vc pode copiar a linha toda e não haverão virgulas intrometidas no seu código.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.thlopes.com/2009/05/erros-bizarros-ie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

