<?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>Diego Plentz &#187; ruby</title>
	<atom:link href="http://plentz.org/category/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://plentz.org</link>
	<description>plentiful thoughts from my empty head</description>
	<lastBuildDate>Sat, 03 Jul 2010 06:17:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Update Cadabra!</title>
		<link>http://plentz.org/2009/07/19/update-cadabra/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=update-cadabra</link>
		<comments>http://plentz.org/2009/07/19/update-cadabra/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 01:57:32 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[util]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[macosx]]></category>
		<category><![CDATA[macports]]></category>
		<category><![CDATA[rubygems]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://plentz.org/?p=291</guid>
		<description><![CDATA[Faz um bom tempo que tenho uma mania chata: gosto de ter tudo sempre atualizado. Confesso que é quase uma frescura (nada de piadinhas sobre gaúchos, ok?), mas automatizando um pouco, é um vício que da pra conviver. Para as apps do Mac OS X eu uso o AppFresh, que funciona muito bem e tem [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/kt/120468504/" title="Caution: Magician Ahead! by The Rocketeer"><img src="http://farm1.static.flickr.com/43/120468504_c68075f6d7_m.jpg" width="240" height="201" alt="Caution: Magician Ahead! by The Rocketeer" style="border: 2px solid rgb(0, 0, 0); float: right; margin-left: 10px; margin-bottom: 10px;"/></a></p>
<p>Faz um bom tempo que tenho uma mania chata: gosto de ter <strong>tudo</strong> sempre atualizado. Confesso que é quase uma frescura (nada de piadinhas sobre gaúchos, ok?), mas <a href="http://gc.blog.br/2009/04/15/louco-por-automatizacao/">automatizando um pouco</a>, é um vício que da pra conviver. Para as apps do Mac OS X eu uso o <a href="http://metaquark.de/appfresh/">AppFresh</a>, que funciona muito bem e tem integração com o <a href="http://osx.iusethis.com/iconbonanza/plentz">iUseThis</a>. Mas ainda tinham algumas coisas que eu ainda fazia manualmente: MacPorts e RubyGems eram duas delas.</p>
<p>Depois do post que fiz sobre o <a href="http://plentz.org/2008/10/19/rmagick-cadabra/">rmagick-osx-installer</a> tive a idéia de fazer um script que fizesse o trabalho sujo por mim também. E depois de muita procastinação: <a href="http://github.com/plentz/update_cadabra/">update_cadabra</a>!</p>
<p>É basicamente, um script bash que roda os comandos pra atualização do <a href="http://rubygems.org/">Ruby Gems</a>+gems+<a href="http://www.macports.org/">MacPorts</a>+ports &#8211; e de quebra, ainda faz uma faxina no que está sobrando. Espero que usem, sugiram coisas novas e poupem ainda mais nosso tempo.</p>
<p>Pra usar, é só baixar o script, dar permissão de execução pro script e executá-lo:</p>
<p><code>chmod u+x update_cadabra.sh<br />
sudo update_cadabra.sh</code></p>
<p>ps: se você por algum motivo não pode atualizar suas gems, ou ainda tem algumas gems antigas instaladas para algum sistema legado, não recomendo usar o script<br />
ps2: use por sua conta e risco <img src='http://plentz.org/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=291&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2009/07/19/update-cadabra/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RMagick Cadabra</title>
		<link>http://plentz.org/2008/10/19/rmagick-cadabra/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rmagick-cadabra</link>
		<comments>http://plentz.org/2008/10/19/rmagick-cadabra/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 02:35:03 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[imagescience]]></category>
		<category><![CDATA[macosx]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rmagick]]></category>

		<guid isPermaLink="false">http://plentz.org/?p=221</guid>
		<description><![CDATA[Essa semana vi um twitt do Pellegrino comentando da dor de cabeça pra instalar o RMagick. O Kung inclusive sugeriu usar o ImageScience, que eu nunca usei, mas deve ser uma alternativa interessante. Mas sendo mais prático preguiçoso, sempre existe uma forma mais fácil e menos dolorosa de fazer as coisas. E foi então que [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/kipourax/2167284601/" title="The Wizard by Kipourax"><img src="http://farm3.static.flickr.com/2010/2167284601_b870b8c59f_m.jpg" alt="The Wizard by Kipourax" class="pc_img" height="160" width="240" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;"/></a><br />
Essa semana vi um <a href="http://twitter.com/pellegrino/statuses/965341567">twitt</a> do <a href="http://vp.blog.br/">Pellegrino</a> comentando da dor de cabeça pra instalar o <a href="http://rmagick.rubyforge.org/">RMagick</a>. O <a href="http://fabiokung.com/">Kung</a> inclusive <a href="http://twitter.com/fabiokung/statuses/965343031">sugeriu</a> usar o <a href="http://seattlerb.rubyforge.org/ImageScience.html">ImageScience</a>, que eu nunca usei, mas deve ser uma alternativa interessante.</p>
<p>Mas sendo mais prático <del datetime="2008-10-20T01:54:36+00:00">preguiçoso</del>, sempre existe uma forma mais fácil e menos dolorosa de fazer as coisas. E foi então que achei o <a href="http://rubyforge.org/frs/?group_id=12">rmagick-osx-installer</a>. Basta fazer <a href="http://rubyforge.org/frs/?group_id=12">download</a>, descompactar e executar</p>
<p><code>ruby rm_install.rb</code></p>
<p>E depois de todo processo completo (com um pouco de sorte), você verá um lindo resumo como esse:</p>
<p><code>Summary: There were 0 failures<br />
libpng 1.2.26 was already installed.<br />
libjpeg was installed successfully<br />
ghostscript was installed successfully<br />
ghostscript-fonts-std was installed successfully<br />
FreeType 9.17.3 was already installed.<br />
libwmf was installed successfully<br />
ImageMagick was installed successfully<br />
RMagick was installed successfully<br />
Removing rm_install_tmp directory...Done</code></p>
<p><strong>Update</strong>: agora também é possível instalar o ImageMagick com o bom e velho ports:</p>
<p><code>sudo port install ImageMagick</code></p>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=221&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2008/10/19/rmagick-cadabra/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Updating Gems</title>
		<link>http://plentz.org/2008/10/16/updating-gems/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=updating-gems</link>
		<comments>http://plentz.org/2008/10/16/updating-gems/#comments</comments>
		<pubDate>Fri, 17 Oct 2008 03:47:29 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[gems]]></category>
		<category><![CDATA[macosx]]></category>

		<guid isPermaLink="false">http://plentz.org/?p=213</guid>
		<description><![CDATA[Hoje resolvi fazer uma atualização do Rails e cia aqui e dei de cara com um problema chato de resolver. Além de instalar as versões novas dos gems, queria me livrar as antigas. Mas sempre que tentava fazer o gem cleanup, recebia o seguinte erro: ~ plentz$ sudo gem cleanup Cleaning up installed gems... Attempting [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/richlegg/84028300/" title="How many steps can I go? by LeggNet"><img src="http://farm1.static.flickr.com/38/84028300_3f2ea22ed6_m.jpg" alt="How many steps can I go? by LeggNet" class="pc_img" height="160" width="240" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;"/></a></p>
<p>Hoje resolvi fazer uma atualização do <a href="http://www.rubyonrails.org/">Rails</a> e cia aqui e dei de cara com um problema chato de resolver. Além de instalar as versões novas dos <a href="http://www.rubygems.org/">gems</a>, queria me livrar as antigas. Mas sempre que tentava fazer o <em>gem cleanup</em>, recebia o seguinte erro:<br />
<code><br />
~ plentz$ sudo gem cleanup<br />
Cleaning up installed gems...<br />
Attempting to uninstall mongrel-1.0.1<br />
ERROR:  While executing gem ... (Gem::InstallError)<br />
    Unknown gem mongrel = 1.0.1<br />
</code><br />
Depois de fazer um <em>find</em> (<em>find . -iname mongrel*</em> mesmo) no / inteiro, descobri um diretório com vários gems antigos. Ele fica em:</p>
<p><code>/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8</code></p>
<p>Entrei nele e fiz literalmente um limpa. Apaguei todos arquivos dentro das pastas specifications, doc, cache e gems. Então se quizer deixar sua instalação 100% fresh, rode os comandos abaixo, e caso encontre algum problema, siga a dica acima:<br />
<code><br />
sudo gem update --system<br />
sudo gem update<br />
sudo gem cleanup<br />
</code><br />
Depois confira que você ficou só com as últimas versões rodando: <em>gem list</em>.</p>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=213&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2008/10/16/updating-gems/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Hot Swap</title>
		<link>http://plentz.org/2006/11/26/hot-swap/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=hot-swap</link>
		<comments>http://plentz.org/2006/11/26/hot-swap/#comments</comments>
		<pubDate>Sun, 26 Nov 2006 10:15:29 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[jvm]]></category>

		<guid isPermaLink="false">http://plentz.org/2006/11/26/hot-swap/</guid>
		<description><![CDATA[Segundo a Wikipedia, Hot swapping can also refer to the ability to alter the running code of a program without having to interrupt its execution, although only a few languages support it. Those that do include Lisp, Erlang, and Smalltalk. The Java programming language also supports this technology, but only through the Java Platform Debugger [...]]]></description>
			<content:encoded><![CDATA[<p> <a href="http://www.flickr.com/photos/flowerchild75/306731577/" title="photo sharing"><img src="http://static.flickr.com/100/306731577_7ee75adf7f_m.jpg" alt="" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;"/></a></p>
<p>Segundo a <a href="http://en.wikipedia.org/wiki/Hot_swap">Wikipedia</a>,</p>
<blockquote><p>Hot swapping can also refer to the ability to alter the running code of a program without having to interrupt its execution, although only a few languages support it. Those that do include <a href="http://en.wikipedia.org/wiki/Lisp_programming_language" title="Lisp programming language">Lisp</a>, <a href="http://en.wikipedia.org/wiki/Erlang_%28programming_language%29" title="Erlang (programming language)">Erlang</a>, and <a href="http://en.wikipedia.org/wiki/Smalltalk_%28programming_language%29" title="Smalltalk (programming language)">Smalltalk</a>. The <a href="http://en.wikipedia.org/wiki/Java_programming_language" title="Java programming language">Java programming language</a> also supports this technology, but only through the <a href="http://en.wikipedia.org/wiki/JPDA" title="JPDA">Java Platform Debugger Architecture (JPDA)</a>&nbsp;: it is only possible to change the code while the program is in the control of a <a href="http://en.wikipedia.org/wiki/Debugger" title="Debugger">Debugger</a>. <a href="http://en.wikipedia.org/wiki/Interactive_programming" title="Interactive programming">Interactive programming</a> is a paradigm that makes extensive use of hot swapping so that the programming activity becomes part of the program flow itself.</p>
</blockquote>
<p>O post do <a href="http://nullability.org/">Daniel</a> (<a href="http://nullability.org/?p=70">Hot Code Replacement</a>), contando como fazer hot swap de classes com o <a href="http://www.oracle.com/technology/tech/java/oc4j/index.html">OC4J</a>, me fez pensar numa coisa: será que realmente são poucos que conhecem a “feature” de trocar classes em tempo de execução, sem parar sua aplicação, e nem a VM?</p>
<p>Bom, mesmo sem ter 1/3 de conhecimento sobre VMs que o <a href="http://www.kumpera.net/blog">Rodrigo</a> (louds), por exemplo, vou tentar explicar. Parada para comentário de utilidade pública: se você não assina o blog dele, faça um favor a si mesmo e <a href="http://www.kumpera.net/blog">vai lá</a>. Hoje mesmo <a href="http://www.kumpera.net/blog/index.php/2006/09/15/rapidinhas/">ele anunciou</a> que vai liberar os fontes da máquina virtual que ele começou a desenvolver. </p>
<p>Voltando ao assunto, desde a <a href="http://java.sun.com/j2se/1.4.2/docs/guide/jpda/enhancements.html#hotswap">JDK 1.4</a> (sim, hot swap é relativamente velho), é possível trocar a implementação de métodos sem reiniciar a aplicação. Notem bem, implementação, ou seja, se você trocou qualquer coisa na assinatura de um método, criou algum novo, adicionou uma variável de instância da classe, você precisa parar a VM, compilar a classe, e iniciar novamente.</p>
<p>No entando, linguagens dinâmicas, como <a href="http://www.ruby-lang.org/en/">Ruby</a> (com site novo), permitem trocar trocar <strong>qualquer coisa</strong> das suas classes em tempo de execução, seja métodos, atributos, whatever. Parece covardia comparar, né?</p>
<p>Porém, lendo um pouco mais à respeito, fazer com que a JVM suporte isso também é perfeitamente possível tecnicamente (louds!!), mas precisariam ser feitas enormes mudanças no seu funcionamento, e acredito que seja esse, um dos principais motivos de não terem feito nos primórdios do hot swap &#8211; JDK 1.4.</p>
<p>O assunto parece estar realmente chamando ateção, pois acabou de sair um artigo no Artima, <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=176597">The JVM as an (Un)Common Language Runtime</a>, e um dos pontos que o autor destaca como sendo um dos principais desafios para a implementação de linguagens dinâmicas na JVM:</p>
<blockquote><p><strong>Hotswapping</strong>: The main idea is to allow code changes on the fly, while they are running. The full capability of hotswapping implies any kind of change to be supported, addition/modification/removal of methods and attributes including changes in inheritance hierarchy.</p>
</blockquote>
<p>Se isso não fosse suficiente, existe um tópico na SDN, <a href="http://forum.java.sun.com/thread.jspa?forumID=47&amp;threadID=572396">Hotswap support for schema / shape changes</a> discutindo o assunto, e o bug report <a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4910812">4910812 &#8211; Enhance Hot Code Replacement</a> com 300+ votos.</p>
<p>Isso permitiria baixar para praticamente zero o turnaround de desenvolivmento de aplicações, dando um grande fôlego para Java como linguagem, pois já aumentaria significantemente a velocidade de desenvolvimento, evitando a perda de minutos que já estamos acostumados entre parar servidor de aplicação, fazer re-deploy, iniciar aplicação, …</p>
<blockquote><p>Classloader tricks only take you so far.</p>
</blockquote>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=143&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2006/11/26/hot-swap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial Rails em pt-br</title>
		<link>http://plentz.org/2006/04/23/tutorial-rails-em-pt-br/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=tutorial-rails-em-pt-br</link>
		<comments>http://plentz.org/2006/04/23/tutorial-rails-em-pt-br/#comments</comments>
		<pubDate>Sun, 23 Apr 2006 06:36:44 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[news]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://plentz.org/2006/04/23/tutorial-rails-em-pt-br/</guid>
		<description><![CDATA[Depois de lançar o tutorial de Ruby em português, o livro, agora o Taq liberou um tutorial de Ruby on Rails, em português também. Agora não tem mais desculpa pra não dar uma olhadinha, né?]]></description>
			<content:encoded><![CDATA[<p>Depois de lançar o <a href="http://www.eustaquiorangel.com/files#ruby">tutorial de Ruby em português</a>, o <a href="http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&#038;ProdTypeId=1&#038;ProdId=1470481&#038;franq=170759">livro</a>, agora o <a href="http://www.eustaquiorangel.com">Taq</a> liberou um <a href="http://www.eustaquiorangel.com/files#rails">tutorial de Ruby on Rails</a>, em português também. Agora não tem mais desculpa pra não dar uma olhadinha, né?</p>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=139&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2006/04/23/tutorial-rails-em-pt-br/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Coding is poetry</title>
		<link>http://plentz.org/2006/04/21/coding-is-poetry/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=coding-is-poetry</link>
		<comments>http://plentz.org/2006/04/21/coding-is-poetry/#comments</comments>
		<pubDate>Sat, 22 Apr 2006 00:19:17 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://plentz.org/2006/04/21/coding-is-poetry/</guid>
		<description><![CDATA[irb(main):001:0&#62; def question? irb(main):002:1&#62; bb &#124;&#124; !bb irb(main):003:1&#62; end =&#62; shakespeare]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/tatianacardeal/86270932/" title="pagan poetry III"><img src="http://farm1.static.flickr.com/9/86270932_0ac918ce1f_m.jpg" alt="pagan poetry III" height="240" width="240" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;" /></a></p>
<p>
<blockquote>
irb(main):001:0&gt; def question?<br />
irb(main):002:1&gt;   bb || !bb<br />
irb(main):003:1&gt; end<br />
=&gt; shakespeare
</p></blockquote>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=138&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2006/04/21/coding-is-poetry/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Enquanto isso, no mainstream&#8230;</title>
		<link>http://plentz.org/2006/04/11/enquanto-isso-no-mainstream/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=enquanto-isso-no-mainstream</link>
		<comments>http://plentz.org/2006/04/11/enquanto-isso-no-mainstream/#comments</comments>
		<pubDate>Tue, 11 Apr 2006 04:01:17 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[quotes]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://plentz.org/2006/04/11/enquanto-isso-no-mainstream/</guid>
		<description><![CDATA[F. Meyer ! says: defina o mainstream que ruby não vai entrar diego says: essas empresas recheadas de programadores que estão lá somente porque informática pagava mais que educação física. Tá, parei.]]></description>
			<content:encoded><![CDATA[<blockquote><p><a href="http://fmeyer.org/">F. Meyer</a> ! says:<br />
defina o mainstream que ruby não vai entrar<br />
diego says:<br />
essas empresas recheadas de programadores que estão lá somente porque informática pagava mais que educação física.</p></blockquote>
<p>Tá, parei.</p>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=135&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2006/04/11/enquanto-isso-no-mainstream/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Code contest #1</title>
		<link>http://plentz.org/2006/03/29/code-contest-1/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=code-contest-1</link>
		<comments>http://plentz.org/2006/03/29/code-contest-1/#comments</comments>
		<pubDate>Thu, 30 Mar 2006 02:07:41 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[Unsorted]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[coldfusion]]></category>
		<category><![CDATA[vb]]></category>

		<guid isPermaLink="false">http://plentz.org/2006/03/29/code-contest-1-google-im-feeling-lucky/</guid>
		<description><![CDATA[Google I&#8217;m Feeling Lucky: fazer uma requisição para http://www.google.com.br, pesquisando pelo nome da linguagem(java,ruby,&#8230;). Exibir como retorno o endereço, título e descrição do primeiro resultado encontrado. Ruby (meu): require 'open-uri' open('http://www.google.com.br/search?q=ruby').read =~ %r{class=l href="(.*?)"&#62;(.*?)&#60;/a.*?j&#62;&#60;font.*?&#62;(.*?)&#60;br&#62;&#60;}m puts ($2 + "\n" + $1 + "\n" + $3 + "\n").gsub(/&#60;.*?\&#62;/, '') Java (do Giuliano, bastante melhorada depois pelo Urubatan): [...]]]></description>
			<content:encoded><![CDATA[<p>Google I&#8217;m Feeling Lucky: fazer uma requisição para <a href="http://www.google.com.br">http://www.google.com.br</a>, pesquisando pelo nome da linguagem(java,ruby,&#8230;). Exibir como retorno o endereço, título e descrição do primeiro resultado encontrado.</p>
<p>Ruby (meu):</p>
<pre>require 'open-uri'
open('http://www.google.com.br/search?q=ruby').read =~ %r{class=l href="(.*?)"&gt;(.*?)&lt;/a.*?j&gt;&lt;font.*?&gt;(.*?)&lt;br&gt;&lt;}m
puts ($2 + "\n" + $1 + "\n" + $3 + "\n").gsub(/&lt;.*?\&gt;/, '')</pre>
<p>Java (do Giuliano, bastante melhorada depois pelo <a href="http://www.urubatan.com.br/">Urubatan</a>):</p>
<pre>
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;

public class HTTPSample {
       public static void main(String[] args) throws Exception {
               URLConnection con = new URL("http://www.google.com/search?q=java").openConnection();
               con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
               Scanner sc = new Scanner(con.getInputStream());
               System.out.println(sc.findWithinHorizon("&lt;a&gt;.*?&lt;/a&gt;", 0).replaceAll("&lt;a&gt;(.*?)&lt;/a&gt;", "$2=$1").replaceAll("", ""));
       }
}</pre>
<p>PHP (do <a href="http://charles.pilger.com.br/">Pilger</a>, com ajuste do <a href="http://fmeyer.org/">Fernando</a>):</p>
<pre>&lt;?php
  $html = implode('', file('http://www.google.com.br/search?q=php'));
  preg_match_all("|class=l href=\"(.*?)\"&gt;(.*?)&lt;/a.*?j&gt;&lt;font.*?&gt;(.*?)&lt;br&gt;&lt;|", $html, $out, PREG_SET_ORDER);
  echo $out[0][1]." ".$out[0][2]." ".$out[0][3];
?&gt;</pre>
<p>Python (do Salviato):</p>
<pre> import urllib
 import re

 class AppURLopener(urllib.FancyURLopener):
   version = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1"

 urllib._urlopener = AppURLopener()

 html = urllib.urlopen('http://www.google.com.br/search?q=python').read()
 out = re.search('class=l href="(.*?)"&gt;(.*?)&lt;/a.*?j&gt;&lt;font.*?&gt;(.*?)&lt;br&gt;&lt;', html, re.DOTALL)
 print re.sub('&lt;.*?&gt;', '', (out.group(1) + '\n' + out.group(2) + '\n' + out.group(3)))</pre>
<p>TCl/TK (do Salviato):</p>
<pre> package require http
 http::config -useragent {Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1}
 set html [http::data [http::geturl {http://www.google.com.br/search?q=tcl}]]
 set out [regexp -inline {class=l href="(.*?)">(.*?)<font .*?>(.*?)< } $html]
 puts [regsub -all {<.*?>} [concat "[lindex $out 1]\n[lindex $out 2]\n[lindex $out 3]"] "" ]</font></pre>
<p>VB (do Giuliano):</p>
<pre>   Dim http As New WinHttp.WinHttpRequest
   Dim re As New RegExp, matcher As Match
   Dim texto As String
   http.Open "GET", "http://www.google.com.br/search?q=java", False
   http.SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"
   http.Send
   texto = http.ResponseText
   re.Pattern = "class=l href=""(.*?)""&gt;(.*?)&lt;/a.*?j&gt;&lt;font.*?&gt;(.*?)&lt;br&gt;&lt;"
   re.Global = True
   re.IgnoreCase = True
   re.MultiLine = True
   For Each matcher In re.Execute(texto)
       Dim strSaida: strSaida = ""
       strSaida = matcher.SubMatches(0) + vbCrLf + matcher.SubMatches(1) + vbCrLf + matcher.SubMatches(2)
       MsgBox strSaida
       Exit For
    Next</pre>
<p>Coldfusion (do <a href="http://vardump.com/">Kenji</a>)</p>
<pre>
&lt;cfhttp url="http://www.google.com.br/search?q=coldfusion+mx"&gt;
&lt;cfset tmp = REFindNoCase('class=l href="(.*?)"&gt;(.*?)&lt;/a.*?j&gt;&lt;font.*?&gt;(.*?)&lt;br&gt;&lt;', cfhttp.filecontent,1,true)&gt;
&lt;cfoutput&gt;#mid(cfhttp.filecontent,tmp.pos[2],tmp.len[2])# #mid(cfhttp.filecontent,tmp.pos[3],tmp.len[3])# #mid(cfhttp.filecontent,tmp.pos[4],tmp.len[4])#&lt;/cfoutput&gt;
</pre>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=134&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2006/03/29/code-contest-1/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Code contest</title>
		<link>http://plentz.org/2006/03/29/code-contest/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=code-contest</link>
		<comments>http://plentz.org/2006/03/29/code-contest/#comments</comments>
		<pubDate>Thu, 30 Mar 2006 02:05:25 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[Unsorted]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://plentz.org/2006/03/29/code-contest/</guid>
		<description><![CDATA[Buenas, semana passada no meu post &#8220;Ruby, less-code&#8221;, o Pilger deu a idéia de colocar os códigos lado-a-lado, até pra facilitar a comparação. Bom, conversando com o Giuliano este final de semana surgiu uma idéia: fazer uma espécie de &#8220;coding contest&#8221;. Claro, não vai valer nada. Todos os &#8220;desafios&#8221; vão ficar sob a tag &#8220;code [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/burakyilmaz61/200880717/" title="The Big Contest for Sheep :)"><img src="http://farm1.static.flickr.com/59/200880717_9ac311f389_m.jpg" alt="The Big Contest for Sheep :)" height="156" width="240"  style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;" /></a></p>
<p>Buenas, semana passada no meu post <a href="http://plentz.org/2006/03/22/ruby-less-code/">&#8220;Ruby, less-code&#8221;</a>, o <a href="http://www.charles.pilger.com.br/">Pilger</a> deu a idéia de colocar os códigos lado-a-lado, até pra facilitar a comparação. Bom, conversando com o Giuliano este final de semana surgiu uma idéia: fazer uma espécie de &#8220;coding contest&#8221;. Claro, não vai valer nada. Todos os &#8220;desafios&#8221; vão ficar sob a tag &#8220;<a href="http://plentz.org/category/code-contest/">code contest</a>&#8220;</p>
<p>A idéia é essa: pegamos um problema qualquer e cada um resolve em uma linguagem. Ajuda a ver algumas vantagens/desvantagens de cada linguagem, e claro, da pra aprender muito também. A versão inicial de cada solução nós fazemos, se alguém sugerir alguma mudança/melhoria alteramos e publicamos(citando o autor, claro). A idéia é criar um problemas por semana em média.</p>
<p>Ah, se alguém tiver interesse de solucionar em alguma linguagem diferente e mandar, será muito bem vinda também. Seja ela Python (<a href="http://www.jonasgalvez.com/">Jonas</a>? <a href="http://lixo.org/">Carlos</a>?), Lisp (<a href="http://fragmental.com.br/">Shoes</a>? <a href="http://beam.to/taq/">Taq</a>?), C/C++(<a href="http://www.fmeyer.org/">Fernando</a>?), Groovy (<a href="http://nullability.org/">Daniel</a>?), PHP (<a href="http://www.charles.pilger.com.br/">Pilger</a>?), .Net, etc.</p>
<p>Como criar problemas não é nossa especialidade(e sim resolvê-los), sugestões de problemas também são bem vindas, mas por favor, nada de calcular órbitas e bizarrices do gênero. É só pra se divertir mesmo.</p>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=133&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2006/03/29/code-contest/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Para o alto e avante</title>
		<link>http://plentz.org/2006/03/29/para-o-alto-e-avante/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=para-o-alto-e-avante</link>
		<comments>http://plentz.org/2006/03/29/para-o-alto-e-avante/#comments</comments>
		<pubDate>Wed, 29 Mar 2006 04:20:06 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://plentz.org/2006/03/29/para-o-alto-e-avante/</guid>
		<description><![CDATA[Duas ótimas notícias para quem simpatiza com Ruby. A primeira é o lançamento do livro do Taq. Perfeito para quem está querendo começar, mas não tem uma boa base de inglês. Ponto para a comunidade brasileira. A outra é o lançamento do Rails 1.1. Algumas features que chamam atenção (além é claro, dos 500+ bugfixes [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/rostev/303842665/" title="Para o alto e avante!!!"><img src="http://farm1.static.flickr.com/115/303842665_aa70a10ff5_m.jpg" alt="Para o alto e avante!!!" height="180" width="240"   style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;" /></a></p>
<p>Duas ótimas notícias para quem simpatiza com <a href="http://ruby-lang.org/">Ruby</a>. A primeira é o <a href="http://beam.to/taq/blog.php?id=255">lançamento do livro do Taq</a>. Perfeito para quem está querendo começar, mas não tem uma boa base de inglês. Ponto para a comunidade brasileira.</p>
<p>A outra é o <a href="http://weblog.rubyonrails.org/articles/2006/03/28/rails-1-1-rjs-active-record-respond_to-integration-tests-and-500-other-things">lançamento do Rails 1.1</a>. Algumas features que chamam atenção (além é claro, dos 500+ bugfixes e tweaks):</p>
<ul>
<li>
<p>RJS &#8211; JavaScript escrito em Ruby: que tal um bocado de Ajax/Javascript só com Ruby?</p>
<pre># Chamada para efeitos do script.aculo.us
page[:cart].visual_effect(@cart.size == 1 ? :appear : :highlight)

# Atualiza um pedaço de html
page[:cart].replace_html :partial => "cart"
</pre>
</li>
<li>
<p>Active Record &#8211; Cascading eager loading: busca em cascata.</p>
<pre># Single database query:
companies = Company.find(:all, :include => {
  :groups => { :members=> { :favorites } } })

companies[0].groups[0].members[0].favorites[0].name
</pre>
</li>
<li>
<p>Active Record &#8211; Polymorphic associations and join models: possibilidade de relacionamentos many-to-many mais complexos.</p>
<pre>class Author &lt; ActiveRecord::Base
  has_many :authorships
  has_many :books, :through =&gt; :authorships
end

class Book &lt; ActiveRecord::Base
  has_many :authorships
  has_many :authors, :through =&gt; :authorships
end

class Authorship &lt; ActiveRecord::Base
  belongs_to :author
  belongs_to :book
end
</pre>
</li>
</ul>
<p>Confira mais novidades no blog do <a href="http://scottraymond.net/articles/2006/02/28/rails-1.1">Scott Raymond</a>.</p>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=132&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2006/03/29/para-o-alto-e-avante/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ruby, less-code</title>
		<link>http://plentz.org/2006/03/22/ruby-less-code/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ruby-less-code</link>
		<comments>http://plentz.org/2006/03/22/ruby-less-code/#comments</comments>
		<pubDate>Thu, 23 Mar 2006 02:41:55 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://plentz.org/2006/03/22/ruby-less-code/</guid>
		<description><![CDATA[Algumas semanas atrás &#8211; antes de eu sair de férias &#8211; meu amigo Giuliano e eu estavamos um pouco no ócio durante o expediente, e começamos a discutir sobre linguagens. Eu estava recém começando a brincar com Ruby, mas ele já programa em Java à alguns anos. E-mail pra cá, e-mail pra lá&#8230; ele mandava [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://static.flickr.com/24/50555124_5ce789d3dd_m.jpg" style="float: right;padding-left:3px;" align="right"/>Algumas semanas atrás &#8211; antes de eu sair de <a href="http://plentz.org/2006/02/05/ferias/">férias</a> &#8211; meu amigo Giuliano e eu estavamos um pouco no ócio durante o expediente, e começamos a discutir sobre linguagens. Eu estava recém começando a brincar com Ruby, mas ele já programa em Java à alguns anos.</p>
<p>E-mail pra cá, e-mail pra lá&#8230; ele mandava algo em Java, eu entendia o problema e respondia com a solução em Ruby. E assim foi por um bom tempo.</p>
<p>Não nos limitamos somente à if/else&#8217;s e while&#8217;s. Fomos de estrutura de classes à threads, passando por I/O, requisições HTTP, regular expressions, etc.</p>
<p> O resultado foi interessante: em nenhum exemplo o código Java ficou menor. E o código não ficou somente menor, mas a clareza do que estava acontecendo também me agradou muito. O mais próximo que Java chegou foi em um pequeno exemplo em que quase empatou, mas&#8230; ficou no quase.</p>
<p>E ontem, estava fazendo umas experiências em casa com Ruby(novidade&#8230;) e acabei me lembrando do caso. Pergunta: alguém possui algum código em Java (hum, .net?) que não possa ser escrito de forma mais concisa em Ruby?</p>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=131&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2006/03/22/ruby-less-code/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>RadRails screencast</title>
		<link>http://plentz.org/2006/03/06/radrails-screencast/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=radrails-screencast</link>
		<comments>http://plentz.org/2006/03/06/radrails-screencast/#comments</comments>
		<pubDate>Mon, 06 Mar 2006 23:57:23 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[eclipse]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://plentz.org/2006/03/06/radrails-screencast/</guid>
		<description><![CDATA[Acho que todos mundo concorda que boas IDE&#8217;s ajudam muito uma linguagem a se popularizar (ex Java com Eclipse, IDEA, Netbeans[esse último de gosto duvidoso ]). O pessoal do RadRails liberou um screencast mostrando algumas features da IDE. Da pra notar que estão trabalhando legal e a evolução desde a primeira versão é enorme. RadRails [...]]]></description>
			<content:encoded><![CDATA[<p>Acho que todos mundo concorda que boas IDE&#8217;s ajudam muito uma linguagem a se popularizar (ex Java com <a href="http://www.eclipse.org/">Eclipse</a>, <a href="http://www.jetbrains.com/idea/index.html">IDEA</a>, <a href="http://www.netbeans.org/">Netbeans</a>[esse último de gosto duvidoso <img src='http://plentz.org/wordpress/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  ]). O pessoal do <a href="http://www.radrails.org/">RadRails</a> liberou um screencast mostrando algumas features da IDE. Da pra notar que estão trabalhando legal e a evolução desde a primeira versão é enorme. </p>
<p><a href="http://download.radrails.org.nyud.net:8090/video/RadRailsScreencast.mov">RadRails Screencast</a> <i>28.5mb</i></p>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=130&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2006/03/06/radrails-screencast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://download.radrails.org.nyud.net:8090/video/RadRailsScreencast.mov" length="29837880" type="video/quicktime" />
		</item>
		<item>
		<title>Férias</title>
		<link>http://plentz.org/2006/02/05/ferias/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=ferias</link>
		<comments>http://plentz.org/2006/02/05/ferias/#comments</comments>
		<pubDate>Sun, 05 Feb 2006 07:25:00 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[Find me on ...]]></category>
		<category><![CDATA[geek]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://plentz.org/2006/02/05/ferias/</guid>
		<description><![CDATA[Dia 17 de fevereiro começa minhas tão esperadas férias (depois de quase 4 anos trabalhando direto). 5 da manhã de domingo e eu fazendo os planos, procurando lugares para conhecer, onde ficar, essas coisas. Olho aqui pro arquivinho que já está com algumas milhares de linhas, contendo nomes, telefones, e-mail e endereço de hotéis e [...]]]></description>
			<content:encoded><![CDATA[<p>Dia 17 de fevereiro começa minhas tão esperadas férias (depois de quase 4 anos trabalhando direto). 5 da manhã de domingo e eu fazendo os planos, procurando lugares para conhecer, onde ficar, essas coisas. Olho aqui pro arquivinho que já está com algumas milhares de linhas, contendo nomes, telefones, e-mail e endereço de hotéis e pousadas da <a href="http://www.florianopolisturismo.sc.gov.br/">ilha</a> coletados em alguns <a href="http://www.guiafloripa.com.br/">sites especializados</a>. Lá vou eu abrir o notepad e dar find pra pegar cada e-mail e entrar em contato. Hum&#8230; ou não.</p>
<pre>open("mail.txt").grep(/\w+@\S+/) {print $&#038; + ","}</pre>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=129&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2006/02/05/ferias/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Singleton bobão</title>
		<link>http://plentz.org/2006/01/19/singleton-bobao/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=singleton-bobao</link>
		<comments>http://plentz.org/2006/01/19/singleton-bobao/#comments</comments>
		<pubDate>Fri, 20 Jan 2006 03:20:35 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://plentz.org/2006/01/19/singleton-bobao/</guid>
		<description><![CDATA[Dando uma lida poraí sobre Design Patterns, vi dois exemplos interessantes de Singleton&#8230;Em Java public class SingletonBobao{ private SingletonBobao(){} public static SingletonBobao getSingletonBobao(){ if (ref == null) // ok, pode chamar o construtor ref = new SingletonBobao(); return ref; } public Object clone() throws CloneNotSupportedException{ throw new CloneNotSupportedException(); } private static SingletonBobao ref; } E [...]]]></description>
			<content:encoded><![CDATA[<p>Dando uma lida poraí sobre <a href="http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29">Design Patterns</a>, vi dois exemplos interessantes de <a href="http://en.wikipedia.org/wiki/Singleton_pattern">Singleton</a>&#8230;Em Java</p>
<pre>public class SingletonBobao{
  private SingletonBobao(){}

  public static SingletonBobao getSingletonBobao(){
    if (ref == null) // ok, pode chamar o construtor
        ref = new SingletonBobao();
    return ref;
  }

  public Object clone()	throws CloneNotSupportedException{
    throw new CloneNotSupportedException();
  }

  private static SingletonBobao ref;
}</pre>
<p>E em <a href="http://www.ruby-lang.org/en/">Ruby</a>&#8230;</p>
<pre>require 'singleton'
class SingletonBobinho
  include Singleton
end</pre>
<p>Hummmmm&#8230;</p>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=127&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2006/01/19/singleton-bobao/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Gems via proxy</title>
		<link>http://plentz.org/2006/01/07/gems-via-proxy/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=gems-via-proxy</link>
		<comments>http://plentz.org/2006/01/07/gems-via-proxy/#comments</comments>
		<pubDate>Sun, 08 Jan 2006 02:25:15 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[geek]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://plentz.org/2006/01/07/gems-proxy/</guid>
		<description><![CDATA[Essa semana queria instalar o Rails no computador lá da empresa pra fazer uns testezinhos e me deparei com um problema. O Gems não conseguia baixar o Rails porque lá a internet é acessada através de um proxy (como na maioria das empresas). Para resolver o problema dei uma pesquisadinha e a resposta é pra [...]]]></description>
			<content:encoded><![CDATA[<p>Essa semana queria instalar o Rails no computador lá da empresa pra fazer uns testezinhos e me deparei com um problema. O Gems não conseguia baixar o Rails porque lá a internet é acessada através de um proxy (como na maioria das empresas). Para resolver o problema dei uma pesquisadinha e a resposta é pra lá de simples, basta criar uma varíavel de ambiente chamada HTTP_PROXY com o endereço do proxy e pronto. Só não esqueça de abrir um prompt novo para que ele esteja atualizado com a variável nova que você criou.</p>
<p>ps: também funciona  adicionando o parâmetro -http-proxy URL:</p>
<pre>gem install rails -http-proxy endereco_proxy --include-dependencies</pre>
<div class="acc_license"><a href="http://creativecommons.org/licenses/by-nc-nd/3.0/"><img src="http://i.creativecommons.org/l/by-nc-nd/3.0/88x31.png" alt="by-nc-nd" /></a></div><!--<rdf:RDF xmlns="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="http://creativecommons.org/licenses/by-nc-nd/3.0/" /></Work><License rdf:about="http://creativecommons.org/licenses/by-nc-nd/3.0/"><requires rdf:resource="http://creativecommons.org/ns#Attribution" /><permits rdf:resource="http://creativecommons.org/ns#Reproduction" /><permits rdf:resource="http://creativecommons.org/ns#Distribution" /><prohibits rdf:resource="http://creativecommons.org/ns#CommercialUse" /><requires rdf:resource="http://creativecommons.org/ns#Notice" /></License></rdf:RDF>--><img src="http://plentz.org/wordpress/?ak_action=api_record_view&id=126&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2006/01/07/gems-via-proxy/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
