<?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>Valério Farias &#187; Ruby</title>
	<atom:link href="http://valeriofarias.com/tag/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://valeriofarias.com</link>
	<description>(Tecnologia + Negócios) = :)</description>
	<lastBuildDate>Tue, 29 Mar 2011 21:07:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Linguagem Ruby e Educação: um acordo feito no céu (tradução)</title>
		<link>http://valeriofarias.com/linguagem-ruby-e-educacao-um-acordo-feito-no-ceu-traducao/</link>
		<comments>http://valeriofarias.com/linguagem-ruby-e-educacao-um-acordo-feito-no-ceu-traducao/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 11:11:33 +0000</pubDate>
		<dc:creator>Valério Farias</dc:creator>
				<category><![CDATA[Pra refletir]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[aprender]]></category>
		<category><![CDATA[computação]]></category>
		<category><![CDATA[criatividade]]></category>
		<category><![CDATA[diversão]]></category>
		<category><![CDATA[educação]]></category>
		<category><![CDATA[faculdade]]></category>
		<category><![CDATA[linguagem]]></category>
		<category><![CDATA[primeira]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://valeriofarias.com/?p=366</guid>
		<description><![CDATA[É importante não generalizar a linguagem Ruby como se fosse algo que resolverá todos os seus problemas. Ela tem propósito geral, mas será adequada em determinados contexto e outros não, como todas as outras linguagens. O propósito desse post do Kate Cunningham que eu traduzi é mostrar que as características do Ruby são muito harmônicas [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>É importante não generalizar a linguagem Ruby como se fosse algo que resolverá todos os seus problemas. Ela tem propósito geral, mas será adequada em determinados contexto e outros não, como todas as outras linguagens. O propósito desse post do Kate Cunningham que eu traduzi é mostrar que as características do Ruby são muito harmônicas com as características necessárias em um ambiente efetivo de aprendizado. Isso não quer dizer que o aluno deva estacionar no Ruby. Ele terá o caminho facilitado para o mundo da programação com Ruby, mas isso será só o primeiro passo. Ele deverá sim, aprender outras linguagens, pois é a única forma de se aprimorar como profissional de uma área tão dinâmica. O texto original você encontra <a href="http://rubylearning.com/blog/2010/08/11/ruby-programming-and-education-a-match-made-in-heaven/">aqui</a>. Fique agora com a tradução:</p></blockquote>
<p>A linguagem Ruby tem recebido muita atenção na última década, especialmente com o advento do Ruby on Rails em 2005. Enquanto a blogosfera está utilizando Ruby a muito tempo, vamos nos perguntar como, exatamente, a linguagem Ruby é propícia para um ambiente educacional.</p>
<div id="attachment_369" class="wp-caption alignright" style="width: 254px"><a href="http://valeriofarias.com/wp-content/uploads/2010/08/ruby-logo-r.png"><img class="size-full wp-image-369" title="ruby-logo-r" src="http://valeriofarias.com/wp-content/uploads/2010/08/ruby-logo-r.png" alt="Ruby Programming Language" width="244" height="299" /></a><p class="wp-caption-text">Copyright (C) 2008 Ruby Association LLC</p></div>
<p>Claro, podemos ir para a relevância da linguagem Ruby, pois se você está recebendo treinamento em um ambiente educacional para se tornar um programador de computador, e você não sabe o Ruby, então você está ficando cada vez mais fora do circuito. No entanto, linguagens de programação vêm e vão, e educação não é sobre as tendências, é sobre as idéias que sustentam o valor no decorrer dos anos.</p>
<p>Vamos então olhar para a filosofia de linguagem Ruby e ver como é propício à aprendizagem. Por um lado, Ruby é flexível. Ele não tem a rigidez de Java ou PHP. Em um ambiente que maximiza o aprendizado, a flexibilidade é fundamental. E Ruby é tão flexível quanto possível. Yukihiro Matsumoto, o  criador da linguagem Ruby, notou o que ele estava pensando quando ele começou a trabalhar com linguagem de programação: &#8220;É engraçado, quando eu usei PHP para desenvolver ou as coisas que eu fiz em Java, eu estava sempre à procura de algo mais.&#8221;</p>
<p>Outra grande coisa sobre Ruby é seu reforço da capacidade para a criatividade. Como muitos programadores Ruby notaram, Ruby é mais alinhado com o pensamento humano. Desta forma, é muito fácil de usar. E precisamente porque é mais fácil de usar, é mais versátil quando se trata de ser criativo.</p>
<p>A apresentação de <a href="http://www.slideshare.net/vishnu/the-ruby-programming-language-or-why-are-you-wasting-brain-power">slides sobre a linguagem Ruby</a> explica como Ruby auxilia a criatividade. Afirma que os seres humanos perdem produtividade quando são forçados por &#8220;tarefas repetitivas, tarefas desnecessariamente complexas  e resolvendo problemas que não estão dentro do domínio de aplicação.&#8221; Desde que Ruby efetivamente se livra dessas tarefas repetitivas e de tarefas voltadas para máquinas, há mais espaço aberto para ser criativo. Com os alunos, especialmente, a produção criativa é a chave para a aprendizagem de forma eficaz.</p>
<p>Um aspecto do processo de aprendizagem que é absolutamente crítico para a eficácia educacional é diversão. Nós geralmente não pensamos sobre a diversão quando nós pensamos sobre a educação. Mas reflita sobre seus próprios anos escolares no passado. Se você pensar bem, você percebe que os assuntos que você aprendeu mais e reteve o conteúdo eram aqueles em que você estava se divertindo. Este divertimento, claro, resulta em parte da criatividade. Quando você está sendo produtivo, você está se divertindo.</p>
<p>Ao contrário de outras linguagens de programação, você pode fazer muita coisa com Ruby, mesmo se você está apenas nos estágios iniciais de aprendizagem. Para os estudantes, o processo de aprendizagem é frustrante e é um pouco prejudicado quando pequenos erros aparecem no caminho de chegar aos conceitos maiores. Linguagens de programação como C++ podem dificultar o aprendizado dos conceitos maiores porque pequenos erros no código sempre aparecem durante o processo. Já usando o  Ruby o aluno não passa por essas pequenas dificuldades quando está iniciando o aprendizado.</p>
<p>Naturalmente, estes são apenas indicações básicas de que Ruby é a melhor ferramenta de aprendizagem para os interessados em programação de computadores, especialmente os iniciantes. No entanto, assim como na educação como um todo, em que mudanças conceituais básicas no processo de aprendizagem levam os alunos para as melhores práticas na aprendizagem,  Ruby oferece a possibilidade de uma aprendizagem fácil, divertida, criativa, por força da simples virtude de que a linguagem foi feita para pragmaticamente funcionar dessa forma. Em análise final, Ruby foi feito para estudantes, jovens e idosos, iniciantes e mais avançados.</p>
<p>Por Kate Cunningham</p>
]]></content:encoded>
			<wfw:commentRss>http://valeriofarias.com/linguagem-ruby-e-educacao-um-acordo-feito-no-ceu-traducao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Papo-de-Nerd: Nerd 2.0</title>
		<link>http://valeriofarias.com/papo-de-nerd-nerd-2-0/</link>
		<comments>http://valeriofarias.com/papo-de-nerd-nerd-2-0/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 19:26:44 +0000</pubDate>
		<dc:creator>Valério Farias</dc:creator>
				<category><![CDATA[Papo de Nerd]]></category>
		<category><![CDATA[Ágil]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[comunidade]]></category>
		<category><![CDATA[confraternização]]></category>
		<category><![CDATA[congresso]]></category>
		<category><![CDATA[Evento]]></category>
		<category><![CDATA[gestao2.0]]></category>
		<category><![CDATA[nerd2.0]]></category>
		<category><![CDATA[papodenerd]]></category>
		<category><![CDATA[Pessoas]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rubyonrails]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[TI]]></category>
		<category><![CDATA[TI2.0]]></category>

		<guid isPermaLink="false">http://valeriofarias.com/?p=346</guid>
		<description><![CDATA[
Participei do OxenteRails 2009, Rails Summit 2009, CearáOnRails 2009 e agora OxenteRails 2010 e ficou claro que uma nova cultura nerd está se espalhando cada vez mais rápido. Essa nova cultura nerd eu chamo de Nerd 2.0.
O ponto chave é que não dá mais para ficar somente na frente do computador (nerd 1.0). Agora o [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://valeriofarias.com/wp-content/uploads/2010/08/oxenterails2010.jpg"><img class="alignright size-full wp-image-347" title="oxenterails2010" src="http://valeriofarias.com/wp-content/uploads/2010/08/oxenterails2010.jpg" alt="" width="238" height="125" /></a><br />
Participei do OxenteRails 2009, Rails Summit 2009, CearáOnRails 2009 e agora OxenteRails 2010 e ficou claro que uma <strong>nova cultura nerd</strong> está se espalhando cada vez mais rápido. Essa nova cultura nerd eu chamo de Nerd 2.0.</p>
<p>O<strong> ponto chave</strong> é que não dá mais para ficar somente na frente do computador (nerd 1.0). Agora o <strong>Nerd</strong> tem que ser <strong>sociável</strong>, tem que <strong>equilibrar</strong> seu gosto por <strong>tecnologia</strong> com seus<strong> relacionamentos interpessoais</strong>, seja com amigos, trabalho ou o que for (Nerd 2.0).</p>
<p>A tecnologia é importante sim, mas ela deve estar sempre em função das pessoas e nunca o contrário.</p>
<p>Durante o OxenteRails 2010, uma das <strong><em>booth babes</em></strong> me falou que se surpreendeu com os participantes, pois eles não se isolavam. Sempre tinha alguém para tirar alguma dúvida com elas, para pedir para colocar os postits no quadro de feedback, para chamar para jogar video game junto com eles, para tirar fotos, ou seja, estavam sempre interagindo. Ela complementou que a idéia distorcida que ela tinha do nerd anti-social mudou completamente. <img src='http://valeriofarias.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Outro depoimento foi da<strong> representante do SEBRAE</strong> que chegou no evento e imaginou: Como é que eu vou fazer para explicar os recursos que posso oferecer num local que só tem nerd? Mas o tempo foi passando e logo<br />
ela detectou que ali tinha consultores, professores, desenvolvedores, ou seja, Nerds sociáveis e produtivos.</p>
<p>A própria <strong>estrutura do evento</strong> foi organizada para facilitar <strong>interações entre indivíduos</strong>. O <strong>Ignite OxenteRais</strong> que começou na quinta-feira é um ótimo exemplo disso. O Ignite é um mini evento informal em que as pessoas palestravam durante 5 minutos, trocavam idéias e faziam amizades. Nos dias 6 e 7 de agosto, no final da programação oficial, os participantes se reuniam em algum barzinho da cidade, esse outro mini evento se chama <strong>#horaextra</strong>.</p>
<p>Alguns dos <strong>nerds 2.0</strong> que estavam no Oxente Rails tinham inclusive vocações artísticas. Nesse quesito eu cito o Cukier que recebeu o prêmio da mais bela voz, com o <a href="http://www.raphaelcosta.net/2010/08/oxente-rails-2010-forro-do-elomar/">Forró do Elomar</a> e também a <a href="http://www.youtube.com/watch?v=61w7ufM-Hhs">Banda Plataformatec </a>fazendo uma performance com vocal e guitarra em um jogo do playstation.</p>
<p>Cito agora o <a href="http://www.twitter.com/henriquebastos">Henrique Bastos</a>: Esse ambiente de confraternização permite ir além do que ampliar a rede de contatos. Permite a criação de uma <strong>rede de confiança</strong>, que é muito mais significativo para a comunidade e para cada participante.</p>
<p>Um conjunto de idéias bem significativas que representa essa nova visão você pode encontrar no <a href="http://smallactsmanifesto.org/">Manifesto Pequenas Ações (Small Acts)</a>, com o slogan: Pequenas ações fazem grandes revoluções.  Qualquer um pode se cadastrar e se associar a esse manifesto.</p>
<p>Não podia deixar de colocar aqui outro ponto: A participação feminina no evento. Apesar da grande maioria serem homens, tivemos <a href="http://twitter.com/cecifernandes">Cecilia Fernandes</a> palestrando sobre metodologias ágeis,  <a href="http://tcamilo.wordpress.com/">Tahis Camilo</a> que mostrou o dia-a-dia do seu trabalho na Hashrocket e por fim, a Gleide, que palestrou sobre <a href="http://pt.wikipedia.org/wiki/TI_verde">Ti Verde</a> na desconferência. Portanto o Nerd 2.0 não pode mais dizer que tecnologia é coisa de homem. As mulheres, apesar de estarem em pequeno número, mandaram bem!</p>
<p>E então? Tá esperando o que? <img src='http://valeriofarias.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Se você anda passando tempo demais no computador e se esquece da importância da socialização (Nerd 1.0)  fica aqui o alerta: Faça um <strong>Git Clone</strong> desse novo formato de ver o mundo da tecnologia e atualize a sua <strong>visão Nerd</strong> para a <strong>versão 2.0.</strong></h2>
<p><strong>Bônus:</strong> Se você ainda tem um pouco de dificuldade de fazer o upgrade para a versão Nerd 2.0, não entre em pânico. Essa mudança pode ser feita de forma gradual. Portanto, se essa idéia fez com que você se preocupasse, tente descontrair um pouco. Para isso, acesse <a href="http://fucas.heroku.com">Fuças &#8211; a revista de fofocas nerd criada pela comunidade do Piauí</a>. Outro site que vai te ajudar a se descontrair e ganhar confiança para o upgrade é o <a href="http://nerdson.com/blog/">site de tirinhas nerd: nerdson</a>.</p>
<p><strong>Bônus 2:</strong> Não deixem de acessar também o post criado por Alexandre Gomes:  <a href="http://blog.seatecnologia.com.br/2009/01/12/manifesto-2-0">Manifesto 2.0</a></p>
<p>Quem tiver algum depoimento a respeito desse tema pode deixar seu comentário aqui.</p>
<p>Um abraço e até o próximo Papo de Nerd!</p>
]]></content:encoded>
			<wfw:commentRss>http://valeriofarias.com/papo-de-nerd-nerd-2-0/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Aprenda BDD Jogando Dados &#8211; ebook</title>
		<link>http://valeriofarias.com/aprenda-bdd-jogando-dados-ebook/</link>
		<comments>http://valeriofarias.com/aprenda-bdd-jogando-dados-ebook/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 15:46:31 +0000</pubDate>
		<dc:creator>Valério Farias</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[diversão]]></category>
		<category><![CDATA[Rspec]]></category>
		<category><![CDATA[Shoes]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://valeriofarias.com/?p=339</guid>
		<description><![CDATA[Olá entusiasta do Ruby! Olá entusiasta de BDD!  Te convido a ler, baixar, modificar, clonar ou fazer o que quiser com o livro: Aprenda BDD jogando Dados!
Esse mini-livro é uma jornada linha a linha, teste por teste, utilizando a técnica do Desenvolvimento Orientado a Comportamento (Behavior Driven Development) em um projeto muito interessante: Simulação dos [...]]]></description>
			<content:encoded><![CDATA[<p>Olá entusiasta do Ruby! Olá entusiasta de BDD!  Te convido a ler, baixar, modificar, clonar ou fazer o que quiser com o livro: Aprenda BDD jogando Dados!</p>
<p>Esse mini-livro é uma jornada linha a linha, teste por teste, utilizando a técnica do Desenvolvimento Orientado a Comportamento (Behavior Driven Development) em um projeto muito interessante: Simulação dos dados do jogo War!</p>
<p>Eu escrevi esse pequeno livro para aprender BDD e RSpec, por isso eu tinha que falar sobre algo simples e de preferência que fosse divertido. Então eu pensei: Por que não jogar dados! Porque não jogar dados do jogo War!<br />
Então aqui está: Aprenda BDD jogando dados!</p>
<p>A aplicação que nós criaremos juntos usa duas classes: Dice e WarDice. No primeiro capítulo eu construo o arquivo RSpec da classe Dice e a classe Dice simultaneamente e passo a passo até todos os testes tornarem-se verdes.</p>
<p>No segundo capítulo eu continuo o desenvolvimento com a classe WarDice, aquela que fará a simulação de cada dado do jogo war!</p>
<p>Finalmente, no terceiro capítulo eu uso as classes criadas em uma divertida aplicação feita em shoes. A filosofia desse livro é aprender fazendo coisas divertidas. Em uma palavra: Experimentação.</p>
<p>Então eu espero que você aproveite esse livro simples mas também muito instrutivo. Os testes usados nesse livro não são uma solução definitiva. Eles são somente possibilidades no meio de outras. Como eu disse, eu o escrevi para aprender RSpec. Você pode enviar sugestões, clonar o projeto, modificá-lo e codificá-lo de outra forma. Quem sabe não faremos juntos a versão 2.0 desse livro <img src='http://valeriofarias.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Fique agora com o livro:</p>
<div id="__ss_4798578" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Aprenda bdd-jogando-dados-ebook" href="http://www.slideshare.net/valeriofarias/aprenda-bddjogandodadosebook">Aprenda bdd-jogando-dados-ebook</a></strong><object id="__sse4798578" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=aprenda-bdd-jogando-dados-ebook-100720143458-phpapp01&amp;stripped_title=aprenda-bddjogandodadosebook" /><param name="name" value="__sse4798578" /><param name="allowfullscreen" value="true" /><embed id="__sse4798578" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=aprenda-bdd-jogando-dados-ebook-100720143458-phpapp01&amp;stripped_title=aprenda-bddjogandodadosebook" name="__sse4798578" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/valeriofarias">Valério  Farias</a>.</div>
</div>
<p>O código fonte completo da aplicação você pode baixar em:<br />
<a href="http://github.com/valeriofarias/shoes-war-dice">http://github.com/valeriofarias/shoes-war-dice</a></p>
<p>O texto completo do livro e o código fonte do gerador de livros você pode baixar em:<br />
<a href="http://github.com/valeriofarias/learn-bdd-playing-dice-book">http://github.com/valeriofarias/learn-bdd-playing-dice-book</a></p>
<p>se preferir pode também baixar a <strong>versão em inglês</strong> do livro:<br />
<a href="http://valeriofarias.com/learn-bdd-playing-dice-ebook/">http://valeriofarias.com/learn-bdd-playing-dice-ebook/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://valeriofarias.com/aprenda-bdd-jogando-dados-ebook/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Learn BDD Playing Dice &#8211; ebook</title>
		<link>http://valeriofarias.com/learn-bdd-playing-dice-ebook/</link>
		<comments>http://valeriofarias.com/learn-bdd-playing-dice-ebook/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 15:32:10 +0000</pubDate>
		<dc:creator>Valério Farias</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Dice]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Rspec]]></category>
		<category><![CDATA[Shoes]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://valeriofarias.com/?p=332</guid>
		<description><![CDATA[Hello Ruby enthusiast! Hello BDD enthusiast! Welcome to this journey line by line, test by test, using the Behaviour Driven Development technique in a interesting project: War Dice Simulation!
I wrote this tiny book to learn BDD and RSpec for myself. I would want to start with a little example. And if was possible with a [...]]]></description>
			<content:encoded><![CDATA[<p>Hello Ruby enthusiast! Hello BDD enthusiast! Welcome to this journey line by line, test by test, using the Behaviour Driven Development technique in a interesting project: War Dice Simulation!</p>
<p>I wrote this tiny book to learn BDD and RSpec for myself. I would want to start with a little example. And if was possible with a funny example too. Then I thought: Why not playing dice! Why not playing war dice! Then there you are: Learning BDD playing dice!</p>
<p>The app that we&#8217;ll create together uses two classes: Dice and WarDice.</p>
<p>The first chapter I start to construct the RSpec file of Dice class and the Dice class simultaneously and step by step until all of the tests become green.</p>
<p>The second chapter I go on with the WarDice class, that is a simulation of each dice of war game!</p>
<p>Finally, the third chapter I use the classes in a funny shoes application.</p>
<p>The philosophy of this book is to learn making funny things. In one word: Experimentation. Then I hope you enjoy this simple but also instructive book.</p>
<p>The tests used in this book aren&#8217;t a silver bullet. They are only a way between some others. How I told, I made to learn RSpec. You can send suggests, clone the project, modify it and codify in other ways. Who knows we&#8217;ll playing together in the 2.0 version of this book <img src='http://valeriofarias.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Now just read the book and have fun!</p>
<div id="__ss_4798538" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Learn bdd-playing-dice-book" href="http://www.slideshare.net/valeriofarias/learn-bddplayingdicebook">Learn bdd-playing-dice-book</a></strong><object id="__sse4798538" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=learn-bdd-playing-dice-book-100720142952-phpapp01&amp;stripped_title=learn-bddplayingdicebook" /><param name="name" value="__sse4798538" /><param name="allowfullscreen" value="true" /><embed id="__sse4798538" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=learn-bdd-playing-dice-book-100720142952-phpapp01&amp;stripped_title=learn-bddplayingdicebook" name="__sse4798538" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/valeriofarias">Valério  Farias</a>.</div>
</div>
<p>The complete source code of application you can download in<br />
<a href="http://github.com/valeriofarias/shoes-war-dice/tree">http://github.com/valeriofarias/shoes-war-dice/tree</a></p>
<p>The complete ebook text and source code you can download in:<br />
<a href="http://github.com/valeriofarias/learn-bdd-playing-dice-book">http://github.com/valeriofarias/learn-bdd-playing-dice-book</a></p>
]]></content:encoded>
			<wfw:commentRss>http://valeriofarias.com/learn-bdd-playing-dice-ebook/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Programação Funcional e Looping (tradução)</title>
		<link>http://valeriofarias.com/programacao-funcional-e-looping/</link>
		<comments>http://valeriofarias.com/programacao-funcional-e-looping/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 01:54:35 +0000</pubDate>
		<dc:creator>Valério Farias</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[each]]></category>
		<category><![CDATA[iterações]]></category>
		<category><![CDATA[linguagem funcional]]></category>
		<category><![CDATA[loop]]></category>

		<guid isPermaLink="false">http://valeriofarias.com/?p=314</guid>
		<description><![CDATA[Quem vem linguagens como C, Java, Delphi, C# e usa a linguagem Ruby pela primeira vez, tende a programar em Ruby do mesmo jeito que programava na linguagem que já era fluente. Lendo o post abaixo você perceberá que linguagens que tem características  funcionais, como o Ruby, possibilitam formas próprias de organizar o código (Jeito [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Quem vem linguagens como C, Java, Delphi, C# e usa a linguagem Ruby pela primeira vez, tende a programar em Ruby do mesmo jeito que programava na linguagem que já era fluente. Lendo o post abaixo você perceberá que linguagens que tem características  funcionais, como o Ruby, possibilitam formas próprias de organizar o código (Jeito Ruby) , mais especificamente nesse texto, escrito por Jon Dahl, você verá as formas mais eficientes de fazer iterações (loops) em Ruby. A versão original você encontra <a href="http://railspikes.com/2008/7/29/functional-loops-in-ruby-each-map-inject-select-and-for">aqui</a>. Fique agora com a tradução:</p></blockquote>
<p>Se você é um programador, você provavelmente já trabalhou com um ou mais  livros que te ensinava a sintaxe de uma nova linguagem. Eu tive essa  experiência com uma meia dúzia de linguagens, como C, Javascript e Perl.<br />
Estes livros tipicamente introduzem loops no meio da discussão de  sintaxe, depois de tipos de dados e controle de fluxo, mas antes de I/O e  de recursos avançados.</p>
<p>Loops são quase sempre apresentadas de  acordo com esta fórmula:</p>
<p>Texto introdutório: &#8220;E se você quiser fazer uma operação mais de uma  vez&#8221;?<br />
Introduz o loop while, mostrando a diferença entre do while e  while do.<br />
Apresenta o laço for, o primo louco do while.</p>
<p>(Bonus)  Introduz o laço foreach se a linguagem é suficientemente de alto nível.  E é isso &#8211; você sabe como fazer um loop através de código e é hora de  seguir em frente.</p>
<p>Não tão rápido. Se você for sortudo o bastante para usar uma  linguagem que possui traços de programação funcional, você não deve usar  um laço dessa maneira.</p>
<p><strong>O ponto</strong><br />
De agora em diante, eu vou  usar Ruby para exemplos, mas este artigo não é sobre Ruby. É sobre a  transição de loops primitivos para iterar usando coleções, e sobre a  transição de funções genéricas (como each) para funções mais específicas  (como map).</p>
<p><strong>De loops para métodos que percorrem a própria lista</strong><br />
Durante os  últimos meses, estive trabalhando no Tumblon, uma aplicação Rails de porte  médio. Eu trabalhei em 15-20 aplicações Ruby nos últimos três anos,  provavelmente, totalizando 50.000 linhas de código Ruby.</p>
<p>Eu só usei um laço primitivo uma vez.</p>
<p>Esse laço primitivo era  um loop{} loop, sempre percorrer uma lista tarefas à procura do que  executar. Em outras palavras, um laço sem nenhuma condição de saída além  de ^C, ou uma falha do servidor.</p>
<p>Eu só usei um loop simples em um caso porque o conceito each  geralmente é uma opção melhor. Essa implementação Ruby será familiar  para quem já viu código Ruby antes:</p>
<pre class="brush: ruby; ">

[&quot;horse&quot;, &quot;pig&quot;, &quot;cow&quot;].each  do |animal|
puts &quot;Old MacDonald has a #{animal}&quot;
end
</pre>
<p>(Sim, eu tenho uma  criança pequena.)</p>
<p>Isto é muito mais enxuto do que as alternativas  usando for e while. Ele representa melhor o que estamos fazendo: não  estamos iterando com uma condição de saída, estamos interagindo entre os  elementos de uma matriz. Mas e se você quiser fazer algo um número fixo  de vezes? Você pode interpretar isso como percorrer a seguinte lista:  [1,2,3,4,5,6,7,8,9,10].each{}. Mas claro que Ruby dispõe de uma versão  mais simples para isso: 10.times{}.</p>
<p>Portanto, se seu loop rodar através de uma lista de algum tipo, each  é a melhor abstração para esse tipo de problema. E, na minha  experiência de construção de aplicações Ruby, a maioria dos loops  percorrem listas. Parsing XML? Iterando por uma lista. Somando números?  Iterando por uma lista. Leitura em um arquivo texto? Lendo o STDIN?  Trabalhando com linhas em um banco de dados? Iterando por uma lista.  Isso é o que o loop each faz bem.</p>
<p><strong>Além do arr.each</strong><br />
Mas each não é a palavra final. É um passo acima  das primitivas for ou while quando trabalha com o conjunto de valores,  mas muitos loops each devem ser substituídos por outros métodos de  array, como map, inject e select.</p>
<p>Quando each é útil? Simples: quando você quiser criar efeitos  externos ao array, como salvar no banco de dados, imprimir um resultado  na tela, ou enviar uma chamada de serviço web. Nestes casos, você não  está preocupado com o valor de retorno; você deseja alterar o estado na  tela, o disco, o banco de dados, ou outra coisa. Dê uma olhada neste  código.</p>
<pre class="brush: ruby; ">

User.find(:all).each do |user|
Notification.deliver_email_newsletter(user)
end
</pre>
<p>Você não necessita que o código acima retorne valor, você só precisa que o e-mail seja entregue.</p>
<p>Mas não use each se você quer extrair algum  valor novo de um array. Em vez disso, dê uma olhada em outros três  métodos poderosos: map, inject e select.</p>
<p>Para entender vamos analisar o código abaixo que itera por um array e  cria um novo array com elementos que correspondem a determinada  condição, usando each.</p>
<pre class="brush: ruby; ">

active_users = []
users.each do |user|
active_users &lt;&lt; user if user.active?
end
active_users
</pre>
<p>A primeira e última linhas são feias. Por  que você tem que inicializar e retornar active_users? Resposta: porque  este é um abuso (má utilização) do método each. Nesse caso é muito  melhor você usar select (ou seu equivalente, find_all):</p>
<pre class="brush: ruby; ">

users.select do |user|
user.active?
end
</pre>
<p>Usando  select o código fica menor, mais fácil de entender e menos propenso a  erros. E mais importante, ele claramente encapsula um uso comum de each  (e looping em geral).</p>
<p>Duas outras funções-chave: map e inject (ou reduce) &#8211; complementam  select e seguem um padrão semelhante. E não é de surpreender que eles  formam a base do paradigma mapreduce para processamento distribuído. Eu  escrevi mais sobre map e reduce em outro artigo, e aqui é um atalho para  saber quando usar essas funções:</p>
<table>
<tbody>
<tr>
<td><strong>Valor de retorno</strong></td>
<td><strong>Função</strong></td>
</tr>
<tr>
<td>Nova matriz com o mesmo número de valores</td>
<td>map</td>
</tr>
<tr>
<td>Nova matriz composta de uma parte da matriz velha</td>
<td>select</td>
</tr>
<tr>
<td>Valor único (embora este valor possa ser um array)</td>
<td>inject</td>
</tr>
<tr>
<td>Nenhum</td>
<td>each</td>
</tr>
</tbody>
</table>
<p><strong>Resumo</strong><br />
Use each para mudar o estado. Caso contrário use métodos  funcionais de matriz que retorna um valor. Dessa forma seu código ficará  mais limpo e menos propenso a falhas.</p>
<p><strong>Aprendendo a refatorar</strong></p>
<ol>
<li> Inicializar  um valor vazio, ou matriz, ou o que quiser (new_arr = [])</li>
<li> arr.each, alterando o valor inicializado</li>
<li> Devolver o valor (return  new_arr)</li>
</ol>
<p>Sempre que você detectar esse padrão, você sabe que existe um laço each que precisa ser substituído.</p>
]]></content:encoded>
			<wfw:commentRss>http://valeriofarias.com/programacao-funcional-e-looping/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Papo-de-Nerd: Conversa sobre linguagens de programação</title>
		<link>http://valeriofarias.com/papo-de-nerd-conversa-sobre-linguagens-de-programacao/</link>
		<comments>http://valeriofarias.com/papo-de-nerd-conversa-sobre-linguagens-de-programacao/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 02:35:30 +0000</pubDate>
		<dc:creator>Valrio Farias</dc:creator>
				<category><![CDATA[Papo de Nerd]]></category>
		<category><![CDATA[nerd]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://geyserway.com/?p=155</guid>
		<description><![CDATA[No Papo de Nerd de hoje, vou ampliar um pouco o paradigma: Além dos surtos de nerdice que eu comecei no primeiro artigo. Vou incluir também algo parecido com aquelas conversas de boteco, que depois de algumas doses, cada qual quer ser mais filósofo que o outro   . Mais particularmente nesse post vou [...]]]></description>
			<content:encoded><![CDATA[<p>No Papo de Nerd de hoje, vou ampliar um pouco o paradigma: Além dos <strong>surtos de nerdice</strong> que eu comecei no <a href="http://valeriofarias.com/desenhando-com-lado-direito-cerebro/">primeiro artigo</a>. Vou incluir também algo parecido com aquelas <strong>conversas de boteco</strong>, que depois de algumas doses, cada qual quer ser mais filósofo que o outro <img src='http://valeriofarias.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . Mais particularmente nesse post vou mostrar <strong>conversas</strong> sobre temas gerais do <strong>dia-a-dia</strong> de um <strong>desenvolvedor web</strong> via Instant Messenger.</p>
<p>Esse papo de nerd virtual foi sobre <strong>linguagens de programação</strong>. Mais particularmente <strong>Python</strong> e <strong>Ruby</strong>. A conversa foi com meu amigo <strong>Macelo.</strong> Fique agora com o texto:</p>
<blockquote><p><strong>Macelo diz:<br />
</strong> O que você Acha do Python?<br />
É o concorrente do Ruby.</p>
<p><strong>Valério diz:<br />
</strong> Não necessariamente o concorrente.<br />
Tem filosofia um pouco diferente do Ruby, mas também é uma linguagem dinâmica,<br />
quase que totalmente orientada a objetos, características parecidas com o Ruby.<br />
<strong><br />
Macelo diz:</strong><br />
Certo, mas não deixa de ser o concorrente.</p>
<p><strong>Valério diz:<br />
</strong>A <a href="http://python-history-pt-br.blogspot.com/2009/04/filosofia-do-python.html">filosofia do Python</a> é dar UMA solução elegante para cada problema. É ser simples e direto.</p>
<p>A <a href="http://en.wikipedia.org/wiki/Ruby_(programming_language)">filosofia do ruby</a> e dar produtividade e diversão para o programador. Dar prioridade ao programador ao invés do computador (linguagem humana).<br />
Os dois tem suas vantagens e desvantagens.</p>
<p><strong>Macelo diz:<br />
</strong> Como tudo na vida.<br />
Mas, do jeito que você diz, faz parecer que o Ruby é bem mais vantajoso.</p>
<p><strong>Valério diz:<br />
</strong> Não necessariamente.<br />
O Python tem o django como framework para aplicativos web, que é muito bem difundido.<br />
É o equivalente ao Rails, mas foi feito com princípios e necessidades próprias.<br />
Cada ferramenta vai ser melhor utilizada em determinados momentos e contextos.</p>
<p>Essa questão de ser concorrente ou não, está muito ligado ao fato de vermos alguns fatos  da vida de forma binária: ou 0 ou 1, ou certo ou errado, ou ganha ou perde. O ponto que quero chegar é que existem outras formas de você olhar para o mundo ao redor e seus recursos. Para você ganhar, não necessariamente o outro tem que perder. Os dois podem ganhar! No caso de linguagens de programação, se eu olhar para elas como mera competição (qual a melhor!) Estarei deixando de lado um universo de possibilidades. Quanto mais pontos de vista e linguagem de programação um programador experimentar e dominar melhor!  Eu <strong>escolhi</strong> o <strong>Ruby</strong> nesse momento porque a <strong>comunidade</strong> é <strong>explosiva</strong> e de <strong>mente aberta</strong>, muitos dos programadores Ruby, conversam sobre ou dominam outras linguagens, além é claro do <strong>código elegante</strong>.</p>
<p><strong>Macelo diz:<br />
</strong> haaaaaa.<br />
Assim faz parecer melhor as duas partes.</p>
<p><strong>Valério diz:<br />
</strong> Em última instância a minha escolha por estudar Ruby é pessoal. Sempre que a gente for para a parte técnica, acaba caindo nessa situação do &#8220;depende do caso&#8221;.</p>
<p><strong>Macelo diz:<br />
</strong> Uhum.<br />
Notei isso.<br />
Um amigo meu programa em Python, e usa o bloco de notas ..</p>
<p><strong>Valério diz:</strong><br />
Você pode usar Python, mas não use o bloco de notas.<br />
Baixe algum aplicativo mais adequado para programação:</p>
<ul>
<li>notepad ++ é uma ótima opção para Windows</li>
<li>no Linux eu uso o gedit</li>
<li>no mac você pode usar o TextMate</li>
</ul>
<p>Se quiser seguir em frente com o Python acesse o <a href=" http://elcio.com.br/">blog de Elcio</a>. Ele tem uma empresa e a base dela é Python.</p>
<p><strong>Marcelo diz:</strong><br />
Beleza, falou!</p>
<p><strong>Valério diz:<br />
</strong>Falou!</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://valeriofarias.com/papo-de-nerd-conversa-sobre-linguagens-de-programacao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acessando o Twitter via Interactive Ruby Shell (irb)</title>
		<link>http://valeriofarias.com/twitter-via-irb-ruby/</link>
		<comments>http://valeriofarias.com/twitter-via-irb-ruby/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 05:36:40 +0000</pubDate>
		<dc:creator>Valrio Farias</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[irb]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://geyserway.com/?p=127</guid>
		<description><![CDATA[Estava procurando por uma solução simples em Ruby para fazer o update de mensagens via irb.
Achei as seguintes opções de classes Ruby:

Twitter -&#62; John Nunemaker ( essa é a mais completa )
Twittery &#8211; uma classe bem simplista que faz upload de fotos pela TwitPic&#8217;s API. Esse projeto é administrado por Chris Ledet

Eu tomei como base [...]]]></description>
			<content:encoded><![CDATA[<p>Estava procurando por uma solução simples em Ruby para fazer o update de mensagens via irb.<br />
Achei as seguintes opções de classes Ruby:</p>
<ul>
<li><a href="http://twitter.rubyforge.org/">Twitter</a> -&gt; John Nunemaker ( essa é a mais completa )</li>
<li><a href="http://rubyforge.org/projects/twittery/">Twittery</a> &#8211; uma classe bem simplista que faz upload de fotos pela TwitPic&#8217;s API. Esse projeto é administrado por Chris Ledet</li>
</ul>
<p>Eu tomei como base para aprendizado, a classe do projeto Twittery, pois queria uma solução rápida e simples. Apesar dela não ter a segurança do protocolo de autenticação oAuth que já consta no projeto de John Nuremaker.</p>
<h2>A idéia foi a seguinte: colocar o código Ruby para ser pré-carregado no arquivo .irbrc toda vez que o irb for acionado via shell.</h2>
<p>Depois de vários teste o código final você pode ver abaixo:</p>
<pre class="brush: ruby; ">

# twitting by irb
require &#039;net/http&#039;

class Object
  def twitter_config(username, password)
    @username = username
    @password = password
  end

# the message must be between 1 and 160 characters
  def twitter(status = nil, format = &#039;json&#039;)
     if status.empty? or status.length &gt; 160
        puts &quot;twitter &#039;message with spaces&#039;             (IRB)&quot;
        puts &quot;Obs. (The message must been less than 160 characters and cannot be empty)&quot;
     else
        api_url = &#039;http://twitter.com/statuses/update.&#039; + format
        url = URI.parse(api_url)
        req = Net::HTTP::Post.new(url.path)
        req.basic_auth(@username, @password)
        req.set_form_data({ &#039;status&#039;=&gt; status }, &#039;;&#039;)
        res = Net::HTTP.new(url.host, url.port).start {|http| http.request(req) }
        puts res
     end
 end
alias :twit :twitter
end

twitter_config(&#039;username&#039;, &#039;password&#039;)
</pre>
<p>Os dados de usário e senha já são pré-carregados na inicialização do irb. A vantagem é que esses dados ficam ocultos no arquivo .irbrc, dando um pouquinho de privacidade, caso tenha alguém do lado. <img src='http://valeriofarias.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Para &#8220;twittar&#8221; é só usar o seguinte comando, a qualquer momento, dentro do irb:</p>
<pre class="brush: ruby; ">

irb&gt; twitter &quot;mensagem via irb&quot;

ou ainda

irb&gt; twit &quot;outra mensagem via irb&quot;
</pre>
<blockquote><p>Obs.: Esse exemplo usa a forma de autenticação mais simples, via HTTP. O twitter está em processo de mudança da autenticação para usar <a href="http://oauth.net/">oAuth</a>. A tendência é que a autenticação básica via HTTP deixe de ser usada, mas isso ainda vai demorar um pouco. Enquanto isso não acontece, vou continuar &#8220;twittando&#8221; por esse script via irb. <img src='http://valeriofarias.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p></blockquote>
<p>Fico por aqui.</p>
<p>Até a próxima.</p>
]]></content:encoded>
			<wfw:commentRss>http://valeriofarias.com/twitter-via-irb-ruby/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ruby + irb + utility-belt + gedit = :)</title>
		<link>http://valeriofarias.com/ruby-irb-utility-belt-gedit/</link>
		<comments>http://valeriofarias.com/ruby-irb-utility-belt-gedit/#comments</comments>
		<pubDate>Sat, 13 Jun 2009 02:25:31 +0000</pubDate>
		<dc:creator>Valrio Farias</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[gedit]]></category>
		<category><![CDATA[irb]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[utility-belt]]></category>

		<guid isPermaLink="false">http://geyserway.com/?p=105</guid>
		<description><![CDATA[Em setembro de 2008, Akita fez um post interessante sobre o utility-belt, uma gem
que adiciona várias funcionalidades ao irb (é algo parecido como dar Red Bull para o irb). Entre as várias funcionalidades temos:

 acionar o Vi ou o TextMate a partir do irb, permitindo que você escreva ou cole um código rapidamente, salve, feche [...]]]></description>
			<content:encoded><![CDATA[<p>Em setembro de 2008, Akita fez um <a href="http://www.akitaonrails.com/2008/9/21/ruby-irb-utility-belt">post interessante sobre o utility-belt</a>, uma gem<br />
que adiciona várias funcionalidades ao irb (é algo parecido como dar Red Bull para o irb). Entre as várias funcionalidades temos:</p>
<ul>
<li> acionar o Vi ou o TextMate a partir do irb, permitindo que você escreva ou cole um código rapidamente, salve, feche o editor e já possa testar no irb, sem precisar criar arquivo e salvar em diretório.</li>
<li> visualizar um histórico de comandos digitando &#8220;h&#8221;</li>
<li> abrir o histórico no TextMate ou Vi usando hvi ou hmate</li>
<li> assista ao <a href="http://www.akitaonrails.com/2008/9/21/ruby-irb-utility-belt">screencast</a> do Akita para ver o funcionamento</li>
</ul>
<p>Até aí tudo bem, mas o grande problema é que eu uso <strong>ubuntu</strong> com <strong>gedit</strong> para escrever códigos ruby. E o utility-belt não possui métodos específicos para acionar o gedit. O help do utility belt dá a opção edit_interactively(:gedit), mas é claro que eu não poderia me contentar com esse método, eu queria que funcionasse da mesma forma que funciona para o Vi ou TextMate.</p>
<p>Pesquisando um pouco, achei um artigo que mostra como  <a href="http://www.vanutsteen.nl/2008/05/12/interactiveinline-editor-in-irb/">abrir o editor nano do linux através do irb</a>, extendendo o utility-belt. A partir dele eu fiz algumas modificações no arquivo .irbrc que vocês verão na sequência do Post.</p>
<p>A primeira etapa é instalar o utility-belt:</p>
<pre class="brush: ruby; ">
git clone git://github.com/akitaonrails/utility-belt.git
cd utility-belt
gem build utility_belt.gemspec
sudo gem install utility_belt-1.0.12.gem
</pre>
<p>Agora é só editar o arquivo .irbrc no home do seu sistema e acrescentar as seguintes linhas:</p>
<pre class="brush: ruby; ">
require &#039;rubygems&#039;
require &#039;utility_belt&#039;

module InteractiveEditing
   def gedit
      edit_interactively(:gedit)
   end
end

class Object
   def history_to_gedit
      handling_jruby_bug do
         file = Tempfile.new(&quot;gedit_tempfile&quot;)
         get_lines(0..(Readline::HISTORY.size - 1)).each do |line|
            file &lt;&lt; &quot;#{line}\n&quot;
         end
         file.close
         system(&quot;gedit #{file.path}&quot;)
      end
   end
   alias :hgedit :history_to_gedit
end

UtilityBelt.equip(:all)
</pre>
<p>Depois disso é só salvar e partir para a execução!</p>
<p>Agora você pode usar o comando <strong>gedit</strong> direto do irb e também abrir o histórico no gedit usando <strong>hgedit</strong> ou <strong>history_to_gedit</strong>. Se quiser entender um pouco mais sobre os códigos leia os arquivos: interactive_editor.rb e command_history.rb na pasta: utility-belt/lib/utility_belt$</p>
<p>Para quem não utiliza o gedit, nem o Vi, nem o TextMate,  é só modificar esse código para o seu editor favorito!</p>
<p>Fico por aqui.</p>
<blockquote><p>Obs.:O primeiro teste que eu fiz não funcionou, pois estava faltando uma dependência no meu sistema. Era o xsel que é responsável para fazer cópias de texto do shell para clipboard. Resolvi esse problema usando: <strong>sudo apt-get install xsel</strong><br />
Para saber mais sobre o xsel acesse <a href="http://www.pgrs.net/2008/1/11/command-line-clipboard-access">aqui</a>.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://valeriofarias.com/ruby-irb-utility-belt-gedit/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Como se tornar um desenvolvedor Rails famoso (tradução)</title>
		<link>http://valeriofarias.com/como-se-tornar-um-desenvolvedor-rails-famoso-traducao/</link>
		<comments>http://valeriofarias.com/como-se-tornar-um-desenvolvedor-rails-famoso-traducao/#comments</comments>
		<pubDate>Mon, 11 May 2009 23:04:52 +0000</pubDate>
		<dc:creator>Valrio Farias</dc:creator>
				<category><![CDATA[Pense nisso!]]></category>
		<category><![CDATA[desenvolvedor]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[negócios]]></category>
		<category><![CDATA[reflexão]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rubyonrails]]></category>

		<guid isPermaLink="false">http://geyserway.com/?p=57</guid>
		<description><![CDATA[Obs: Esse post é além de inspirador, muito esclarecedor, faz com que coloquemos novamente nossos pés onde eles precisam estar, que é no chão. Mas mostra também que podemos conseguir diversas coisas legais tomando as decisões certas e fazendo a única ação benéfica e sustentável do mundo da programação que é de ler, escrever e [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Obs: Esse post é além de inspirador, muito esclarecedor, faz com que coloquemos novamente nossos pés onde eles precisam estar, que é no chão. Mas mostra também que podemos conseguir diversas coisas legais tomando as decisões certas e fazendo a única ação benéfica e sustentável do mundo da programação que é de ler, escrever e compartilhar código. Se algum trecho da tradução poderia ficar melhor podem mandar sugestões de mudança, o texto original você encontra <a href="https://gist.github.com/0a2655aed6a26fa15a02">aqui</a>, fiquem agora com o texto traduzido:</p></blockquote>
<p>Oi a todos, sou <strong>Chris Wanstrath</strong>, e vou te ensinar como se tornar um desenvolvedor Rails famoso. Um Ruby rock star. Um programador ninja. Não é difícil, apenas foque-se como um raio laser e tenha um pouco de paciência.</p>
<p>Devo dizer de antemão de que você não precisa se preocupar com qualquer habilidade de programação ou dez mil horas de prática. Isso não importa &#8211; é fácil de falsificar.</p>
<p>Então! A primeira coisa que você precisa é um blog. Mas não de qualquer blog. Você precisa de um blog com personalidade. Não importa se a personalidade do blog seja compatível com a sua própria personalidade.</p>
<p>A parte mais importante de qualquer blog é o nome. Claramente. Não pode ser &#8220;blog de João&#8221;. Ou talvez possa -, é que poderia ser retrô neste momento. Mas você entende o que quero dizer. Não escolha um nome que não te deixe feliz, pois se você fizer a escolha certa, você nunca vai ouvir o final da mesma. (o nome pode ser bom, mas se não te deixa feliz você acaba deixando de lado). É como escolher um nome de uma banda. Ou dando um nome para uma criança. Certifique-se de que é algo que as pessoas irão lembrar.</p>
<p>E tente não se tornar demasiado Railsy. Isso é limitante &#8211; faça o seu próprio. É o seu blog, apesar de tudo.</p>
<p>Eu não deveria ter de dizer esse próximo passo, eu odeio dizer isso, mas tenho que dizer: nunca use um template de blog default. Isso é um tiro no próprio pé.</p>
<p>Veja por quê: você eventualmente publicará conteúdos de qualidade no seu blog. Não de imediato, não se adiante. Mas você vai escrever alguns posts realmente bons. Eles serão linkados no Hacker News e Reddit, eles serão &#8220;tweetados&#8221; e guardados no delicious, e, se tiver sorte, você receberá uma menção em um ou dois podcast.</p>
<p>A primeira vez que alguém visitar o seu blog, se o conteúdo é bom o suficiente, ele aprecia isso. Talvez ele adicione aos favoritos dele. Em seguida, ele passará ao próximo item no leitor de feed.</p>
<p>A segunda vez que a mesma pessoa visitar o seu blog, se o design é único e a personalidade brilha através do conteúdo, ele vai lembrar. &#8220;Ei. Eu estava aqui antes. Foi bom!&#8221;</p>
<p>Agora não sei exatamente quantos posts de qualidade você vai precisar porque vai depender de cada indivíduo. Alguns se conectam imediatamente. Eles não têm vergonha. Outros são mais lentos &#8211; eles fazem você trabalhar por isso. Três, quatro, talvez cinco posts maravilhosos antes deles se conectarem. Mas eles vão conectar.</p>
<p>A idéia aqui é associação &#8211; se o seu blog usa um template sem identidade, ninguém vai lembrar que eles estiveram lá antes. Que leram um bom post nele. Você está lutando uma batalha difícil.</p>
<p>Gaste tempo com o design. Talvez contratar alguém, faça alguns favores para um amigo designer, não sei, você vai descobri.</p>
<p>E quando você fizer isso, você terá um nome matador e um design elegante. Bom começo.</p>
<p>Agora para as personalizações. A barra lateral, o cabeçalho. Essas coisas essenciais.</p>
<p>Se você vai colocar uma lista de blogs que você gosta na barra lateral, e eu não colocaria, você tem que ter muito cuidado. Se os blogs são muito populares, as pessoas vão pensar que você é um &#8220;Maria vai com as outras&#8221;. Se eles são muito desconhecidos, eles podem pensar que você está com má companhias. É melhor estar seguro e ignorar completamente a coisa toda.</p>
<p>Na verdade eu só mantenho a barra lateral escassa, muito escassa. Sem tag clouds ou comentários recentes ou posts recentes. Talvez apenas o arquivo, que cria uma lista mensal. Listar os projetos de interesse pode ser bom.</p>
<p>Ah, e seu endereço de email. As pessoas vão querer enviar email para você.</p>
<p>Mas como eu disse, escasso. Não se distraia do seu conteúdo.</p>
<p>E nunca use anúncios Google &#8211; você vai eventualmente querer aderir a uma rede de anúncios patrocinados. Os anúncios do Google apenas desvalorizam o bem (blog).</p>
<p>O cabeçalho é importante porque é a primeira coisa que as pessoas veem. Uma foto sua é provavelmente melhor. Algo especial. Mas se você não pode encaixá-la no cabeçalho, a barra lateral funciona igualmente bem. Lembre-se: as pessoas têm de reconhecer você, saber que você é o João de &#8220;blog de João&#8221;.</p>
<p>Quanto ao conteúdo, você precisa decidir sobre o seu perfil. Você deve fazer uma lista de dez ou mais famosos desenvolvedores Rails, talvez em uma planilha, e escolha um adjetivo que descreva cada perfil deles. Vá até a lista escolha a combinação que funciona para você. Lúdico e espontâneo? Profissional e inspirador? Ofensivo e verborrágico? Escolha duas características que você acha que pode ter sucesso. Escreva elas. Este é agora é o perfil de seu blog.</p>
<p>A etapa final, antes de blogar, são as regras. Você precisa estabelecer diretrizes para o seu blog, as regras sobre o conteúdo. Se Hashrocket começa a falar de Scala, você pode aderir a controvérsia? Você pode postar sobre o grande e novo cliente Twitter que você baixou? E sobre suas experiências com o Android SDK? Você está centrado no código, a comunidade, suas observações, ou truques esotéricos?</p>
<p>(Eu ficaria longe de truques esotéricos como competência central mas ocasionalmente entregue-se ao desejo a fim de manter a sua credibilidade. Mas isso é só comigo.)</p>
<p>A coisa importante sobre as regras é que ajudam a estabelecer a coerência. Você não quer postar sobre uma elegante biblioteca uma vez e nunca mais mencioná-la novamente. Isso confunde as pessoas. Eles desejam algo estruturado.</p>
<p>Dê isso a eles.</p>
<p>Ok, com tudo o que disse, podemos começar a blogar. Mas não estamos realmente blogando ainda. Estamos apenas praticando. Todo dia você precisa escrever um post. Não importa sobre o que. Ninguém vai lê-los. Mas você precisa práticar a escrita e aperfeiçoar seu tom. Dê ao seu blog uma personalidade.</p>
<p>O que postar? Qualquer coisa. Em vez de apenas fazer um Gist seu belo pedaço de código, post sobre isso no seu blog. Adicione uma pequena história de fundo.Mas não fale continuamente sobre ela. A menos, claro, que seja o seu tom, seu perfil.</p>
<p>A grande coisa sobre como iniciar um novo blog é que você pode voltar atrás e olhar para antigos Gists,  plugins antigos que você escreveu, tarefas rake malucas, e fingir que eles são totalmente novas. Escreva. Faça um post. Trata-se de algo novo para qualquer outra pessoa.</p>
<p>Outro truque bom é olhar o que outros blogueiros estão fazendo, bibliotecas populares ou técnicas que foram pioneiras e melhorar as mesmas. Dessa forma eles fazem a maior parte do trabalho, mas porque você fez um pouco melhor, você pode conseguir alguma atenção deles.</p>
<p>Fale sobre testes. Lamente a falta de alguma coisa. Talvez até mesmo inicie algum problema com o código de outro blogueiro. Ele não funciona para você, por isso é uma porcaria.</p>
<p>Após algumas semanas podemos começar a fazer algo sério. Mas, entretanto, o que você vai fazer sobre a sua conta no Twitter?</p>
<p>Você tem uma, certo? Bem, você não vai querer &#8220;tweetar&#8221; negligentemente postagens do seu blog &#8211; Isso é um enorme fora. E você não quer &#8220;tweetar&#8221; que você apenas começou um blog, porque não há nada lá e é uma oportunidade perdida.</p>
<p>Em vez disso você poderia mudar o design do seu Twitter (o pano de fundo, cores dos links, tudo isso) para corresponder ao seu blog. Faça-os cumprimentar um ao outro. Enfeite-o para o sucesso. E seja legal.</p>
<p>Dessa forma você não está apenas sendo um desenvolvedor Rails aleatório, você é o autor de &#8220;blog de João&#8221;. Você é que é João. Certifique-se que o seu avatar tem o seu rosto, também.</p>
<p>Na verdade, por que não usa seu Photoshop e faz um daqueles backgrounds sociais para a sua conta Twitter? Você sabe o que estou falando &#8211; com todos os links que você pode apenas ler e certamente pode não clicar. Esses fundos permite que as pessoas conheçam sua idéia de negócios e como encontrá-lo de forma conveniente.</p>
<p>Suas mensagens do Twetter provavelmente seguirão o tom do blog, mas, e esta é a parte divertida, aqui você pode quebrar as regras. Permita que as pessoas saibam algo sobre você. Como num reality show.</p>
<p>De qualquer forma, vamos adiante. Você está de pé, você está &#8220;twettando&#8221;, você está &#8220;blogando&#8221;, você está se sentindo bem. Hora de atacar.</p>
<p>Sua primeira postagem que você realmente acha que é bom, ponha-o lá fora. &#8220;twette&#8221; sobre ele, publique-o em sites de notícias sociais, lute para conseguir uma relação no Rubyflow. faça isso de manhã cedo em um dia da semana, horário padrão da costa leste (USA e Canadá), porque as pessoas adoram se refrescar com <a href="http://www.reddit.com/">Reddit</a> no trabalho.</p>
<p>Mas não esperem muito. Não há tal coisa como sucesso em uma noite. Temos ainda muito trabalho a fazer. Uma forma de obter visitantes e leitores é liberar códigos simples, úteis de forma resumida e diretamente em um post do blog. Mostre às pessoas o problema, mostre a solução, diga como instalá-lo e forneça um meio para fazer o download.</p>
<p>Outra forma é discurso retórico. Mas você tem que fazer isso muito.</p>
<p>No que diz respeito à identificação e liberação de código útil e simples, não se gasta muito tempo pensando nisso. siga seu dia, sua rotina normal, mas mantenha um olho para as coisas que te deixa aflito. Coisas que deixam seus colegas aflitos.</p>
<p>Um idiota mecheu no seu código de produção? Repetição e erro tendem a ser práticas seguras? Bug na autenticação do plugin que você está usando?</p>
<p>Mantenha os olhos abertos e, quando você identificar um ponto de aflição, algo que provoca atrito no seu fluxo de trabalho, anote. Armazene em algum lugar.</p>
<p>Mais tarde naquela noite você pode se servir com um copo de vinho, talvez um copo de uísque, sentar-se no sofá e escrever uma solução. Mantenha a solução simples e certifique-se de que você pode completar a biblioteca ou o plugin em uma noite. Em seguida, escreva uma post no blog e publique.</p>
<p>Limpar e repetir.</p>
<p>Se algo te causa dor, provavelmente causa dor em outra pessoa também. Somos todos desenvolvedores Rails  com tarefas muito similares. Bem, a maioria de nós.</p>
<p>Eventualmente, você vai tirar a sorte grande: algo simples que poucas pessoas querem usar. Mantenha-o, aceite patches, e siga em frente.</p>
<p>A medida que você ganhar mais confiança, você pode começar a procurar problemas e soluções mais ambiciosas. Você conseguirá um reconhecimento melhor.</p>
<p>Agora você está pronto para o circuito de conferências. RubyConfs locais, encontros em sua cidade, e no Santo Graal, RailsConf (No Brasil: Rails Summit Latin America). Abrace um projeto sério e fale sobre ele. Publique o progresso da atualizações. Mas não se esqueça de manter o seu tom e seguir as regras. Vá para os coffe brakes e conheça pessoas. Permita que eles saibam que você é o João de blog do João. Nunca tire seu crachá.</p>
<p>Continue postando com consistência. A maioria das pessoas não sabem a diferença entre prolífico e profundo. ambas as palavras compartilham muitas letras. Eles apenas querem algo interessante para ler, e muito disso.</p>
<p>Acompanhe o que todos estão dizendo sobre as seus posts no Twitter, delicious, e FriendFeed. Você não tem que responder, mas eu buscaria freqüentemente seus posts em todos estes serviços. Verifique algumas vezes em um dia.</p>
<p>Se você contribuir para Rails em si, que é enorme. Outros desenvolvedores famosos de Rails vão começar a notá-lo. Mesmo com comentários em blogs &#8211; especialmente os dez na sua lista. Você manteve essa planilha, certo?</p>
<p>Uns poucos meses disso e você estará assinando autógrafos, beijando bebês, indo a boates caras &#8211; vivendo uma boa vida.</p>
<p>Todo mundo vai saber o seu nome. Editoras estarão te enviando livros, pedindo-lhe para escrever no blog sobre eles. Você será convidado para falar em conferências. Será reconhecido na rua. Recrutadores vão ocupar toda sua caixa de entrada. Coisas que você disser serão significativas. Seu blog será patrocinado. Talvez você até escreva seu próprio livro.</p>
<p>E, claro, você vai ter de sair com os famosos. Agora você é um deles, depois de tudo.</p>
<p>Parabéns.</p>
<h3>O problema é que ser programador Rails famoso não é o mesmo que ser um bom programador Rails. Qualquer pessoa pode se tornar um programador Rails famoso. Faça todas as coisas que eu disse. Boom, garanto que funciona.</h3>
<p>Pessoalmente, eu olho para os bons programadores. Eles não se preocupam com a sua contagem de subscrição do RSS, eles blogam como complemento. Pessoas que não estão preocupadas com quantos seguidores no Twitter  possuem e trabalham nos seus projetos todas as semanas, porque adoram fazer isso. Que contribuíram para o Rails por anos por paixão e não são excessivamente preocupados com a divulgação de suas vidas.</p>
<p>Pessoas que se preocupam com código, primeiro e acima de tudo.</p>
<p>Há sempre conversas sobre colocar apelidos em IRC ou Twitter nos crachás das conferências, assim você pode identificar as pessoas que você conheceu on-line, mas nunca pessoalmente. Porque é que simplesmente não ignoramos isso e colocamos em seu lugar o projeto favorito que você tenha contribuído?</p>
<p>&#8220;Você contribuiu para Rack? Isso é ótimo, eu amo Rack. Talvez possamos ser amigos.&#8221;</p>
<p>&#8220;Você trabalhou na Webrat? Pode por favor explicá-lo a mim?&#8221;</p>
<p>Pense sobre isso &#8211; você conhece as pessoas envolvidas no seu favorito RubyGem? Seu plugin mais usado?</p>
<p>Eles são provavelmente as pessoas que você vai querer estar junto delas.</p>
<p>Código, estou compreendendo, é o fio comum que une os desenvolvedores. Não é pelo blog ou mensagens de erro propositais (trolling) ou pela procrastinação, e sim porque nós amamos o código.</p>
<h3>Trata-se de leitura, escrita, e compartilhamento de código.</h3>
<p>E quanto mais eu blogo, envio mensagens falsas (troll), e procrastino, penso que o código me trouxe a fortuna maior. O maior retorno sobre o investimento com o menor risco.</p>
<p>Depois que saí da faculdade, eu trabalhava com PHP em uma loja fazendo aplicações de logísticas de entrega. Éramos os intermediários entre transportadores independentes e as grandes empresas como a Kmart. Os transportadores deveriam se registrar no nosso site, dizer que iam estar em Delaware no dia 3 de maio, e que eles estão a caminho de Denver, em seguida, eles obtém informações sobre transferências ao longo do percurso escolhido. Eles poderão, em seguida pedir um preço maior no trasporte ou aceitar o valor estipulado, tudo através de nós.</p>
<p>Foi uma aplicação bastante complexa e duas coisas que estavam faltando: controle de versão e constantes. Não havia controle de versão, de modo que você tem coisas como main2.php e compute_radius_of_from_shipment7.php espalhados ao redor. Junto com as versões de 0 a 6 desse mesmo arquivo, no mesmo diretório. Verdadeiramente doloroso.</p>
<p>Não havia constantes e nenhuma configuração, de modo que o código-fonte estava preenchido com números mágicos. Se quiser fazer um ajuste em qualquer um dos nossos algoritmos, você tinha que encontrar o código que fez o processamento e alterar alguns números de forma manual. Esperávamos esperançosamente que os números estivessem corretos.</p>
<p>Naturalmente, a primeira coisa que fiz foi institucionalizar o Subversion. Rei dos sistemas de controle de versão.</p>
<p>A segunda coisa que fiz foi extrair os números mágicos e colocá-los em arquivos de configuração. Na época, nós faziamos códigos em PHP que acessavam arquivos de configuração .ini. A maior parte do que se precisava era suportado, e eu estava encantado porque o PHP vem com uma biblioteca que acessa e entende arquivos .ini.</p>
<p>Este sistema funcionou bem, mas quando eu comecei mexer com Rails Eu fiquei encantado com o YAML. Tão limpo, tão poderoso. Havia o Syck, uma extensão em C escrita por _why, mas era apenas isso: uma extensão C. Eu não sabia muito sobre carregamento de código C em PHP, e ainda menos sobre como fazer isso em nossos servidores de produção.</p>
<p>Então eu comecei a escrever um parser YAML em PHP, no meu próprio tempo. Como uma homenagem a Syck, eu a chamei de Spyc &#8211; SPYC &#8211; uma Simples Php Yaml Classe. Foi meu primeiro parser, era stateful (mantinha o estado no decorrer da utilização). Não dei suporte a tudo do YAML, mas ele suportava as principais funcionalidades &#8211; dumping e o load. As partes boas.</p>
<p>Me debrucei nele e em pouco tempo estávamos utilizando YAML com grande sucesso na minha empresa. Naturalmente, eu fiz o upload do código para o SourceForge. Rei dos hosts de código-fonte. Meu amigo designer fez uma página e no primeiro mês Spyc foi um enorme sucesso. Eu juro que tinha, pelo menos, 70 downloads. SETENTA!</p>
<p>Isso foi um grande negócio.</p>
<p>Avançou rápido cerca de nove meses: o meu teletrabalho de telecomunicações virou um trabalho de verdade, e eu concordei em ir para Nova Jersey. Eu embalei meu carro, disse adeus, conduzi onze horas para Hackensack, trabalhei um dia no escritório, percebi que todos os meus colegas de trabalho eram completos puxa-sacos, entrei no meu carro e dirigi onze horas de volta para Ohio.</p>
<p>E é isso, eu era um desempregado que abandonou a faculdade sem terminar os estudos.</p>
<p>Não foi tão ruim &#8211; Passei muito tempo na piscina naquele verão. E eu passei muito tempo aprendendo Ruby e Rails.</p>
<p>Eu até comecei freelancer novamente. Afinal, eu estava totalmente qualificado. Eu tinha 8 anos de experiência de programação &#8211; Fiz algumas QBasic, quando eu tinha 12 anos. Eu estava certo que aquilo contava.</p>
<p>Mas verão acabou e eu precisava descobrir o que eu ia fazer com minha vida.</p>
<p>Como tinha sorte, no meio desse tempo, o web site de vídeo game GameSpot estavam contratando. E eu precisava de um emprego.</p>
<p>Eu não tinha idéia de onde era São Francisco ou o que os caras do GameSpot estavam procurando, mas eu fiz a requisição. Criei um novo currículo e fiquei a noite toda trabalhando no tema da carta. Até o momento em que eu tinha terminado, era uma página longa e bastante convincente.</p>
<p>Nela eu prometi me mudar para a Califórnia no dia seguinte, levando nada além de meu violão e Xbox comigo. Minha família ia me perder, mas eu estava pronto para sair, e eu estava faminto para mostrar ao mundo o que eu podia fazer. Pronto para aprender com os mestres.</p>
<p>A entrevista por telefone correu bem, eles gostavam que eu estava por dentro do mundo Macs e Ruby, e eu obviamente consegui o trabalho. A primeira vez que pus os pés na Califórnia foi quando eu voei para para procurar um apartamento com meu pai.</p>
<p>Minha experiência profissional não foi o que fez com que eu conseguisse o trabalho. Eu tenho certeza que a minha carta tinha algo a ver com isso, mas a minha curta carreira na logística de transporte foi menos que glamourosa. Eu só tinha uma coisa para mostrar a GameSpot &#8211; Spyc. Meu código foi livremente disponibilizado, tinha sido usado em produção, e funcionou. Eles podem fazer o download e brincar com ela, ou checá-la online. Independentemente de pensarem que era bom ou não, eles poderiam dizer que era limpo e bem organizado. Bom, talvez não, mas eu tinha um site e 70 downloads.</p>
<h3>Consegui o emprego no GameSpot, na minha opinião o primeiro grande passo no caminho que me trouxe aqui, foi graças ao código. Código que eu escrevi principalmente para me divertir, para coçar minha própria coceira.</h3>
<p>Então isso foi muito legal, e eu achei singular, até que aconteceu de novo. Enquanto eu estava trabalhando na GameSpot, fui fazendo mais e mais Ruby em paralelo. Eu tinha um projeto Rais open souce chamado Ozimodo, péssimo servidor de FTP denominado ftpd.rb (que eu usei como forma de aprender sobre threading), e um DSL parser de linha de comando chamado Choice. Para Choice, eu tinha um suite de testes completa (eu escrevi essa suite para aprender TDD) e uma homepage criada por RDoc no Rubyforge.</p>
<p>Quando CNET, mãe da empresa GameSpot, adquiriu Chowhound, eles decidiram reescrever o site em Rails. A partir do zero. Clássico. Eles trouxeram dois programadores Rails da Wayfaring.com e foram à procura de outro. Então me encontraram.</p>
<p>Mais tarde eu descobri o meu site RDoc, RubyGem, e a suite de testes provou aos caras da Wayfaring que eu era um &#8220;verdadeiro&#8221; programador Ruby. Eles queriam alguém animado com essas coisas, e eu certamente era.</p>
<p>Aquele foi um grande momento, porque paguei a minha viagem para a RailsConf 2006.</p>
<p>Conversas sobre código.</p>
<p>Se você não tem quaisquer projeto nesse momento, você deve gastar algum tempo aqui começando algo novo. Algo faça sentido para você, mas que ainda não tenha ao seu redor. Uma ideia que tem estado flutuando.</p>
<p>Ou basta encontrar alguém que esteja haqueando e perguntar no que eles estão trabalhando. Talvez seja interessante o suficiente para pular dentro.</p>
<p>Se você deseja criar o seu próprio negócio, o código é a maneira perfeita para encontrar cofundadores e funcionários. Eu sempre me sinto mal por tipos de empresas que postam em fóruns perguntando sobre a melhor forma de encontrar um cofundador ou CTO. Não por causa do tipo de négocios deles &#8211; que todos temos de viver com as nossas decisões -, mas porque eu não acho que isso seja um problema.</p>
<p>Conheci todas as outras pessoas do GitHub através de código: PJ através Chowhound, Tom através do seu trabalho open source, Scott por causa de sua quase irritante variedade de bibliotecas Git baseadas Ruby, e Tekkub pelo seu domínio da seção Lua do site.</p>
<p>Na CNET, encontramos pessoas realmente talentosas, tanto através de fonte aberta e projetos locais.</p>
<p>E todos que você conheceu aqui que você não conhecia antes da conferência, tecnicamente, é conhecido através de código.</p>
<p>GitHub não tornou-se popular em virtude do Git. Ele pode ter ajudado, mas não foi o principal catalisador.</p>
<p>GitHub se popularizou porque ele lida com código. Compartilhando, encontrando, e contribuindo com código.</p>
<p>Rubyforge e Sourceforge não são focados no código. Eles nunca foram.</p>
<p>Na verdade, ainda ontem Sourceforge passou por um redesign na sua homepage. Eles tem pesquisa no Twitter e projetos populares ali, frente e centro. Elegante. Então eu cliquei um pouco.</p>
<p>O primeiro projeto que cliquei, Ares Galaxy, é o número sete na lista top dez. O visualizador CVS disse que não possui quaisquer arquivos. Então eu acho que você pode simplesmente baixar um tarball. O que é bom.</p>
<p>O segundo projeto que eu cliquei era o número cinco da lista, 7-Zip. Ele não tem sequer um link para um visualizador de código fonte.</p>
<p>Sem código.</p>
<p>Eu percebi que fazia muito tempo que não criava um projeto no Sourceforge, então eu decidi fazer isso. Lembro-me que é doloroso, mas este é um novo redesign.</p>
<p>A primeira página é constituída por cinco radio buttons, um campo Nome do Projeto, um campo Nome Unix, um textarea para descrição pública, e um textarea para Notas adicionais. A área de notas é carinhosamente fornecida para que você possa justificar ao pessoal do SourceForge porque deve ser permitida a criação de um projeto. E, claro, você não pode continuar sem dar a eles uma razão que contenha pelo menos 200 caracteres.</p>
<p>Penso que é uma loucura &#8211; a maioria dos dias tenho problemas com 140 caracteres.</p>
<p>Além disso, há um aviso na parte superior que diz que você precisa armazenar software open source.</p>
<p>Depois de preenchidos todos os campos e que você clicou em &#8216;Next&#8217; você é convidado a escolher uma licença open source. Há oito licenças listadas, juntamente com uma opção &#8220;outros&#8221; e, em seguida, um link para documentação sobre open source e escolher uma licença. Eu escolhi MIT.</p>
<p>Na página três você pode atribuir a seu projeto pelo menos cinco categorias. As opções de categorias são coisas como, &#8220;Linguagem de programação Ruby&#8221;, &#8220;User Interface DirectX&#8221;, ou &#8220;Desenvolvimento Status Beta&#8221;.</p>
<p>Eu escolhi quatro muito facilmente, mas teve problemas com a quinta, finalizava com, &#8220;Tema Religião e Filosofia New Age&#8221;.</p>
<p>Muito apropriado, se você pensar nisso.</p>
<p>Na última página você é convidado a ler sobre o que significa open source, sobre os termos de serviço do site, em seguida submete o projeto para aprovação.</p>
<p>Após o envio aparece uma tela de agradecimento e um pedido para você esperar de um a três dias úteis.</p>
<p>Eu, obviamente, tenho interesse em desaprovar um site competidor, mas este formulário de inscrição é uma das razões para termos começado o GitHub. Uma vez que você tenha uma conta, criar um repositório GitHub é, penso eu, simples:</p>
<p>Pedimos nome do projeto, uma breve descrição, e a URL do projeto. abaixo desses três campos tem dois radio buttons: esse projeto é público ou privado? A única coisa necessária é o nome do projeto. Você pode mudar qualquer um dos campos mais tarde. Não há nenhum processo de aprovação e você pode imediatamente começar a compartilhar código.</p>
<p>Entre decidir compartilhar o seu código e realmente compartilhar o seu código, SourceForge fornece um formulário de inscrição de quatro páginas e um a três dias de espera.</p>
<p>Mas sua documentação em software open source afirma: &#8220;A essência do modelo de desenvolvimento Open Source é a criação rápida de soluções dentro de um processo aberto, ambiente colaborativo&#8221;.</p>
<p>Correto.</p>
<p>Aqui está a minha sugestão para SourceForge:</p>
<p>Devem cortar o processo de inscrição para uma única página, remover os 200 caracteres do pedido &#8220;por favor hospedem o meu projeto&#8221;, serem mais favoráveis com relação a categorização, sugerir uma licença de fonte aberta para você, então permitir que altere qualquer destas coisas depois que seu projeto seja criado.</p>
<p>Eles também devem tornar a criação de projeto instantânea e passa-lo através de um filtro de spam ou ter funcionários remunerados para fazerem vistorias manualmente e aprovarem cada projeto em vez olhar para a lista dos projetos recentemente criados e assinalarem os que parecem suspeitos.</p>
<p>Parece-me que todos os passos necessários e formulários são apenas cerimônia, retardando você e fazendo você perder tempo com algo diferente do que você realmente deseja realizar. Eles agregam valor? Certamente que não.</p>
<p>E se há uma coisa que eu aprendi com Rails, é deixar o inferno fora do caminho e permitir que as pessoas concentrem-se na tarefa em questão.</p>
<p>Reduzir atrito.</p>
<p>Primeira lei de Newton do movimento, faz duas afirmações: um objeto em repouso tende a permanecer em repouso e um objeto em movimento tende a permanecer em movimento. É muitas vezes referida como a lei da inércia.</p>
<p>E inércia, para quem não se lembra ou não teve aula de física, é a tendência do objeto resistir a mudanças no seu estado de movimento.</p>
<p>Se você chutar uma bola, ela vai diminuindo a velocidade até parar. Mas ela não quer parar. O Atrito criado pelo movimento ao longo do solo e do ar reage contra a bola, conspirando para pará-la a todo o custo.</p>
<p>Quanto mais você remover atrito, o avanço da bola vai continuar e vai demorar muito mais tempo para parar.</p>
<p>Esta ideia de atrito, é muito parecida com o inverso da produtividade. Ser produtivo significa obter coisas feitas de forma eficiente e eficaz. Atrito impede de você fazer essas coisas, atrasa você, conspira contra você, é uma perda de energia.</p>
<p>E muitas vezes, o atrito custa seu dinheiro.</p>
<p>Poucos meses antes da segunda RailsConf Deixei Chowhound e a CNET para iniciar uma empresa de consultoria com Hyett PJ. Sabíamos como codificar, pensávamos que sabiamos como blogar, mas não sabíamos nada sobre como iniciar um negócio.</p>
<p>Então, fizemos algumas pesquisas. Aparentemente, existem empresas que você pode pagar para criar um negócio para você. Muito oficialmente. Eles até mesmo enviam-lhe uma pasta para documentos de couro com o nome da sua empresa bordado sobre nela.</p>
<p>E existem pessoas que você pode pagar para fazer a sua contabilidade. Nós vamos chamá-los &#8220;contadores&#8221;.</p>
<p>Estes são dois dos mais importantes investimentos que você pode fazer quando se inicia um novo negócio: profissionais que lidam com a papelada e que manipulam os números.</p>
<p>E não só porque eles sabem o que estão fazendo.</p>
<p>Você ia querer pagar 100 dólares por hora para um contador inexperiente? Porque se seu preço de consultoria é 100 dólares por hora e você faz sua própria contabilidade é exatamente o que está acontecendo.</p>
<p>Mesma coisa para a criação de um negócio. Todo o tempo que você gasta pesquisando, preenchendo papelada, formulários, dirigindo para Sacramento para encontrar um tabelião &#8211; é acrescentado e torna-se caro se você fizer tudo sozinho.</p>
<p>A menos, claro, que seu tempo seja sem importância. Mas você está aqui, portanto, isso não é verdade.</p>
<p>Como seu tempo não é inútil, isso significa repetição, trabalho entediante e duro, e todos os custos excessivos de configuração custam seu dinheiro. Bem, e custam seu tempo. O tempo é muito importante, também.</p>
<p>Acho que uma parte essencial de ser um bom programador é a capacidade de identificar estes pontos negativos e removê-los, para agilizar o processo.</p>
<p>Rack, por exemplo, é ótimo porque ele torna a interface com os servidores web tão fácil.</p>
<p>Git branching(ramificação) e merging(mesclar) são sempre apontados como a razão da escolha.</p>
<p>Nós todos amamos Rails porque faz a maior parte das coisas tediosas irem embora.</p>
<p>E testar é famoso porque, bem, bugs e designs ruins são horríveis.</p>
<p>Portanto, vamos seguir esses exemplos. Vamos criar mais projetos que cocem uma coceira ou aliviem alguma dor. Vamos parar a obsessão sobre qual framework de teste usar e começar a obsessão por constuir sites que resolvam problemas. Vamos parar de discutir sobre linguagens e continuar aprimorando a nossa favorita. Vamos parar de criar longos tutoriais para obter assinantes RSS e começar a contribuir para a documentação oficial.</p>
<p>Vamos nos concentrar mais no código e menos nas conversas. Mais nas informações sobre a comunidade e menos sobre nós mesmos.</p>
<p>Na verdade, acho que já estamos no caminho certo. O Ruby Heroes Awards é uma grande idéia e são dadas para as as pessoas certas. Sites como o Rubyflow e até mesmo o Twitter torna mais fácil do que nunca encontrar projetos novos e interessantes. Calendar About Nothing torna simples encontrar programadores apaixonados e dar uma olhada no que estão trabalhando, enquanto RailsCasts e DocRails são alguns dos melhores esforços de documentação em qualquer comunidade.</p>
<p>Então, sim. Queremos mais disso.</p>
<p>Afinal, nós queremos realmente ser estrelas de rock como Kid Rock ou Axl Rose? Pessoas que são famosamente irresponsáveis &#8211; que têm reputações degradante para os seus fans e notoriedade para o seu planeta que é do tamanho do próprio ego?</p>
<p>Acho que eu prefiro trabalhar com e ser um bom desenvolvedor.</p>
<p>Obrigado.</p>
]]></content:encoded>
			<wfw:commentRss>http://valeriofarias.com/como-se-tornar-um-desenvolvedor-rails-famoso-traducao/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como a Linguagem Ruby pode ajudar o Capitão Morrimento</title>
		<link>http://valeriofarias.com/como-a-linguagem-ruby-pode-ajudar-o-capitao-morrimento/</link>
		<comments>http://valeriofarias.com/como-a-linguagem-ruby-pode-ajudar-o-capitao-morrimento/#comments</comments>
		<pubDate>Thu, 29 Nov 2007 06:34:09 +0000</pubDate>
		<dc:creator>Valrio Farias</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[rubyonrails]]></category>

		<guid isPermaLink="false">http://valeriofarias.wordpress.com/2007/11/29/como-a-linguagem-ruby-pode-ajudar-o-capitao-morrimento/</guid>
		<description><![CDATA[Tudo bem Pessoal, já tinha feito uma comparação do ruby com o Pascal anteriormente e agora recebi um pedido para ajudar o Capitão Morrimento a selecionar seus aspirantes por meio de um software.
 
O problema é que o Capitão Morrimento precisou sair de férias do seu batalhão, mas mesmo assim quer garantir que a equipe [...]]]></description>
			<content:encoded><![CDATA[<p>Tudo bem Pessoal, já tinha feito uma <a href="http://valeriofarias.wordpress.com/2007/08/23/primeira-linguagem-de-programacao/">comparação do ruby com o Pascal</a> anteriormente e agora recebi um pedido para ajudar o Capitão Morrimento a selecionar seus aspirantes por meio de um software.</p>
<p> <a href='http://valeriofarias.files.wordpress.com/2007/11/capitaomorrimento.jpg' title='Capitão Morrimento'><img src='http://valeriofarias.files.wordpress.com/2007/11/capitaomorrimento.jpg' alt='Capitão Morrimento' /></a></p>
<p>O problema é que o Capitão Morrimento precisou sair de férias do seu batalhão, mas mesmo assim quer garantir que a equipe continue na linha e quer acompanhar os aspirantes para não ter problema com eles no futuro.</p>
<p>Para piorar a situação descobri que o Capitão Morrimento é muito extressado e não quer perder tempo com interface complexa. Ele tem conhecimento dos softwares básicos de escritório (somente o editor de texto). Então ele quer algo que se aproxime o máximo possível de copiar dos registros dos aspirantes que ele tem no seu PC e colocar em um campo que faça a verificação e diagnóstico do Aspira.</p>
<p>Sabendo da necessidade de criar algo simples, resolvi usar os conceitos de DSL (Linguagens Especificas de Domínio) do Ruby e fiz a seguinte classe para que ele pudesse entrar com dados no formato que ele usa no dia-a-dia dele:</p>
<blockquote><pre>def aspirante(nome, &amp;bloco)
		Aspirante.new(nome, &amp;bloco)
end

class Aspirante

	def initialize(nome, &amp;bloco)
		@nome = nome
		@dados = {
			:descricoes =&gt; [],
			:numero =&gt; nil
		}

		instance_eval(&amp;bloco)

	end

	def descricao(dados)
		@dados[:descricoes] &lt;&lt; dados
	end

	def numero(numero)
		@dados[:numero] = numero
	end

	def resultado()

		if @dados[:descricoes].include? "corrupto" then 5.times{ puts "PEDE PRA SAIR!"}

		elsif @dados[:numero] == 2 then 5.times{ puts "PEDE PRA SAIR! SEU 02! Tu e CORRUPTO!"}

		elsif @dados[:descricoes].include? "PM" then 2.times{ puts "NAO VAI SUBIR NINGUEM!"}

		elsif @dados[:descricoes].include? "dorminhoco" then 2.times{ puts "TRAGAM A GRANADA!..."}

		else puts "O senhor e um FANFARRAO seu #{@dados[:numero]}.\n Sera interrogado diretamente pelo CAPITAO."

		end
	end

end</pre>
</blockquote>
<p>Agora é só salvar esse código num arquivo e carregar (load class_aspirante.rb). Então O Capitão pode usar da seguinte forma:</p>
<blockquote><p>a1 = aspirante &#8220;José dos Azóis&#8221; do<br />
	numero = 04<br />
	descricao = &#8220;Disciplinado&#8221;<br />
        descricao = &#8220;Competente&#8221;<br />
        descricao = &#8220;etc&#8221;<br />
end</p></blockquote>
<p>a partir daí é só usar a1.resultado e obtém a resposta que queria.</p>
<p>Bom esse exemplo está em aberto, gostaria de dicas para melhorá-lo, porque, como falei antes, o capitão morrimento é muito esquentado e eu não quero ser chamado de Fanfarrão <img src='http://valeriofarias.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Quem puder contribuir com novas dicas de implementação para que a linguagem DSL Caveira fique mais intuitiva e eficiente fique à vontade para comentar.</p>
<p>Até logo.</p>
]]></content:encoded>
			<wfw:commentRss>http://valeriofarias.com/como-a-linguagem-ruby-pode-ajudar-o-capitao-morrimento/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

