<?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>Milfont Consulting</title>
	<atom:link href="http://www.milfont.org/tech/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.milfont.org/tech</link>
	<description>Além dos limites da WEB!</description>
	<lastBuildDate>Wed, 25 Aug 2010 20:09:17 +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>Exploit que redireciona para Bablo me uk</title>
		<link>http://www.milfont.org/tech/2010/08/19/exploit-que-redireciona-para-bablo-me-uk/</link>
		<comments>http://www.milfont.org/tech/2010/08/19/exploit-que-redireciona-para-bablo-me-uk/#comments</comments>
		<pubDate>Fri, 20 Aug 2010 00:09:55 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[seguranca]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1043</guid>
		<description><![CDATA[Dica rápida para não caírem feito um pato como eu caí.  Hoje fui pesquisar um link do meu próprio blog pelo google e descobri que meu site &#8220;/tech&#8221; inteiro havia sido removido. Pior, o cache do google apontava para um lance estranho. Conferi na ferramenta para webmaster do google e verifiquei que o Googlebot era [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"></div><p>Dica rápida para não caírem feito um pato como eu caí.  Hoje fui pesquisar um link do meu próprio blog pelo google e descobri que meu site &#8220;/tech&#8221; inteiro havia sido removido. Pior, o cache do google apontava para um lance estranho.</p>
<p>Conferi na ferramenta para <a href="https://www.google.com/webmasters/tools/">webmaster do google</a> e verifiquei que o Googlebot era redirecionado para um endereço &#8220;bablo .me .uk&#8221; e as vezes esse endereço se camuflava em outros.</p>
<p>Usando  &#8221;curl -v -A Googlebot http://www.milfont.org/tech&#8221; eu recebia a mensagem:<br />
<code><br />
...<br />
* HTTP 1.0, assume close after body<br />
&lt; HTTP/1.0 301 Moved Permanently<br />
&lt; Date: Thu, 19 Aug 2010 23:55:13 GMT<br />
&lt; Server: Apache<br />
&lt; Location: http://bablo .me .uk/#....<br />
...<br />
</code></p>
<p>Só depois de muita surra procurando nos .htaccess e .php da vida que encontrei <a href="http://blog.unmaskparasites.com/2009/01/19/exploit-redirects-googlebot-to-malware-sites-bablo-me-uk/">nesse link</a> o comentário <a href="http://blog.unmaskparasites.com/2009/01/19/exploit-redirects-googlebot-to-malware-sites-bablo-me-uk/#comment-129">que me salvou</a>.</p>
<p>Procurando com find -name &#8220;*.php&#8221; | xargs grep -E &#8220;eval&#8221; eu encontrei escondido no wp-config.php, pior, estava com muitos espaços para a direita dificultando a visualização:</p>
<p><code><br />
./wp-config.php:                                                eval(base64_decode('ZXJ....<br />
</code></p>
<p>Sei lá quanto tempo procurando essa desgraça, fica a dica se passarem pelo menos tormento. Revisei todas as permissões e atualizei o wordpress, coisa que deveria ter feito há tempos, mas o preguiçoso trabalha mais do que o esperto.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2010/08/19/exploit-que-redireciona-para-bablo-me-uk/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Saiba perguntar!</title>
		<link>http://www.milfont.org/tech/2010/08/07/saiba-perguntar/</link>
		<comments>http://www.milfont.org/tech/2010/08/07/saiba-perguntar/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 13:19:52 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[crowds]]></category>
		<category><![CDATA[crowd]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1019</guid>
		<description><![CDATA[Especificamente no dia 22 de Junho de 2010 eu li uma mensagem, não lembro aonde, afirmando que as 10 primeiras perguntas enviadas a determinado email seriam selecionados para uma entrevista com Don Tapscott para a revista Época Negócios, a qual eu sou assinante. Não formulei bem minha pergunta, na verdade foi um desastre, leiam &#8220;ipsi [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"></div><p>Especificamente no dia 22 de Junho de 2010 eu li uma mensagem, não lembro aonde, afirmando que as 10 primeiras perguntas enviadas a determinado email seriam selecionados para uma entrevista com Don Tapscott para a revista Época Negócios, a qual eu sou assinante.</p>
<p>Não formulei bem minha pergunta, na verdade foi um desastre, leiam &#8220;ipsi litteris&#8221; meu email:</p>
<blockquote><p>Don, quais os conselhos que você daria para as empresas se precaverem contra &#8220;comportamentos de rebanho&#8221;?<br />
Comportamente de rebanho eu considero aqueles movimentos causados por especuladores que tem o dominio sobre uma determinada multidão e pode influenciá-los negativamente afim de prejudicar e sabotar concorrentes.</p>
<p>Christiano MIlfont, Fortaleza-CE</p></blockquote>
<p>Observe que minha pergunta estava relacionada a comportamento das multidões, uma pergunta mais consistente seria:  Como lidar com &#8220;comportamento das massas&#8221; negativa para seus negócios quando você perde o controle ou não sabe lidar com isso?</p>
<p>O que saiu na <a href="http://www.google.com.br/#hl=pt-BR&amp;q=http%3A%2F%2Fepocanegocios.globo.com%2FRevista%2FCommon%2F0%2C%2CEMI160466-16363%2C00-AS%2BREDES%2BPODEM%2BMUDAR%2BGOVERNOS.html&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=&amp;gs_rfai=&amp;fp=1b81e02b9dafc572">revista</a>:</p>
<blockquote><p><strong>8 Que conselhos daria para as empresas se precaverem contra movimentos de especuladores que podem prejudicar e sabotar concorrentes?</strong> <em>Christiano Milfont | Fortaleza – CE</em></p>
<p>Se seus concorrentes estão espalhando informações falsas sobre a sua empresa e violando a lei, acredito que você deve levar o caso às autoridades competentes.</p></blockquote>
<p>Note que o sentido da pergunta virou especulação contra concorrentes o que é diferente de influência indireta por movimentos das massas.</p>
<p>A pergunta foi mal feita, o jornalista responsável não é especialista em todos os assuntos, diante da pergunta ele vai tentar condensar de forma a se enquadrar na matéria. Portanto a culpa maior é minha e não da mídia.</p>
<p>#fikdik</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2010/08/07/saiba-perguntar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Palestra Agilidade no Mundo Real</title>
		<link>http://www.milfont.org/tech/2010/07/11/palestra-agilidade-no-mundo-real/</link>
		<comments>http://www.milfont.org/tech/2010/07/11/palestra-agilidade-no-mundo-real/#comments</comments>
		<pubDate>Sun, 11 Jul 2010 11:43:05 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Melhores práticas]]></category>
		<category><![CDATA[Metodologia]]></category>
		<category><![CDATA[Métodos Ágeis]]></category>
		<category><![CDATA[Test Driven]]></category>
		<category><![CDATA[XP]]></category>
		<category><![CDATA[palestras]]></category>
		<category><![CDATA[Agil]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agilidade]]></category>
		<category><![CDATA[Agilismo]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1007</guid>
		<description><![CDATA[Ontem eu palestrei na faculdade IDEZ em João Pessoa &#8211; PB a convite do Dr. Rodrigo Rebouças &#8211; Coordenador e professor de pós graduação em dev de software -  sobre o tema &#8220;Agilidade no Mundo Real&#8221;, que consistiu basicamente em falar sobre minha experiência em implantação, mentoring e treinamento de agilidade em meus clientes nos [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"></div><p>Ontem eu <a href="http://www.faculdadeidez.com.br/noticias/detalhe/?id=68">palestrei</a> na <a href="http://www.faculdadeidez.com.br/">faculdade IDEZ</a> em João Pessoa &#8211; PB a convite do <a href="http://rodrigor.com/">Dr. Rodrigo Rebouças</a> &#8211; Coordenador e professor de pós graduação em dev de software -  sobre o tema &#8220;Agilidade no Mundo Real&#8221;, que consistiu basicamente em falar sobre minha experiência em implantação, mentoring e treinamento de agilidade em meus clientes nos últimos 2 anos.</p>
<p><a href="http://twitter.com/mauriciojr">Maurício Linhares</a> também é professor da IDEZ, o que me deixa particularmente feliz em saber que tem gente capaz dentro da academia que pode fazer diferença. Esse contato entre mercado e academia é importante para todos e creio que os alunos ontem tiveram muito dever de casa para fazer.</p>
<p>Ontem anotei muitas dúvidas discutidas na mesa redonda que fizemos após as palestras e nos próximos dias eu postarei sobre as principais dificuldades em entender o que é agilidade, que TDD não evita equipe de Testes ou QA e nem sequer tem a ver com cobertura de código, que agilidade não é velocidade, inclusive pode ser mais lento em determinados períodos, confusão entre práticas, valores e princípios, entre outras coisas.</p>
<p>Sobre minha palestra eu falei sobre as dificuldades que encontro, como melhorar a adoção dos valores e princípios trabalhando a base. Vocês podem acompanhar nos slides e video abaixo:</p>
<div id="__ss_4728171" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Agilidade no mundo real" href="http://www.slideshare.net/cmilfont/agilidade-nomun-doreal">Agilidade no mundo real</a></strong><object id="__sse4728171" 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=agilidadenomundoreal-100710213154-phpapp01&amp;stripped_title=agilidade-nomun-doreal" /><param name="name" value="__sse4728171" /><param name="allowfullscreen" value="true" /><embed id="__sse4728171" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=agilidadenomundoreal-100710213154-phpapp01&amp;stripped_title=agilidade-nomun-doreal" name="__sse4728171" 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/cmilfont">Christiano Milfont</a>.</div>
</div>
<p><a href="http://static.livestream.com/chromelessPlayer/wrappers/TwitcamPlayer.swf?hash=14e6c">Vídeo do Evento</a><br />
<object id="twitcamPlayer" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="320" height="265" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="wmode" value="window" /><param name="src" value="http://static.livestream.com/chromelessPlayer/wrappers/TwitcamPlayer.swf?hash=14e6c" /><param name="name" value="twitcamPlayer" /><param name="bgcolor" value="#ffffff" /><param name="allowfullscreen" value="true" /><embed id="twitcamPlayer" type="application/x-shockwave-flash" width="320" height="265" src="http://static.livestream.com/chromelessPlayer/wrappers/TwitcamPlayer.swf?hash=14e6c" bgcolor="#ffffff" name="twitcamPlayer" wmode="window" allowfullscreen="true"></embed></object></p>
<h2>Referências sobre os slides de minha palestra</h2>
<p>O que é agilidade?<br />
<a href="http://manifestoagil.com.br/">http://manifestoagil.com.br/</a><br />
<a href="http://www.milfont.org/tech/extreme-programming-books/">http://www.milfont.org/tech/extreme-programming-books/</a></p>
<p>Scripts do workflow GIT sobre os slides do &#8220;Merge From Hell&#8221;<br />
<a href="http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html">http://reinh.com/blog/2009/03/02/a-git-workflow-for-agile-teams.html</a><br />
<a href="http://reinh.com/blog/2008/08/27/hack-and-and-ship.html">http://reinh.com/blog/2008/08/27/hack-and-and-ship.html</a><br />
<a href="http://gist.github.com/8511">http://gist.github.com/8511</a></p>
<p>Trabalho energizado<br />
Pair Programming<br />
<a href="http://www.milfont.org/tech/2010/06/17/trabalho-energizado-e-a-teoria-das-2-horas-produtivas/">http://www.milfont.org/tech/2010/06/17/trabalho-energizado-e-a-teoria-das-2-horas-produtivas/</a><br />
<a href="http://www.milfont.org/tech/2009/02/03/pair-programming-vs-code-review/">http://www.milfont.org/tech/2009/02/03/pair-programming-vs-code-review/</a></p>
<p>Automação Total<br />
<a href="http://radar.oreilly.com/2009/03/continuous-deployment-5-eas.html">http://radar.oreilly.com/2009/03/continuous-deployment-5-eas.html</a><br />
<a href="http://blog.caelum.com.br/2010/03/01/o-processo-de-deploy-continuo/">http://blog.caelum.com.br/2010/03/01/o-processo-de-deploy-continuo/</a><br />
<a href="http://agilenomundoreal.com.br/2010/07/06/deploy-continuo-entrega-continua-de-valor/">http://agilenomundoreal.com.br/2010/07/06/deploy-continuo-entrega-continua-de-valor/</a></p>
<p><a href="http://railscasts.com/episodes/179-seed-data">http://railscasts.com/episodes/179-seed-data</a></p>
<p>Testes<br />
<a href="http://www.milfont.org/tech/2009/06/01/recomendacao-sobre-tdd/">http://www.milfont.org/tech/2009/06/01/recomendacao-sobre-tdd/</a><br />
<a href="http://www.milfont.org/tech/2009/06/07/quanto-testar/">http://www.milfont.org/tech/2009/06/07/quanto-testar/</a></p>
<p>Sem tempo suficiente<br />
<a href="http://www.milfont.org/tech/2010/06/29/sem-tempo-suficiente/">http://www.milfont.org/tech/2010/06/29/sem-tempo-suficiente/</a></p>
<p>Dar caos a ordem</p>
<p>Destruir arquiteturas de referências<a href=" http://www.milfont.org/tech/2010/01/21/voce-esta-nivelando-por-baixo-eou-nao-conhece-seus-desenvolvedores/"></p>
<p>http://www.milfont.org/tech/2010/01/21/voce-esta-nivelando-por-baixo-eou-nao-conhece-seus-desenvolvedores/</a></p>
<p><a href="http://www.milfont.org/tech/2008/01/20/frameworkstools-caseiros-ou-fechados/">http://www.milfont.org/tech/2008/01/20/frameworkstools-caseiros-ou-fechados/</a><br />
<a href="http://www.milfont.org/tech/2009/06/06/frameworks-caseiros-2-a-missao/">http://www.milfont.org/tech/2009/06/06/frameworks-caseiros-2-a-missao/</a><br />
<a href="http://www.milfont.org/tech/2008/01/21/nao-use-notacao-estranha/">http://www.milfont.org/tech/2008/01/21/nao-use-notacao-estranha/</a></p>
<p>Separar gerenciamento de projetos do processo de desenvolvimento<br />
Pmbok de Jeans<br />
<a href="http://www.milfont.org/tech/2009/03/14/pmbok-de-jeans/">http://www.milfont.org/tech/2009/03/14/pmbok-de-jeans/</a></p>
<p>Software Funcionando<br />
<a href="http://www.milfont.org/tech/2009/09/17/qualidade-interna-vs-qualidade-externa/">http://www.milfont.org/tech/2009/09/17/qualidade-interna-vs-qualidade-externa/</a></p>
<p>Retrabalho e Prejuízo<br />
<a href="http://www.milfont.org/tech/2009/01/08/retrabalho-e-prejuizo/">http://www.milfont.org/tech/2009/01/08/retrabalho-e-prejuizo/</a></p>
<p>Workflow ágil e simples<br />
<a href="http://www.pivotaltracker.com">http://www.pivotaltracker.com</a><br />
<a href="http://github.com/tpope/pickler">http://github.com/tpope/pickler</a><br />
<a href="http://github.com/trydionel/git-pivotal">http://github.com/trydionel/git-pivotal</a><br />
<a href="http://www.pivotaltracker.com/help/api?version=v3#scm_post_commit">http://www.pivotaltracker.com/help/api?version=v3#scm_post_commit</a></p>
<p>Jesus recomendando o trabalho em par<br />
“E depois disto designou o Senhor ainda outros setenta, e mandou-os adiante da sua face, de dois em dois, a todas as cidades  e lugares aonde ele havia de ir.”<br />
<a href="http://www.bibliaonline.com.br/acf/lc/10">Lucas 10:1</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2010/07/11/palestra-agilidade-no-mundo-real/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Sem tempo suficiente</title>
		<link>http://www.milfont.org/tech/2010/06/29/sem-tempo-suficiente/</link>
		<comments>http://www.milfont.org/tech/2010/06/29/sem-tempo-suficiente/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 19:46:18 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Melhores práticas]]></category>
		<category><![CDATA[Metodologia]]></category>
		<category><![CDATA[Métodos Ágeis]]></category>
		<category><![CDATA[Test Driven]]></category>
		<category><![CDATA[XP]]></category>
		<category><![CDATA[AvoidNotEnoughTime]]></category>
		<category><![CDATA[NotEnoughTime]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Test Driven Development]]></category>
		<category><![CDATA[test first]]></category>
		<category><![CDATA[teste]]></category>
		<category><![CDATA[testes]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=798</guid>
		<description><![CDATA[Recentemente, em um determinado projeto, tínhamos uma semana para disponibilizar uma versão e uma timeline definida por motivos externos que não poderíamos furar. O problema era que toda modificação gerava ainda mais medo por conta da baixa cobertura de testes, praticamente estavam codificando e corrigindo nessa altura do campeonato. Eu radicalmente sugeri um grande refactoring [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"></div><p>Recentemente, em um determinado projeto, tínhamos uma semana para disponibilizar uma versão e uma timeline definida por motivos externos que não poderíamos furar. O problema era que toda modificação gerava ainda mais medo por conta da baixa cobertura de testes, praticamente estavam <a href="http://c2.com/cgi/wiki?CodeAndFix">codificando e corrigindo</a> nessa altura do campeonato.</p>
<p>Eu radicalmente sugeri um grande refactoring para corrigir nossa bateria de testes, uma parada faltando apenas uma semana para entrega, mas só assim voltaríamos a trabalhar na entrega das features.</p>
<p>Nesse momento, o clássico &#8220;<a href="http://c2.com/cgi/wiki?NotEnoughTime">Não temos tempo para isso</a>&#8221; surgiu das profundezas do inferno.</p>
<p>Fiquei sozinho nessa decisão, o time inteiro foi contra. Na defesa da solução apresentada eu falei: &#8220;Vocês podem se enganar imaginando que podem entregar essa release em uma semana com a qualidade do código existente que vocês sabem que vai de mal a pior ou podem trabalhar para corrigir esses problemas e entregar o possível, mas funcionando&#8221;.</p>
<p>Sabemos da importância de testes, todas as metodologias os cobra obrigatoriamente, então se você não testa, você está errado em todas as metodologias. O problema sempre é a desculpa da timeline e quanto mais vai se aproximando mais desculpas procuramos encontrar para esconder as deficiências. Como nesse caso não tínhamos Test First, os problemas vão se empilhando no final e se tornam mais difíceis de serem detectados.</p>
<p>Por sorte, minha sugestão acabou sendo acatada, apesar de ser apenas um consultor no projeto, portanto uma <a href="http://en.wikipedia.org/wiki/The_Chicken_and_the_Pig">galinha e não porco</a>.</p>
<h2>De onde nascem essas desculpas?</h2>
<p>Coragem é um dos valores do XP, é importante enfrentarmos esse tipo de situação que descrevi, na vida real isso quase nunca é possível porque essas arquiteturas flácidas ou códigos mal cheirosos não nascem do dia para o outro e vão se acumulando.</p>
<p>O projeto que descrevi era um projeto novo, tecnologias fresquinhas e um time modernoso. Imagina agora se você está em uma corporação que usa um processo cascata, todo amarrado, criando documentos UML desnecessários no EA, struts 1 como framework, CVS como controle de versão do código [quando há! Sim, em pleno 2010 ainda há quem não use nenhum], o código de banco de dados cheio de procedures e tantas modernidades da década de 80.</p>
<p>Então, acha que só coragem basta?</p>
<p>Em muitas oportunidades o custo de mudanças ou simplesmente &#8220;fazer o que se tem que fazer&#8221; não se pagará nem a médio prazo, nessas horas convencer já não basta. É muito difícil você convencer a alta direção que deve jogar fora um determinado projeto e começar do zero, ou modificar toda a infraestrutura existente.</p>
<p>A degradação de um software nasce de pequenos problemas que se acumulam, no final há tanto para se fazer que ninguém mais tem coragem para isso.</p>
<h2>Socorro, Milfont!</h2>
<p>Recebo constantemente pedido de socorro de pessoas que me conhecem das comunidades que participo como <a href="http://groups.google.com.br/group/xpce/">XPCE</a>, <a href="http://groups.google.com.br/group/guru-ce">GURU-CE</a>, <a href="http://www.javace.org/">JAVA-CE</a>, entre outras. Geralmente são funcionários que se encontram nessa situação que citei anteriormente, com projetos muito defasados e problemáticos.  O pedido é sempre o mesmo, querem que eu vá lá dizer para a alta direção o que eles [funcionários] já sabem. Só que isso não basta, o movimento tem que começar por lá.</p>
<p>Em reunião com a turma da <a href="http://www.triadworks.com.br/">TriadWorks</a>, temos discutido isso já há muito tempo e acabamos preparando um serviço de resgate aos clientes para contornar esse problema. A proposta é envolver as pessoas desses clientes, dar coragem e ânimo nelas para começarem a resolver o problema.</p>
<p>Resolvemos começar com nossos próprios clientes, sim, dá preferência a quem tem contrato conosco e depois verificar como abrir para a comunidade.</p>
<p>Então, esse envolvimento nós demos o codinome de <strong>&#8220;AvoidNotEnoughTime&#8221;</strong> e consiste basicamente em um conjunto de ações/eventos  com os funcionários dessas empresas para dar essa força necessária para anular o NotEnoughTime na base. É um movimento de baixo pra cima, roots, serão desde <a href="http://codingdojo.org/cgi-bin/wiki.pl?WhatIsCodingDojo">Coding Dojos</a>, <a href="http://www.coderetreat.com/">Code Retreat</a>, <a href="http://en.wikipedia.org/wiki/Google_Code_Jam">Code Jam</a>, <a href="http://en.wikipedia.org/wiki/Hack_Day">Hack Days</a>, <a href="http://pt.wikipedia.org/wiki/Lightning_Talk">Lightning Talks</a>, <a href="http://en.wikipedia.org/wiki/Open_Space_Technology">Open Space</a> ou um formato adequado a um determinado problema que identificarmos.</p>
<p>Nós não vamos cobrar a mais dos clientes por isso, aliás, eles nem foram avisados e não terão controle sobre o projeto, nós que decidimos quando, como e com quem faremos justamente para evitar sabotagem ou direcionamento.</p>
<p><a href="http://picasaweb.google.com.br/handersonbf/GitHackDay27Junho2010#5487617659376766882"><img class="alignnone" title="Git Hack Session 2010 - 1" src="http://lh3.ggpht.com/_ixVOzmHRw-A/TCfvL8JQD6I/AAAAAAAAfqk/Pum7iyA53Ek/s640/DSC06462.JPG" alt="" width="512" height="384" /></a></p>
<p>Sem planejamento nem nada, resolvemos iniciar mesmo assim, domingo passado [27/06/2010] realizamos um <a href="http://picasaweb.google.com.br/handersonbf/GitHackDay27Junho2010">Git Session</a> onde eu [@<a href="http://twitter.com/cmilfont">cmilfont</a>], @<a href="http://twitter.com/triadworks">triadworks</a> representada por @<a href="http://twitter.com/handersonbf">handersonbf</a>, @<a href="http://twitter.com/rponte">rponte</a> e @<a href="http://twitter.com/carlosatilabreu">carlosatilabreu</a>, recebemos funcionários de clientes nossos. @<a href="http://twitter.com/jeffersongirao">jeffersongirao</a> da <a href="http://www.grupotubform.com.br/">TubForm</a>, @<a href="http://twitter.com/rodrigogalba">rodrigogalba</a> da <a href="http://www.casamagalhaes.com.br">Casa Magalhães</a> e @<a href="http://twitter.com/rodrigodealer">rodrigodealer</a> da <a href="http://www.fortesinformatica.com.br/">Fortes Informática</a>.</p>
<p><a href="http://picasaweb.google.com.br/handersonbf/GitHackDay27Junho2010#5487617622384050994"><img class="alignnone" title="Git Hack Session 2010 - 1" src="http://lh3.ggpht.com/_ixVOzmHRw-A/TCfvJyVgAzI/AAAAAAAAfqk/HEQ4uc8mtwU/s640/DSC06459.JPG" alt="" width="512" height="384" /></a></p>
<h2>O que vocês ganham com isso?</h2>
<p>Resolvemos fazer um Git Hack Session devido alguns de nossos clientes usarem CVS e SVN. O tempo perdido resolvendo problemas de repositório como merges e bobagens simples causam um prejuízo enorme, as desculpas para mudarem cai sempre no &#8220;não temos suficiente&#8221; ou &#8220;depois fazemos quando terminar esse projeto&#8221;.</p>
<p>Então cada ponto de dificuldade que um time enfrenta e observarmos que se repete nos demais clientes, vamos organizar ações para envolver essa turma afim de anular essas desculpas. Treinar multiplicadores em todos os princípios.</p>
<p>No caso do <a href="http://jefferson.eti.br/tech/">Jefferson Girão</a>, que trabalha também para a <a href="http://hoodiny.com/">Hoodiny</a>, veio mais para nos auxiliar, já que está mestre no uso do git no meu cliente <a href="http://diariodonordeste.globo.com/materia.asp?codigo=802976">Tubform [uma das maiores indústrias do Nordeste]</a>.</p>
<p><a href="http://picasaweb.google.com.br/handersonbf/GitHackDay27Junho2010#5487617567767983810"><img class="alignnone" title="Git Hack Session 2010 - 1 - 1" src="http://lh6.ggpht.com/_ixVOzmHRw-A/TCfvGm4A9sI/AAAAAAAAfqk/g9278Qrqjo8/s640/DSC06455.JPG" alt="" width="512" height="384" /></a></p>
<p>Dessa forma nosso trabalho de consultoria será facilitado e no mínimo já faríamos esses eventos internamente, então unimos o útil ao agradável.</p>
<p>Se você gostaria de participar de algum desses eventos mesmo não sendo funcionário de cliente nosso, mande um email para mim [cmilfont@gmail.com] e tentaremos incluir sempre quando puder. Domingo agora surgiu um desfalque, até <a href="http://twitter.com/cmilfont/status/17157321685">twittei</a> convocando alguém que estivesse disponível, mas foi em cima da hora.</p>
<p><a title="ComeÃ§ou #gitsession on Twitpic" href="http://twitpic.com/20fe7x"><img src="http://s3.amazonaws.com/twitpic/photos/large/121650621.jpg?AWSAccessKeyId=0ZRYP5X5F6FSMBCCSE82&amp;Expires=1277841604&amp;Signature=NHhg8E3GmOduBzRGb9aMOqKmZhc%3D" alt="ComeÃ§ou #gitsession on Twitpic" width="480" height="360" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2010/06/29/sem-tempo-suficiente/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>JQuery e conflitos</title>
		<link>http://www.milfont.org/tech/2010/06/28/jquery-e-conflitos/</link>
		<comments>http://www.milfont.org/tech/2010/06/28/jquery-e-conflitos/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 20:24:18 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Jquery]]></category>
		<category><![CDATA[Melhores práticas]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[closure]]></category>
		<category><![CDATA[Currying]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=982</guid>
		<description><![CDATA[Creio que todo mundo já conheça a função noConflict do JQuery para evitar conflitos com outros frameworks que utilizam a variável dóllar ($). JQuery é sem dúvidas o melhor framework javascript para manipulação DOM e não há motivos e nem desculpas para não o usar, principalmente com essa resolução de conflitos. Tenho refatorado alguns códigos [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"></div><p>Creio que todo mundo já conheça a função <a href="http://api.jquery.com/jQuery.noConflict/">noConflict</a> do <a href="http://jquery.com/">JQuery</a> para evitar conflitos com outros frameworks que utilizam a variável dóllar ($). JQuery é sem dúvidas o melhor framework javascript para manipulação DOM e não há motivos e nem desculpas para não o usar, principalmente com essa resolução de conflitos.</p>
<p>Tenho refatorado alguns códigos javascript e o pessoal tem resolvido o conflito de forma confusa e misturando código de dois framework, inclusive código DOM nativo. A documentação recomenda, como uma opção, atribuir o resultado da função noConflict a uma variável e ela será o seu objeto JQuery.</p>
<p>Imagina que você tem <a href="http://www.prototypejs.org/">Prototype</a> e Jquery na mesma aplicação como no codigo abaixo:</p>
<div id="gist-456301" class="gist">
  
  
    
            

      <div class="gist-file">
        <div class="gist-data gist-syntax">
          
          
          
            <div class="highlight"><pre><div class='line' id='LC1'><span class="nx">$J</span> <span class="o">=</span> <span class="nx">jQuery</span><span class="p">.</span><span class="nx">noConflict</span><span class="p">();</span></div><div class='line' id='LC2'><br/></div><div class='line' id='LC3'><span class="c1">//codigo prototype</span></div><div class='line' id='LC4'><span class="nx">$</span><span class="p">(</span><span class="s2">"id_de_algum_elemento"</span><span class="p">).</span><span class="nx">hide</span><span class="p">();</span></div><div class='line' id='LC5'><span class="c1">//codigo jquery em seguida</span></div><div class='line' id='LC6'><span class="nx">$J</span><span class="p">(</span><span class="s2">"#id_do_elemento"</span><span class="p">).</span><span class="nx">load</span><span class="p">(</span><span class="s2">"caminho.html"</span><span class="p">);</span></div></pre></div>
          
        </div>

        <div class="gist-meta">
          <a href="http://gist.github.com/raw/456301/87078d51037735431e2779e994c69e98d90c3f7d/gistfile1.js" style="float:right;">view raw</a>
          <a href="http://gist.github.com/456301#file_gistfile1.js" style="float:right;margin-right:10px;color:#666">gistfile1.js</a>
          <a href="http://gist.github.com/456301">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
        </div>
      </div>
    
  
</div>

<p>A legibilidade vai ser horrível para manutenção desse código porque você vai ficar com códigos misturados com sintaxes e estilos diferentes, a medida que isso vai crescendo a manutenção vai ficando impossível.</p>
<p>Minha sugestão é utilizarem <a href="http://www.milfont.org/tech/2008/03/02/currying-em-javascript/">Closure e Currying</a> para resolver o conflito, isolar o código e deixar bem mais claro. Se ler a documentação lá do <a href="http://api.jquery.com/jQuery.noConflict/">noConflict</a> tem exemplo como o código abaixo.<br />
<div id="gist-456273" class="gist">
  
  
    
            

      <div class="gist-file">
        <div class="gist-data gist-syntax">
          
          
          
            <div class="highlight"><pre><div class='line' id='LC1'><span class="cm">/* essa chamada evita o conflito com outros</span></div><div class='line' id='LC2'><span class="cm">   frameworks que usam dollar ($) */</span></div><div class='line' id='LC3'><span class="nx">jQuery</span><span class="p">.</span><span class="nx">noConflict</span><span class="p">();</span></div><div class='line' id='LC4'><br/></div><div class='line' id='LC5'><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">$</span><span class="p">)</span> <span class="p">{</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;<span class="c1">// Seu código jquery vai aqui</span></div><div class='line' id='LC7'>&nbsp;&nbsp;<span class="nx">$</span><span class="p">(</span><span class="s2">"#id_do_elemento"</span><span class="p">).</span><span class="nx">load</span><span class="p">(</span><span class="s2">"caminho.html"</span><span class="p">);</span></div><div class='line' id='LC8'><span class="p">})(</span><span class="nx">jQuery</span><span class="p">);</span></div><div class='line' id='LC9'><br/></div><div class='line' id='LC10'><span class="c1">//codigo prototype</span></div><div class='line' id='LC11'><span class="nx">$</span><span class="p">(</span><span class="s2">"id_de_algum_elemento"</span><span class="p">).</span><span class="nx">hide</span><span class="p">();</span></div><div class='line' id='LC12'><span class="c1">//...</span></div><div class='line' id='LC13'><br/></div></pre></div>
          
        </div>

        <div class="gist-meta">
          <a href="http://gist.github.com/raw/456273/ba59f4f4c7766d3810395008d10fe1aa938a6619/gistfile1.js" style="float:right;">view raw</a>
          <a href="http://gist.github.com/456273#file_gistfile1.js" style="float:right;margin-right:10px;color:#666">gistfile1.js</a>
          <a href="http://gist.github.com/456273">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
        </div>
      </div>
    
  
</div>
</p>
<p>Se você preferir deixar claro a diferença entre os frameworks pode continuar a usar outra variável no lugar do $, mas a idéia é isolar o código de cada framework.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2010/06/28/jquery-e-conflitos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setup do Sunspot-rails no Rspec</title>
		<link>http://www.milfont.org/tech/2010/06/23/setup-sunspot-e-rspec/</link>
		<comments>http://www.milfont.org/tech/2010/06/23/setup-sunspot-e-rspec/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 18:20:27 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Rspec]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Sunspot]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[ruby rails]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[sunspot]]></category>
		<category><![CDATA[sunspot-rails]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=965</guid>
		<description><![CDATA[Tínhamos um problema nos testes unitários por débito técnico [na verdade desleixo mesmo] com o setup do Rspec e Sunspot-rails em determinado projeto. O problema era que mesmo para executar um simples teste unitário, levantávamos o Sunspot no spec_helper.rb. Resolvi refatorar isso, acabei descobrindo no before/after do Spec::Runner.configure algo que eu não usava e que [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"></div><p>Tínhamos um problema nos testes unitários por débito técnico [na verdade desleixo mesmo] com o setup do <a href="http://rspec.info/rails/">Rspec</a> e <a href="http://github.com/outoftime/sunspot/">Sunspot-rails</a> em determinado projeto. O problema era que mesmo para executar um simples teste unitário, levantávamos o Sunspot no spec_helper.rb.</p>
<p>Resolvi refatorar isso, acabei descobrindo no <a href="http://rspec.info/documentation/before_and_after.html">before/after do Spec::Runner.configure</a> algo que eu não usava e que já existia desde o rspec &#8220;1.1.12 / 2009-01-11&#8243;, pelo que percebi no changelog.</p>
<p>O que fiz e parece bobo é separar pelo tipo (type) <strong>integration</strong> a subida de uma instancia real do Sunspot e agora dá para usar a estrutura de <a href="http://wiki.github.com/outoftime/sunspot/rspec-and-sunspot">Rspec que o Sunspot disponibiliza</a> para meus testes unitários.<br />
<div id="gist-450280" class="gist">
  
  
    
            

      <div class="gist-file">
        <div class="gist-data gist-syntax">
          
          
          
            <div class="highlight"><pre><div class='line' id='LC1'><span class="c1">#arquivo spec_helper.rb</span></div><div class='line' id='LC2'><br/></div><div class='line' id='LC3'><span class="no">ENV</span><span class="o">[</span><span class="s2">"RAILS_ENV"</span><span class="o">]</span> <span class="o">||=</span> <span class="s1">&#39;test&#39;</span></div><div class='line' id='LC4'><br/></div><div class='line' id='LC5'><span class="nb">require</span> <span class="no">File</span><span class="o">.</span><span class="n">expand_path</span><span class="p">(</span><span class="no">File</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="no">File</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="bp">__FILE__</span><span class="p">),</span><span class="s1">&#39;..&#39;</span><span class="p">,</span><span class="s1">&#39;config&#39;</span><span class="p">,</span><span class="s1">&#39;environment&#39;</span><span class="p">))</span></div><div class='line' id='LC6'><br/></div><div class='line' id='LC7'><span class="nb">require</span> <span class="s1">&#39;spec/autorun&#39;</span></div><div class='line' id='LC8'><span class="nb">require</span> <span class="s1">&#39;spec/rails&#39;</span></div><div class='line' id='LC9'><span class="nb">require</span> <span class="s1">&#39;rake&#39;</span></div><div class='line' id='LC10'><span class="nb">require</span> <span class="s1">&#39;ruby-debug&#39;</span> <span class="k">unless</span> <span class="no">RUBY_VERSION</span> <span class="o">&gt;</span> <span class="s1">&#39;1.9&#39;</span></div><div class='line' id='LC11'><span class="nb">require</span> <span class="s1">&#39;sunspot/rails/tasks&#39;</span></div><div class='line' id='LC12'><span class="nb">require</span> <span class="s1">&#39;authlogic/test_case&#39;</span></div><div class='line' id='LC13'><span class="nb">require</span> <span class="s1">&#39;sunspot/rails/spec_helper&#39;</span></div><div class='line' id='LC14'><br/></div><div class='line' id='LC15'><span class="nb">require</span> <span class="s1">&#39;database_cleaner&#39;</span></div><div class='line' id='LC16'><br/></div><div class='line' id='LC17'><span class="c1">#observe aqui que eu criei uma pasta support porque guardo algumas confs em arquivos contidos nela</span></div><div class='line' id='LC18'><span class="no">Dir</span><span class="o">[</span><span class="s2">"</span><span class="si">#{</span><span class="no">File</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="bp">__FILE__</span><span class="p">)</span><span class="si">}</span><span class="s2">/support/**/*.rb"</span><span class="o">].</span><span class="n">each</span> <span class="p">{</span><span class="o">|</span><span class="n">f</span><span class="o">|</span> <span class="nb">require</span> <span class="n">f</span><span class="p">}</span></div><div class='line' id='LC19'><br/></div><div class='line' id='LC20'><span class="no">Spec</span><span class="o">::</span><span class="no">Runner</span><span class="o">.</span><span class="n">configure</span> <span class="k">do</span> <span class="o">|</span><span class="n">config</span><span class="o">|</span></div><div class='line' id='LC21'>&nbsp;&nbsp;<span class="n">config</span><span class="o">.</span><span class="n">use_transactional_fixtures</span> <span class="o">=</span> <span class="kp">true</span></div><div class='line' id='LC22'>&nbsp;&nbsp;<span class="n">config</span><span class="o">.</span><span class="n">use_instantiated_fixtures</span>  <span class="o">=</span> <span class="kp">false</span></div><div class='line' id='LC23'>&nbsp;&nbsp;<span class="n">config</span><span class="o">.</span><span class="n">fixture_path</span> <span class="o">=</span> <span class="no">RAILS_ROOT</span> <span class="o">+</span> <span class="s1">&#39;/spec/fixtures/&#39;</span></div><div class='line' id='LC24'><br/></div><div class='line' id='LC25'>&nbsp;&nbsp;<span class="n">config</span><span class="o">.</span><span class="n">before</span><span class="p">(</span><span class="ss">:suite</span><span class="p">)</span> <span class="k">do</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="no">DatabaseCleaner</span><span class="o">.</span><span class="n">strategy</span> <span class="o">=</span> <span class="ss">:truncation</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="no">DatabaseCleaner</span><span class="o">.</span><span class="n">clean_with</span><span class="p">(</span><span class="ss">:truncation</span><span class="p">)</span></div><div class='line' id='LC28'>&nbsp;&nbsp;<span class="k">end</span></div><div class='line' id='LC29'><br/></div><div class='line' id='LC30'>&nbsp;&nbsp;<span class="n">config</span><span class="o">.</span><span class="n">before</span><span class="p">(</span><span class="ss">:each</span><span class="p">)</span> <span class="k">do</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="no">DatabaseCleaner</span><span class="o">.</span><span class="n">start</span></div><div class='line' id='LC32'>&nbsp;&nbsp;<span class="k">end</span></div><div class='line' id='LC33'><br/></div><div class='line' id='LC34'>&nbsp;&nbsp;<span class="n">config</span><span class="o">.</span><span class="n">after</span><span class="p">(</span><span class="ss">:each</span><span class="p">)</span> <span class="k">do</span></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="no">DatabaseCleaner</span><span class="o">.</span><span class="n">clean</span></div><div class='line' id='LC36'>&nbsp;&nbsp;<span class="k">end</span></div><div class='line' id='LC37'><br/></div><div class='line' id='LC38'>&nbsp;&nbsp;<span class="o">[</span><span class="ss">:model</span><span class="p">,</span> <span class="ss">:helper</span><span class="p">,</span> <span class="ss">:controller</span><span class="o">].</span><span class="n">each</span> <span class="p">{</span><span class="o">|</span><span class="nb">type</span><span class="o">|</span></div><div class='line' id='LC39'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">config</span><span class="o">.</span><span class="n">before</span><span class="p">(</span><span class="ss">:each</span><span class="p">,</span> <span class="ss">:type</span> <span class="o">=&gt;</span> <span class="nb">type</span><span class="p">)</span> <span class="k">do</span></div><div class='line' id='LC40'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="o">::</span><span class="no">Sunspot</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="o">::</span><span class="no">Sunspot</span><span class="o">::</span><span class="no">Rails</span><span class="o">::</span><span class="no">StubSessionProxy</span><span class="o">.</span><span class="n">new</span><span class="p">(</span><span class="o">::</span><span class="no">Sunspot</span><span class="o">.</span><span class="n">session</span><span class="p">)</span></div><div class='line' id='LC41'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">end</span></div><div class='line' id='LC42'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">config</span><span class="o">.</span><span class="n">after</span><span class="p">(</span><span class="ss">:each</span><span class="p">,</span> <span class="ss">:type</span> <span class="o">=&gt;</span> <span class="nb">type</span><span class="p">)</span> <span class="k">do</span></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="o">::</span><span class="no">Sunspot</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="o">::</span><span class="no">Sunspot</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">original_session</span></div><div class='line' id='LC44'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">end</span></div><div class='line' id='LC45'>&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC46'><br/></div><div class='line' id='LC47'>&nbsp;&nbsp;<span class="n">config</span><span class="o">.</span><span class="n">before</span><span class="p">(</span><span class="ss">:all</span><span class="p">,</span> <span class="ss">:type</span> <span class="o">=&gt;</span> <span class="ss">:integration</span><span class="p">)</span> <span class="k">do</span></div><div class='line' id='LC48'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="no">JojobaSunspot</span><span class="o">.</span><span class="n">new</span><span class="o">.</span><span class="n">start</span></div><div class='line' id='LC49'>&nbsp;&nbsp;<span class="k">end</span></div><div class='line' id='LC50'>&nbsp;&nbsp;<span class="n">config</span><span class="o">.</span><span class="n">after</span><span class="p">(</span><span class="ss">:suite</span><span class="p">)</span> <span class="k">do</span></div><div class='line' id='LC51'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="no">JojobaSunspot</span><span class="o">.</span><span class="n">new</span><span class="o">.</span><span class="n">stop</span></div><div class='line' id='LC52'>&nbsp;&nbsp;<span class="k">end</span></div><div class='line' id='LC53'><br/></div><div class='line' id='LC54'><span class="k">end</span></div><div class='line' id='LC55'><br/></div></pre></div>
          
        </div>

        <div class="gist-meta">
          <a href="http://gist.github.com/raw/450280/58362bde581f7929fffd831ee9fead2d0054c113/gistfile1.builder" style="float:right;">view raw</a>
          <a href="http://gist.github.com/450280#file_gistfile1.builder" style="float:right;margin-right:10px;color:#666">gistfile1.builder</a>
          <a href="http://gist.github.com/450280">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
        </div>
      </div>
    
  
</div>
</p>
<p>Inspirado <a href="http://blog.kabisa.nl/2010/02/03/running-cucumber-features-with-sunspot_rails/">nesse post</a>, eu adaptei para o código que uso ao subir o sunspot com linha de comando para os testes de integração. Observe no código anterior que importo configurações da pasta <em><strong>support</strong></em>, inclusive a classe JojobaSunspot, usada no after e before de integration.</p>
<div id="gist-450298" class="gist">
  
  
    
            

      <div class="gist-file">
        <div class="gist-data gist-syntax">
          
          
          
            <div class="highlight"><pre><div class='line' id='LC1'><span class="nb">require</span> <span class="s2">"net/http"</span></div><div class='line' id='LC2'><br/></div><div class='line' id='LC3'><span class="k">class</span> <span class="nc">JojobaSunspot</span></div><div class='line' id='LC4'><br/></div><div class='line' id='LC5'>&nbsp;&nbsp;<span class="k">def</span> <span class="nf">start</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="vi">@started</span> <span class="o">=</span> <span class="no">Time</span><span class="o">.</span><span class="n">now</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">up_sunspot</span> <span class="k">if</span> <span class="n">starting</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">up</span></div><div class='line' id='LC9'>&nbsp;&nbsp;<span class="k">end</span></div><div class='line' id='LC10'><br/></div><div class='line' id='LC11'>&nbsp;&nbsp;<span class="k">def</span> <span class="nf">stop</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">system</span><span class="p">(</span><span class="s2">"sunspot-solr stop --pid-dir=/tmp/pids"</span><span class="p">)</span> <span class="k">unless</span> <span class="n">starting</span></div><div class='line' id='LC13'>&nbsp;&nbsp;<span class="k">end</span></div><div class='line' id='LC14'><br/></div><div class='line' id='LC15'>&nbsp;&nbsp;<span class="kp">private</span></div><div class='line' id='LC16'>&nbsp;&nbsp;<span class="k">def</span> <span class="nf">port</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="no">Sunspot</span><span class="o">::</span><span class="no">Rails</span><span class="o">::</span><span class="no">Server</span><span class="o">.</span><span class="n">new</span><span class="o">.</span><span class="n">port</span></div><div class='line' id='LC18'>&nbsp;&nbsp;<span class="k">end</span></div><div class='line' id='LC19'><br/></div><div class='line' id='LC20'>&nbsp;&nbsp;<span class="k">def</span> <span class="nf">up_sunspot</span></div><div class='line' id='LC21'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">system</span><span class="p">(</span><span class="s2">"sunspot-solr start -p 8981 -d /tmp/solr_data_test --pid-dir=/tmp/pids --log-file=/tmp/solr_log_test.log --log-level=INFO"</span><span class="p">)</span></div><div class='line' id='LC22'>&nbsp;&nbsp;<span class="k">end</span></div><div class='line' id='LC23'><br/></div><div class='line' id='LC24'>&nbsp;&nbsp;<span class="k">def</span> <span class="nf">up</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">while</span> <span class="n">starting</span></div><div class='line' id='LC26'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">puts</span> <span class="s2">"Sunspot server is starting..."</span></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">end</span></div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">puts</span> <span class="s2">"Sunspot server took </span><span class="si">#{</span><span class="s1">&#39;%.2f&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="no">Time</span><span class="o">.</span><span class="n">now</span> <span class="o">-</span> <span class="vi">@started</span><span class="p">)</span><span class="si">}</span><span class="s2"> sec. to get up and running. Let&#39;s Jojoba!"</span></div><div class='line' id='LC29'>&nbsp;&nbsp;<span class="k">end</span></div><div class='line' id='LC30'><br/></div><div class='line' id='LC31'>&nbsp;&nbsp;<span class="k">def</span> <span class="nf">starting</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">begin</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="nb">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">request</span> <span class="o">=</span> <span class="no">Net</span><span class="o">::</span><span class="no">HTTP</span><span class="o">.</span><span class="n">get_response</span><span class="p">(</span><span class="no">URI</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="s2">"http://localhost:</span><span class="si">#{</span><span class="n">port</span><span class="si">}</span><span class="s2">/solr/"</span><span class="p">))</span></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kp">false</span></div><div class='line' id='LC36'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">rescue</span> <span class="no">Errno</span><span class="o">::</span><span class="no">ECONNREFUSED</span></div><div class='line' id='LC37'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kp">true</span></div><div class='line' id='LC38'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">end</span></div><div class='line' id='LC39'>&nbsp;&nbsp;<span class="k">end</span></div><div class='line' id='LC40'><br/></div><div class='line' id='LC41'><span class="k">end</span></div><div class='line' id='LC42'><br/></div></pre></div>
          
        </div>

        <div class="gist-meta">
          <a href="http://gist.github.com/raw/450298/d7c9895f54595e5074a63efca8c003cf825eae9f/gistfile1.builder" style="float:right;">view raw</a>
          <a href="http://gist.github.com/450298#file_gistfile1.builder" style="float:right;margin-right:10px;color:#666">gistfile1.builder</a>
          <a href="http://gist.github.com/450298">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
        </div>
      </div>
    
  
</div>

<p>Desde que colocamos testes de integração o tempo de execução da bateria subiu muito, provocamos um setup ineficiente e desnecessário para os testes unitários. Fica a dica para quem passar pelo mesmo problema.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2010/06/23/setup-sunspot-e-rspec/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Trabalho Energizado e a Teoria das 2 horas produtivas</title>
		<link>http://www.milfont.org/tech/2010/06/17/trabalho-energizado-e-a-teoria-das-2-horas-produtivas/</link>
		<comments>http://www.milfont.org/tech/2010/06/17/trabalho-energizado-e-a-teoria-das-2-horas-produtivas/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 15:04:58 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Melhores práticas]]></category>
		<category><![CDATA[Metodologia]]></category>
		<category><![CDATA[Métodos Ágeis]]></category>
		<category><![CDATA[mercado]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=958</guid>
		<description><![CDATA[Quando eu trabalhava como funcionário, formulei uma teoria exótica e controversa que se uma empresa tiver em média duas horas produtivas por cada &#8220;recurso&#8221;, essa empresa teria um lucro exorbitante e seria sustentável. Duas horas produtivas para mim é uma licença poética para &#8220;códigos testáveis de forma automatizada, bem escritos, entregues por dia independente de [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"></div><p>Quando eu trabalhava como funcionário, formulei uma teoria exótica e controversa que se uma empresa tiver em média duas horas produtivas por cada &#8220;recurso&#8221;, essa empresa teria um lucro exorbitante e seria sustentável.</p>
<p>Duas horas produtivas para mim é uma licença poética para &#8220;códigos testáveis de forma automatizada, bem escritos, entregues por dia independente de tempo e que não trarão retrabalho&#8221;. Um par evita muito retrabalho, <a href="http://www.milfont.org/tech/2009/01/08/retrabalho-e-prejuizo/">lembrando que retrabalho não é refactoring, é prejuízo</a>.</p>
<p>Claro que não há método científico algum, apenas inferência por observação simples. Dia desses um funcionário de um cliente me disse:</p>
<p>&#8220;- Milfont, essa sua teoria é mais um dos seus exageros&#8221;.  Respondi:</p>
<p>&#8220;- Olha do lado, observe o que todos estão fazendo&#8221;.</p>
<p>Para espanto desse funcionário, ao olhar para o time mais caxias da empresa, aquele time considerado certinho, que ninguém conversa com ninguém, ele tomou um susto e detectou que todos, eu disse T-O-D-O-S, estavam com o cliente de email aberto. Ninguem estava com sua IDE em primeiro plano.</p>
<p>Coincidência?</p>
<h1>Trabalho Energizado</h1>
<p><a href="http://www.amazon.com/gp/product/0201745763?ie=UTF8&amp;tag=milftech-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0201745763"><img class="alignleft" style="margin: 5px;" title="Pair Programming Illuminated" src="http://ecx.images-amazon.com/images/I/51TXKD0A6VL._SL160_.jpg" alt="" width="130" height="160" /></a>Como consultor eu enfrento problemas de coaching e mentoring [adoro buzzwords] em relação a dificuldade da alta gestão não compreender os benefícios de programação em par para o trabalho energizado. Não que programação em par seja o único responsável por um trabalho focado, mas sem essa prática não dá nem para começar a mudar o cenário.</p>
<p>Todos meus clientes dizem em uníssono: &#8220;Até entendo que programação em par é importante, mas não o tempo todo e não para aqueles trabalhos simples&#8221;. Investigaremos essa frase ao final.</p>
<p>Meu trabalho como consultor é transformar galinhas mortas em galos de briga, então não tenho pretensões nem esperança que em um mês meus clientes terão integração contínua, todos seguirão Test First como prática e serão felizes para sempre, no mundo real a coisa é só um pouquinho mais complicada. Enfrento muitos clientes saindo da década de 80 direto para o novo milenio, é uma leva de CVS, Delphi, até clipper, além de vícios provocados por essas plataformas/arquiteturas/whatever.</p>
<h1>Agile Bibas</h1>
<p>Hoje é muito comum meus clientes pedirem planilhas e técnicas para medir velocidade e desempenho de seus &#8220;recursos&#8221; porque leram sobre isso nas revistas da moda. Isso é perda de tempo, vou cair no clichê mas não posso deixar de falar, enquanto voce não tratar seu time como pessoas e que elas não são máquinas controladas, não espere retorno deles.</p>
<p><a href="http://twitter.com/leonardoeloy">Leonardo Eloy</a> cunhou o termo #Agilebibas para representar todos os defensores do <a href="http://www.milfont.org/tech/2009/03/14/pmbok-de-jeans/">PMBoK de Jeans</a> que irão vender métricas e dirão que o time não produz conforme o esperado porque não se comprometem com as planilhas. Apenas comando-controle disfarçado de ágil.</p>
<p>Esqueça métrica de time, concentre-se na métrica do software. Não importa se o membro do time está nu, pulando corda, de cabeça para baixo, lendo emails ou enchendo a cara numa terça de manhã. O que importa é se as features foram entregues e com qualidade.</p>
<p>Parece simples mas não é, a soma &#8220;8 + 8 = 16&#8243; é difícil de ser anulada [imaginar que 8 horas de dois funcionários representam 16 horas de trabalho produzido com qualidade]. Medir tempo por funcionário é um dos maiores erros para tentar aumentar a produtividade do time.</p>
<p>Vou dizer mais uma vez: &#8220;Não meça pessoas, meça e entregue software&#8221;. Então não importa se seu funcionário não trabalha as 6 ou 8 horas que você espera que ele trabalhe, o que importa é se as duas features planejadas para hoje foram entregues com a qualidade esperada.</p>
<h1>Evitar o trabalho chato</h1>
<p>Algumas empresas ainda sonham com a esperança que basta impedir o acesso a redes sociais ou serviços na web, então o funcionário vai parar o &#8220;<a href="http://en.wikipedia.org/wiki/Goofing_off">Goofing Off</a>&#8220;. Existem inúmeros motivos para uma pessoa não estar energizada em seu trabalho, considero o principal como sendo &#8220;fazer trabalho chato&#8221;.</p>
<p>Vamos agora analisar aquela frase do início:</p>
<blockquote><p>&#8220;Até entendo que programação em par é importante, mas não o tempo todo e não para aqueles trabalhos simples&#8221;</p></blockquote>
<p>Observe que essa frase revela duas nuances onde o cliente acredita que trabalho em par não é importante, uma consequência da outra. Trabalho simples que provoca a necessidade de não trabalhar em par o tempo todo.</p>
<p>A primeira coisa como consultor quando sou contratado para mudar a cultura do time é tentar incluir programação em par como algo natural e prática necessária, para tanto preciso anular esse trabalho chato que considero ser basicamente trabalho repetitivo. Observe na frase anterior que meus clientes chamam esse trabalho de &#8220;simples&#8221;.</p>
<p>Não é simples, é chato.</p>
<p>Exemplo que me veio a cabeça agora mesmo, todos os cliente que não tem Test First como prática, então ficam testanto as coisas durante o desenvolvimento na mão, para tanto precisam gerar dados.  Para um desenvolvedor é frustrante ficar fazendo dump e passando para seus colegas de trabalho, porque não automatizar isso?</p>
<p>Todos meus clientes que <strong>não</strong> fazem Test First passam por isso. Ora, se mesmo os que tem essa prática nós enfrentamos desafios de um bom <a href="http://xunitpatterns.com/Fixture%20Setup%20Patterns.html">Setup</a> para garantir a independência no <a href="http://xp123.com/xplor/xp0308/">INVEST</a>, imagina os que não fazem.</p>
<p>Outro erro comum é achar que número de commits é sinal de proficiência ou estar trabalhando mais, em regra, para mim é sinal de muito trabalho repetitivo.</p>
<p>Não vou me prolongar, quero só concluir que evitar trabalho chato ajuda a demonstrar que Pair Programming é sim necessário o tempo todo e que se isso for alcançado a &#8220;morcegação&#8221; tende a diminuir e o reflexo na entrega de funcionalidades se torna positivo. Junte a isso o foco no software ao invés de medir pessoas e esqueça as toneladas de planilhas, na maioria das vezes nem um Burndown seja necessário, apenas trabalho energizado.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2010/06/17/trabalho-energizado-e-a-teoria-das-2-horas-produtivas/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>[Protesto] Ser empresário no Ceará ainda é lutar contra o coronelismo</title>
		<link>http://www.milfont.org/tech/2010/05/31/protesto-ser-empresario-no-ceara-ainda-e-lutar-contra-o-coronelismo/</link>
		<comments>http://www.milfont.org/tech/2010/05/31/protesto-ser-empresario-no-ceara-ainda-e-lutar-contra-o-coronelismo/#comments</comments>
		<pubDate>Mon, 31 May 2010 20:35:56 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[protesto]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=952</guid>
		<description><![CDATA[Mesmo com uma arrecadação record na história, o governo cearense, não satisfeito, resolveu cobrar diferença de icms para qualquer mercadoria comprada pela internet de forma inconstitucional. Então a lógica é a seguinte: se eu comprar um mercadoria mais barata para fomentar meu negócio, sou obrigado a pagar para o estado, que bate record de arrecadação, [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"></div><p>Mesmo com uma <a href="http://diariodonordeste.globo.com/materia.asp?codigo=716771">arrecadação record</a> na <a href="http://blogs.diariodonordeste.com.br/egidio/sefaz-do-ceara-bate-recordes-de-arrecadacao/">história</a>, o governo cearense, não satisfeito, resolveu cobrar diferença de icms para qualquer mercadoria comprada pela internet de <a href="http://blogs.diariodonordeste.com.br/egidio/tributarista-condena-cobranca-da-sefaz-do-ceara/">forma inconstitucional</a>.</p>
<p>Então a lógica é a seguinte: se eu comprar um mercadoria mais barata para fomentar meu negócio, sou obrigado a pagar para o estado, que bate record de arrecadação, a diferença de icms entre o estado que comprei e o Ceará. Fora isso ainda tem as regras da SEFAZ-CE que só liberam a mercadoria após alguns dias úteis a partir da confirmação do pagamento do imposto.</p>
<p>Não basta ter que lidar com a burocracia, agentes desonestos atrás de subornos, lentidão nos serviços e <a href="http://blogs.diariodonordeste.com.br/egidio/ufa-148-dias-trabalhando-para-o-governo/">alta carga tributária</a>. Agora nossos políticos metem a mão no nosso bolso diretamente e sem medo de retaliação.</p>
<p>Depois nos perguntam porque é tão difícil as pessoas empreenderem em coronelândia.</p>
<p>Perguntem ao governador <a href="http://twitter.com/cidfgomes">@cidfgomes</a> o que ele acha disso.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2010/05/31/protesto-ser-empresario-no-ceara-ainda-e-lutar-contra-o-coronelismo/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Palestra BDD &#8211; Unifor 2010</title>
		<link>http://www.milfont.org/tech/2010/05/28/palestra-bdd-unifor-2010/</link>
		<comments>http://www.milfont.org/tech/2010/05/28/palestra-bdd-unifor-2010/#comments</comments>
		<pubDate>Fri, 28 May 2010 17:49:21 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Melhores práticas]]></category>
		<category><![CDATA[Metodologia]]></category>
		<category><![CDATA[palestras]]></category>
		<category><![CDATA[xpce]]></category>
		<category><![CDATA[DDD]]></category>
		<category><![CDATA[domain driven design]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=941</guid>
		<description><![CDATA[Ontem [27/05/2010] palestrei no evento da JavaCE na Unifor, abaixo estão os slides. Para quem não participou do evento, provavelmente os slides não farão muito sentido por si, mas creio que dá para entender o contexto. O objetivo dessa palestra foi desmistificar um pouco o entendimento sobre Domain Driven Design. O foco foi demonstrar que [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"></div><p><a href="http://www.amazon.com/gp/product/0321125215?ie=UTF8&amp;tag=milftech-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321125215"><img class="alignleft" style="margin: 5px;" title="Domain Driven Design na Amazon" src="http://ecx.images-amazon.com/images/I/31ywgz51v-L._SL160_.jpg" alt="" width="120" height="160" /></a>Ontem [27/05/2010] <a href="http://www.javace.org/evento-javace-especializacao-unifor/">palestrei no evento</a> da <a href="http://www.javace.org/">JavaCE</a> na Unifor, abaixo estão os <a href="http://www.slideshare.net/cmilfont/domain-driven-design-4344612">slides</a>. Para quem não participou do evento, provavelmente os slides não farão muito sentido por si, mas creio que dá para entender o contexto.</p>
<p>O objetivo dessa palestra foi desmistificar um pouco o entendimento sobre <a href="http://en.wikipedia.org/wiki/Domain_driven_design">Domain Driven Design</a>. O foco foi demonstrar que essa abordagem não é sobre padrões, como bem me aconselhou o <a href="http://twitter.com/rodrigoy/status/14864670811">Rodrigo Yoshima</a>. Enfatizei a comunicação como fator importante e comparei arquiteturas existentes por má compreensão não só da &#8220;Orientação a Objetos&#8221;, mas por dogmatismo e ignorância.</p>
<p>Como eu conheço bem o mercado local, enfatizei algumas más práticas que considero o empecilho aos projetos, principalmente as &#8220;arquiteturas de referências&#8221; que se proliferam aqui e impactam na modelagem.</p>
<p>Fizemos um &#8220;Hands On&#8221; rapidinho e não tem como não falar sobre <a href="http://www.amazon.com/gp/product/0321146530?ie=UTF8&amp;tag=milftech-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0321146530">TDD</a>, afinal, modelagem ágil passa invariavelmente pelo <a href="http://c2.com/cgi/wiki?TestFirstProgramming">Test First</a>. &#8220;Fizemos&#8221;, porque tive a ajuda do <a href="http://twitter.com/rponte/status/14878430610">@rponte</a>.</p>
<p><a title="27052010265 por chrismilfont, no Flickr" href="http://www.flickr.com/photos/cmilfont/4647510289/"><img src="http://farm5.static.flickr.com/4033/4647510289_b9b0460d69.jpg" alt="27052010265" width="500" height="375" /></a></p>
<div id="__ss_4344612" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Domain driven design" href="http://www.slideshare.net/cmilfont/domain-driven-design-4344612">Domain driven design</a></strong><object id="__sse4344612" 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=domaindrivendesign-100528120249-phpapp01&amp;stripped_title=domain-driven-design-4344612" /><param name="name" value="__sse4344612" /><param name="allowfullscreen" value="true" /><embed id="__sse4344612" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=domaindrivendesign-100528120249-phpapp01&amp;stripped_title=domain-driven-design-4344612" name="__sse4344612" 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/cmilfont">Christiano Milfont</a>.</div>
</div>
<p><a href="http://www.submarino.com.br/produto/1/21576488/domain-driven+design?franq=170940"><img class="alignleft" title="Domain Driven Design" src="http://i.s8.com.br/images/books/cover/img8/21576488.jpg" alt="" width="180" height="180" /></a>Descobri só ontem que existe<a href="http://www.submarino.com.br/produto/1/21576488/domain-driven+design?franq=170940"> tradução do livro Domain Driven Design</a> do <a href="http://domaindrivendesign.org/about">Eric Evans</a>, eu recomendo comprarem o original na Amazon, mas se forem comprar em português que seja pelo <a href="http://www.submarino.com.br/produto/1/21576488/domain-driven+design?franq=170940">meu link</a>. <img src='http://www.milfont.org/tech/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>A <a href="http://www.infoq.com">InfoQ</a> publicou um <a href="http://www.infoq.com/minibooks/domain-driven-design-quickly">minibook sobre o tema</a>.</p>
<p>Vou subir a aplicação que codificamos ontem para o <a href="http://github.com/cmilfont">github</a> e atualizo essa página quando estiver disponível. Algumas fotos que foram tirados <a href="http://www.flickr.com/photos/cmilfont/sets/72157624154994090/">voces conferem aqui</a>.</p>
<p>Algumas referências importantes sobre o que falei ontem:</p>
<p><a href="http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/">http://blog.aspercom.com.br/2009/08/11/repositorios-ddd/</a></p>
<p><a href="http://fragmental.tw/2010/02/24/everyday-tales-anatomy-of-a-refactoring/">http://fragmental.tw/2010/02/24/everyday-tales-anatomy-of-a-refactoring/</a></p>
<p><a href="http://fragmental.tw/2010/03/10/everyday-tales-anatomy-of-a-refactoring-%E2%80%93-part-2/">http://fragmental.tw/2010/03/10/everyday-tales-anatomy-of-a-refactoring-%E2%80%93-part-2/</a></p>
<p><a href="http://fragmental.tw/2010/03/10/everyday-tales-anatomy-of-a-refactoring-%e2%80%93-part-3/">http://fragmental.tw/2010/03/10/everyday-tales-anatomy-of-a-refactoring-%e2%80%93-part-3/</a></p>
<p><a href="http://fragmental.tw/2010/03/22/nevermind-domain-driven-design/">http://fragmental.tw/2010/03/22/nevermind-domain-driven-design/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2010/05/28/palestra-bdd-unifor-2010/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Não reclame de preço</title>
		<link>http://www.milfont.org/tech/2010/05/25/nao-reclame-de-preco/</link>
		<comments>http://www.milfont.org/tech/2010/05/25/nao-reclame-de-preco/#comments</comments>
		<pubDate>Tue, 25 May 2010 13:12:00 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[offtopic]]></category>
		<category><![CDATA[protesto]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/2010/05/25/nao-reclame-de-preco/</guid>
		<description><![CDATA[Uma coisa já antiga é a eterna reclamação sobre o preço de eventos, ano passado o pessoal reclamou ser caro os 30 reais que cobramos nas palestras do Maré de Agilidade Fortaleza 2009. O valor era irrisório, praticamente simbólico porque não cobriria quase nada do custo que teríamos. Não adianta, se cobrar 300 ou 30 [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"></div><p>Uma coisa já antiga é a eterna reclamação sobre o preço de eventos, ano passado o pessoal reclamou ser caro os 30 reais que cobramos nas palestras do Maré de Agilidade Fortaleza 2009. O valor era irrisório, praticamente simbólico porque não cobriria quase nada do custo que teríamos.</p>
<p>Não adianta, se cobrar 300 ou 30 vão achar caro do mesmo jeito.</p>
<p>O brasileiro é muito mal acostumado de investir em sua própria carreira, aqui é algo estranho até ser pego lendo, geralmente te perguntam se é para concurso.</p>
<p>Quase todo mundo que pergunto se vai para o <a href="http://www.qconsp.com/">Qcon em São Paulo</a> faz cara de azedo e solta: &#8220;Tá caro&#8221;. Caro?</p>
<p>A <a href="http://www.infoq.com/br/">InfoQ Brasil</a> está trazendo alguns dos maiores nomes de desenvolvimento de software no mundo para compartilhar seus conhecimentos conosco e você acha caro? Já imaginou o custo que a organização terá só de passagens, hotel e alimentação?</p>
<p>Se você trabalha com TI, você faz parte de uma elite [no mínimo é classe média] e não tem motivos para reclamar de preço de eventos, ainda mais se você gasta com som, rodão de carro e baladas que não te agregam capital intelectual.</p>
<p>Se você vai no JunkieFood conosco toda sexta, gasta uns 30 reais só no BurgerKing, em um mês voce gasta com sanduíche quase a metade da inscrição do Qcon e acha caro um evento que vai agregar valor a sua carreira?</p>
<p>#rasgaessagrana e invista em você.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2010/05/25/nao-reclame-de-preco/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
	</channel>
</rss>
