<?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>Wed, 07 Dec 2011 16:14:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Installing Qt in Lion</title>
		<link>http://plentz.org/2011/07/27/installing-qt-in-lion/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=installing-qt-in-lion</link>
		<comments>http://plentz.org/2011/07/27/installing-qt-in-lion/#comments</comments>
		<pubDate>Wed, 27 Jul 2011 17:32:01 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[coding]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://plentz.org/?p=360</guid>
		<description><![CDATA[You could easily install QT under MacOS X 10.7(Lion) using homebrew(which already has a fix for 4.7 incompatibility). To install homebrew, run: /usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)" Then install qt from source, using: brew install qt --build-from-source It should work. Related: Qt 4.8 beta and Mac OSX Lion, Phonon error changing README to alert users [...]]]></description>
			<content:encoded><![CDATA[<p>You could easily install <a href="http://qt.nokia.com/">QT</a> under MacOS X 10.7(Lion) using <a href="http://mxcl.github.com/homebrew/" title="homebrew">homebrew</a>(which already has a fix for 4.7 incompatibility). To install homebrew, run:</p>
<p><code>/usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)"</code></p>
<p>Then install qt from source, using:</p>
<p><code>brew install qt --build-from-source</code></p>
<p>It should work.</p>
<p>Related:</p>
<ul>
<li><a href="http://stackoverflow.com/questions/6794005/qt-4-8-beta-and-mac-osx-lion-phonon-error">Qt 4.8 beta and Mac OSX Lion, Phonon error</a></li>
<li><a href="https://github.com/thoughtbot/capybara-webkit/pull/117">changing README to alert users about OS X 10.7 binary incompatibility</a></li>
</ul>
<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=360&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2011/07/27/installing-qt-in-lion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Porque usar Ruby on Rails?</title>
		<link>http://plentz.org/2011/04/19/ruby-on-rails/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ruby-on-rails</link>
		<comments>http://plentz.org/2011/04/19/ruby-on-rails/#comments</comments>
		<pubDate>Tue, 19 Apr 2011 09:38:53 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://plentz.org/2005/11/20/ruby-on-rails/</guid>
		<description><![CDATA[ps: esse é um post meu de 2005 que atualizei pra refletir a realidade do framework. Rails é uma alternativa às soluções padronizadas qualificadas como &#8220;empresariais&#8221;, que implicam enormes cargas de trabalho sob o custo da compatibilidade com o vicioso ciclo burocrático de consultoria e treinamento que afeta as grandes empresas. Rails tem como proposta [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://rubyonrails.com/"><img src="http://rubyonrails.org/images/rails.png" style="float: right; margin-left: 10px; margin-bottom: 10px;" /></a></p>
<p>ps: esse é um post meu de 2005 que atualizei pra refletir a realidade do framework.</p>
<p><a href="http://rubyonrails.com/">Rails</a> é uma alternativa às soluções padronizadas qualificadas como &#8220;empresariais&#8221;, que implicam enormes cargas de trabalho sob o custo da compatibilidade com o vicioso ciclo burocrático de consultoria e treinamento que afeta as grandes empresas. <a href="http://rubyonrails.com.br">Rails</a> tem como proposta remover várias camadas de complexidade, salientando a capacidade individual do desenvolvedor em detrimento dos requerimentos burocráticos de equipe. Isso não deve passar a impressão, entretanto, de que Rails não é adequado para o trabalho em equipe. Rails adere ao padrão MVC de forma pragmática o bastante para promover uma separação clara de papéis, e ainda facilita o emprego de técnicas de Agile e Test-Driven Development.</p>
<p>O objetivo deste texto não é comparar Ruby/Rails com outros frameworks/linguagens, mas sim mostrar as principais vantagens que um desenvolvedor pode ter utilizando este framework. Seguem os pontos:</p>
<p><strong>Produtividade</strong> &#8211;  como o desenvolvedor consegue resolver seu problema de uma forma mais simples, clara e concisa o desenvolvimento se torna mais agradável e rápido.</p>
<p><strong>Simplicidade</strong> &#8211; esta é uma característica forte em Ruby, pois a solução de um problema, normalmente, é atingida de uma forma extremamente simples e clara, o que facilita o entendimento do código por outros programadores que precisarem fazer manutenção no código.</p>
<p><strong>Convention over configuration</strong> &#8211; o Rails se baseia no princípio convenção sobre configuração. Ao invés de criar dezenas de arquivos para configuração, basta utilizar algumas convenções pré-definidas e, caso necessário, customizar somente o que for necessário. A configuração é feita através de arquivos YML, um formato simples de declarar configurações. Isso se traduz diretamente para economia de tempo no desenvolvimento.</p>
<p><strong>Code generation</strong> &#8211; você não precisa criar sempre toda a estrutura de código à partir do zero, o que permite um tempo de startup e time-to-market menor do projeto. A principal vantagem do Rails quando comparada à outras tecnologias é que o código gerado é limpo e conciso, facilitando manutenções futuras. Outros frameworks até possuem geradores de código, mas uma vez gerado, são extremamente complexos e difíceis de receberem manutenção.</p>
<p><strong><acronym title="Don't Repeat Yourself">DRY</acronym> principle</strong> &#8211; <strong>D</strong>on&#8217;t <strong>R</strong>epeat <strong>Y</strong>ourself é um conceito &#8216;criado&#8217; por Dave Thomas (autor do livro <a href="http://www.amazon.com/gp/product/020161622X/103-9776861-2339043?v=glance&#038;n=283155&#038;s=books&#038;v=glance&#038;tagActionCode=billvennersA">The Pragmatic Programmer</a>) que <a href="http://c2.com/cgi/wiki?DontRepeatYourself">parafraseando</a> significa:</p>
<blockquote><p>Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.</p></blockquote>
<p>Como sempre foi dada muita importância pra isso, o framework como um todo foi moldado para evitar a duplicação de código.</p>
<p><strong>Maturidade</strong> &#8211; a linguagem Ruby é bastante madura, foi criada pelo japonês Yukihiro “Matz” Matsumoto em 1993 e teve seu primeiro relase público em 1995(mesmo ano que o Java, por exemplo). Além disso, o framework Rails possui um bom tempo de vida, tendo seu primeiro release público em 2003.</p>
<p><strong>Performance</strong> &#8211; o framework possui uma série de ferramentas e configurações que permitem excelentes ganhos de performance da aplicação e de uma forma simples, sem necessidade de um trabalho braçal por parte do desenvolvedor.</p>
<p><strong>Segurança</strong> &#8211; o framework foi feito com uma grande preocupação nesse requisito, oferecendo ferramentas para tratamento das principais questões de segurança que um site precisa, como XSS e SQL-Injection, facilitando a vida do desenvolvedor e garantindo uma maior integridade da aplicação.</p>
<p><strong>Suporte à vários databases</strong> &#8211; Rails vem com suporte à diversos databases, entre eles os principais bancos de dados do mercado: PostgreSQL, MySQL, Oracle, SQL Server.</p>
<p><strong>IDE&#8217;s</strong> &#8211; já possui uma boa gama de ferramentas, como <a href="http://www.jetbrains.com/ruby/">RubyMine</a>, <a href="http://macromates.com/">TextMate</a>,  <a href="http://www.activestate.com/komodo-ide">Komodo</a>, <a href="http://aptana.com/products/">Aptana</a> e <a href="http://www.sublimetext.com/">Sublime Text</a>.</p>
<p><strong>Suporte nativo para Ajax</strong> &#8211; Ruby on Rails vem por padrão com o framework javascript <a href="http://jquery.com/">jQuery</a>, que permite a fácil adição de <a href="http://jqueryui.com/demos/">avançados recursos de interface</a>, tornando mais fácil a criação de interfaces ricas e com melhor usabilidade.</p>
<p><strong>Foco em testes</strong> &#8211; Ruby on Rails já vem com a ferramenta Test::Unit para automação dos testes da sua aplicação, além de possuir outras ótimas ferramentas como o <a href="http://relishapp.com/rspec">RSpec</a>.</p>
<p><strong>Curva de aprendizado</strong> &#8211; aprender como funciona uma aplicação criada com Rails <a href="http://weblog.rubyonrails.org/2005/10/28/comparing-technology-stacks-of-books">é mais simples que na maioria das outras tecnologias</a> atuais, como Java, PHP, C#/.Net, como também para quem está querendo começar a desenvolver.</p>
<p><strong>Cross-plataform</strong> &#8211;  existe um bom suporte aos principais sistemas operationais do mercado, como Windows, Linux e MacOSX.</p>
<p><strong>OpenSource</strong> &#8211; possui seu código completamente aberto, assim como a absoluta maioria dos plugins e bibliotecas disponíveis para ele. A comunidade é muito ativa e existem literalmente <a href="https://github.com/rails/rails/contributors">centenas de desenvolvedores</a> que contribuem com código para melhorar o framework.</p>
<p><strong>Feedback instantâneo</strong> &#8211; o ciclo de desenvolvimento é instantâneo, uma vez que não requer que o desenvolvedor fique reiniciando seu servidor de aplicação à cada mudança que faz (salvo algumas poucas configurações do framework).</p>
<p>Acredito que os itens acima já tenham sido suficientes para despertar a curiosidade para testá-lo. Se você estiver interessado em fazer alguém testar Ruby on Rails mas não quer ter muito trabalho, recomendo mostrar o vídeo <a href="http://media.rubyonrails.org/video/rails_take2_with_sound.mov">Impressing with Rails 0.13</a>, criado originalmente para ser usado no <a href="http://fisl.org.br">FISL 6.0</a>,  onde <a href="http://www.loudthinking.com">David Heinemeier Hansson</a> mostra como criar um blog em 15 minutos ou o vídeo <a href="http://rubyonrails.org/screencasts/rails3">Introducing Rails 3</a>, do <a href="http://blog.envylabs.com/">Gregg Pollack</a>.</p>
<p>Mas se você ainda não se convenceu que Ruby on Rails pode ser uma boa opção para seu projeto, abaixo seguem alguns links que reforçam o que eu falei:</p>
<p><a href="http://www.eweek.com/article2/0,1895,1880280,00.asp">Ruby on Rails: Making Programmers Happy</a><br />
Entrevista com <a href="http://www.loudthinking.com/">David Heinemeier Hansson</a> no site eWeek.</p>
<p><a href="http://blogs.zdnet.com/BTL/?p=2094">Making programmers more productive</a><br />
<a href="http://www.windley.com">Phil Windley</a> escreve sobre suas impressões sobre Rails.</p>
<p><a href="http://www.hackdiary.com/archives/000071.html">The BBC&#8217;s programme catalogue (on Rails)</a><br />
BBC está usando Rails para o seu catálogo com alguns milhões de shows.</p>
<blockquote><p>&#8230;BBC have allowed me to rapidly prototype and deploy this 7,000,000-row database-backed site in everyone&#8217;s new favourite web framework&#8230;</p></blockquote>
<p><a href="http://www-128.ibm.com/developerworks/linux/library/wa-rubyonrails/?ca=dgr-lnxw01RubyAndJ2EE">Ruby on Rails and J2EE: Is there room for both?</a><br />
Aaron Rustad faz uma comparação entre as principais features da arquitetura do Rails com os tradicionais frameworks J2EE</p>
<p><a href="http://jlaine.net/blog/83/interview-with-david-heinemeier-hansson">Interview with DHH</a><br />
Entrevista com <a href="http://www.loudthinking.com/">David Heinemeier Hansson</a>, criador do Rails.</p>
<p><a href="http://johnwlong.com/slides/gettothepoint/index.html">Get to the point!Development with Ruby and Rails</a><br />
Apresentação mostrando as principais features da linguagem (Ruby em si, não especificamente do framework Rails). Muito bom pra mostrar para seu chefe(desde que ele seja/tenha sido um progrmador).</p>
<p><a href="http://news.com.com/Ruby+on+Rails+chases+simplicity+in+programming/2100-1007_3-5920169.html?tag=nefd.lede">Ruby on Rails chases simplicity in programming</a><br />
Entrevista com <a href="http://www.loudthinking.com/">David Heinemeier Hansson</a>, criador do Rails (saiu também no <a href="http://news.zdnet.com/2100-3513_22-5920169.html?tag=nl.e589">ZDnet</a>).</p>
<p><a href="https://www.sdn.sap.com/irj/sdn/weblogs?blog=/pub/wlg/2111">SAP on Rails, and not on the skids</a><br />
Com apenas algumas linhas de código, <a href="https://weblogs.sdn.sap.com/pub/u/8630">Piers Harding</a> mostra como fazer integração com SAP, mostrando um pouco da flexibilidade do framework.</p>
<p><a href="http://rewrite.rickbradley.com/pages/moving_to_rails">Evaluation: moving from Java to Ruby on Rails for the CenterNet rewrite</a><br />
Case study muito interessante da migração do CenterNet(um grande aplicação da área de sáude) de Java para Ruby on Rails. E por ter sido feito em 6 vezes menos tempo (8 dias contra 6 semanas do Java) com uma redução de 20:1 para código, eu diria que sim, é uma redução <strong>bem</strong> relevante. Antes que alguns trolls apareçam criticando, sim, migrar uma aplicação é mais rápido do que desenvolver ela do zero, mas convenhamos, 20:1 é um número incontestável.</p>
<p><a href="http://www.onjava.com/lpt/a/6334">Ruby the Rival</a><br />
Entrevista com alguns desenvolvedores experientes, mostrando sua visão da linguagem Ruby.</p>
<p><a href="http://wiki.rubyonrails.org/rails/pages/RealWorldUsage">Ruby on Rail &#8211; Real World Usage</a><br />
Uma lista com algumas empresas que já estão usando Rails em aplicações reais.</p>
<p><a href="http://www.eweek.com/article2/0,1895,1880199,00.asp">Ruby on Rails Dev Framework on Track for Growth</a></p>
<p><a href="http://www-128.ibm.com/developerworks/linux/library/l-rubyrails/">Fast-track your Web apps with Ruby on Rails</a><br />
David Mertz demonstra através de uma mini-aplicação algumas vantagens do framework.</p>
<p>E isso pode ser o fim dos outros frameworks, seja Java, .Net, PHP, para desenvolvimento mainstream? Dificilmente. Que todo mundo abandonará Java e migrar para Rails? Com certeza, não.</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=123&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2011/04/19/ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://media.rubyonrails.org/video/rails_take2_with_sound.mov" length="54364199" type="video/quicktime" />
		</item>
		<item>
		<title>Update Cadabra!</title>
		<link>http://plentz.org/2009/07/19/update-cadabra/?utm_source=rss&#038;utm_medium=rss&#038;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&#038;utm_medium=rss&#038;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>5</slash:comments>
		</item>
		<item>
		<title>Updating Gems</title>
		<link>http://plentz.org/2008/10/16/updating-gems/?utm_source=rss&#038;utm_medium=rss&#038;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&#038;utm_medium=rss&#038;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&#038;utm_medium=rss&#038;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&#038;utm_medium=rss&#038;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&#038;utm_medium=rss&#038;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&#038;utm_medium=rss&#038;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[java]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[Unsorted]]></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&#038;utm_medium=rss&#038;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[java]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[Unsorted]]></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&#038;utm_medium=rss&#038;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&#038;utm_medium=rss&#038;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&#038;utm_medium=rss&#038;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&#038;utm_medium=rss&#038;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>
	</channel>
</rss>

