<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Guilherme Garnier</title>
	<atom:link href="http://ggarnier.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ggarnier.wordpress.com</link>
	<description>Desenvolvimento de Software e Open Source</description>
	<lastBuildDate>Wed, 26 Oct 2011 12:20:07 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ggarnier.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Guilherme Garnier</title>
		<link>http://ggarnier.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ggarnier.wordpress.com/osd.xml" title="Guilherme Garnier" />
	<atom:link rel='hub' href='http://ggarnier.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Novo endereço do blog</title>
		<link>http://ggarnier.wordpress.com/2010/03/15/novo-endereco-do-blog/</link>
		<comments>http://ggarnier.wordpress.com/2010/03/15/novo-endereco-do-blog/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 14:24:14 +0000</pubDate>
		<dc:creator>ggarnier</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ggarnier.wordpress.com/?p=281</guid>
		<description><![CDATA[Finalmente resolvi criar um domínio próprio para meu blog. O novo endereço é http://blog.guilhermegarnier.com/ e o feed é http://feeds.feedburner.com/guilhermegarnier. Atualizem seus bookmarks!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=281&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Finalmente resolvi criar um domínio próprio para meu blog. O novo endereço é <a href="http://blog.guilhermegarnier.com/">http://blog.guilhermegarnier.com/</a> e o feed é <a href="http://feeds.feedburner.com/guilhermegarnier">http://feeds.feedburner.com/guilhermegarnier</a>. Atualizem seus bookmarks!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ggarnier.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ggarnier.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ggarnier.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ggarnier.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ggarnier.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ggarnier.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ggarnier.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ggarnier.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ggarnier.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ggarnier.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ggarnier.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ggarnier.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ggarnier.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ggarnier.wordpress.com/281/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=281&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ggarnier.wordpress.com/2010/03/15/novo-endereco-do-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d3575572ebcfb5064c0494dedb0a9bba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ggarnier</media:title>
		</media:content>
	</item>
		<item>
		<title>Vídeos com HTML 5 e a nova guerra dos browsers</title>
		<link>http://ggarnier.wordpress.com/2010/02/22/videos-com-html-5-e-a-nova-guerra-dos-browsers/</link>
		<comments>http://ggarnier.wordpress.com/2010/02/22/videos-com-html-5-e-a-nova-guerra-dos-browsers/#comments</comments>
		<pubDate>Mon, 22 Feb 2010 11:31:14 +0000</pubDate>
		<dc:creator>ggarnier</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[videos]]></category>

		<guid isPermaLink="false">http://ggarnier.wordpress.com/?p=267</guid>
		<description><![CDATA[Post movido para: http://blog.guilhermegarnier.com/2010/02/videos-com-html-5-e-a-nova-guerra-dos-browsers/ No final do século 20, a disputa entre os dois browsers mais populares da época, Netscape e Internet Explorer, ficou conhecida como guerra dos browsers. Nos últimos anos, após um período negro de domínio do IE, outros browsers começaram a crescer e recuperar o espaço que era ocupado pelo falecido Netscape. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=267&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Post movido para: <a href="http://blog.guilhermegarnier.com/2010/02/videos-com-html-5-e-a-nova-guerra-dos-browsers/">http://blog.guilhermegarnier.com/2010/02/videos-com-html-5-e-a-nova-guerra-dos-browsers/</a></strong></p>
<p>No final do século 20, a disputa entre os dois browsers mais populares da época, Netscape e Internet Explorer, ficou conhecida como <a href="http://pt.wikipedia.org/wiki/Guerra_dos_browsers">guerra dos browsers</a>. Nos últimos anos, após um período negro de domínio do IE, outros browsers começaram a crescer e recuperar o espaço que era ocupado pelo falecido Netscape.</p>
<p>Mais recentemente, desde o ano passado, os browsers mais modernos começaram a dar suporte ao HTML 5 &#8211; <a href="http://blog.guilhermegarnier.com/2009/07/03/suporte-a-html-5-no-firefox-3-5/">o Firefox, por exemplo, suporta desde a versão 3.5</a>. Entre diversas novidades, o recurso mais popular do HTML 5 é a tag <em>video</em>, que permite a execução de vídeos sem o uso de plugins. A imensa maioria dos sites de vídeo usam Flash, que é uma tecnologia proprietária, e não é suportada em plataformas como o iPhone/iPod Touch. Porém, juntamente com esta nova tag surgiu uma polêmica.</p>
<p>No mês passado, o <a href="http://www.youtube.com/">Youtube</a> &#8211; seguido posteriormente por outros sites de vídeos &#8211; <a href="http://youtube-global.blogspot.com/2010/01/introducing-youtube-html5-supported.html">anunciou que começaria a oferecer vídeos em HTML 5</a>, porém usando o codec <a href="http://en.wikipedia.org/wiki/H.264">H.264</a>. Apesar de suportar HTML 5, o Firefox não tem suporte a este codec, pelo fato de ele ser proprietário, e exigir o pagamento de licenças caríssimas. O Firefox suporta somente o codec <a href="http://en.wikipedia.org/wiki/Theora">OGG Theora</a>, que é open source. Esta atitude do Youtube criou uma grande polêmica: por que eles deixariam de usar uma tecnologia proprietária (Flash) para adotar outra igualmente proprietária (H.264)? O uso de HTML 5 deixa a impressão de que o Youtube partiu para tecnologias abertas, mas isto não ocorreu, devido ao codec escolhido.</p>
<p>Enquanto isso, o Safari (incluindo aí o iPhone) suporta o codec H.264, mas não suporta Theora; o Google Chrome suporta ambos os formatos; o Opera começará a suportar vídeos com codec Theora a partir da versão 10.50; e o IE 8 nem suporta HTML 5, criando um cenário totalmente heterogêneo. Um dos problemas desta divisão é que começamos a nos distanciar da padronização &#8211; que é o objetivo principal do <a href="http://www.w3.org/">W3C</a> &#8211; e criar um ambiente onde cada browser suporta diferentes formatos de vídeo, retornando à época da guerra dos browsers, onde dificilmente uma página era igualmente visualizada no IE e no Netscape. Outro problema é que, como o Firefox não consegue exibir os vídeos em HTML 5 do Youtube, muita gente diz erradamente que o Firefox não suporta HTML 5, quando na verdade é um problema de codec.</p>
<p>A solução para os desenvolvedores é oferecer seus vídeos em mais de um formato, multiplicando, desta forma, o espaço necessário e o trabalho de codificação dos vídeos. O <a href="http://camendesign.com/code/video_for_everybody">Video For Everybody</a> ajuda a resolver este problema, oferecendo um trecho de código HTML que deixa a cargo do browser a escolha da opção mais adequada &#8211; se o browser suportar HTML 5 e Theora, este vídeo será exibido; se suportar HTML 5 e H.264, usará este formato; caso contrário, usará o plugin de Flash ou QuickTime, caso estejam instalados. Em último caso, exibe uma imagem do vídeo com um link para download. Esta solução exige o armazenamento do vídeo em dois formatos, mas parece uma boa solução diante de tantas variantes.</p>
<p>Referências:</p>
<ul>
<li><a href="http://diveintohtml5.org/video.html#what-works">Dive Into HTML5 &#8211; Video on the Web &#8211; What Works on the Web</a></li>
<li><a href="http://www.sitepoint.com/blogs/2010/01/25/the-dark-side-of-html-5-video/">The Dark Side of HTML 5 Video</a></li>
</ul>
<br /> Tagged: <a href='http://ggarnier.wordpress.com/tag/firefox/'>Firefox</a>, <a href='http://ggarnier.wordpress.com/tag/html5/'>html5</a>, <a href='http://ggarnier.wordpress.com/tag/internet/'>Internet</a>, <a href='http://ggarnier.wordpress.com/tag/videos/'>videos</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ggarnier.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ggarnier.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ggarnier.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ggarnier.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ggarnier.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ggarnier.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ggarnier.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ggarnier.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ggarnier.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ggarnier.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ggarnier.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ggarnier.wordpress.com/267/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ggarnier.wordpress.com/267/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ggarnier.wordpress.com/267/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=267&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ggarnier.wordpress.com/2010/02/22/videos-com-html-5-e-a-nova-guerra-dos-browsers/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d3575572ebcfb5064c0494dedb0a9bba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ggarnier</media:title>
		</media:content>
	</item>
		<item>
		<title>Nunca use o método Date.getYear() do Javascript</title>
		<link>http://ggarnier.wordpress.com/2010/01/29/nunca-use-o-metodo-date-getyear-do-javascript/</link>
		<comments>http://ggarnier.wordpress.com/2010/01/29/nunca-use-o-metodo-date-getyear-do-javascript/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 09:35:34 +0000</pubDate>
		<dc:creator>ggarnier</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[browsers]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[tomahawk]]></category>

		<guid isPermaLink="false">http://ggarnier.wordpress.com/?p=253</guid>
		<description><![CDATA[Post movido para: http://blog.guilhermegarnier.com/2010/01/29/nunca-use-o-metodo-date-getyear-do-javascript/ Até a década de 1990, era muito comum escrevermos datas com apenas 2 dígitos representando o ano (ex: 1996 -&#62; 96). Como todos já sabem, esta prática levou ao famoso bug do milênio, pois, desta forma, o ano 2000 tornava-se 0 (ou 100, dependendo do caso), gerando uma série de problemas, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=253&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Post movido para: <a href="http://blog.guilhermegarnier.com/2010/01/29/nunca-use-o-metodo-date-getyear-do-javascript/">http://blog.guilhermegarnier.com/2010/01/29/nunca-use-o-metodo-date-getyear-do-javascript/</a></strong></p>
<p>Até a década de 1990, era muito comum escrevermos datas com apenas 2 dígitos representando o ano (ex: 1996 -&gt; 96). Como todos já sabem, esta prática levou ao famoso <a href="http://pt.wikipedia.org/wiki/Problema_do_ano_2000">bug do milênio</a>, pois, desta forma, o ano 2000 tornava-se 0 (ou 100, dependendo do caso), gerando uma série de problemas, especialmente em códigos que calculavam um período entre duas datas. Felizmente, hoje em dia não temos mais esta preocupação. Ou temos?</p>
<p>Outro dia fui testar um sistema em diversos browsers, e ao realizar o teste no <a href="http://www.opera.com/">Opera</a>, verifiquei que o componente <a href="http://myfaces.apache.org/tomahawk-project/tomahawk12/tagdoc/t_inputCalendar.html">inputCalendar</a> do <a href="http://myfaces.apache.org/tomahawk/">Tomahawk</a> abria no ano de 3910. Testei no Firefox, Google Chrome e Internet Explorer 6, 7 e 8, e todos eles funcionavam corretamente. Resolvi olhar o código fonte do componente, e descobri que ele verificava o ano atual usando o método getYear da classe <a href="http://www.w3schools.com/jsref/jsref_obj_date.asp">Date</a>. Este método é fonte de diversos problemas e gambiarras em códigos Javascript que manipulam datas. O motivo é que diferentes browsers interpretam o método de maneiras diferentes. De acordo com a <a href="http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf">especificação ECMA-262</a>, a função getYear deveria retornar o ano atual menos 1900. Nas versões mais recentes, o Firefox e o Google Chrome seguem esta especificação, retornando 110 para o ano de 2010. Já o Opera e o IE retornam 2010, contrariando a especificação e gerando os problemas já conhecidos. É muito comum encontrarmos códigos que verificam qual é o browser (com <a href="http://www.quirksmode.org/css/condcom.html">comentários condicionais</a> ou <a href="http://www.dynamicdrive.com/forums/showthread.php?t=1057">verificações por Javascript</a>) e, quando não for o IE, somando 1900 ao valor retornado pelo getYear. Esta verdadeira gambiarra não resolve completamente, pois, como já citado, o Opera se comporta da mesma forma que o IE.</p>
<p>A solução ideal para este problema é substituir o método getYear por getFullYear. Este método retorna o ano completo, com 4 dígitos, em todos os browsers, eliminando qualquer necessidade de verificação de browser. Esta recomendação, inclusive, faz parte da <a href="http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf">especificação ECMA-262</a>, na página 242:</p>
<blockquote><p>The getFullYear method is preferred for nearly all purposes, because it avoids the &#8220;year 2000 problem.&#8221;</p></blockquote>
<p>Após corrigir este bug do Tomahawk, <a href="http://issues.apache.org/jira/browse/TOMAHAWK-1480">abri uma issue no Jira do projeto</a>, anexando um patch para corrigir o problema.</p>
<p>Outras Referências:</p>
<ul>
<li><a href="http://www.electrictoolbox.com/javascript-getyear-fix/">Javascript getYear fix</a></li>
<li><a href="http://my.opera.com/hallvors/blog/show.dml/738966">getYear. No, not that year!</a></li>
</ul>
<br /> Tagged: <a href='http://ggarnier.wordpress.com/tag/browsers/'>browsers</a>, <a href='http://ggarnier.wordpress.com/tag/javascript/'>javascript</a>, <a href='http://ggarnier.wordpress.com/tag/jsf/'>jsf</a>, <a href='http://ggarnier.wordpress.com/tag/opera/'>opera</a>, <a href='http://ggarnier.wordpress.com/tag/programacao/'>Programação</a>, <a href='http://ggarnier.wordpress.com/tag/tomahawk/'>tomahawk</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ggarnier.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ggarnier.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ggarnier.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ggarnier.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ggarnier.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ggarnier.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ggarnier.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ggarnier.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ggarnier.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ggarnier.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ggarnier.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ggarnier.wordpress.com/253/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ggarnier.wordpress.com/253/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ggarnier.wordpress.com/253/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=253&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ggarnier.wordpress.com/2010/01/29/nunca-use-o-metodo-date-getyear-do-javascript/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d3575572ebcfb5064c0494dedb0a9bba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ggarnier</media:title>
		</media:content>
	</item>
		<item>
		<title>Problema com a extensão do Remember The Milk no Gmail</title>
		<link>http://ggarnier.wordpress.com/2010/01/13/problema-com-a-extensao-do-remember-the-milk-no-gmail/</link>
		<comments>http://ggarnier.wordpress.com/2010/01/13/problema-com-a-extensao-do-remember-the-milk-no-gmail/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 15:07:55 +0000</pubDate>
		<dc:creator>ggarnier</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[remember the milk]]></category>

		<guid isPermaLink="false">http://ggarnier.wordpress.com/?p=244</guid>
		<description><![CDATA[Post movido para: http://blog.guilhermegarnier.com/2010/01/13/problema-com-a-extensao-do-remember-the-milk-no-gmail/ Ontem meu Gmail começou a apresentar um problema estranho. Quando eu clicava nas tags, nas pastas de spam ou lixeira, ou tentava fazer uma pesquisa, nada acontecia. Porém, na caixa de entrada tudo funcionava perfeitamente. Inicialmente pensei que o problema fosse do Firefox, já que ontem atualizei para a versão 3.5.7. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=244&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Post movido para: <a href="http://blog.guilhermegarnier.com/2010/01/13/problema-com-a-extensao-do-remember-the-milk-no-gmail/">http://blog.guilhermegarnier.com/2010/01/13/problema-com-a-extensao-do-remember-the-milk-no-gmail/</a></strong></p>
<p>Ontem meu Gmail começou a apresentar um problema estranho. Quando eu clicava nas tags, nas pastas de spam ou lixeira, ou tentava fazer uma pesquisa, nada acontecia. Porém, na caixa de entrada tudo funcionava perfeitamente.</p>
<p>Inicialmente pensei que o problema fosse do Firefox, já que ontem atualizei para a versão 3.5.7. Antes de tentar fazer um downgrade, resolvi pesquisar por este problema e encontrei uma referência no <a href="http://www.rememberthemilk.com/forums/help/9298/">forum do Remember The Milk</a>. O problema estava relacionado ao add-on <a href="http://www.rememberthemilk.com/services/gmail/addon/">Remember The Milk for Gmail</a>. O Google, de vez em quando, atualiza a versão Gmail, sem qualquer aviso, e a última atualização provocou alguma incompatibilidade nessa extensão. Como a atualização do Gmail é feita inicialmente para um grupo de usuários e só posteriormente replicada para todos, pode ser que muitos usuários não estejam passando por este problema.</p>
<p>O pior é que, como a compatibilidade depende da versão do Gmail, o Firefox não tem como descobrir se a extensão será compatível ou não. A melhor maneira de descobrir se a versão atual é suportada é consultando a <a href="//www.rememberthemilk.com/services/gmail/addon/status/">página de status do add-on</a>. Para verificar qual é a versão do seu Gmail, clique em <em>Settings</em> e depois na opção <em>Tasks</em> (que só aparece se a extensão estiver instalada e habilitada).</p>
<p>A solução provisória é desabilitar esta extensão até que ela seja atualizada para suportar a última versão do Gmail. O problema só ocorre na extensão de Firefox, o <a href="http://www.rememberthemilk.com/services/gmail/gadget/">gadget do Remember The Milk</a>, que fica na barra lateral do Gmail, continua funcionando normalmente.</p>
<br /> Tagged: Firefox, gmail, remember the milk <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ggarnier.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ggarnier.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ggarnier.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ggarnier.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ggarnier.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ggarnier.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ggarnier.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ggarnier.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ggarnier.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ggarnier.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ggarnier.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ggarnier.wordpress.com/244/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ggarnier.wordpress.com/244/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ggarnier.wordpress.com/244/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=244&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ggarnier.wordpress.com/2010/01/13/problema-com-a-extensao-do-remember-the-milk-no-gmail/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d3575572ebcfb5064c0494dedb0a9bba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ggarnier</media:title>
		</media:content>
	</item>
		<item>
		<title>Classes abstratas em Ruby?</title>
		<link>http://ggarnier.wordpress.com/2009/12/04/classes-abstratas-em-ruby/</link>
		<comments>http://ggarnier.wordpress.com/2009/12/04/classes-abstratas-em-ruby/#comments</comments>
		<pubDate>Fri, 04 Dec 2009 09:56:14 +0000</pubDate>
		<dc:creator>ggarnier</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[linguagens de programação]]></category>

		<guid isPermaLink="false">http://ggarnier.wordpress.com/?p=227</guid>
		<description><![CDATA[Post movido para: http://blog.guilhermegarnier.com/2009/12/04/classes-abstratas-em-ruby/ Como eu estava há algum tempo sem mexer com Ruby, resolvi fazer o ótimo curso online gratuito Core Ruby, do Satish Talim (também conhecido como Indian Guru) para relembrar algumas coisas. Ao chegar no tópico Ruby Overriding Methods, há um item sobre classes abstratas, que diz o seguinte: Abstract class In [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=227&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Post movido para: <a href="http://blog.guilhermegarnier.com/2009/12/04/classes-abstratas-em-ruby/">http://blog.guilhermegarnier.com/2009/12/04/classes-abstratas-em-ruby/</a></strong></p>
<p>Como eu estava há algum tempo sem mexer com Ruby, resolvi fazer o ótimo curso online gratuito <a href="http://www.rubylearning.org/class/">Core Ruby</a>, do <a href="http://satishtalim.com/">Satish Talim</a> (também conhecido como <a href="http://twitter.com/IndianGuru">Indian Guru</a>) para relembrar algumas coisas. Ao chegar no tópico <a href="http://rubylearning.com/satishtalim/ruby_overriding_methods.html">Ruby Overriding Methods</a>, há um item sobre classes abstratas, que diz o seguinte:</p>
<blockquote><p>
<strong>Abstract class</strong></p>
<p>In Ruby, we can define an abstract class that invokes certain undefined &#8220;abstract&#8221; methods, which are left for subclasses to define. For example:</p>
<pre class="brush: ruby;">
# This class is abstract; it doesn't define hello or name
# No special syntax is required: any class that invokes methods
# that are intended for a subclass to implement is abstract
class AbstractKlass
  def welcome
    puts &quot;#{hello} #{name}&quot;
  end
end

# A concrete class
class ConcreteKlass &lt; AbstractKlass
  def hello; &quot;Hello&quot;; end
  def name; &quot;Ruby students&quot;; end
end

ConcreteKlass.new.welcome # Displays &quot;Hello Ruby students&quot;
</pre>
</blockquote>
<p>Assim que li esse código, fiquei com uma pulga atrás da orelha. Ele mostra como um exemplo de classe abstrata uma classe que faz referência a métodos não definidos, explicando que seria necessário criar uma classe concreta estendendo esta classe e implementando os métodos necessários.</p>
<p>Eu sempre pensei que classes abstratas fossem classes que não poderiam ser instanciadas, o que não é o caso do exemplo. É perfeitamente possível criar objetos da classe <em>AbstractKlass</em>. Só ocorrerá uma exceção se o método <em>welcome</em> do objeto criado for executado:</p>
<pre class="brush: ruby;">
irb(main):006:0&gt; obj = AbstractKlass.new
=&gt; #&lt;AbstractKlass:0x37d490&gt;
irb(main):007:0&gt; obj.class
=&gt; AbstractKlass
irb(main):008:0&gt; obj.welcome
NameError: undefined local variable or method `hello' for #&lt;AbstractKlass:0x37d490&gt;
        from (irb):9
</pre>
<p>Resolvi levantar esta questão no forum do curso, e recebi uma resposta de um dos participantes dizendo que em Ruby o conceito de classes abstratas seria diferente daquele que apresentei acima. De acordo com a <a href="http://en.wikipedia.org/wiki/Class_%28computer_science%29#Abstract_classes">definição da Wikipedia</a>: &#8220;An abstract class, or abstract base class (ABC), is a class that cannot be instantiated&#8221;.</p>
<p>Pesquisando sobre o assunto, encontrei referências apresentando algumas sugestões de como implementar classes abstratas em Ruby de diferentes maneiras (herança, módulos e até um gem):</p>
<ul>
<li><a href="http://stackoverflow.com/questions/512466/how-to-implement-an-abstract-class-in-ruby">How to implement an abstract class in ruby?</a></li>
<li><a href="http://peeja.com/journal/2009/4/12/abstract-classes-for-ruby-abstraction.html">Abstract Classes, For Ruby: Abstraction</a></li>
</ul>
<p>Uma das possibilidades mostradas nos links acima seria desta forma:</p>
<pre class="brush: ruby;">
class AbstractClass
  class AbstractClassInstiationError &lt; RuntimeError
  end

  def initialize
    raise AbstractClassInstiationError, &quot;Cannot instantiate this class directly&quot;
  end
end

class ConcreteClass &lt; AbstractClass
  def initialize
  end
end
</pre>
<p>Isso teoricamente resolveria o problema:</p>
<pre class="brush: ruby;">
irb(main):043:0&gt; obj1 = AbstractClass.new
AbstractClass::AbstractClassInstiationError: Cannot instantiate this class directly
        from (irb):36:in `initialize'
        from (irb):44
irb(main):044:0&gt; obj1.class
=&gt; NilClass
irb(main):045:0&gt; obj2 = ConcreteClass.new
=&gt; #&lt;ConcreteClass:0x309f9f&gt;
irb(main):046:0&gt; obj2.class
=&gt; ConcreteClass
</pre>
<p>Porém, há um detalhe importantíssimo: em Ruby todas as classes são abertas, ou seja, sempre será possível reimplementar métodos ou adicionar módulos que alteram o comportamento da classe, tornando impossível proibir completamente a instanciação e, consequentemente, a implementação de classes abstratas (pelo menos de acordo com o conceito apresentado aqui).</p>
<p>A linguagem Ruby possui alguns conceitos diferentes dos utilizados em outras linguagens, em função de algumas de suas características, como classes abertas e meta programação. Isso nos força a pensar em maneiras diferentes de implementar soluções para os mesmos problemas, o que é muito bom.</p>
<p>Para concluir, segue um trecho do livro <a href="http://www.amazon.com/Programming-Ruby-Pragmatic-Programmers-Second/dp/0974514055/ref=sr_1_2?ie=UTF8&amp;s=books&amp;qid=1260179532&amp;sr=8-2">&#8220;Programming Ruby&#8221;</a> que foi apresentado na discussão sobre este assunto no forum do curso:</p>
<blockquote><p>
The issue of types is actually somewhat deeper than an ongoing debate between strong typing advocates and the hippie-freak dynamic typing crowd. The real issue is the question, what is a type in the first place?</p>
<p>If you’ve been coding in conventional typed languages, you’ve probably been taught that the type of an object is its class—all objects are instances of some class, and that class is the object’s type. The class defines the operations (methods) that the object can support, along with the state (instance variables) on which those methods operate.</p>
<p>In Ruby, the class is never (OK, almost never) the type. Instead, the type of an object is defined more by what that object can do. In Ruby, we call this duck typing. If an object walks like a duck and talks like a duck, then the interpreter is happy to treat it as if it were a duck.
</p></blockquote>
<br /> Tagged: desenvolvimento, linguagens de programação, Programação, Ruby <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ggarnier.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ggarnier.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ggarnier.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ggarnier.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ggarnier.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ggarnier.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ggarnier.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ggarnier.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ggarnier.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ggarnier.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ggarnier.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ggarnier.wordpress.com/227/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ggarnier.wordpress.com/227/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ggarnier.wordpress.com/227/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=227&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ggarnier.wordpress.com/2009/12/04/classes-abstratas-em-ruby/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d3575572ebcfb5064c0494dedb0a9bba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ggarnier</media:title>
		</media:content>
	</item>
		<item>
		<title>Problema com múltiplos joins em Criteria</title>
		<link>http://ggarnier.wordpress.com/2009/11/12/problema-com-multiplos-joins-em-criteria/</link>
		<comments>http://ggarnier.wordpress.com/2009/11/12/problema-com-multiplos-joins-em-criteria/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 09:57:10 +0000</pubDate>
		<dc:creator>ggarnier</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[Criteria]]></category>

		<guid isPermaLink="false">http://ggarnier.wordpress.com/?p=214</guid>
		<description><![CDATA[Post movido para: http://blog.guilhermegarnier.com/2009/11/12/problema-com-multiplos-joins-em-criteria/ O Criteria é uma API do Hibernate que facilita muito quando precisamos montar uma query complexa com filtros opcionais. Adicionar restrições ou criar joins com esta API é muito mais simples de gerenciar do que concatenando Strings, como faríamos ao trabalhar com SQL puro. Apesar das vantagens, o Criteria também tem [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=214&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Post movido para: <a href="http://blog.guilhermegarnier.com/2009/11/12/problema-com-multiplos-joins-em-criteria/">http://blog.guilhermegarnier.com/2009/11/12/problema-com-multiplos-joins-em-criteria/</a></strong></p>
<p>O <a href="https://www.hibernate.org/hib_docs/v3/api/org/hibernate/Criteria.html">Criteria</a> é uma API do <a href="https://www.hibernate.org/">Hibernate</a> que facilita muito quando precisamos montar uma query complexa com filtros opcionais. Adicionar restrições ou criar joins com esta API é muito mais simples de gerenciar do que concatenando Strings, como faríamos ao trabalhar com SQL puro.</p>
<p>Apesar das vantagens, o Criteria também tem alguns problemas. O último que encontrei foi ao tentar fazer 2 joins entre as mesmas 2 tabelas. No meu caso, eu tinha no banco as tabelas <em>projeto</em> e <em>historico</em>. A segunda tabela é populada através de uma trigger no banco: sempre que o status do projeto muda, a tabela <em>historico</em> registra o status anterior do projeto com data/hora da mudança. Eu precisava fazer uma query que buscasse um projeto com status &#8220;iniciado&#8221; num determinado período de datas e com status &#8220;finalizado&#8221; em outro período. Inicialmente, pensei simplesmente em criar 2 joins entre as tabelas, cada um com um alias diferente e filtrando pelas datas específicas:</p>
<pre class="brush: java;">
Criteria criteria = getSession().createCriteria(Projeto.class);

// Primeiro join
criteria.createCriteria(&quot;historicoList&quot;, &quot;historicoIniciado&quot;, Criteria.LEFT_JOIN)
        .add(Restrictions.eq(&quot;historicoIniciado.status&quot;, Status.INICIADO.value()))
        .add(Restrictions.ge(&quot;historicoIniciado.data&quot;, dataIniciadoDe))
        .add(Restrictions.le(&quot;historicoIniciado.data&quot;, dataIniciadoAte));

// Segundo join
criteria.createCriteria(&quot;historicoList&quot;, &quot;historicoFinalizado&quot;, Criteria.LEFT_JOIN)
        .add(Restrictions.eq(&quot;historicoFinalizado.status&quot;, Status.FINALIZADO.value()))
        .add(Restrictions.ge(&quot;historicoFinalizado.data&quot;, dataFinalizadoDe))
        .add(Restrictions.le(&quot;historicoFinalizado.data&quot;, dataFinalizadoAte));
</pre>
<p>O código acima, apesar de semelhante ao que eu já havia criado para adicionar outros filtros à query de projetos, fazendo joins com outras tabelas, não funcionava. Tentei retirar um dos joins com a tabela <em>historico</em> e funcionou. Ou seja, o problema estava na criação do segundo join com as mesmas tabelas, mesmo utilizando aliases diferentes. Ao pesquisar este problema, descobri que não é um bug. Na verdade, o <a href="http://opensource.atlassian.com/projects/hibernate/browse/HB-555?focusedCommentId=11570&amp;page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_11570">Criteria não suporta múltiplos joins para a mesma associação</a>.</p>
<p>Sendo assim, a solução que encontrei para este problema foi criar uma subquery para a tabela <em>historico</em>, utilizando um <a href="https://www.hibernate.org/hib_docs/v3/api/org/hibernate/criterion/DetachedCriteria.html">DetachedCriteria</a>:</p>
<pre class="brush: java;">
DetachedCriteria historicoCriteria = DetachedCriteria.forClass(Historico.class, &quot;historicoIniciado&quot;)
        .setProjection(Projections.distinct(Projections.property(&quot;projeto&quot;)))
        .add(Restrictions.eq(&quot;historicoIniciado.status&quot;, Status.INICIADO.value()));
        .add(Restrictions.ge(&quot;historicoIniciado.data&quot;, dataIniciadoDe));
        .add(Restrictions.le(&quot;historicoIniciado.data&quot;, dataIniciadoAte));
criteria.add(Subqueries.propertyIn(&quot;id&quot;, historicoCriteria));
</pre>
<p>Desta forma, apenas um dos joins precisa ser substituído por uma subquery. O outro join pode ser mantido sem problemas.</p>
<br /> Tagged: banco de dados, Criteria, Hibernate, Java, Programação <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ggarnier.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ggarnier.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ggarnier.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ggarnier.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ggarnier.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ggarnier.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ggarnier.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ggarnier.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ggarnier.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ggarnier.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ggarnier.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ggarnier.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ggarnier.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ggarnier.wordpress.com/214/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=214&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ggarnier.wordpress.com/2009/11/12/problema-com-multiplos-joins-em-criteria/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d3575572ebcfb5064c0494dedb0a9bba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ggarnier</media:title>
		</media:content>
	</item>
		<item>
		<title>Resumo do Dev in Rio</title>
		<link>http://ggarnier.wordpress.com/2009/09/29/resumo-do-dev-in-rio/</link>
		<comments>http://ggarnier.wordpress.com/2009/09/29/resumo-do-dev-in-rio/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 10:48:45 +0000</pubDate>
		<dc:creator>ggarnier</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[Desenvolvimento ágil]]></category>
		<category><![CDATA[dev in rio]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://ggarnier.wordpress.com/?p=197</guid>
		<description><![CDATA[Post movido para: http://blog.guilhermegarnier.com/2009/09/29/resumo-do-dev-in-rio/ No último dia 14 aconteceu o Dev in Rio (veja vídeos e fotos do evento). Organizado pelo Guilherme Chapiewski e pelo Henrique Bastos, o evento foi um grande sucesso. Na abertura do evento, Guilherme e Henrique informaram que o evento seria totalmente voltado para os desenvolvedores, destacando a importância de se [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=197&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Post movido para: <a href="http://blog.guilhermegarnier.com/2009/09/29/resumo-do-dev-in-rio/">http://blog.guilhermegarnier.com/2009/09/29/resumo-do-dev-in-rio/</a></strong></p>
<p>No último dia 14 aconteceu o <a href="http://blog.guilhermegarnier.com/2009/08/27/dev-in-rio-eu-vou/">Dev in Rio</a> (veja <a href="http://gc.blog.br/2009/09/16/dev-in-rio-2009-fotos-e-videos-do-evento/">vídeos e fotos do evento</a>). Organizado pelo <a href="http://gc.blog.br/">Guilherme Chapiewski</a> e pelo <a href="http://www.henriquebastos.net/">Henrique Bastos</a>, o evento foi um grande sucesso.</p>
<p>Na abertura do evento, Guilherme e Henrique informaram que o evento seria totalmente voltado para os desenvolvedores, destacando a importância de se integrar e reunir as pessoas para troca de experiências. Eles também ressaltaram a importância de se integrar comunidades de diferentes tecnologias, reforçando também a tendência dos <a href="http://blog.guilhermegarnier.com/2009/09/11/desenvolvedores-e-plataformas-poliglotas/">desenvolvedores poliglotas</a>.</p>
<p>A primeira palestra foi de <a href="http://www.picnet.net/blog/author/cozimek">Ryan Ozimek</a>, sobre o CMS <a href="http://www.joomla.org/">Joomla</a>. Ryan, que não é desenvolvedor, falou sobre a história deste projeto, destacando a importância da participação da comunidade para o crescimento do Joomla.</p>
<p>Na palestra seguinte, Nico Steppat e <a href="http://guilhermesilveira.wordpress.com/">Guilherme Silveira</a>, da <a href="http://blog.caelum.com.br/">Caelum</a>, falaram sobre Java como plataforma, e não como linguagem, destacando o <a href="http://blog.guilhermegarnier.com/2009/09/11/desenvolvedores-e-plataformas-poliglotas/">suporte a várias linguagens</a>, permitindo que possamos escolher a linguagem mais adequada a cada situação sem perder as vantagens oferecidas pela plataforma.</p>
<p>Após o almoço, <a href="http://www.akitaonrails.com/">Fábio Akita</a> trouxe uma geral sobre o ecossistema Ruby on Rails. Na minha opinião, esta foi a melhor palestra do evento, pois ele soube resumir em pouco tempo uma quantidade enorme de conteúdo. Primeiramente, ele trouxe um histórico da linguagem <a href="http://www.ruby-lang.org/">Ruby</a>, e, através de uma &#8220;meta-apresentação&#8221;, mostrou um pouco da linguagem e suas principais características, como meta-programação, por exemplo. Depois, falou sobre <a href="http://rubyonrails.org/">Rails</a>, destacando algumas de suas principais características e os mais famosos mitos, como &#8220;Rails não escala&#8221; (<a href="http://www.slideshare.net/akitaonrails/dev-in-rio-2009">link para a apresentação</a>).</p>
<p>Em seguida, <a href="http://www.jacobian.org/">Jacob Kaplan-Moss</a>, um dos criadores do <a href="http://www.djangoproject.com/">Django</a>, falou sobre este framework <a href="http://www.python.org/">Python</a>, sua história, evolução e principais características (<a href="http://jacobian.org/speaking/dev-rio-2009/django-intro/">link para a apresentação</a>).</p>
<p>Na última palestra, <a href="http://www.agileproductdesign.com/">Jeff Patton</a> falou sobre metodologias ágeis, mas focando na criação de produtos e interação com o cliente, e não no desenvolvimento em si. Ele trouxe como exemplo o desenvolvimento de um produto real, as dificuldades encontradas e as soluções utilizadas.</p>
<p>Finalmente, foi feita uma espécie de mesa redonda com a maioria dos palestrantes e alguns convidados, como <a href="http://tapajos.me/">Marcos Tapajós</a>, <a href="http://mergulhao.info/">Sylvestre Mergulhão</a> e <a href="http://agileandart.blogspot.com/">Daniel Cukier</a>, entre outros. <a href="http://www.improveit.com.br/">Vinicius Teles</a> fez o papel de mediador entre os participantes e o público.</p>
<p>Em paralelo às palestras, ocorreram coding dojos de Ruby, Python e Java. Destaque também para a tradução simultânea das palestras (tanto inglês-português quanto português-inglês), serviço que foi bastante elogiado por aqueles que o utilizaram. Também foram sorteados vários brindes no final, como ingressos para o <a href="http://www.railssummit.com.br/">Rails Summit</a>.</p>
<p>No final, o balanço do evento foi extremamente positivo, pois conseguiu reunir muita gente, incluindo figuras bastante importantes e conhecidas no desenvolvimento de software. Os organizadores estão de parabéns, pois tudo correu sem qualquer problema aparente, todas as palestras foram muito pontuais e de excelente qualidade. Agora, só resta esperar pelo Dev in Rio 2010! Vale a pena conferir também os posts <a href="http://gc.blog.br/2009/09/26/dev-in-rio-2009-balanco-do-evento/">do Guilherme</a> e <a href="http://henriquebastos.net/2009/09/26/balanco-do-dev-in-rio-2009/">do Henrique</a> sobre o evento.</p>
<br /> Tagged: desenvolvimento, Desenvolvimento ágil, dev in rio, django, Eventos, Java, rails <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ggarnier.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ggarnier.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ggarnier.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ggarnier.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ggarnier.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ggarnier.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ggarnier.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ggarnier.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ggarnier.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ggarnier.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ggarnier.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ggarnier.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ggarnier.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ggarnier.wordpress.com/197/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=197&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ggarnier.wordpress.com/2009/09/29/resumo-do-dev-in-rio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d3575572ebcfb5064c0494dedb0a9bba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ggarnier</media:title>
		</media:content>
	</item>
		<item>
		<title>Desenvolvedores e plataformas poliglotas</title>
		<link>http://ggarnier.wordpress.com/2009/09/11/desenvolvedores-e-plataformas-poliglotas/</link>
		<comments>http://ggarnier.wordpress.com/2009/09/11/desenvolvedores-e-plataformas-poliglotas/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 16:22:45 +0000</pubDate>
		<dc:creator>ggarnier</dc:creator>
				<category><![CDATA[Programação]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[linguagens de programação]]></category>

		<guid isPermaLink="false">http://ggarnier.wordpress.com/?p=190</guid>
		<description><![CDATA[Post movido para: http://blog.guilhermegarnier.com/2009/09/11/desenvolvedores-e-plataformas-poliglotas/ Há alguns anos atrás, era muito comum encontrarmos desenvolvedores que conheciam somente uma linguagem, e por isso intitulavam-se &#8220;desenvolvedor Java&#8221;, &#8220;desenvolvedor Delphi&#8221;, &#8220;desenvolvedor ASP&#8221;, ou qualquer outra linguagem. Eram pessoas que conheciam uma, e somente uma, linguagem de programação, e a defendiam com unhas e dentes em qualquer discussão nos fóruns, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=190&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Post movido para: <a href="http://blog.guilhermegarnier.com/2009/09/11/desenvolvedores-e-plataformas-poliglotas/">http://blog.guilhermegarnier.com/2009/09/11/desenvolvedores-e-plataformas-poliglotas/</a></strong></p>
<p>Há alguns anos atrás, era muito comum encontrarmos desenvolvedores que conheciam somente uma linguagem, e por isso intitulavam-se &#8220;desenvolvedor Java&#8221;, &#8220;desenvolvedor Delphi&#8221;, &#8220;desenvolvedor ASP&#8221;, ou qualquer outra linguagem. Eram pessoas que conheciam uma, e somente uma, linguagem de programação, e a defendiam com unhas e dentes em qualquer discussão nos fóruns, frequentemente gerando <a href="http://en.wikipedia.org/wiki/Flame_war">flame wars</a>.</p>
<p>Esse tipo de desenvolvedor ainda existe, mas é cada vez menos comum, e isto é muito positivo. O livro <a href="http://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1232182674&amp;sr=8-1">The Pragmatic Programmer</a> recomenda que aprendamos uma linguagem nova por ano, e, com isso, muitos daqueles desenvolvedores Java ou C# estão aprendendo Ruby, Python ou Erlang. Mesmo que não tenhamos pretensão de trabalhar com estas linguagens, pelo menos a curto ou médio prazo, cada linguagem tem suas particularidades, ajudando a quebrar paradigmas. Quando conhecemos somente uma linguagem, temos uma grande tendência a resolver os problemas sempre da mesma forma, conforme aprendemos e como é feito tradicionalmente com aquela linguagem. Desta forma, a tendência é a estagnação, pois não procuramos outras maneiras de resolver os problemas. A partir do momento em que começamos a estudar outras linguagens, abrimos nossa cabeça e começamos a <a href="http://en.wikipedia.org/wiki/Thinking_outside_the_box">&#8220;pensar fora da caixa&#8221;</a>, e percebemos que existem muitas outras maneiras de resolver aquele mesmo problema, muitas delas mais simples e adequadas à situação. Surgem os desenvolvedores poliglotas.</p>
<p>Na época dos desenvolvedores monoglotas (sim, essa palavra existe!) era muito comum vermos discussões do tipo: &#8220;que linguagem é melhor, X ou Y?&#8221;. A melhor resposta é: depende! Depende da situação, do projeto, da experiência da equipe&#8230; Para cada situação, uma linguagem pode ser mais adequada que outra, o que traz uma grande vantagem para os poliglotas, pois, para se tomar esta decisão, é necessário conhecer as linguagens disponíveis. Ao mesmo tempo, se ninguém na equipe tiver experiência com determinada linguagem, seria um grande risco utilizá-la no projeto. É como uma caixa de ferramentas: se eu tiver somente um martelo na minha caixa, como farei para apertar um parafuso? É importante termos o maior número possível de ferramentas disponíveis, e conhecimento sobre cada uma delas, para que possamos escolher a mais adequada em cada situação.</p>
<p>Acompanhando esse comportamento, há atualmente uma forte tendência a plataformas poliglotas, o que também é muito positivo. As plataformas existentes já estão bastante maduras, têm algoritmos eficientes para gerenciamento de memória e <a href="http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29">Garbage Collection</a>, por exemplo, e são bem conhecidas. Encontram-se nesta categoria as plataformas Java e .NET, que estão continuamente aumentando o número de linguagens suportadas &#8211; veja a <a href="http://en.wikipedia.org/wiki/List_of_JVM_languages">lista de linguagens suportadas pela JVM</a> e <a href="http://en.wikipedia.org/wiki/Microsoft_.NET_Languages">pelo .NET</a>. Com isso, a escolha da linguagem para cada projeto fica muito mais fácil, permitindo, inclusive, <a href="http://memeagora.blogspot.com/2006/12/polyglot-programming.html">projetos poliglotas</a>. Se você trabalha com Java e decide utilizar Ruby no seu projeto, por exemplo, basta adicionar o jar do <a href="http://www.jruby.org/">JRuby</a>.</p>
<p>A conclusão que podemos tirar disso é que um desenvolvedor nunca deve estagnar. Procure sempre estudar e aprender novas coisas, mesmo que não seja nada relacionado com o que você está trabalhando atualmente, pois, mesmo que não venha a trabalhar, isso ajuda a quebrar paradigmas e permite que você se torne um <a href="http://www.techfounder.net/2009/07/22/what-makes-a-good-programmer/">melhor desenvolvedor</a>.</p>
<br /> Tagged: desenvolvimento, linguagens de programação, Programação <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ggarnier.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ggarnier.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ggarnier.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ggarnier.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ggarnier.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ggarnier.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ggarnier.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ggarnier.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ggarnier.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ggarnier.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ggarnier.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ggarnier.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ggarnier.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ggarnier.wordpress.com/190/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=190&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ggarnier.wordpress.com/2009/09/11/desenvolvedores-e-plataformas-poliglotas/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d3575572ebcfb5064c0494dedb0a9bba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ggarnier</media:title>
		</media:content>
	</item>
		<item>
		<title>Dev in Rio &#8211; eu vou!</title>
		<link>http://ggarnier.wordpress.com/2009/08/27/dev-in-rio-eu-vou/</link>
		<comments>http://ggarnier.wordpress.com/2009/08/27/dev-in-rio-eu-vou/#comments</comments>
		<pubDate>Thu, 27 Aug 2009 11:19:01 +0000</pubDate>
		<dc:creator>ggarnier</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[Desenvolvimento ágil]]></category>
		<category><![CDATA[dev in rio]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://ggarnier.wordpress.com/?p=184</guid>
		<description><![CDATA[Post movido para: http://blog.guilhermegarnier.com/2009/08/27/dev-in-rio-eu-vou/ Muitos já devem estar sabendo, mas acho que não custa nada ajudar a divulgar: no dia 14 de setembro ocorrerá aqui no Rio de Janeiro um evento imperdível: o Dev in Rio. Organizado pelo Guilherme Chapiewski e pelo Henrique Bastos, o evento terá palestras sobre Rails, Django, Java, Open Source e [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=184&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Post movido para: <a href="http://blog.guilhermegarnier.com/2009/08/27/dev-in-rio-eu-vou/">http://blog.guilhermegarnier.com/2009/08/27/dev-in-rio-eu-vou/</a></strong></p>
<p>Muitos já devem estar sabendo, mas acho que não custa nada ajudar a divulgar: no dia 14 de setembro ocorrerá aqui no Rio de Janeiro um evento imperdível: o <a href="http://www.devinrio.com.br/">Dev in Rio</a>. Organizado pelo <a href="http://gc.blog.br/">Guilherme Chapiewski</a> e pelo <a href="http://www.henriquebastos.net/">Henrique Bastos</a>, o evento terá palestras sobre Rails, Django, Java, Open Source e metodologias ágeis, contando, inclusive, com palestrantes internacionais. A inscrição custa apenas R$ 65,00, e, pelo sucesso que está fazendo, acho que as vagas vão acabar logo!</p>
<p>Para quem estiver sem grana, vale a pena tentar ganhar ingressos pelo <a href="http://www.rubyinside.com.br/dev-in-rio-2009-2034">RubyInside</a> ou pela <a href="http://www.revistatidigital.com.br/index.php/dev-in-rio-eu-vou-porque/">revista TI digital</a>.</p>
<p>Mais informações sobre o Dev in Rio no <a href="http://www.devinrio.com.br/">site</a> e no <a href="http://twitter.com/devinrio">twitter</a>. Parabéns aos organizadores pela iniciativa!</p>
<br /> Tagged: desenvolvimento, Desenvolvimento ágil, dev in rio, django, Eventos, Java, rails <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ggarnier.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ggarnier.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ggarnier.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ggarnier.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ggarnier.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ggarnier.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ggarnier.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ggarnier.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ggarnier.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ggarnier.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ggarnier.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ggarnier.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ggarnier.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ggarnier.wordpress.com/184/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=184&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ggarnier.wordpress.com/2009/08/27/dev-in-rio-eu-vou/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d3575572ebcfb5064c0494dedb0a9bba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ggarnier</media:title>
		</media:content>
	</item>
		<item>
		<title>Feeds autenticados no Google Reader</title>
		<link>http://ggarnier.wordpress.com/2009/07/31/feeds-autenticados-no-google-reader/</link>
		<comments>http://ggarnier.wordpress.com/2009/07/31/feeds-autenticados-no-google-reader/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 10:49:22 +0000</pubDate>
		<dc:creator>ggarnier</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[feed]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://ggarnier.wordpress.com/?p=175</guid>
		<description><![CDATA[Post movido para: http://blog.guilhermegarnier.com/2009/07/31/feeds-autenticados-no-googl-reader/ Há muito tempo eu uso o Google Reader como leitor de feeds. A principal vantagem sobre as demais alternativas para desktop é o fato de não necessitar de instalação, podendo ser acessado diretamente pelo browser. Outro dia, tentei cadastrar o feed do Twitter no Google Reader, e recebi a seguinte mensagem: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=175&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Post movido para: <a href="http://blog.guilhermegarnier.com/2009/07/31/feeds-autenticados-no-googl-reader/">http://blog.guilhermegarnier.com/2009/07/31/feeds-autenticados-no-googl-reader/</a></strong></p>
<p>Há muito tempo eu uso o <a href="http://www.google.com.br/reader/">Google Reader</a> como leitor de feeds. A principal vantagem sobre as demais alternativas para desktop é o fato de não necessitar de instalação, podendo ser acessado diretamente pelo browser.</p>
<p>Outro dia, tentei cadastrar o feed do <a href="http://twitter.com/">Twitter</a> no Google Reader, e recebi a seguinte mensagem: &#8220;Sorry, an unexpected condition has occurred which is preventing Google Reader from fulfilling the request&#8221;. Tentei acessar o feed diretamente no Firefox, e, após solicitação de login e senha, os feeds apareceram normalmente. Após uma rápida pesquisa, descobri que o Google Reader não suporta feeds autenticados, o que é o caso do Twitter.</p>
<p>Uma das alternativas a este problema seria utilizar um leitor de feeds que suporta autenticação, como a extensão <a href="http://newsfox.mozdev.org/">NewsFox</a> para Firefox ou <a href="http://getsatisfaction.com/twitter/topics/rss_feeds_down#reply_510009">algum outro</a>. Porém, para poder continuar utilizando o Google Reader, uma solução é o <a href="http://freemyfeed.com/">FreeMyFeed</a>, um serviço que funciona como uma espécie de proxy para feeds autenticados: você informa a URL, o login e a senha do feed que exige autenticação, e ele gera um novo endereço de feed que permite acesso direto, inclusive pelo Google Reader.</p>
<br /> Tagged: feed, Google, Internet, twitter <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ggarnier.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ggarnier.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ggarnier.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ggarnier.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ggarnier.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ggarnier.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ggarnier.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ggarnier.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ggarnier.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ggarnier.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ggarnier.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ggarnier.wordpress.com/175/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ggarnier.wordpress.com/175/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ggarnier.wordpress.com/175/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ggarnier.wordpress.com&amp;blog=2794254&amp;post=175&amp;subd=ggarnier&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ggarnier.wordpress.com/2009/07/31/feeds-autenticados-no-google-reader/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d3575572ebcfb5064c0494dedb0a9bba?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">ggarnier</media:title>
		</media:content>
	</item>
	</channel>
</rss>
