<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>small acts</title> <link>http://caikesouza.com/blog</link> <description>make great revolutions</description> <lastBuildDate>Tue, 14 May 2013 13:32:10 +0000</lastBuildDate> <language>en-US</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.4.2</generator> <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/smallacts" /><feedburner:info uri="smallacts" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>Quando usar Exceções</title><link>http://feedproxy.google.com/~r/smallacts/~3/eAyIKE9wk8c/</link> <comments>http://caikesouza.com/blog/2013/05/quando-usar-excecoes/#comments</comments> <pubDate>Tue, 14 May 2013 13:32:10 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">http://caikesouza.com/blog/?p=1030</guid> <description><![CDATA[Um post interessante na lista GURU-PA: (&#8230;) quando estamos desenvolvendo um projeto é geralmente uma boa estratégia desenvolver Exceções próprias, para tratar especificamente do problema em questão. Queria saber se vcs têm algum padrão de implementação, como vcs trabalham com esta questão? Segue minha resposta ao grupo: Legal a dúvida! Eu costumo escrever exceções quando [...]]]></description> <content:encoded><![CDATA[<p>Um post interessante na lista <a
title="GURU-PA" href="https://groups.google.com/group/guru-pa" target="_blank">GURU-PA</a>:</p><blockquote><div>(&#8230;) quando estamos desenvolvendo um projeto é geralmente uma boa estratégia desenvolver Exceções próprias, para tratar especificamente do problema em questão.</div><div>Queria saber se vcs têm algum padrão de implementação, como vcs trabalham com esta questão?</div></blockquote><div></div><div>Segue minha resposta ao grupo:</div><div></div><div><blockquote><p>Legal a dúvida!</p><div></div><div>Eu costumo escrever exceções quando sinto a necessidade de criar abstrações pra possíveis erros em um fluxo que normalmente não deve gerar erro. Por exemplo, se a sua aplicação depende de um arquivo de configuração, você pode lançar uma <a
href="https://github.com/fnando/pagseguro/blob/master/lib/pagseguro/base.rb#L23" target="_blank">exceção específica caso o arquivo não exista</a>. A alternativa seria retornar <strong>false, </strong>mas um simples boleano não diz muita coisa com relação ao erro em questão. Em linguagens não OO, tipo C, a alternativa é retornar error codes, o que enche o código de if/else e torna a manutenção um pesadelo.</div><div></div><div>No exemplo que o Felipe mencionou de <em>Model.find(id), </em>o AR lança um erro porque esse método é usado pra procurar por um record específico no banco, que necessariamente <strong>deve</strong> existir. Normalmente a gente usa <em>Model.find(id) </em>em actions oriundas de urls que foram geradas dinamicamente, resultados de uma query no banco. Por exemplo, uma listagem de produtos em <em>/products</em><strong>,</strong> lista os products a partir de um <em>Product.all</em>  (SELECT * FROM products) e gera dinamicamente links para uma action que então chama <em>Model.find(id).</em>Nesse caso, o id do <em>Model.find(id) </em>está vindo de uma url, por exemplo  <em>/products/1,</em> que foi gerada por ids vindos originalmente do banco. Não foi o usuário que pensou &#8220;Ah.. deixa eu ver se existe esse id&#8221;. Pra casos como esse, onde pode ou não existir um record no banco, você usa <em>Model.find_by_id(id), </em>ou o novo <em>Model.find_by(id: id)</em> do Rails 4. Esses dois métodos &#8220;aceitam&#8221; o fato de não existir um resultado no banco, e simplesmente retornam <em>nil</em> caso não exista<em>.</em></div><div></div><div>No geral, <strong>exceções são uma forma elegante em OO de falar que deu merda em algum lugar que não deveria ter dado merda, e oferecem ao client informações necessárias pra ele tratar o erro da forma como ele achar melhor</strong>.</div></blockquote></div> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=eAyIKE9wk8c:TZ1d0EuWrlY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=eAyIKE9wk8c:TZ1d0EuWrlY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=eAyIKE9wk8c:TZ1d0EuWrlY:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/eAyIKE9wk8c" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://caikesouza.com/blog/2013/05/quando-usar-excecoes/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://caikesouza.com/blog/2013/05/quando-usar-excecoes/</feedburner:origLink></item> <item><title>TaSafoConf 2012</title><link>http://feedproxy.google.com/~r/smallacts/~3/ElKS9CQpRP8/</link> <comments>http://caikesouza.com/blog/2012/07/tasafoconf-2012/#comments</comments> <pubDate>Thu, 19 Jul 2012 20:52:19 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">http://caikesouza.com/blog/?p=986</guid> <description><![CDATA[Nos dias 8 e 9 de Junho a cidade de Belém do Pará teve o maior evento de tecnologia organizado pela sua comunidade local até então, o TaSafo Conf. Participar deste evento foi algo especial pra mim, pois morei muitos anos em Belém e tenho uma grande apreciação pela cidade e por sua comunidade de tecnologia. [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">Nos dias 8 e 9 de Junho a cidade de Belém do Pará teve o maior evento de tecnologia organizado pela sua comunidade local até então, o <a
href="http://tasafo.org/conf2012/" target="_blank">TaSafo Conf</a>. Participar deste evento foi algo especial pra mim, pois morei muitos anos em Belém e tenho uma grande apreciação pela cidade e por sua comunidade de tecnologia.</p><p
style="text-align: center;"><a
href="http://caikesouza.com/blog/wp-content/uploads/416188_347133828689563_982243421_o.jpeg"><img
class="aligncenter  wp-image-1000" title="416188_347133828689563_982243421_o" src="http://caikesouza.com/blog/wp-content/uploads/416188_347133828689563_982243421_o-1024x768.jpeg" alt="Palestra de Interfaces" width="491" height="369" /></a></p><p
style="text-align: justify;"><p
style="text-align: justify;">Foram dois dias de palestras sobre os assuntos mais variados, como linguagens de programação, metodologias, <em>cloud</em> e <em>open-source</em>. Eu apresentei uma palestra sobre <a
href="http://speakerdeck.com/u/caike/p/powerful-interfaces">&#8220;Modelagem Orientada a Interfaces&#8221;</a>, que foi uma versão modificada da mesma palestra que apresentei na <a
href="http://railsconf2012.com/sessions/36" target="_self">RailsConf</a> deste ano.</p><p
style="text-align: center;"><p>http://speakerdeck.com/u/caike/p/powerful-interfaces</p><p
style="text-align: justify;">O Luiz Sanches fez <a
href="http://tasafo.wordpress.com/2012/06/26/ta-safo-conf-2012-acoes-paralelas/" target="_blank">um post</a> bem mais completo sobre o evento, não deixe de conferir. O grupo <a
title="TaSafo" href="http://tasafo.wordpress.com/" target="_blank">TaSafo</a> está de parabéns pela exelente organização e espero poder participar da próxima edição!</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=ElKS9CQpRP8:tgLJHEJlc0I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=ElKS9CQpRP8:tgLJHEJlc0I:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=ElKS9CQpRP8:tgLJHEJlc0I:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/ElKS9CQpRP8" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://caikesouza.com/blog/2012/07/tasafoconf-2012/feed/</wfw:commentRss> <slash:comments>3</slash:comments> <feedburner:origLink>http://caikesouza.com/blog/2012/07/tasafoconf-2012/</feedburner:origLink></item> <item><title>Magic Ruby 2011</title><link>http://feedproxy.google.com/~r/smallacts/~3/nPV5VTh4Ul8/</link> <comments>http://caikesouza.com/blog/2011/02/magic-ruby-2011/#comments</comments> <pubDate>Wed, 09 Feb 2011 23:41:57 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">http://caikesouza.com/blog/?p=974</guid> <description><![CDATA[Last week was Magic Ruby here in Orlando. It was a two day, single track event, put together by Jeremy McAnally, where we had some amazing people coming from all over the country to attend and also to present there. Gregg and I presented our talk on &#8220;Code isnt&#8217; Enough&#8221;, where we talked about 12 principles [...]]]></description> <content:encoded><![CDATA[<p>Last week was <a
href="http://magic-ruby.com">Magic Ruby</a> here in Orlando. It was a two day, single track event, put together by Jeremy McAnally, where we had some amazing people coming from all over the country to attend and also to present there.</p><div></div><p><a
href="http://www.flickr.com/photos/intridea/5422923810"><img
class="aligncenter size-full wp-image-978" src="http://caikesouza.com/blog/wp-content/uploads/magic_ruby.jpg" alt="Magic Ruby" width="500" height="333" /></a></p><p>Gregg and I presented our talk on &#8220;Code isnt&#8217; Enough&#8221;, where we talked about 12 principles that go beyond just writing good code and we think that every software developer should follow in order to become a better professional.</p><p>I&#8217;ve had lots of feedback from people, specially about running our local Coding Dojo (which will <a
href="http://orlandodojo.org/233/">meet next week</a> at the Voxeo office).</p><p>For a complete list of the talks and links for some of the slides, you can visit Tim Knight&#8217;s blog at <a
href="http://blog.innovativethought.net/2011/02/06/magic-ruby-2011-conference-talks/">Innovative Though</a>.</p><p>Congrats to Jeremy and all of the sponsors for putting this great conference together.</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=nPV5VTh4Ul8:kOdLAypGGMk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=nPV5VTh4Ul8:kOdLAypGGMk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=nPV5VTh4Ul8:kOdLAypGGMk:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/nPV5VTh4Ul8" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://caikesouza.com/blog/2011/02/magic-ruby-2011/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://caikesouza.com/blog/2011/02/magic-ruby-2011/</feedburner:origLink></item> <item><title>Oxente Rails 2010</title><link>http://feedproxy.google.com/~r/smallacts/~3/_53W-AQNMWA/</link> <comments>http://caikesouza.com/blog/2010/09/oxente-rails-2010/#comments</comments> <pubDate>Thu, 30 Sep 2010 23:29:39 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">http://caikesouza.com/blog/?p=945</guid> <description><![CDATA[No início do mês de agosto tive o prazer de visitar pela primeira vez a cidade de Natal, no Rio Grande do Norte, para a segunda edição do famoso Oxente Rails. Foi um evento maravilhoso, muito bem organizado pelo pessoal da Tink! e que possibilitou um networking sensacional entre comunidades de todo o Brasil. Foram dois [...]]]></description> <content:encoded><![CDATA[<p>No início do mês de agosto tive o prazer de visitar pela primeira vez a cidade de Natal, no Rio Grande do Norte, para a segunda edição do famoso <a
href="http://oxenterails.com">Oxente Rails</a>. Foi um evento maravilhoso, muito bem organizado pelo pessoal da Tink! e que possibilitou um networking sensacional entre comunidades de todo o Brasil.</p><p
style="text-align: center;"><a
href="http://oxenterails.com/fotos"><img
class="aligncenter size-full wp-image-947" src="http://caikesouza.com/blog/wp-content/uploads/oxente_geral.jpg" alt="oxente_geral" width="512" height="342" /></a></p><p>Foram dois dias de palestras sobre tecnologia, agilidade, empreendedorismo e, claro, <a
href="http://horaextra.org">hora-extra</a>.</p><p>No primeiro dia apresentei minha palestra sobre <a
href="http://www.slideshare.net/caikesouza/refactoring-ruby-code">Refactoring</a> e tive um excelente feedback de pessoas que puderam identificar não apenas alguns dos &#8220;code smells&#8221; que foram mostrados, como também alguma situações mencionadas.</p><p
style="text-align: center;"><img
class="aligncenter size-full wp-image-948" src="http://caikesouza.com/blog/wp-content/uploads/caike_palestra.jpg" alt="caike_palestra" width="512" height="342" /></p><p>No segundo dia, tivemos a chance de realizar um <a
href="http://codingdojo.org">Coding Dojo</a> na área de <em>openspaces. </em>Fiquei muito feliz quando, na volta do almoço, vi o pessoal se organizando e dando início ao grupo de <a
href="http://dojorn.wordpress.com/">Coding Dojo do Rio Grande do Norte</a>!</p><p
style="text-align: center;"><a
href="http://oxenterails.com/fotos"><img
class="aligncenter size-full wp-image-946" src="http://caikesouza.com/blog/wp-content/uploads/caike_dojo.jpg" alt="caike_dojo" width="512" height="342" /></a></p><p
style="text-align: center;"><p
style="text-align: left; ">Montei este vídeo com algumas cenas do evento:</p><p
style="text-align: left; "><iframe
src='http://player.vimeo.com/video/14350633?title=1&amp;byline=1&amp;portrait=1' width='500' height='360' frameborder='0'></iframe></p><p
style="text-align: left; ">Mais uma vez, meus parabéns ao pessoal da Tink! e espero poder participar do Oxente Rails 2011!</p><p
style="text-align: left; ">ps:  Grande falha minha ter deixado este post em rascunho por tanto tempo!</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=_53W-AQNMWA:lH7Gu7zzPfw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=_53W-AQNMWA:lH7Gu7zzPfw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=_53W-AQNMWA:lH7Gu7zzPfw:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/_53W-AQNMWA" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://caikesouza.com/blog/2010/09/oxente-rails-2010/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://caikesouza.com/blog/2010/09/oxente-rails-2010/</feedburner:origLink></item> <item><title>Comunidades Dinamicamente Tipadas (slides)</title><link>http://feedproxy.google.com/~r/smallacts/~3/1xrGyTKo5CE/</link> <comments>http://caikesouza.com/blog/2010/07/comunidades-dinamicamente-tipadas-slides/#comments</comments> <pubDate>Fri, 16 Jul 2010 15:40:40 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[agile]]></category> <category><![CDATA[opensource]]></category> <category><![CDATA[pt]]></category><guid isPermaLink="false">http://caikesouza.com/blog/?p=932</guid> <description><![CDATA[Nesta quarta-feira aconteceu mais uma reunião do grupo TaSafo, em Belém do Pará. Foi um prazer poder re-encontrar antigos amigos e conhecer pessoalmente os responsáveis por movimentar a comunidade Paraense de desenvolvimento. O encontro foi composto por duas apresentações, seguidas da &#8216;Hora do Desapego&#8217;. Meu amigo Mateus Linhares falou sobre sua experiência implantando práticas e [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify; ">Nesta quarta-feira aconteceu mais uma reunião do grupo <a
title="Tecnologias Abertas com Software Ágil, Fácíl e Organizado." href="http://tasafo.wordpress.com/" target="_blank">TaSafo</a>, em Belém do Pará. Foi um prazer poder re-encontrar antigos amigos e conhecer pessoalmente os responsáveis por movimentar a comunidade Paraense de desenvolvimento.</p><p
style="text-align: justify; ">O encontro foi composto por duas apresentações, seguidas da <a
href="http://yfrog.com/0h6pcbj" target="_blank">&#8216;Hora do Desapego&#8217;</a>.</p><p
style="text-align: justify; ">Meu amigo <a
href="http://twitter.com/mateuslinhares" target="_blank">Mateus Linhares</a> falou sobre sua experiência implantando práticas e métodos ágeis no Ikwa.</p><p
style="text-align: justify; ">Eu falei sobre &#8216;Comunidades Dinamicamente Tipadas&#8217;.</p><div
style="width:425px" id="__ss_4754155"><strong
style="display:block;margin:12px 0 4px"><a
href="http://www.slideshare.net/caikesouza/comunidades-dinamicamente-tipadas" title="Comunidades Dinamicamente Tipadas">Comunidades Dinamicamente Tipadas</a></strong><object
id="__sse4754155" width="425" height="355"><param
name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=comunidadesdinamicamentetipadas-100714120946-phpapp01&#038;stripped_title=comunidades-dinamicamente-tipadas" /><param
name="allowFullScreen" value="true"/><param
name="allowScriptAccess" value="always"/><embed
name="__sse4754155" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=comunidadesdinamicamentetipadas-100714120946-phpapp01&#038;stripped_title=comunidades-dinamicamente-tipadas" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div
style="padding:5px 0 12px">View more <a
href="http://www.slideshare.net/">presentations</a> from <a
href="http://www.slideshare.net/caikesouza">Caike Souza</a>.</div></div> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=1xrGyTKo5CE:MmQBzUakgY0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=1xrGyTKo5CE:MmQBzUakgY0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=1xrGyTKo5CE:MmQBzUakgY0:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/1xrGyTKo5CE" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://caikesouza.com/blog/2010/07/comunidades-dinamicamente-tipadas-slides/feed/</wfw:commentRss> <slash:comments>5</slash:comments> <feedburner:origLink>http://caikesouza.com/blog/2010/07/comunidades-dinamicamente-tipadas-slides/</feedburner:origLink></item> <item><title>Coding Dojo learning process – Velocity</title><link>http://feedproxy.google.com/~r/smallacts/~3/aobrNvwlEH8/</link> <comments>http://caikesouza.com/blog/2010/06/coding-dojo-learning-process-velocity/#comments</comments> <pubDate>Tue, 29 Jun 2010 16:32:28 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[agile]]></category> <category><![CDATA[en]]></category> <category><![CDATA[software craftsmanship]]></category><guid isPermaLink="false">http://caikesouza.com/blog/?p=874</guid> <description><![CDATA[In our most recent Coding Dojo session here in Orlando I realized something really interesting about our team&#8217;s velocity. I feel like other people doing Coding Dojos may have realized this as well, so I&#8217;ll try and put it into words properly. Briefly, below is how we run our sessions: Planning The Coding Dojo session starts with [...]]]></description> <content:encoded><![CDATA[<p>In our most recent <a
href="http://orlandodojo.org">Coding Dojo</a> session here in Orlando I realized something really interesting about our team&#8217;s <strong>velocity</strong>. I feel like other people doing <a
href="http://codingdojo.org">Coding Dojos</a> may have realized this as well, so I&#8217;ll try and put it into words properly.</p><p>Briefly, below is how we run our sessions:</p><h2>Planning</h2><p
style="text-align: justify;">The <a
href="http://codingdojo.org">Coding Dojo</a> session starts with an initial planning involving the problem we picked. Stand up style, focused on early results and the-simplest-thing-that-could-possibly-work kinda features. We usually take about 10 minutes and write down some things on the board.</p><p
style="text-align: justify;">Our goal at the planning is to set up expectations. Everyone involved in the planning gets to make suggestions (add/remove/renegotiate goals). We also decide on an initial design (classes, methods, test cases, etc.).</p><h2>Coding</h2><p
style="text-align: center;"><img
class="aligncenter size-full wp-image-904" style="border: 1px solid black; margin: 1px;" src="http://caikesouza.com/blog/wp-content/uploads/coding_colab_1.jpg" alt="Coding @ Colab" width="554" height="312" /></p><p
style="text-align: justify;">We start coding, 7 minutes a pair, and try not to have too many interruptions. Everyone gets a shot and this usually takes us from 40 to 50 minutes, depending on the number of people attending.</p><p
style="text-align: justify;"><h2>Half-time</h2><p
style="text-align: justify;">Coding stops and we talk about what we have done so far.</p><p
style="text-align: justify;">A little retrospective about the code and how close/far we are from our initial expectations. If we think we can add things, we usually do. Maybe we think we should replace things, or even remove some.</p><p
style="text-align: justify;"><h2>More coding</h2><p
style="text-align: justify;">Another round of test-driven development with a 7 minute pairing cycle.</p><p
style="text-align: justify;"><h2>Done coding</h2><p
style="text-align: justify;">Once everyone gets a shot,<strong> that&#8217;s it. </strong></p><p
style="text-align: justify;"><strong></strong>We avoid making further changes once the last 7 minutes has been over with.</p><p
style="text-align: justify;"><h2>Retrospective</h2><p
style="text-align: center; "><a
href="http://www.flickr.com/photos/caike/4557850560"><img
class="aligncenter size-full wp-image-912" style="margin-top: 1px; margin-bottom: 1px; border: 1px solid black;" src="http://caikesouza.com/blog/wp-content/uploads/marcela_and_dave.jpg" alt="Retrospective" width="500" height="332" /></a></p><p
style="text-align: justify;">The way we do this is as a both technical and social retrospective. Usually ends up being pretty much social. We talk about things that worked well and things that need improvement.</p><p
style="text-align: justify;"><h2>Velocity</h2><p
style="text-align: justify;">On a real life project, back on the planning meeting, setting up expectations usually involves making estimates.</p><p
style="text-align: justify;">Most agile teams agree on <a
href="http://www.agilegamedevelopment.com/2006/03/hours-vs-story-points.html">estimating using story points rather than hours</a>. I see this as a valid approach, mostly because you get to let each member of the team make their own point &lt;-&gt; time association.</p><p
style="text-align: justify;">Velocity does <strong>not</strong> mean productivity, thus, greater velocity does <strong>not</strong> mean greater productivity. The focus here is consistency.</p><p
style="text-align: justify;">Consistency is knowing that every [<em>S</em>, a time-scope ] you have potentially shippable software, with additional business value to the product.</p><p
style="text-align: justify;">The question during planning should be something along the lines of:</p><p
style="text-align: justify;">&#8220;Out of all of these things that the team agreed on being delivered by the end of the iteration, how much of each should we be able to have ?&#8221;</p><p
style="text-align: justify;">Then, try and settle on the simplest thing that could resemble what the client has in mind. You still have room to impress him with something really cool &#8211; and by cool I mean <a
href="http://www.extremeprogramming.org/values.html">simple</a>.</p><p
style="text-align: justify;">By the end of the iteration, when the team should be about done with the things they estimated, the client should be seeing and <strong>using</strong> the software.</p><p
style="text-align: justify;">Even when I write code for fun, I like to set clear goals based on my velocity. For things that are still unclear, or if I&#8217;m not familiar with some technology involved, I reduce my scope and try to extract the first thing that would made me simply go &#8220;oh, that&#8217;s cool.&#8221;</p><p
style="text-align: justify;">The client, on the other hand, should be worried about the first thing that goes &#8220;$&#8221; (is there a sound for money?).</p><p
style="text-align: justify;">By reducing the scope with a client, we&#8217;re also reducing the time the client spends thinking about features he will probably never need.</p><p
style="text-align: justify;">We could tell him &#8220;<a
href="http://en.wikipedia.org/wiki/YAGNI">YAGNI</a> !!&#8221;.</p><p
style="text-align: justify;">That would sound totally extra-terrestrial, but totally awesome.</p><p
style="text-align: justify; "><h2>Learning your velocity</h2><p
style="text-align: center; "><a
href="http://www.flickr.com/photos/seandreilinger/1058631764/"><img
class="aligncenter size-full wp-image-914" style="margin-top: 1px; margin-bottom: 1px; border: 1px solid black;" src="http://caikesouza.com/blog/wp-content/uploads/baby_walking.jpg" alt="Learning your velocity" width="500" height="333" /></a></p><p
style="text-align: justify;">Since the people attending the Orlando Coding Dojo have been pretty much the same lately, with a few variations, we&#8217;ve been able to meet our expectations and always end the session with tests passing and working software.</p><p
style="text-align: justify;">It wasn&#8217;t always like this, though.</p><p
style="text-align: justify;">In the first few sessions we had no idea of how much work we were able to accomplish as a team. We would end our sessions kinda frustrated, because we weren&#8217;t able to meet our expectations.</p><p
style="text-align: justify;">The same thing happens with other Coding Dojo groups who are just getting started and also with agile teams in the first few iterations on real life projects.</p><p
style="text-align: justify;">Even without writing down estimates (in points or hours), but because we are constantly planning and running retrospectives to improve our process, we are becoming more familiar with our actual velocity.</p><p
style="text-align: justify;">This means we are able to have about 6-9 people, who don&#8217;t even work professionally on the same technology, agreeing on something and getting it done in about 2 hours. I find this fantastic!</p><p
style="text-align: justify;">Software development is a continuous learning process. Learning your team&#8217;s velocity (and your own velocity when you go solo), enables you to deliver early, deliver often and deliver always.</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=aobrNvwlEH8:SgBrHQp1bWY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=aobrNvwlEH8:SgBrHQp1bWY:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=aobrNvwlEH8:SgBrHQp1bWY:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/aobrNvwlEH8" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://caikesouza.com/blog/2010/06/coding-dojo-learning-process-velocity/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://caikesouza.com/blog/2010/06/coding-dojo-learning-process-velocity/</feedburner:origLink></item> <item><title>Meet the Orlando Coding Dojo</title><link>http://feedproxy.google.com/~r/smallacts/~3/Y4CqjKvsZL4/</link> <comments>http://caikesouza.com/blog/2010/05/meet-the-orlando-coding-dojo/#comments</comments> <pubDate>Mon, 10 May 2010 16:40:26 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[Uncategorized]]></category><guid isPermaLink="false">http://caikesouza.com/blog/?p=863</guid> <description><![CDATA[Here&#8217;s a short video from our last session. Make sure you check out our official web site and join our mailing list.]]></description> <content:encoded><![CDATA[<p>Here&#8217;s a short video from our last session.</p><p>Make sure you check out our <a
href="http://orlandodojo.org">official web site</a> and join our <a
href="http://groups.google.com/group/orlando-dojo">mailing list</a>.</p> <iframe
src='http://player.vimeo.com/video/11596450?title=1&amp;byline=1&amp;portrait=1' width='500' height='360' frameborder='0'></iframe> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=Y4CqjKvsZL4:inxaTdl1v5s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=Y4CqjKvsZL4:inxaTdl1v5s:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=Y4CqjKvsZL4:inxaTdl1v5s:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/Y4CqjKvsZL4" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://caikesouza.com/blog/2010/05/meet-the-orlando-coding-dojo/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://caikesouza.com/blog/2010/05/meet-the-orlando-coding-dojo/</feedburner:origLink></item> <item><title>ftp upload in one command</title><link>http://feedproxy.google.com/~r/smallacts/~3/yVaZ8vHZwbc/</link> <comments>http://caikesouza.com/blog/2010/03/ftp-upload-in-one-command/#comments</comments> <pubDate>Thu, 04 Mar 2010 22:23:35 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[en]]></category> <category><![CDATA[linux]]></category> <category><![CDATA[opensource]]></category><guid isPermaLink="false">http://www.caikesouza.com/blog/?p=736</guid> <description><![CDATA[As part of a backup routine, I had to upload a file to an ftp server. It actually took me some time to figure out how to do this with one command, so I thought I&#8217;d post it here: curl -sS -T ${FILE_PATH}/${FILE_NAME} --ftp-pasv \ ftp://${FTP_USER}:${FTP_PWD}@${FTP_URL}/${FILE_NAME} This example is uploading the file to the ftp [...]]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">As part of a backup routine, I had to upload a file to an ftp server. It actually took me some time to figure out how to do this with one command, so I thought I&#8217;d post it here:</p><pre><code>curl -sS -T ${FILE_PATH}/${FILE_NAME} --ftp-pasv \
ftp://${FTP_USER}:${FTP_PWD}@${FTP_URL}/${FILE_NAME}</code></pre><p
style="text-align: justify;">This example is uploading the file to the ftp server using silent mode (-s) and showing errors when they occur (-S), while connecting to the server in passive mode (&#8211;ftp-pasv).</p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=yVaZ8vHZwbc:RxElKzyhTv0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=yVaZ8vHZwbc:RxElKzyhTv0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=yVaZ8vHZwbc:RxElKzyhTv0:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/yVaZ8vHZwbc" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://caikesouza.com/blog/2010/03/ftp-upload-in-one-command/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <feedburner:origLink>http://caikesouza.com/blog/2010/03/ftp-upload-in-one-command/</feedburner:origLink></item> <item><title>Refactoring at ORUG</title><link>http://feedproxy.google.com/~r/smallacts/~3/Az-C52PBT_k/</link> <comments>http://caikesouza.com/blog/2010/01/refactoring-at-orug/#comments</comments> <pubDate>Tue, 19 Jan 2010 04:39:44 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[agile]]></category> <category><![CDATA[en]]></category> <category><![CDATA[opensource]]></category> <category><![CDATA[ruby]]></category> <category><![CDATA[software craftsmanship]]></category><guid isPermaLink="false">http://www.caikesouza.com/blog/?p=702</guid> <description><![CDATA[Here is the slides for the Refactoring talk I did last Thursday at the Orlando Ruby User Group meeting. In case you want to hear me speaking along with the slides, I&#8217;ve put it up on vcasmo also. Refactoring View more documents from Caike Souza.]]></description> <content:encoded><![CDATA[<p
style="text-align: justify;">Here is the slides for the Refactoring talk I did last Thursday at the <a
href="http://orug.org/articles/2010/01/07/meeting-january-14th">Orlando Ruby User Group</a> meeting. In case you want to hear me speaking along with the slides, I&#8217;ve <a
href="http://www.vcasmo.com/video/caike/7205">put it up on vcasmo</a> also.</p><div
style="width:425px;text-align:left" id="__ss_2927365"><a
style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/caikesouza/refactoring-2927365" title="Refactoring">Refactoring</a><object
style="margin:0px" width="425" height="355"><param
name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=refactoringruby-100115230806-phpapp01&#038;rel=0&#038;stripped_title=refactoring-2927365" /><param
name="allowFullScreen" value="true"/><param
name="allowScriptAccess" value="always"/><embed
src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=refactoringruby-100115230806-phpapp01&#038;rel=0&#038;stripped_title=refactoring-2927365" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div
style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a
style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a
style="text-decoration:underline;" href="http://www.slideshare.net/caikesouza">Caike Souza</a>.</div></div> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=Az-C52PBT_k:fsoFPfCJegk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=Az-C52PBT_k:fsoFPfCJegk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=Az-C52PBT_k:fsoFPfCJegk:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/Az-C52PBT_k" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://caikesouza.com/blog/2010/01/refactoring-at-orug/feed/</wfw:commentRss> <slash:comments>2</slash:comments> <feedburner:origLink>http://caikesouza.com/blog/2010/01/refactoring-at-orug/</feedburner:origLink></item> <item><title>Autotesting PHP applications (and others)</title><link>http://feedproxy.google.com/~r/smallacts/~3/5ODUIGNQkpM/</link> <comments>http://caikesouza.com/blog/2010/01/autotesting-php-applications-and-others/#comments</comments> <pubDate>Tue, 12 Jan 2010 20:24:14 +0000</pubDate> <dc:creator>caike</dc:creator> <category><![CDATA[agile]]></category> <category><![CDATA[en]]></category> <category><![CDATA[opensource]]></category> <category><![CDATA[php]]></category><guid isPermaLink="false">http://www.caikesouza.com/blog/?p=637</guid> <description><![CDATA[So you&#8217;ve probably heard of ZenTest/Autotest, right? In case you haven&#8217;t, it is a Ruby gem that (among other things) automatically runs your tests whenever it notices that a file in you project has changed. It&#8217;s a great productivity boost, because it saves you from having to run your tests each time you make a [...]]]></description> <content:encoded><![CDATA[<p>So you&#8217;ve probably heard of <a
href="http://www.zenspider.com/ZSS/Products/ZenTest">ZenTest/Autotest</a>, right?</p><p
style="text-align: justify;">In case you haven&#8217;t, it is a Ruby gem that (among other things) automatically runs your tests whenever it notices that a file in you project has changed. It&#8217;s a great productivity boost, because it saves you from having to run your tests each time you make a change to your program. The perfect tool if you are doing TDD.</p><p
style="text-align: justify;">So I wanted to get this autotest functionality going for projects in other languages &#8211; like PHP, for example &#8211; but apparently ZenTest/Autotest only works within Ruby projects.</p><p
style="text-align: justify;">Talking to the <a
href="http://envylabs.com/">EnvyLabs&#8217;</a> guys I was told about <a
href="http://github.com/mynyml/watchr">Watchr</a>, a Ruby gem that monitors files <a
href="http://github.com/caike/watchr_running_php/blob/master/watchr.conf">matched by a regular expression</a> and triggers a user defined command whenever a file changes. That&#8217;s enough to get you started in an autotest-like tool for PHP &#8211; or just about any other language.</p><p
style="text-align: justify;">I&#8217;ve setup an example PHP project of Watchr playing an autotest role in a PHP project:</p><p
style="text-align: justify;"><p
style="text-align: justify;"><iframe
src='http://player.vimeo.com/video/8700084?title=1&amp;byline=1&amp;portrait=1' width='500' height='290' frameborder='0'></iframe></p><p
style="text-align: justify;">The source code from this example can be seen at <a
href="http://github.com/caike/watchr_running_php">http://github.com/caike/watchr_running_php</a></p> <div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/smallacts?a=5ODUIGNQkpM:9xHEnYdLfRI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/smallacts?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/smallacts?a=5ODUIGNQkpM:9xHEnYdLfRI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/smallacts?i=5ODUIGNQkpM:9xHEnYdLfRI:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/smallacts/~4/5ODUIGNQkpM" height="1" width="1"/>]]></content:encoded> <wfw:commentRss>http://caikesouza.com/blog/2010/01/autotesting-php-applications-and-others/feed/</wfw:commentRss> <slash:comments>3</slash:comments> <feedburner:origLink>http://caikesouza.com/blog/2010/01/autotesting-php-applications-and-others/</feedburner:origLink></item> </channel> </rss><!-- Served from: caikesouza.com @ 2013-05-14 18:55:39 by W3 Total Cache -->
