<?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>CØdeZØne!</title>
	<atom:link href="http://leandrosilva.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://leandrosilva.com.br</link>
	<description>Coisas sobre desenvolvimento de software</description>
	<lastBuildDate>Mon, 23 Aug 2010 13:04:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>O quanto realmente importa a escolha de uma linguagem?</title>
		<link>http://leandrosilva.com.br/2010/08/23/o-quanto-realmente-importa-a-escolha-de-uma-linguagem/</link>
		<comments>http://leandrosilva.com.br/2010/08/23/o-quanto-realmente-importa-a-escolha-de-uma-linguagem/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 03:11:45 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[pragmatismo]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=772</guid>
		<description><![CDATA[Há alguns meses perguntaram ao Rich Hickey: &#8220;How much does a choice of language really matter? Are there good reasons to choose one language over another or does it all come down to taste?&#8221; E sua resposta foi: &#8220;I think it matters quite a bit. A good language is opinionated, and strives to make a particular [...]]]></description>
			<content:encoded><![CDATA[<p>Há alguns meses <a href="http://www.simple-talk.com/opinion/geek-of-the-week/rich-hickey-geek-of-the-week/" target="_blank">perguntaram</a> ao <a href="http://en.wikipedia.org/wiki/Rich_Hickey" target="_blank">Rich Hickey</a>:</p>
<blockquote><p><em>&#8220;How much does a choice of language really matter? Are there good reasons to choose one language over another or does it all come down to taste?&#8221;</em></p></blockquote>
<p>E sua resposta foi:</p>
<blockquote><p><em>&#8220;I think it matters quite a bit. A good language is opinionated, and strives to make a particular style of programming easy and idiomatic. It only seems a matter of taste when you are comparing languages that are more similar than they are different, like Java/C# or Python/Ruby. Try something really different like Clojure, Haskell, or Erlang and the fact that it matters becomes readily apparent.&#8221;</em></p></blockquote>
<p>Eu acho que concordo bastante com sua opinião. Discutir se Java é melhor do que C#, por exemplo, é inútil, porque as duas linguagens são muito semelhantes. Nesse caso, o que acaba pesando mais na hora da escolha é o ecosistema no qual cada linguagem está inserida, que pode agradar mais a um ou a outro programador. É puro gosto.</p>
<p>O mesmo vale para Ruby e Python, como ele mesmo cita.</p>
<h4>Mundos diferentes</h4>
<p>Mas e se a comparação for entre Java e Ruby, por exemplo, como é que fica? Na minha humilde opinião, fica <em>no sense</em>. Porque Java e Ruby não são liguagens de mesma proposta; e mesmo sendo ambas de propósito geral, ambas tem objetivos claramente diferentes.</p>
<p><strong>Comparação entre mundos diferentes</strong></p>
<p>Agora vou, propositalmente, contradizer um pouco o que eu disse à cima: faz sentido, sim, você comparar Ruby com Java; Erlang com Python; F# com PHP. Sim, faz sentido.</p>
<p>Faz sentido quando você está escolhendo a linguagem que oferece a melhor solução para um dado domínio de problema.</p>
<blockquote><p><em>Super CRUD com Erlang? Não, acho que não.</em></p>
<p><em>Precisar de c</em><em>oncorrência massiva, tolerância a falhas, processos distribuídos, downtime mínimo? Humm, não sei não, mas será que não é de Erlang que você precisa?</em></p></blockquote>
<p>Entende? É nessa hora que <a href="http://al3x.net/2010/07/27/node.html" target="_blank">a escolha de uma linguagem</a> começa a pesar de verdade. Isso realmente importa.</p>
<p><strong>Mundos diferentes se complementam</strong></p>
<p>Tempos atrás, escrevendo programas Erlang/OTP, senti falta de uma ferramenta que me ajudasse a criar rapidamente a estrutura inicial do projeto e <a href="http://www.erlang.org/doc/design_principles/des_princ.html" target="_blank">umas coisas mais</a>. O que fiz? Criei uma ferramenta que faz isso: <a href="http://github.com/leandrosilva/otp_kickoff" target="_blank">otp_kickoff</a>. Em Erlang? Não, em Ruby. Fiz isso em poucas horas, usando <a href="http://github.com/wycats/thor" target="_blank">Thor</a>.</p>
<p>Pouco tempo depois, senti falta de uma ferramenta de build amigável. Novamente, o que fiz? Criei o <a href="http://github.com/leandrosilva/ebuilder" target="_blank">ebuilder</a>, usando Ruby/Thor.</p>
<p>Um outro exemplo de mundos diferentes que se complementam é o <a href="http://github.com/leandrosilva/jsparrow" target="_blank">JSparrow</a>, um cliente de <a href="http://pt.wikipedia.org/wiki/JMS" target="_blank">JMS</a> bem fluente, que fiz usando <a href="http://jruby.org/" target="_blank">JRuby</a>.</p>
<p>Essa é a ideia de tirar o melhor de cada linguagem!</p>
<p>Mesmo porque, dificilmente, você constroi um sistema de verdade <em>&#8211; que não seja um super CRUD &#8211;</em> com apenas uma única linguagem de programação. Na minha equipe mesmo, há sistemas desenvolvidos em C# .NET, que são <em>buildados, </em>testados e <em>deployados</em> com Ruby/Rake/Cucumber e usam Java/Ivy como repositório de assemblies. Isso sem falar em JavaScript, que também tem de monte.</p>
<p>Esse é o mundo real dos sistemas de verdade.</p>
<p><strong>Moral da história</strong></p>
<p>Isso me faz pensar que brigas de <em>fanboys</em> de linguagens <em>&#8211; em frenéticas buscas por prosélitos &#8211;</em> são uma verdadeira piada.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/08/23/o-quanto-realmente-importa-a-escolha-de-uma-linguagem/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Gerenciando times autogerenciáveis no OxenteRails 2010</title>
		<link>http://leandrosilva.com.br/2010/08/16/gerenciando-times-autogerenciaveis-no-oxenterails-2010/</link>
		<comments>http://leandrosilva.com.br/2010/08/16/gerenciando-times-autogerenciaveis-no-oxenterails-2010/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 15:17:55 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[agilidade]]></category>
		<category><![CDATA[eventos]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=748</guid>
		<description><![CDATA[Há alguns dias tive a oportunidade de falar uma ou duas palavras no OxenteRails 2010 sobre gerenciamento de times de desenvolvimento de software, em especial, os autogerenciáveis. Foi uma experiência bem bacana, havia mais gente interessada no assunto do que eu imaginava que haveria. Demorei um pouco, mas cá está, subi minha apresentação pro SlideShare. O [...]]]></description>
			<content:encoded><![CDATA[<p>Há alguns dias tive a oportunidade de falar uma ou duas palavras no <a href="http://oxenterails.com" target="_blank">OxenteRails 2010</a> sobre gerenciamento de times de desenvolvimento de software, em especial, os autogerenciáveis. Foi uma experiência bem bacana, havia mais gente interessada no assunto do que eu imaginava que haveria.</p>
<p>Demorei um pouco, mas cá está, subi <a href="http://www.slideshare.net/leandrodoze/gerenciando-times-autogerenciveis" target="_blank">minha apresentação</a> pro <a href="http://www.slideshare.net" target="_blank">SlideShare</a>.</p>
<div id="__ss_4975528" style="width: 425px;"><object id="__sse4975528" 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=gerenciandotimesautogerenciveis-oxenterails2010-100815161416-phpapp01&amp;stripped_title=gerenciando-times-autogerenciveis" /><param name="name" value="__sse4975528" /><param name="allowfullscreen" value="true" /><embed id="__sse4975528" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=gerenciandotimesautogerenciveis-oxenterails2010-100815161416-phpapp01&amp;stripped_title=gerenciando-times-autogerenciveis" name="__sse4975528" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<h3>O que achei do evento?</h3>
<p>Achei o evento muito arretado, como de fato era sua proposta. <em>(háh!)</em></p>
<h4><span style="font-weight: normal;">Bem, mas sendo um pouco mais especifico, deixo um destaque especial para a organização do evento, que foi impecável; muito acima da média mesmo; o pessoal da comunidade lá de Natal está de parabéns. Annaysa Melo, Paulo Fagiani, Maximiliano Guerra e todos os demais, muito obrigado pela receptividade!</span></h4>
<h4>Presença da Locaweb</h4>
<p>Esse ano, um coisa peculiar que rolou foi que, além de mim, outros quatro <a href="http://locawebers.com.br" target="_blank">locawebers</a> também palestraram: <a href="http://fabiokung.com" target="_blank">Fábio Kung</a>, <a href="http://simplesideias.com.br" target="_blank">Nando Vieira</a>, <a href="http://rafaelrosafu.com" target="_blank">Rafael Rosa</a> e <a href="http://www.agileandart.com" target="_blank">Daniel Cukier</a>. Me senti em casa!</p>
<h4>Palestras</h4>
<p>A maioria das palestras que assisti foram muito boas, em especial a do <a href="http://twitter.com/tapajos" target="_blank">Tapajós</a> que, como já era de se esperar, mandou super bem falando de <a href="http://blog.couch.io" target="_blank">CouchDB</a>. Queria muito ter visto também a do <a href="http://twitter.com/cv" target="_blank">CV</a>, mas infelizmente não pude, porque palestramos no mesmo horário. Fica pra próxima.</p>
<p>A palestra do <a href="http://peepcode.com/" target="_blank">Geoffrey</a> <em>&#8211; com aquela voz de peepcoder &#8211;</em> foi no mínimo divertida; mas a do <a href="http://www.plataformatec.com.br" target="_blank">José Valim</a> acho que ficou devendo um pouco <em>&#8211; talvez porque, IMHO, soou um tanto quanto marketing da Plataforma</em>. Já a do <a href="http://akitaonrails.com" target="_blank">Akita</a> me surpreendeu. Nem tanto pelo conteúdo <em>&#8211; apesar de indiscutivelmente relevante &#8211;</em>, mas mais pelo formato e desenvoltura. Bem legal mesmo.</p>
<p>Não gostei da palestra do <a href="http://www.nomedojogo.com/" target="_blank">Carlos Brando</a>, achei muito auto-ajuda; mas deixo um ponto positivo pro trecho de <em>Assembly</em> e C que ele codou ao vivo. Aliás, falando em codar ao vivo, a palestra do Nando foi muito boa, com seus slides super descolados e coloridos, mas ele não codou ao vivo. Tadinho do Murphy e sua lei, não paparam essa.</p>
<p><img class="alignnone" title="Minha palestra na sexta-feira" src="http://lh4.ggpht.com/_W8DqIYr194A/TGRd2L8reZI/AAAAAAAAPtk/fLqFeKU68x4/s720/Oxente%20sexta%20feira%20(150).jpg" alt="" width="720" height="480" /></p>
<p>Dessa fez o Kung também não codou ao vivo, como de costume, mas sua palestra foi legal, bem contextualizada, dinâmica e totalmente #<em>devops</em>. Aliás, ela fez tanto sucesso que, depois de terminá-la, ele ficou um tempão trocando idéia e codando com a galera no <em>open space</em>.</p>
<p>Não pude ver a palestra do Rafael Rosa, meu colega de <a href="http://locaweb.com.br" target="_blank">Locaweb</a>, porque estava na do <a href="http://twitter.com/hugobarauna" target="_blank">Hugo Baraúna</a> sobre <em>Project Rescue</em>. Não gostei muito, pra ser sincero, então acabei ficando meio frustrado.</p>
<p>O <a href="http://henriquebastos.net/" target="_blank">Henrique Bastos</a> deu um show de humildade, numa palestra que, sinceramente, eu não esperava muito do tema. Foi excelente. Já a palestra do <a href="http://areacriacoes.com.br/" target="_blank">Daniel Lopes</a>, não gostei não. Gostei do <a href="http://github.com/cavalle/steak" target="_blank">Steak</a>, que eu ainda não conhecia, mas achei a palestra dele meio bala de prata no que diz respeito a testes de aceitação.</p>
<p>A palestra do <a href="http://improveit.com.br/" target="_blank">Vinícius Teles</a> foi legal, mas como eu já tinha visto ele palestrar nos dois últimos anos, na <a href="http://railssummit.com.br/" target="_blank">Rails Summit</a>, não foi muito novidade pra mim. Mesmo assim, uma boa palestra.</p>
<p>Nessa linha de empreendedorismo <em>&#8211; também seguida pelo </em><a href="http://bielsystems.com.br/" target="_blank"><em>Rafael Lima</em></a><em> &#8211;</em>, o <a href="http://twitter.com/alegomes" target="_blank">Alê Gomes</a>, cara muito gente fina, fez uma apresentação meio <em>reworkeana</em>, mas mega divertida. Casquei o bico com ele.</p>
<p>Vi também a palestra da <a href="http://tcamilo.wordpress.com/" target="_blank">Thaís</a>, falando sobre seu dia-a-dia no trabalho, comprometimento e respeito aos colegas. Foi legal.</p>
<p>E por fim, rolou um <em>Q&amp;A</em> com todos os palestrantes, quando foi revelado que somente eu, Akita, CV e <a href="http://www.teamware.com.br/" target="_blank">Juan Bernabó</a> não terminamos a faculdade. Aliás, falando nesse <em>Q&amp;A</em>, rapaz, como tem gente que gosta de falar, hein? Teve palestrante que pegou o microfone e não quis mais largar. Fiquei impressionado.</p>
<h4>Balanço final</h4>
<p>Valeu bastante a pena ter participado dessa conferência, em especial pelas discussões e bate-papos informais.</p>
<p>Ano que vem, quem sabe, nos vemos por lá outra vez!</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/08/16/gerenciando-times-autogerenciaveis-no-oxenterails-2010/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Minha palestra no OxenteRails 2010</title>
		<link>http://leandrosilva.com.br/2010/07/28/minha-palestra-no-oxenterails-2010/</link>
		<comments>http://leandrosilva.com.br/2010/07/28/minha-palestra-no-oxenterails-2010/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 23:01:25 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[agilidade]]></category>
		<category><![CDATA[eventos]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=740</guid>
		<description><![CDATA[Nos dias 6 e 7 de agosto acontecerá em Natal a segunda edição do evento de Rails mais arretado do planeta, o OxenteRails 2010, com palestras técnicas [e não técnicas] de diversas personalidades da comunidade de desenvolvimento de software brasileira e internacional. Se você estiver por lá e quiser ver uma palestra nada técnica, logo depois do [...]]]></description>
			<content:encoded><![CDATA[<p>Nos dias 6 e 7 de agosto acontecerá em Natal a segunda edição do evento de Rails mais arretado do planeta, o <a href="http://oxenterails.com/" target="_blank">OxenteRails 2010</a>, com <a href="http://oxenterails.com/agenda" target="_blank">palestras</a> técnicas [e não técnicas] de diversas <a href="http://oxenterails.com/palestrantes" target="_blank">personalidades</a> da comunidade de desenvolvimento de software brasileira e internacional.</p>
<p><img class="aligncenter" title="OxenteRails 2010" src="http://oxenterails.com/images/bg/bg-banner.jpg" alt="" width="669" height="300" /></p>
<p>Se você estiver por lá e quiser ver uma palestra nada técnica, logo depois do coffe-break, às 16:00, na sala B, <a href="http://oxenterails.com/palestrantes#leandro" target="_blank">vou falar</a> sobre <em>&#8220;gerenciamento de times auto-gerenciáveis&#8221;</em>.</p>
<p>Uma introdução ao assunto da minha palestra são os posts:</p>
<ul>
<li><a href="http://leandrosilva.com.br/2010/02/10/tchau-tchau-gerente-agora-sou-scrum">Tchau, tchau gerente, agora sou Scrum!</a></li>
<li><a href="http://leandrosilva.com.br/2010/04/04/rapidos-conselhos-para-gerentes-humanos/">Rápidos conselhos para gerentes humanos</a></li>
<li><a href="http://leandrosilva.com.br/2010/04/28/voce-ainda-acha-que-programacao-em-par-e-desperdicio/">Você ainda acha que programação em par é desperdício?</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/07/28/minha-palestra-no-oxenterails-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Review da XP 2010</title>
		<link>http://leandrosilva.com.br/2010/07/01/review-da-xp-2010/</link>
		<comments>http://leandrosilva.com.br/2010/07/01/review-da-xp-2010/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 19:10:15 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[agilidade]]></category>
		<category><![CDATA[eventos]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=734</guid>
		<description><![CDATA[Quem me acompanha no Twitter sabe que mês passado estive na 11ª Conferência Internacional de Desenvolvimento Ágil de Software, a.k.a. XP 2010 &#8211; que este ano aconteceu na longínqua Trondheim, na Noruega &#8211;, junto com meu companheiro de Locaweb, Alexandre Freite, figurinha conhecida da comundade ágil de São Paulo. Bem, aos poucos temos escrito sobre o [...]]]></description>
			<content:encoded><![CDATA[<p>Quem me acompanha no <a href="http://twitter.com/codezone" target="_blank">Twitter</a> sabe que mês passado estive na 11ª Conferência Internacional de Desenvolvimento Ágil de Software, <em>a.k.a.</em> <a href="http://xp2010.org/" target="_blank">XP 2010</a> <em>&#8211; que este ano aconteceu na longínqua Trondheim, na Noruega &#8211;</em>, junto com meu companheiro de <a href="http://locaweb.com.br" target="_blank">Locaweb</a>, <a href="http://ccsl.ime.usp.br/agilcoop/membros" target="_blank">Alexandre Freite</a>, figurinha conhecida da comundade ágil de São Paulo.</p>
<p><a title="Bate papo antes do painel por Leandro Silva (CØdeZØne), no Flickr" href="http://www.flickr.com/photos/37125252@N04/4664107923/"><img src="http://farm5.static.flickr.com/4042/4664107923_32b2413df3.jpg" alt="Bate papo antes do painel" width="500" height="375" /></a></p>
<p>Bem, aos poucos temos escrito sobre o evento (<a href="http://blog.locaweb.com.br/archives/2651/nossa-participacao-da-xp-2010-1o-relato" target="_blank">review</a>, <a href="http://blog.locaweb.com.br/archives/2703/a-importancia-das-historias-de-seguranca" target="_blank">palestras</a>, etc) no <a href="http://locaweb.com.br" target="_blank">blog da Locaweb</a> e também coloquei uma porção de <a href="http://www.flickr.com/photos/37125252@N04/sets/72157624046699563" target="_blank">fotos no meu Flickr</a>.</p>
<p>Divirtam-se!</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/07/01/review-da-xp-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Como vi Scrum ser completamente rechaçado em uma grande empresa</title>
		<link>http://leandrosilva.com.br/2010/06/29/como-vi-scrum-ser-completamente-rechacado-em-uma-grande-empresa/</link>
		<comments>http://leandrosilva.com.br/2010/06/29/como-vi-scrum-ser-completamente-rechacado-em-uma-grande-empresa/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 20:57:52 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[agilidade]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=723</guid>
		<description><![CDATA[Esse foi o tema da minha apresentação na Agile Brazil 2010 em Porto Alegre, como havia relatado em outro post aqui no blog. Um pequeno review O evento foi muito bacana, teva ótima organização, boas palestras, tudo muito legal mesmo. Parabéns ao Danilo Sato, ao Hugo Corbucci, à Mariana Bravo e aos demais organizadores. Palestras [...]]]></description>
			<content:encoded><![CDATA[<p>Esse foi o tema da <a href="http://www.slideshare.net/leandrodoze/como-vi-scrum-ser-rechaado-em-uma-grande-empresa" target="_blank">minha apresentação</a> na <a href="http://www.agilebrazil.com/2010/pt/index.html" target="_blank">Agile Brazil 2010</a> em Porto Alegre, como havia relatado em <a href="http://leandrosilva.com.br/2010/05/03/minha-apresentacao-na-agile-brazil-2010/">outro post</a> aqui no blog.</p>
<div id="__ss_4644604" style="width: 425px;"><object id="__sse4644604" 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=scrumfail-agilebrazil2010-100629143548-phpapp02&amp;stripped_title=como-vi-scrum-ser-rechaado-em-uma-grande-empresa" /><param name="name" value="__sse4644604" /><param name="allowfullscreen" value="true" /><embed id="__sse4644604" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=scrumfail-agilebrazil2010-100629143548-phpapp02&amp;stripped_title=como-vi-scrum-ser-rechaado-em-uma-grande-empresa" name="__sse4644604" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<h3>Um pequeno review</h3>
<p>O evento foi muito bacana, teva ótima organização, boas palestras, tudo muito legal mesmo. Parabéns ao Danilo Sato, ao Hugo Corbucci, à Mariana Bravo e aos demais organizadores.</p>
<p><strong>Palestras</strong></p>
<p>As palestras foram boas, mas em geral não trouxeram nada de muito novo. Mesmo o <em>keynote</em> do Martin Fowler, que tocou no assunto de deploy contínuo, não trouxe nada de muito novo. O Guilherme Silveira, da <a href="http://www.caelum.com.br" target="_blank">Caelum</a>, havia <a href="http://blog.caelum.com.br/2010/03/01/o-processo-de-deploy-continuo" target="_blank">blogado</a> em março e feito uma <a href="http://www.slideshare.net/guilhermecaelum/deploy-continuo-integraao-continua-no-basta" target="_blank">apresentação</a> em maio sobre esse tema no evento <a href="http://www.maredeagilidade.com.br/eventos/belo_horizonte/05_2009/programacao.html#guilhermeS" target="_blank">Maré de Agilidade</a>, em BH.</p>
<p>Gostei bastante do tutorial do Paulo Caroli, da ThoughtWorks, sobre <em>Agile Card Wall</em>; da palestra do Franscico Trindade, também da ThoughtWorks, sobre <em>Coaching de Guerrilha</em>; achei interessante a palestra do Manoel Pimentel, da Visão Ágil, sobre <em>Coaching para Liderança de Equipes Ágeis</em>, mas fiquei um pouco entediado com suas dinâmicas; e infelizmente, não pude ver o workshop do Rodrigo Yoshima, da Aspercom, e do Phillip Calçado, da ThoughtWorks, sobre <em>Modelagem Ágil</em>, porque eles baleiraram a sala!</p>
<p>O <em>keynote</em> do Klaus Wuestefeld foi bem divertido <em>&#8211; feito no Notepad! &#8211;</em> e, como sempre, subversivo!</p>
<p><strong>Networking</strong></p>
<p>Mas apesar das boas palestras, a parte mais interessante mesmo, na minha opinião, foram os papos informais nos intervalos das palestras, almoço e final do dia. Papos informais são uma excelente maneira de trocar experiências, ter <em>insights</em> e conhecer pessoas talentosas. Rolou de tudo: liderança de times ágeis, auto-gerenciamento, débito técnico, desafio de lidar com sistemas legados, gerenciamento de iterações, Kanban, métricas, e por aí vai. Muito proveitoso.</p>
<h3>Dicas de reviews</h3>
<p>Sugiro fortemente que você leia os <a href="http://rafaelrosafu.com/tag/agilebrazil2010" target="_blank">reviews</a> feitos pelo <a href="http://twitter.com/rafaelrosafu" target="_blank">Rafael Rosa</a>, um dos meus colegas de <a href="http://www.locaweb.com.br" target="_blank">Locaweb</a> que também estiveram por lá.</p>
<p>Outra dica de leitura é o <a href="http://papodecorredor.wordpress.com/2010/06/29/resumo-curso-cspo-dia-1/" target="_blank">review</a> que o <a href="http://twitter.com/alanrrb" target="_blank">Alan</a>, também da Locaweb, fez do curso de CSPO que ele fez na prévia da conferência.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/06/29/como-vi-scrum-ser-completamente-rechacado-em-uma-grande-empresa/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Mais produtividade com uma área de trabalho maior</title>
		<link>http://leandrosilva.com.br/2010/05/14/mais-produtividade-com-uma-area-de-trabalho-maior/</link>
		<comments>http://leandrosilva.com.br/2010/05/14/mais-produtividade-com-uma-area-de-trabalho-maior/#comments</comments>
		<pubDate>Fri, 14 May 2010 05:53:19 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[agilidade]]></category>
		<category><![CDATA[pragmatismo]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=697</guid>
		<description><![CDATA[Já faz um tempão que li um post do Martin Fowler que falava sobre o aumento de produtividade resultante do uso de dois monitores grandes, em lugar de um único e pequeno monitor. Na época, achei bem interessante a idéia, mas como estava totalmente fora do meu alcance ter uma área de trabalho dessas &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Já faz um tempão que li um post do <a href="http://martinfowler.com" target="_blank">Martin Fowler</a> que falava sobre o aumento de produtividade resultante do uso de dois monitores grandes, em lugar de um único e pequeno monitor. Na época, achei bem interessante a idéia, mas como estava totalmente fora do meu alcance ter uma área de trabalho dessas <em>&#8211; em meu emprego da época &#8211;</em>, preferi simplesmente deixar pra lá. Mas ultimamente, mesmo adorando a tela do meu MacBook 13.3&#8221; <em>&#8211; que passei a levar pro meu emprego atual &#8211;</em>, de tanto ver <a href="http://leandrosilva.com.br/2010/04/28/voce-ainda-acha-que-programacao-em-par-e-desperdicio">pessoas ao meu lado</a> usando dois monitores grandes, de maneira tão inteligente e produtiva, passeir a querer testar isso também.</p>
<h3>A deixa final</h3>
<p>Como já disse algumas vezes aqui no blog, em <a href="http://leandrosilva.com.br/2010/02/10/tchau-tchau-gerente-agora-sou-scrum/">meus times</a>, além de alguns legados, lidamos basicamente com <a href="http://rubyonrails.org" target="_blank">Ruby on Rails</a>, <a href="http://msdn.microsoft.com/pt-br/vcsharp/default.aspx" target="_blank">C#</a>/<a href="http://www.asp.net/mvc" target="_blank">ASP.NET MVC</a> e <a href="http://en.wikipedia.org/wiki/Git_(software)" target="_blank">Git</a> como <a href="http://en.wikipedia.org/wiki/Distributed_revision_control_system" target="_blank">DVCS</a>. Então, além de <a title="Eu uso TextMate! #piadaInterna" href="http://macromates.com/" target="_blank">um bom editor de textos</a> e um terminal, precisamos também de um <a href="http://www.microsoft.com/visualstudio/en-us/" target="_blank">Visual Studio</a> <em>&#8211; com </em><a href="http://www.jetbrains.com/resharper/" target="_blank"><em>ReSharper</em></a><em>, porque sem isso, ele não é nada &#8211;</em> que, infelizmente, para usuários de Mac e Linux, só roda em Windows. Tentei resolver isso usando <a href="http://www.mono-project.com" target="_blank">Mono</a>, mas acabei desistindo <em>&#8211; por enquanto, porque vai ter revanche!</em></p>
<p>Bem, resolvi então usar o <a href="http://www.parallels.com/products/desktop/" target="_blank">Parallels Desktop 5</a> para rodar o <a href="http://www.microsoft.com/visualstudio/en-us/" target="_blank">Visual Studio 2010</a> no conforto do meu Mac e, de tabela, adicionar mais um monitor à minha área de trabalho.</p>
<h3>Meu <em>space</em> de programação</h3>
<p>Pra mim ficou fantástico! Porque no meu <em>space</em> de programação deixei o Visual Studio maximizado na tela grande (à esquerda), rodando no Windows, que por sua vez está rodando no Parallels Desktop, em tela cheia e com <em>look &amp; feel</em> de Mac OS X; e na tela do Mac (à direita) <em>&#8211; que eu adoro! &#8211;</em>, deixei o terminal, onde posso interagir com o Git e tudo mais. Yay!</p>
<div class="wp-caption alignnone" style="width: 510px"><a title="Mac + VS por Leandro Silva (CØdeZØne), no Flickr" href="http://www.flickr.com/photos/37125252@N04/4605166123/"><img src="http://farm5.static.flickr.com/4068/4605166123_14a4e8ca76.jpg" alt="Mac + VS" width="500" height="375" /></a><p class="wp-caption-text">Visual Studio 2010 no Windows (à esquerda); Terminal no Mac OS X (à direita)</p></div>
<p>E tem mais: quando não precisar usar o Visual Studio por um longo tempo, tenho duas alternativas:</p>
<p>- desligar o Windows;<br />
- ou simplesmente pausá-lo no Parallels Desktop.</p>
<p>E se for o caso, arrastar o TextMate pra tela grande.</p>
<p>Ficou muito bom isso, o Parallels Desktop é demais!</p>
<h3><strong>Meus outros </strong><strong><em>spaces</em></strong></h3>
<p>Uma área de trabalho dessas não serve só pra programação. Hoje mesmo precisava editar um wiki enquanto olhava dados em uma planilha. Sem problemas! Planilha na tela grande e wiki sendo editado na tela do Mac. Fantástico!</p>
<p>Só faz um dia que estou com essa área de trabalho expandida e sinto que não posso mais trabalhar sem ela. <em>hehehe</em></p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/05/14/mais-produtividade-com-uma-area-de-trabalho-maior/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Erlang: system_info pode te dizer coisas legais</title>
		<link>http://leandrosilva.com.br/2010/05/09/erlang-system_info-pode-te-dizer-coisas-legais/</link>
		<comments>http://leandrosilva.com.br/2010/05/09/erlang-system_info-pode-te-dizer-coisas-legais/#comments</comments>
		<pubDate>Sun, 09 May 2010 05:01:30 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[erlang]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=676</guid>
		<description><![CDATA[Ontem à noite, antes da sessão pão de queijo com chá mate aqui em casa, resolvi brincar um pouco com uns módulos de baixo nível de Erlang, porque de manhã havia me lembrado de um post bem legal, de um cara chamado Krzysztof Kliś, que li no ano passado. (Aliás, aproveitei e colei o código dele [...]]]></description>
			<content:encoded><![CDATA[<p>Ontem à noite, antes da sessão <a href="http://twitter.com/codezone/status/13636980898" target="_blank">pão de queijo com chá mate</a> aqui em casa, resolvi brincar um pouco com uns <a href="http://www.erlang.org/doc/man/os_mon_app.html" target="_blank">módulos de baixo nível</a> de Erlang, porque de manhã havia me lembrado de <a href="http://weblambdazero.blogspot.com/2008/08/web-services-need-balance.html" target="_blank">um post</a> bem legal, de um cara chamado <a href="http://www.blogger.com/profile/03518001329895236884" target="_blank">Krzysztof Kliś</a>, que li no ano passado. (Aliás, aproveitei e <a href="http://gist.github.com/394820" target="_blank">colei o código</a> dele no <a href="http://gist.github.com/leandrosilva" target="_blank">meu gist</a>, pra favorecer a leitura com <em>syntax highlighting</em>.)</p>
<p>Bem, dessa brincadeira saiu o módulo <a href="http://github.com/leandrosilva/erlang-learning/blob/master/getting_system_info/src/system_info.erl" target="_blank"><strong>system_info</strong></a>, que você pode conferir no <a href="http://github.com/leandrosilva" target="_blank">meu GitHub</a>, no projeto de estudo <a href="http://github.com/leandrosilva/erlang-learning/tree/master/getting_system_info/" target="_blank">getting_system_info</a>.</p>
<h3>O que ele faz?</h3>
<p>Basicamente, ele oferece informações de load da máquina, quantidade de processos rodando e uso de memória do nó atual ou do cluster. Você pode ter mais detalhes sobre o formato dessas informações dando uma olhada nos <a href="http://github.com/leandrosilva/erlang-learning/blob/master/getting_system_info/test/system_info_test.erl" target="_blank">testes</a> do projeto.</p>
<h3>Qual a utilidade disso?</h3>
<p>Como disse, escrevi esse código depois de me lembrar do post do Krzysztof Kliś sobre seu <em>load balancer </em>[de apenas 48 linha]. Escrevi por pura diversão.</p>
<p>Mas, sim, se amanhã ou depois eu precisar escrever algum <em>load balancer</em> ou aplicativo que monitore load, processos e memória do meu cluster, ele poderá me servir de <em>helper</em>.</p>
<h3>Dá pra testar e ver se funciona?</h3>
<p>Sim, a menos que você seja usuário de Windows. Não, não é preconceito, é que algumas funções que uso não estão disponíveis pra Windows, apenas pra sistemas operacionais <em><a href="http://en.wikipedia.org/wiki/Unix-like" target="_blank">Unix-like</a></em>.</p>
<p>Você pode fazer isso de duas maneiras:</p>
<p><strong>1- Rodando os testes</strong></p>
<p>Clone o <a href="http://github.com/leandrosilva/erlang-learning" target="_blank">projeto</a> <em>&#8211; o único problema é que você vai levar uma porção de outros projetos de brinde. I&#8217;m sorry! &#8211;</em> e em seu diretório raíz, compile e rode os testes.</p>
<pre class="brush: bash;">
$ ./compile.sh
$ ./test.sh
</pre>
<p>Só que dessa maneira você não consegue ver nenhuma informação útil. Vamos à segunda maneira.</p>
<p><strong>2- Rodando as funções no Eshell</strong></p>
<p>Depois de devidamente clonado e compilado, crie um cluster com três nós. (Se não souber como a arquitetura de cluster de runtimes Erlang funciona, tenho <a href="http://leandrosilva.com.br/2010/05/08/erlang-programacao-distribuida-de-maneira-simples/" target="_self">um post introdutório pra você</a>.)</p>
<p>Na raíz do projeto:</p>
<p>a. Inicie três nós, um em cada terminal</p>
<pre class="brush: bash;">
$ erl -sname n1 -pa ebin/
</pre>
<pre class="brush: bash;">
$ erl -sname n2 -pa ebin/
</pre>
<pre class="brush: bash;">
$ erl -sname n3 -pa ebin/
</pre>
<p>b. No <em>n1</em>, estabeleça conexão entre os nós</p>
<pre class="brush: bash;">
(n1@codezone)1&gt; net_kernel:connect('n2@codezone').
(n1@codezone)2&gt; net_kernel:connect('n3@codezone').
</pre>
<p>Agora, todos os três nós estão conectados uns aos outros, já que, por padrão, os nós compartilham suas conexões uns com os outros.</p>
<p>c. Ainda no <em>n1</em>, verifique as informações de <em>system_info</em></p>
<pre class="brush: bash;">
(n1@codezone)3&gt; system_info:node_load().
(n1@codezone)4&gt; system_info:cluster_load().
(n1@codezone)5&gt; system_info:node_processes().
(n1@codezone)6&gt; system_info:cluster_processes().
(n1@codezone)7&gt; system_info:node_memory().
(n1@codezone)8&gt; system_info:cluster_memory().
</pre>
<p>Agora, sim, você tem informações a valer!</p>
<h3>Gostou?</h3>
<p>Espero que sim, porque <em><strong>system_info</strong></em> pode te dizer coisas legais. <em>=)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/05/09/erlang-system_info-pode-te-dizer-coisas-legais/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Erlang: Programação Distribuída de maneira simples</title>
		<link>http://leandrosilva.com.br/2010/05/08/erlang-programacao-distribuida-de-maneira-simples/</link>
		<comments>http://leandrosilva.com.br/2010/05/08/erlang-programacao-distribuida-de-maneira-simples/#comments</comments>
		<pubDate>Sat, 08 May 2010 05:38:54 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[erlang]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=645</guid>
		<description><![CDATA[Fazia tempo que estava para blogar algo sobre como é fácil fazer programação distribuída com Erlang. Derrepente, hoje, acabei perdendo o sono e eis aqui o post. O mais simples do mundo Pra começar, vamos ver o exemplo mais simples de computação distribuída que se pode fazer e aprender alguma coisa com ele. Ele é [...]]]></description>
			<content:encoded><![CDATA[<p>Fazia tempo que estava para blogar algo sobre como é fácil fazer <a href="http://www.erlang.org/doc/reference_manual/distributed.html" target="_blank">programação distribuída</a> com Erlang. Derrepente, hoje, acabei perdendo o sono e eis aqui o post.</p>
<h3>O mais simples do mundo</h3>
<p>Pra começar, vamos ver o exemplo mais simples de <a href="http://en.wikipedia.org/wiki/Distributed_computing" target="_blank">computação distribuída</a> que se pode fazer e aprender alguma coisa com ele. Ele é como um simples chat. Pois muito bem, vejamos!</p>
<p><strong>Fazendo o setup</strong></p>
<p>No terminal, inicie um Eshell com o seguinte comando:</p>
<pre class="brush: bash;">
$ erl -sname jose
</pre>
<p>E num outro terminal, inicie outro Eshell com:</p>
<pre class="brush: bash;">
$ erl -sname maria
</pre>
<p>Agora vá no primeiro terminal, no Eshell do José, e execute o seguinte comando:</p>
<pre class="brush: bash;">
(jose@codezone)1&gt; register(console_jose, self()).
</pre>
<p>E no segundo terminal, no Eshell da Maria, faça o mesmo:</p>
<pre class="brush: bash;">
(maria@codezone)1&gt; register(console_maria, self()).
</pre>
<p>Tudo bem, setup feito, hora do bate-papo!</p>
<p><strong>Jogando conversa fora</strong></p>
<p><em>&#8220;Ei José, diga oi&#8230;&#8221;</em></p>
<pre class="brush: bash;">
(jose@codezone)2&gt; {console_maria, 'maria@codezone'} ! &quot;Oi Maria, tudo bem?&quot;.
</pre>
<p>Veja o terminal da Maria. O que aconteceu? Nada? A mensagem não chegou? Chegou, chegou sim. Vejamos:</p>
<pre class="brush: bash;">
(maria@codezone)2&gt; regs().
</pre>
<p>Na primeira coluna, procure pelo processo <em>console_maria</em>. Achou? Agora veja na última coluna desse processo. Que número tem aí? 1? Pois é, isso nos indica uma coisa. Ainda nesse Eshell, execute o seguinte comando:</p>
<pre class="brush: bash;">
(maria@codezone)3&gt; flush().
</pre>
<p>Opa! E agora? <em>Shell got &#8220;Oi Maria, tudo bem?&#8221;</em>, certo? Taí a mensagem que a Maria recebeu do José.</p>
<p>Agora, que tal a Maria ser gentil com o José e responde-lo cordialmente?</p>
<pre class="brush: bash;">
(maria@codezone)4&gt; {console_jose, 'jose@codezone'} ! &quot;Vou bem, e voce?&quot;.
</pre>
<p>Se você quiser, pode ver o registro de processos no Eshell do José, como fez anteriormente com o da Maria. Ou pode simplesmente:</p>
<pre class="brush: bash;">
(jose@codezone)3&gt; flush().
</pre>
<p>E receber a mensagem <em>Shell got &#8220;Vou bem, e voce?&#8221;</em>.</p>
<h3>Entendendo tudo isso</h3>
<p>Por sorte, não há muito o que explicar até aqui <em>&#8211; já que fizemos o exemplo mais simples do mundo.</em> Uff!</p>
<p><strong>Que tal começar do começo? Vamos entender os passos de setup?</strong></p>
<p><em>1- A primeira coisa que fizemos foi iniciar dois Eshell que, na verdade, tornaram-se dois nós do nosso cluster de runtimes Erlang.</em></p>
<p>Todas as vezes que você inicia um Eshell com a flag <em>-sname</em>, o que você está fazendo é criar um <a href="http://www.erlang.org/doc/reference_manual/distributed.html#id2280079" target="_blank">nó de runtime Erlang</a> na sua rede. Na verdade, isso pode ser feito também com a flag <em>-name</em>.</p>
<p>Qual a diferença entre elas?</p>
<p><em><span style="color: #800000;">-sname</span></em> cria o nó e dá a ele um <em>&#8220;short name&#8221;</em>: <span style="color: #000080;">nome_do_no@host<span style="color: #000000;">;</span></span><br />
<em><span style="color: #800000;">-name</span></em>, pelo contrário, cria o nó dá a ele um <em>&#8220;long name&#8221;</em>: <span style="color: #000080;">nome_do_no@ip_address</span> ou <span style="color: #000080;">nome_do_no@host.local<span style="color: #000000;">, no caso de rede local.</span></span></p>
<p>Você pode perfeitamente iniciar diversos nós em uma mesma máquina, como fizemos a pouco. No entanto, você não pode duplicar os nomes dos nós, uma vez que estes são usados para identificá-los no cluster e torná-los comunicáveis uns com os outros.</p>
<blockquote><p><em>&#8220;Lembrando que o nome dos nós são sempre sufixados pelo nome/ip do host, não há problema algum em ter o mesmo nome de nó em máquinas diferentes.&#8221;</em></p></blockquote>
<p>Uma outra coisa interessante de aprender aqui é como os nós se comunicam. Toda comunicação entre nós é feita por um <em>daemon</em> chamado <a href="http://www.erlang.org/doc/man/epmd.html" target="_blank">epmd</a>. Este programa faz parte do sistema de runtime Erlang e tem um papel fundamental em sua arquitetura de clusters, porque sempre que &#8220;o primeiro nó&#8221; é iniciado numa máquina, automaticamente, ele também é iniciado, caso ainda não tenha sido, e passa a escutar mensagens na porta 4369 e rotea-las para o nó apropriado.</p>
<blockquote><p><em>&#8220;Independente de quantos nós estejam rodando numa máquina, sempre haverá apenas uma instância do <strong>epmd</strong> rodando.&#8221;</em></p></blockquote>
<p>Por fim, ainda sobre o setup dos nós do cluster, há uma outra flag que não demonstrei no exemplo acima, mas que é bem interessante e você depois pode pesquisar a respeito.</p>
<p><em><span style="color: #800000;">-setcookie</span></em> define um <em>&#8220;secret cookie&#8221;</em> que serve como um tipo de <em>token</em> para autenticar a comunicação entre os nós do <em>cluster</em>. Isso quer dizer que, somente os nós iniciados com um mesmo <em>cookie</em> podem se comunicar. Por outro lado, sempre que um nó é iniciado sem especificar um <em>cookie</em>, o runtime Erlang toma a liberdade de cria um e gravar no arquivo ~/.erlang.cookie. Nestes casos, todos os nós não iniciados com um <em>cookie</em> compartilharão o mesmo <em>cookie</em> guardado nesse arquivo.</p>
<p>No caso do nosso exemplo ultra simples, um <em>cookie</em> poderia ser usado para criar uma sala de bate-papo, onde: se um nós é iniciado informando um <em>cookie</em>, ele entra na sala equivalente; no entanto, quando não informado, vai para uma sala genérica.</p>
<p>Interessante? Pois é&#8230; E esse assunto acaba puxando o da flag <em>-hidden</em>, que você pode aproveitar e pesquisar também.</p>
<p><em>2- A segunda coisa que fizemos no setup foi registrar um processo alvo de nossas mensagens.</em></p>
<p>Como a idéia aqui é explicar <em>&#8211; um pouco, porque ainda há uma porção de coisas que poderiam ser faladas, mas isso deixaria esse post imenso! Dê uma olhada na </em><a href="http://www.erlang.org/doc/reference_manual/distributed.html" target="_blank"><em>documentação oficial</em></a><em> &#8211;</em> como funciona a arquitetura de cluster de runtimes Erlang e mostrar como este provê uma maneira simples de programação distribuída, preferi não escrever um programa de chat, mas apenas usar o próprio Eshell para isso.</p>
<p>Com este pré-requisito em mente, o que fiz foi apenas <a href="http://www.erlang.org/doc/reference_manual/processes.html#id2279433" target="_blank">registrar o próprio processo</a> do Eshell <em>&#8211; usando <strong>self()</strong>, que você <a href="http://leandrosilva.com.br/2009/09/26/entendendo-um-tiquinho-de-self" target="_self">entende como </a></em><em><a href="http://leandrosilva.com.br/2009/09/26/entendendo-um-tiquinho-de-self" target="_self">funciona</a> &#8211;</em> com um nome especifico em cada nó do cluster (<em>console_jose</em> para um e <em>console_maria</em> em o outro) para fazer a troca de mensagens entre eles.</p>
<p><strong>E o bate-papo, como é que rolou?</strong></p>
<p>Essa é a parte mais fácil da coisa, na minha opinião. Se você já lidou com <a href="http://www.erlang.org/doc/reference_manual/processes.html#id2279365" target="_blank">processos</a> em Erlang, vai tirar de letra.</p>
<p><em>1- Trocamos mensagens entre os dois processos de maneira bem semelhante ao que fazemos normalmente com processos contidos num único runtime.</em></p>
<p>A única diferença aqui é que, em vez de simplesmente codarmos algo como <em><strong>console_jose ! &#8220;Show de bola&#8221;</strong></em>, codamos <em><strong>{console_jose, &#8216;jose@codezone&#8217;} ! &#8220;Show de bola&#8221;</strong></em>. Ou seja, além no nome do processo, informamos também em que nó do cluster ele está, tudo em uma tupla.</p>
<p>Um exercício legal de você fazer é o seguinte&#8230;</p>
<p>a. No Eshell da Maria execute:<em><strong><br />
<span style="font-weight: normal;"><span style="font-style: normal;"> </span></span></strong></em></p>
<pre class="brush: bash;">
(maria@codezone)5&gt; console_maria ! &quot;Show de bola&quot;.
(maria@codezone)6&gt; flush().
</pre>
<p><em><strong><span style="font-weight: normal;"><span style="font-style: normal;">b. Depois, ainda no Eshell dela, execute:</span></span></strong></em></p>
<pre class="brush: bash;">
(maria@codezone)7&gt; console_jose ! &quot;Show de bola&quot;.
</pre>
<p>O que aconteceu? Na primeira execução, o Eshell da Maria recebeu uma mensagem, correto? Mas na segunda execução, o Eshell &#8220;crasheou&#8221;. Por quê? Porque ele não reconheceu o átomo <em>console_jose</em> como sendo o nome de um processo, uma vez que o processo registrado como <em>console_jose</em> está em outro nó do cluster. Aliás, como o Eshell da Maria crasheou, se você tentar enviar mensagens a ele novamente, como fez anteriormente e havia funcionado, ele vai crashear novamente, porque a referência ao processo que havia sido registrada tornou-se inválida.</p>
<p>Você precisa ficar muito atento a isso, porque quando você manda um mensagem para um processo que está em outro nó, mesmo que ele não exista, você não receberá erro <em>&#8211; exatamente como acontece com envio de mensagens pra processos locais inexistentes.</em></p>
<p>Quer ver? Faça o seguinte teste:</p>
<pre class="brush: bash;">
(maria@codezone)8&gt; {console_jose_123, 'jose_abc@codezone_xyz'} ! &quot;Nao vai crashear&quot;.
</pre>
<p>E agora, o que aconteceu? Nada!</p>
<p><span style="font-weight: normal;"><span style="font-style: normal;"><em>2- Outra coisa que fizemos foi usar os truques de flush()<strong> </strong>e regs(), mas esses já são bem conhecidos.</em></span></span></p>
<p><span style="font-weight: normal;"><span style="font-style: normal;">Se você costuma usar o Eshell, com certeza, já deve ter usado <strong><em>flush()</em></strong> e <strong><em>regs()</em></strong>. Caso ainda não tenha usado, aqui vai um resumo:</span></span></p>
<p><span style="font-weight: normal;"><span style="font-style: normal;">- <em><span style="color: #000080;">flush()</span></em> descarrega as mensagens contidas na caixa postal do Eshell (que como você sabe, nada mais é do que um processo Erlang qualquer);<br />
- <em><span style="color: #000080;">regs()</span></em> lista os processos registrados do runtime em execução.</span></span></p>
<h3>Só o gostinho</h3>
<p><span style="font-weight: normal;"><span style="font-style: normal;">Como disse em algum canto nesse post, ainda há bastante o que falar sobre programação distribuída com Erlang. Só pra variar, esse post foi só pra dar o gostinho. Ainda há muito mais!</span></span></p>
<p><span style="font-weight: normal;"><span style="font-style: normal;">Bem, quem sabe qualquer dia desses não perco o sono novamente e escrevo um pouco mais sobre o assunto. Quem sabe?</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/05/08/erlang-programacao-distribuida-de-maneira-simples/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Minha apresentação na Agile Brazil 2010</title>
		<link>http://leandrosilva.com.br/2010/05/03/minha-apresentacao-na-agile-brazil-2010/</link>
		<comments>http://leandrosilva.com.br/2010/05/03/minha-apresentacao-na-agile-brazil-2010/#comments</comments>
		<pubDate>Mon, 03 May 2010 15:23:18 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[agilidade]]></category>
		<category><![CDATA[eventos]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=635</guid>
		<description><![CDATA[Há dois meses postei aqui minhas duas propostas para o evento Agile Brazil 2010. Uma delas foi aceita &#8212; &#8220;Como vi Scrum ser completamente rechaçado em uma grande empresa&#8221;. Qual a idéia dessa palestra? Bem, nem só de acertos vive um agilista &#8211; os contadores de &#8220;case&#8221;, sim; os agilistas, não. Aliás, pelo contrário, frequentemente [...]]]></description>
			<content:encoded><![CDATA[<p>Há dois meses postei aqui <a href="http://leandrosilva.com.br/2010/03/06/duas-propostas-para-o-agile-brazil-2010/" target="_self">minhas duas propostas</a> para o evento <a href="http://agilebrazil.com" target="_blank">Agile Brazil 2010</a>. Uma delas foi aceita &#8212; <em>&#8220;Como vi Scrum ser completamente rechaçado em uma grande empresa&#8221;</em>.</p>
<p><strong>Qual a idéia dessa palestra?</strong></p>
<p>Bem, nem só de acertos vive um agilista <em>&#8211; os contadores de &#8220;case&#8221;, sim; os agilistas, não.</em> Aliás, pelo contrário, frequentemente aprendemos mais com nossos erros do que acerto. Porque muitas vezes nossos acertos são frutos de pura sorte e sequer conseguimos reproduzi-los novamente.</p>
<p>Dito isto, minha palestra não é sobre <em>&#8220;dar carrinho&#8221;</em> nos amigos que estiveram comigo nessa experiência, nem apontar culpados ou citar nomes. Não! Minha palestra é sobre apontar erros que cometemos <em>&#8211; óbvio, querendo acertar;</em> é sobre lições aprendidas <em>&#8211; boas e ruins.</em></p>
<p><strong>Essa apresentação é a visão e opinião de todos?</strong></p>
<p>Não sei exatamente. Vou falar única e exclusivamente da minha visão e opinião sobre os fatos.</p>
<p><strong>Que mais?</strong></p>
<p>Nos vemos lá, ué! \o/</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/05/03/minha-apresentacao-na-agile-brazil-2010/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Você ainda acha que programação em par é desperdício?</title>
		<link>http://leandrosilva.com.br/2010/04/28/voce-ainda-acha-que-programacao-em-par-e-desperdicio/</link>
		<comments>http://leandrosilva.com.br/2010/04/28/voce-ainda-acha-que-programacao-em-par-e-desperdicio/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 20:18:05 +0000</pubDate>
		<dc:creator>Leandro Silva</dc:creator>
				<category><![CDATA[agilidade]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://leandrosilva.com.br/?p=616</guid>
		<description><![CDATA[Como o Vinícius Teles sabiamente disse há alguns anos, &#8220;Programação em par é uma das práticas mais conhecidas e mais polêmicas utilizadas pelos que adotam o Extreme Programming&#8220;. Emprestando mais algumas de suas palavras, o motivo é que: &#8220;Ela sugere que todo e qualquer código produzido no projeto seja sempre implementado por duas pessoas juntas, [...]]]></description>
			<content:encoded><![CDATA[<p>Como o <a href="http://twitter.com/viniciusteles" target="_blank">Vinícius Teles</a> sabiamente <a href="http://improveit.com.br/xp/praticas/programacao_par" target="_blank">disse</a> há alguns anos, <em>&#8220;Programação em par é uma das práticas mais conhecidas e mais polêmicas utilizadas pelos que adotam o <a href="http://improveit.com.br/xp" target="_blank">Extreme Programming</a>&#8220;<span style="font-style: normal;">. Emprestando mais algumas de suas palavras, o motivo é que:</span></em></p>
<blockquote><p><em>&#8220;Ela sugere que todo e qualquer código produzido no projeto seja sempre implementado por duas pessoas juntas, diante do mesmo computador, revezando-se no teclado.</em></p>
<p><em>À primeira vista, a programação em par parece ser uma prática fadada ao fracasso e ao desperdício. Afinal, embora possa haver benefícios, temos a impressão de que ela irá consumir mais recursos ou irá elevar o tempo do desenvolvimento. Entretanto, não é exatamente isso o que ocorre.&#8221;</em></p></blockquote>
<p>Não, não é isso mesmo!</p>
<h3>Nossa experiência</h3>
<p>Há quatro meses decidimos, de uma vez por todas, levarmos realmente à sério esse negócio de programação em par aqui nos times de desenvolvimento dos <a href="http://leandrosilva.com.br/2010/02/10/tchau-tchau-gerente-agora-sou-scrum/">sistemas centrais</a> da <a href="http://www.locaweb.com.br" target="_blank">Locaweb</a>. De imeditato, optamos pelo caminho mais eficaz: reduzimos pela metade o número de máquinas dos times. Sim, quase que do dia para a noite, passamos a ter apenas e  tão-somente uma máquina para cada dois desenvolvedores.</p>
<p><strong>Estações de pareamento: como é que é isso?</strong></p>
<p>Desde que fizemos a redução de 50% de nossas estações de trabalho, passamos a ter as chamadas <em>estações de pareamento</em>, máquinas destinadas exclusivamente para trabalho.</p>
<p><a title="Galera de Sistemas Centrais pareando por Leandro Silva (CØdeZØne), no Flickr" href="http://www.flickr.com/photos/37125252@N04/4560824109/"><img src="http://farm4.static.flickr.com/3652/4560824109_87504824da.jpg" alt="Galera de Sistemas Centrais pareando" width="500" height="375" /></a></p>
<p><em>Estações de pareamento</em> precisam ter:</p>
<p>- usuário genérico para login;<br />
- script para <em>settar</em> no <a href="http://git-scm.com/" target="_blank">git</a> o dupla atual;<br />
- configuração padrão de desktop, diretórios e ferramentas;<br />
- apenas o instante messager de trabalho;<br />
- apenas o cliente de e-mail de trabalho;<br />
- acesso total à Internet;<br />
- idealmente: 2 teclados, 2 mouses e 2 monitores (grandes!).</p>
<p>Mas não devem ter:</p>
<p>- arquivos pessoais;<br />
- programas de distração.</p>
<p><a title="Outra dupla de Sistemas Centrais por Leandro Silva (CØdeZØne), no Flickr" href="http://www.flickr.com/photos/37125252@N04/4561451692/"><img src="http://farm4.static.flickr.com/3632/4561451692_880d72c8a3.jpg" alt="Outra dupla de Sistemas Centrais" width="500" height="375" /></a></p>
<p>Bem, não está diretamente associado ao modelo de <em>estações de pareamento</em>, mas é bem importante também que as duplas tenham ao seu lado o monitor da <a href="http://improveit.com.br/xp/praticas/integracao" target="_blank">integração contínua</a> de seu time, para ter sempre à vista o feedback dos builds. No nosso caso, temos monitores suspensos como o que pode ser visto na foto ao lado <em>&#8211; de preferência, sempre verdinhos!</em></p>
<p><strong>Estação de relax: tem isso, é?</strong></p>
<p>Junto com a idéia das <em>estações de pareamento</em> também adotamos a idéia de <em>estação de relax</em>. Atualmente temos apenas uma, dado o tamanho de nossa equipe.</p>
<p>A <em>estação de relax</em> é uma máquina com acesso total à Internet para a galera relaxar um pouco durante a jornada de trabalho, acessar e-mail pessoal, redes sociais, internet banking, enfim, o que quiserem e bem entenderem. Acesso total à qualquer hora do dia!</p>
<p><strong>O que temos colhido com isso?</strong></p>
<p>Até agora só ganhamos! Ganhamos produtividade, qualidade, propriedade coletiva de código, padronização, e por aí vai.</p>
<p>Desperdício isso? Não, <span style="text-decoration: line-through;">acho</span> com certeza não.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandrosilva.com.br/2010/04/28/voce-ainda-acha-que-programacao-em-par-e-desperdicio/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
