<?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>Coding Dojo@SP</title>
	<atom:link href="http://www.dojosp.org/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.dojosp.org</link>
	<description></description>
	<lastBuildDate>Sat, 29 Aug 2009 22:29:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Dojo 78: Problema Simples em ruby e rspec</title>
		<link>http://www.dojosp.org/?p=98</link>
		<comments>http://www.dojosp.org/?p=98#comments</comments>
		<pubDate>Sat, 29 Aug 2009 22:29:12 +0000</pubDate>
		<dc:creator>raganhan</dc:creator>
				<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.dojosp.org/?p=98</guid>
		<description><![CDATA[Data: 25/08/2009 Horário: 13h00 Participantes: Firmo, Raganhan, Flores, Douglas, Suzana, Felipe, Samuel, Rentao, Vinicius, Atol Problema: Fizzbuzz Código: no github, em breve Formato: Kata O Flores preparou um kata simples para mostrar rspec, um framework de BDD para ruby. Este kata é baseado numa brincadeira onde pessoas em crianças em circulo falam cada uma um número [...]]]></description>
			<content:encoded><![CDATA[<ul style="font-size: 1em;line-height: 1.5em;margin-top: 1.2em;margin-right: 0px;margin-bottom: 1.2em;margin-left: 2em;padding: 0px">
<li><strong>Data:</strong> 25/08/2009</li>
<li><strong>Horário:</strong> 13h00</li>
<li><strong>Participantes:</strong> Firmo, Raganhan, Flores, Douglas, Suzana, Felipe, Samuel, Rentao, Vinicius, Atol</li>
<li><strong>Problema:</strong> <a href="http://www.codingdojo.org/cgi-bin/wiki.pl?KataFizzBuzz">Fizzbuzz</a></li>
<li><strong>Código:</strong> no <a href="http://github.com/dojosp/participant-s-projects/tree/master/">github</a>, em breve</li>
<li><strong>Formato</strong><strong>: </strong>Kata</li>
</ul>
<p>O Flores preparou um kata simples para mostrar <a href="http://rspec.info/">rspec</a>, um framework de BDD para ruby. Este kata é baseado numa brincadeira onde pessoas em crianças em circulo falam cada uma um número em ordem. Se o número contiver 3 ou for múltiplo de 3 então a criança deve dizer &#8220;Fizz&#8221; ao invéz do número, se o número contiver 5 ou for múltiplo de 5 então a criança deve dizer &#8220;Buzz&#8221;, por fim se as duas condições forem verdadeiras então o a criança precisa dizer &#8220;Fizzbuzz&#8221;. O problema é fazer um programa que jogue esse jogo para números de 1 até 100.</p>
<h3 style="margin-top: 1.2em;margin-right: 0px;margin-bottom: 0px;margin-left: 0px;font-family: Georgia, serif;color: #534b48;font-size: 1.3em">Retrospectiva</h3>
<p style="font-size: 1em;line-height: 1.5em;margin-top: 1.2em;margin-right: 0px;margin-bottom: 1.2em;margin-left: 0px">Do ruim:</p>
<ul>
<li>Problema poderia ser mais difícil (x3)</li>
<li>Randori é mais legal (x2)</li>
<li>Faltou maior participação dos espectadores (x2)</li>
<li>Pouca gente (pessoal do dojo de sábado não veio)</li>
<li>Faltou o break</li>
<li>Poderia ser mais rápido nos testes repetidos ( cinco_divide por exemplo )</li>
<li>Mais dojos de tarde</li>
</ul>
<p style="font-size: 1em;line-height: 1.5em;margin-top: 1.2em;margin-right: 0px;margin-bottom: 1.2em;margin-left: 0px">Do bom:</p>
<ul style="font-size: 1em;line-height: 1.5em;margin-top: 1.2em;margin-right: 0px;margin-bottom: 1.2em;margin-left: 2em;padding: 0px">
<li>Babysteps</li>
<li>Aprender sobre ruby (x3)</li>
<li>Problema simples ajuda a entender melhor a linguagem</li>
<li>Foi legal fazer algo bem simples para entender melhor TDD / BDD</li>
<li>Presença de bixos</li>
<li>Público ficou em silêncio</li>
<li>Bastante gente</li>
<li>Ver como o rspec funciona</li>
<li>Dojo de tarde</li>
<li>Flores explica bem</li>
</ul>
<p>Uma coisa que foi bastante falada no final é que todo mundo quer mais dojos neste horário</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojosp.org/?feed=rss2&amp;p=98</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dojo 66 &#8211; Biblioteca de testes em Smalltalk</title>
		<link>http://www.dojosp.org/?p=76</link>
		<comments>http://www.dojosp.org/?p=76#comments</comments>
		<pubDate>Mon, 09 Mar 2009 16:06:10 +0000</pubDate>
		<dc:creator>marivb</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[SmallTalk]]></category>

		<guid isPermaLink="false">http://www.dojosp.org/?p=76</guid>
		<description><![CDATA[Data: 02/03/2009 Participantes: Mari, Hugo, Yoshi, Fabricio, Thiago, Lucas, Jorge, Rafael, Breno, Ettore, Adolfo, Gianluca Problema: Biblioteca de testes estilo &#8220;BDD&#8221; em Smalltalk (Squeak) Código: no github Insatisfeitos com o SUnit, escolhemos brincar de escrever uma biblioteca de testes mais ao estilo RSpec do Ruby, em Smalltalk. Começamos discutindo as possíveis sintaxes, decidindo por algo [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><strong>Data:</strong> 02/03/2009</li>
<li><strong>Participantes:</strong> Mari, Hugo, Yoshi, Fabricio, Thiago, Lucas, Jorge, Rafael, Breno, Ettore, Adolfo, Gianluca</li>
<li><strong>Problema:</strong> Biblioteca de testes estilo &#8220;BDD&#8221; em <a href="http://www.squeak.org">Smalltalk (Squeak)</a></li>
<li><strong>Código:</strong> <a href="http://github.com/dojosp/participant-s-projects/tree/master/66-SmalltalkBDD">no github</a></li>
</ul>
<p>Insatisfeitos com o SUnit, escolhemos brincar de escrever uma biblioteca de testes mais ao estilo RSpec do Ruby, em Smalltalk. Começamos discutindo as possíveis sintaxes, decidindo por algo como:</p>
<pre>(1 = 1) should: #beTrue
1 should: #= to: 1</pre>
<p>A implementação foi rolando na classe Object mesmo, em uma categoria especial que adicionamos.</p>
<h3>Retrospectiva</h3>
<p>Do ruim:</p>
<ul>
<li>Problema muito difícil para o conhecimento coletivo do dojo</li>
<li>SUnit não tem muitos recursos</li>
<li>A linguagem não tem guru de verdade, ficamos um pouco travados</li>
<li>Confundimos: testes, linguagem, ambiente &#8211; uma bagunça</li>
<li>Post-its amarelos pequenininhos</li>
<li>Muita conversa no vermelho: tava difícil?</li>
<li>Sintaxe Smalltalk: mais de um argumento exige que tenha palavra entre os argumentos</li>
<li>True é classe, true é singleton, otherwise não é true</li>
<li>Não tem substring (ou não achamos)</li>
<li>Faz tempo que não tem post no blog <img src='http://www.dojosp.org/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  ==&gt; resolvido!</li>
</ul>
<p>Do bom:</p>
<ul>
<li>Squeak é igual à mãe do Fabs</li>
<li>Muita novidade</li>
<li>Terminamos com testes passando &#8211; malandramente, mas passando</li>
<li>Method finder é da hora</li>
<li>Save method WITH STYLE <img src='http://www.dojosp.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li>nil</li>
<li>Reflexão: &#8220;perform: #bla with: arg&#8221;</li>
<li>Smalltalk é legal, apesar de estranho</li>
<li>Symbol é String</li>
<li>Solução de bem poucas linhas</li>
<li>Pessoas novas, bastante gente</li>
<li>Dojo continua muito legal (OBAA! XD)</li>
</ul>
<p>Das discussões que rolaram durante e depois:</p>
<ul>
<li>Por algum motivo o ambiente do Squeak lembrou o Fabricio do projeto <a href="http://www.alice.org/">Alice &#8211; aprendendo a programar em Java</a>, no qual você escreve programas que controlam bonequinhos 3D para aprender a linguagem.</li>
<li>Discutimos &#8220;<a href="http://en.wikipedia.org/wiki/Monkey_patch">Monkey patch</a>&#8220;, ou seja, como colocar métodos no Object sem mudar o projeto Kernel do Squeak. Discutimos o conceito, mas não sabemos como fazer isso em Smalltalk, por isso adotamos a solução mais feia, que foi modificar o Kernel mesmo.</li>
<li>Colocamos o método &#8220;should&#8221; no Object&#8230; ele deveria existir APENAS quando executando testes. Em produção, uma chamada a &#8220;should&#8221; deveria idealmente não ser reconhecida.</li>
<li>Existe vida além do SUnit! Com um pouco de pesquisa, o Hugo acho o projeto <a href="http://www.squeaksource.com/SSpec.html">SSpec</a> que parece ser uma biblioteca de testes mais no estilo do que a gente queria. Legal! Como será a solução deles?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dojosp.org/?feed=rss2&amp;p=76</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dojo 64 &#8211; Interpretador de Smalltalk em Smalltalk</title>
		<link>http://www.dojosp.org/?p=72</link>
		<comments>http://www.dojosp.org/?p=72#comments</comments>
		<pubDate>Mon, 09 Mar 2009 15:39:27 +0000</pubDate>
		<dc:creator>marivb</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[SmallTalk]]></category>

		<guid isPermaLink="false">http://www.dojosp.org/?p=72</guid>
		<description><![CDATA[Data: 09/02/2009 Participantes: Breno, Mari, Jac, Hugo, André, Fernando, Paulo, Ettore, Marcos, Thiago Problema: Interpretador de Smalltalk em Smalltalk (Squeak) Código: ainda não está online A idéia do problema era interpretar uma sequencia de comandos em Smalltalk fazendo parse do texto e tudo o mais. Começamos com a coisa mais simples &#8211; uma atribuição: &#8220;minhaVariavel [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><strong>Data:</strong> 09/02/2009</li>
<li><strong>Participantes:</strong> Breno, Mari, Jac, Hugo, André, Fernando, Paulo, Ettore, Marcos, Thiago</li>
<li><strong>Problema:</strong> Interpretador de Smalltalk em <a href="http://www.squeak.org">Smalltalk (Squeak)</a></li>
<li><strong>Código:</strong> <span style="color: #ff0000;">ainda não está online</span></li>
</ul>
<p>A idéia do problema era interpretar uma sequencia de comandos em Smalltalk fazendo parse do texto e tudo o mais. Começamos com a coisa mais simples &#8211; uma atribuição: &#8220;<code>minhaVariavel := umValor</code>&#8220;. Apesar de a maioria não saber a linguagem direito e de os que sabiam não lembrarem direito, o código foi evoluindo.</p>
<h3>Retrospectiva</h3>
<p>Do ruim:</p>
<ul>
<li>Avançamos muito pouco, apesar de fazer parte do aprendizado, queríamos ter avançado mais</li>
<li>Não usamos controle de versões</li>
<li>Falta conhecimento base em Smalltalk para aproveitar mais da sessão</li>
<li>A falta de conhecimento também causa lentidão</li>
<li>Precisamos muito do mouse pra programar no Squeak</li>
<li>&#8220;Gurus&#8221; Smalltalk estavam enferrujados</li>
<li>Confusão com as janelas do Squeak, resolução 800&#215;600 não ajuda, ambiente estranho para a maioria</li>
<li>Conversa paralela e dupla falando baixo</li>
<li>Nem sempre a lista de &#8220;ToDo&#8217;s&#8221; dá tão certo</li>
<li>Estamos na seca se problemas</li>
</ul>
<p>Do bom:</p>
<ul>
<li>Método String &gt;&gt; findTokens do Squeak é o String.split() do Java</li>
<li>String &gt;&gt; withBlanksTrimmed</li>
<li>Linguagem nova: Squeak Smalltalk!</li>
<li>Aprendemos ou relembramos SUnit</li>
<li>Pessoas novas</li>
<li>O problema, independente da linguagem, é muito interessante</li>
<li>Foi uma sessão mais exploratória do que de costume</li>
</ul>
<p>Do que discutimos com a pizza:</p>
<ul>
<li>Squeak em produção? Aplicações do Smalltalk?</li>
<li>Como funciona o Method Finder? É mágica?</li>
<li>Que tal um &#8220;breafing&#8221; da reunião na semana que antecede o encontro?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dojosp.org/?feed=rss2&amp;p=72</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dojo 60 &#8211; Snap em Haskell</title>
		<link>http://www.dojosp.org/?p=59</link>
		<comments>http://www.dojosp.org/?p=59#comments</comments>
		<pubDate>Sat, 13 Dec 2008 05:32:41 +0000</pubDate>
		<dc:creator>ricardo</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Haskell]]></category>

		<guid isPermaLink="false">http://www.dojosp.org/?p=59</guid>
		<description><![CDATA[Data: 09/12/2008 Participantes: Bani, Breno, Jac,  Juca, Hugo, Mari, Pedro, Ricardo e Tiago Problema: Snap Código: http://github.com/dojosp/participant-s-projects/tree/master/60-Snap-Haskell  O Dojo iniciou com a votação do problema e da linguagem de programação. As linguagens sugeridas foram Haskell, Ruby e Java. A idéia de fazer o Dojo em java seria respeitando umas regras que o pessoal da Thoughtworks montou:   http://binstock.blogspot.com/2008/04/perfecting-oos-small-classes-and&#8230;. Essas 9 regras são exercícios para aperfeiçoar a [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li>Data: 09/12/2008</li>
<li>Participantes: Bani, Breno, Jac,  Juca, Hugo, Mari, Pedro, Ricardo e Tiago</li>
<li>Problema: <a href="http://sites.google.com/site/tddproblems/all-problems-1/magneto-effect">Snap</a></li>
<li>Código: <span><a href="http://github.com/dojosp/participant-s-projects/tree/master">http://github.com/dojosp/participant-s-projects/tree/master/60-Snap-Haskell</a></span></li>
</ul>
<p><span> O Dojo iniciou com a votação do problema e da linguagem de programação. As linguagens sugeridas foram Haskell, Ruby e Java. A idéia de fazer o Dojo em java seria respeitando umas regras que o pessoal da Thoughtworks montou: </span></p>
<p><span><span> <a href="http://binstock.blogspot.com/2008/04/perfecting-oos-small-classes-and-short.html"><span>http://binstock.blogspot.com/2008/04/perfecting-oos-small-classes-and&#8230;</span></a>.</span></span></p>
<p><span><span>Essas 9 regras são exercícios para aperfeiçoar a escrita de boas implementações de Orientação a Objetos. São elas:</span></span></p>
<ol>
<li>Usar somente um nível de identação por método.</li>
<li>Não usar a palavra reservada ‘else’.</li>
<li>Envolver os tipos primitivos e Strings.</li>
<li>Usar somene 1 ponto por linha de código.</li>
<li>Não abreviar nomes.</li>
<li>Manter entidades pequenas.</li>
<li>Não usar mais que duas variáveis de instância na classe.</li>
<li>Usar classes de coleções que sejam as mais genéricas.</li>
<li>Não usar getters e setters.</li>
</ol>
<p><span>Porém o problema escolhido por votação foi o Snap e a linguagem Haskell.</span></p>
<p><span><strong>Problema</strong></span></p>
<p><span>O problema Snap se trata de clicks (definidos como pontos) e desenhos de vértices. Sendo que se o click estiver em uma área de atração de um determinado ponto, a posição do click será a própria posição do ponto de atração. O site desse problema está detalhado <a href="http://sites.google.com/site/tddproblems/all-problems-1/magneto-effect">aqui</a>.</span></p>
<p> <strong>Codando</strong></p>
<p><span>Teve uma novidade da rotação das duplas. Após os 7 minutos, entrava uma pessoa direto na programação e  quem estava codando passaria a ser o “co-piloto”.</span></p>
<p><span>Para a resolução do problema, foram criados dois arquivos: Tests.hs (para os testes) e Snap.hs (implementação do problema). Bem ao estilo TDD, a classe de teste começou com as linhas:</span></p>
<p><span>Tests.hs</span><br />
<code><br />
module Main where<br />
import Test.HUnit<br />
import Snap</p>
<p>main = runTestTT testes</p>
<p>testes = TestList [testeCalculaDistancias]</p>
<p>testeCalculaDistancias = TestList[<br />
    "Distancia entre um ponto e ele mesmo deveria ser 0" ~:<br />
    distancia (Ponto 0 0) (Ponto 0 0 ) ~?= 0<br />
        ]<br />
</code></p>
<p><span> Esse código simplesmente significa que o teste vai assegurar que a distância entre o Ponto na posição x = 0 e y = 0, e outro Ponto na posição x = 0 e y = 0, a distância é zero (Linha 11). É claro, pois eles estão na mesma posição ! <img src='http://www.dojosp.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </span><br />
<span> Disparando esse teste, vão ocorrer erros, pois não existe a definição de &#8220;Ponto&#8221; e &#8220;distância&#8221;. Portanto vamos implementá-los. </span></p>
<p><span> Snap.hs</span><br />
<code><br />
module Snap where</p>
<p>data Ponto = Ponto Int Int</p>
<p>distancia :: Ponto -&gt; Ponto -&gt; Int<br />
distancia _ _ = 0<br />
</code></p>
<p>Na linha 3 é definido o Ponto, que será representado por &#8216;Ponto&#8217; seguido de dois valores numéricos (Int Int). Na linha 5 é definido a função &#8216;distância&#8217; que recebe dois pontos por parâmetro. Na linha 6 diz que distância, que recebe qualquer coisa no primeiro parâmetro e qualquer coisa no segundo parâmetro, retorna 0 (zero). Agora o teste passa com sucesso!</p>
<p>Porém ainda não está correto dizer que a distância entre qualquer ponto é zero. Então vamos escrever mais testes.</p>
<p>Tests.hs <br />
<code><br />
"Distancia entre o ponto 0 0 e 0 1 deveria ser 1" ~:<br />
distancia (Ponto 0 0) (Ponto 0 1 ) ~?= 1<br />
</code></p>
<p>Incluindo essas duas linhas, agora o teste falha. A distância entre o ponto 0 0 e o ponto 0 1 é 1, porém o método &#8216;distancia&#8217; sempre retorna zero. Vamos alterar a implementação desse método:</p>
<p>Snap.hs</p>
<p><code><br />
distancia :: Ponto -&gt; Ponto -&gt; Int<br />
distancia (Ponto 0 0) (Ponto 0 1 ) = 1<br />
distancia (Ponto 0 0) (Ponto 0 2 ) = 2<br />
distancia _ _ = 0<br />
</code></p>
<p>As linhas 2 e 3 foram incluídas e agora o teste passa! Porém, apesar de estarmos roubando para o teste passar, esses passos pequenos são muito importantes. São chamados de baby steps. Baby step é uma técnica de metodologias ágeis que facilita a simplicidade do código, pois só precisamos desenvolver o que é realmente necessário para passar no teste.</p>
<p>O ciclo do TDD é:<br />
￼￼<img src="http://static.flickr.com/33/66281384_4997df55b7_m.jpg" alt="" /></p>
<p><span>Portanto, agora que os testes estão passando, vamos refatorar para o código ficar menos hard coded. As linhas:</span></p>
<p><span>Snap.hs</span><br />
<code><br />
distancia (Ponto 0 0) (Ponto 0 1 ) = 1<br />
distancia (Ponto 0 0) (Ponto 0 2 ) = 2<br />
distancia _ _ = 0<br />
</code></p>
<p>Podem agora ser substituídas por:<br />
<code> distancia (Ponto 0 a) (Ponto 0 b ) = b-a </code></p>
<p>Agora nossa regra está funcionando para vértices na vertical. Porém ainda não está pronto. Vamos escrever mais um teste:</p>
<p>Tests.hs<br />
<code><br />
"Distancia entre o ponto 0 0 e 1 0 deveria ser 1" ~:<br />
distancia (Ponto 0 0) (Ponto 1 0 ) ~?= 1<br />
</code></p>
<p>Está passando 2 testes mas esse último falha. Vamos à implementação para esse teste incluído passar:</p>
<p>Snap.hs<br />
<code><br />
distancia :: Ponto -&gt; Ponto -&gt; Int<br />
distancia (Ponto 0 a) (Ponto 0 b ) = b-a<br />
distancia (Ponto a 0) (Ponto b 0 ) = b-a<br />
</code></p>
<p>Antes só passavam os testes para vértices na vertical. Agora está passando para vértices na horizontal também. Vamos fazer um teste e ver se passa na diagonal. Incluindo isso no teste ficaria:</p>
<p>Tests.hs</p>
<p><code><br />
"Distancia entre o ponto 1 0 e 1 1 deveria ser 1" ~:<br />
distancia (Ponto 1 0) (Ponto 1 1 ) ~?= 1<br />
</code></p>
<p>A implementação para passar nesse teste, ainda roubando, ficaria assim:</p>
<p>Snap.hs</p>
<p><code><br />
distancia (Ponto 1 0) (Ponto 1 1 ) = 1<br />
</code></p>
<p>Essa implementação está hard coded, mas é importante que seja dessa maneira pois precisamos manter o foco em ficar verde no teste, e aí sim fazer a refatoração.<br />
Ok, como os testes estão passando novamente e está tudo no verde, vamos refatorar. As linhas:</p>
<p><code><br />
distancia (Ponto 0 a) (Ponto 0 b ) = b-a<br />
distancia (Ponto a 0) (Ponto b 0 ) = b-a<br />
distancia (Ponto 1 0) (Ponto 1 1 ) = 1<br />
</code></p>
<p>Porem ser substituídas pela linha:</p>
<p><code> distancia (Ponto x1 y1) (Ponto x2 y2 ) = x2-x1 + y2-y1 </code></p>
<p>Tudo passando! Vamos escrever mais testes para ver se a regra está certa:</p>
<p>Tests.hs<br />
<code><br />
"Distancia entre o ponto 0 3 e 4 0 deveria ser 5<br />
distancia (Ponto 0 3) (Ponto 4 0 ) ~?= 5<br />
</code></p>
<p>Com esse teste o resultado falha, portanto a fórmula acima ainda não está pronta. O correto seria implementar o teorema de pitágoras para calcular a distância entre os pontos:</p>
<p>Snap.hs</p>
<p><code><br />
data Ponto = Ponto Float Float </p>
<p>distancia :: Ponto -&gt; Ponto -&gt; Float<br />
distancia (Ponto x1 y1) (Ponto x2 y2 ) = sqrt ((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))<br />
</code></p>
<p><strong>Concluindo</strong></p>
<p>Vamos parar por aqui. O problema ainda não está resolvido, mas mostrei esses passos para percebermos a importância do baby step e como a modelagem pode ficar melhor e com mais qualidade. Para ver o que foi codado, entre no site do Github <a href="http://github.com/dojosp/participant-s-projects/tree/master/60-Snap-Haskell">aqui</a>.</p>
<p>O TDD nos direciona para uma maior <strong>simplicidade</strong> para ser desenvolvido somente o necessário para passar no teste. Além de fornecer mais <strong>confiança</strong> para devidas <strong>refatorações</strong>.</p>
<p><strong>Retrospectiva</strong></p>
<p>No final teve, como de costume, a nossa retrospectiva e os pontos a melhorar foram:</p>
<p>•	&#8220;Não precisa do b-a&#8221;, sobre um dos baby-steps que poderia ser desnecessário<br />
•	&#8220;Nano baby step =&gt; seguro mas muito lento&#8221;. Sobre passos muito pequenos.<br />
•	Alguns passos grandes/rápidos em alguns momentos.<br />
•	Faltaram mais explicações sobre o que é baby-step durante o código<br />
•	&#8220;Faltou tão pouco&#8221; para terminar o problema. Apesar que esse não é o objetivo final do Dojo.+<br />
•	Teve gente que não gostou desse esquema de rotação invertido.<br />
•	Projetor estava ruim.<br />
•	Baby-step? Não &#8220;grown-up wannabe steps&#8221;.<br />
•	Perdemos muito tempo criando templates do projeto.<br />
•	Emacs é melhor que Gedit para codar Haskell</p>
<p>Os pontos positivos foram:</p>
<p>•	Tipos de dados no Haskell<br />
•	Haskell<br />
•	Pessoas gostaram no rodízio invertido.<br />
•	Problema legal, simples e bom para TDD<br />
•	Baby steps<br />
•	&#8221; ˜ é sempre antes.&#8221;  Sobre a notação no Haskell.</p>
<p>Assuntos em Parking lote foram</p>
<p>•	TODOs ajudam ou atrapalham?<br />
•	Geradores do ruby são ótimos para gerar templates</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojosp.org/?feed=rss2&amp;p=59</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Dojo 59 &#8211; Caixas empilhadas</title>
		<link>http://www.dojosp.org/?p=56</link>
		<comments>http://www.dojosp.org/?p=56#comments</comments>
		<pubDate>Fri, 12 Dec 2008 12:31:28 +0000</pubDate>
		<dc:creator>marivb</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Haskell]]></category>

		<guid isPermaLink="false">http://www.dojosp.org/?p=56</guid>
		<description><![CDATA[Relato escrito pela Jac &#8211; obrigada, Jac! Data: 01/12/2008 Participantes: Marcelo, Pedro, Thiago, Hugo, Mari, Jac, R, Aline, Bruno Gola Randori: Problema das Caixas Empilhadas (adaptado de Pile of Boxes). Utilizamos Haskell com HUnit. Carta de criatividade: &#8220;Listen your dreams&#8221; Código: http://github.com/dojosp/participant-s-projects/commits/master/59-pile-of-boxes Problemas Os problemas sugeridos foram: Caixas empilhadas: Dadas as dimensões de altura e [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><em>Relato escrito pela Jac &#8211; obrigada, Jac!</em></p>
<ul>
<li><strong>Data</strong>: 01/12/2008</li>
<li><strong>Participantes</strong>: Marcelo, Pedro, Thiago, Hugo, Mari, Jac, R, Aline, Bruno Gola</li>
<li><strong>Randori</strong>: Problema das Caixas Empilhadas (adaptado de <a href="http://online-judge.uva.es/problemset/v9/946.html">Pile of Boxes</a>). Utilizamos Haskell com HUnit.</li>
<li><strong>Carta de criatividade:</strong> &#8220;Listen your dreams&#8221;</li>
<li><strong>Código</strong>: http://github.com/dojosp/participant-s-projects/commits/master/59-pile-of-boxes</li>
</ul>
<h3>Problemas</h3>
<p>Os problemas sugeridos foram:</p>
<ul>
<li><strong>Caixas empilhadas:</strong> Dadas as dimensões de altura e largura de uma 	caixa com abertura no topo devemos empilhar as caixas. Se uma caixa 	menor for colocada em cima de uma caixa maior, a menor estará 	dentro da maior e a altura final da pilha é a altura da caixa 	maior.Se a caixa maior for colocada em cima da caixa menor, a altura final é a soma das alturas.</li>
<li><strong>Entertainment:</strong> Dada uma tabela de elementos char e uma posição da 	tabela que não seja um espaço em branco. Deve-se encontar os elementos identicos adjacentes recursivamente ao elemento escolhido e troca-los por espaços em branco. Depois de substituidos, os elementos restantes devem ser movidos para esquerda enquanto os espaços em branco são deslocados 	para direita e posteriormente devem ser deslocados para baixo enquanto os espaços em branco são deslocados para cima.</li>
<li><strong>Magnetics:</strong> Dado um ponto com sua região de atração, verificar se quando um clique for dado o clique pertence a região 	de atração do ponto e também verificar a distância mínima entre dois pontos. (Este problema está perto de se tornar o novo little bishops!!)</li>
</ul>
<p>Entre os problemas sugeridos, o problema das caixas empilhadas foi o escolhido por ser o mais votado.</p>
<p><span id="more-56"></span></p>
<h3>Codando</h3>
<p>Foi feita uma ToDo List para discutir o <em>approach</em> de como armazenar as entradas, descobrir a altura final da pilha e saber se uma caixa estava dentro de outra.</p>
<p>Durante a discussão conversamos muito mais sobre como obter a solução do que como encaminhar a solução! Surgiram questionamentos posteriores sobre a utilidade da Todo List e até que ponto uma ToDo List é necessária? A partir de quando ela começa a atrapalhar a solução do problema?</p>
<p>Durante a implementação conseguimos definir o tamanho de uma caixa e quando passamos a nos preocupar em como empilhar as caixa surgiram os problemas. Tentamos empilhar as caixas mas não conseguimos muitos sucesso. Patinamos por um bom tempo até que resolvemos fazer uma parada no meio da reunião para entender quais eram as dificuldades.</p>
<p>Percebemos que tinhamos alguns problemas para passagem de argumentos, confusões do interpretador e depois da discussão resolvemos ignorar o metodo empilha por não apresentar um comportamento definido.</p>
<p>Quando retomamos a implementação tinhamos definido novas funcionalidades do problema, como pedestal e o método junta, que deveria juntar ou 2 caixas, ou 1 caixa há um pedestal.<br />
No final da sessão acabamos conseguindo fazer o junta se comportar de forma recursiva, mas não chegamos na solução!</p>
<p>A carta da criatividade não paraceu muito útil nesse problema e algumas pessoas chegaram um pouco mais atrasadas por causa do <em>geocaching</em>.</p>
<h3>Retrospectiva</h3>
<p>Pontos positivos <img src='http://www.dojosp.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<ul>
<li><em>Commit</em> a cada passo</li>
<li>Pausa no meio da reunião foi muito importante</li>
<li>Aprendemos novas caracteristicas/funcionalidades da linguagem</li>
<li>Durante uma refatoração acabamos perdendo uma implementação bem interessante do either e do otherwise</li>
<li>Algumas sugestões interessantes de como melhorar o ambiente</li>
<li>Alguns sugeriram de tentar fazer um <em>geocaching</em> junto com o dojo</li>
</ul>
<p>Pontos negativos <img src='http://www.dojosp.org/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' /> </p>
<ul>
<li>Questionamentos sobre descarte de código inútil, funcionamento da Box Recursiva</li>
<li>Não existe infinite test para Haskell</li>
<li>Complicações da linguagem e muito computador paralelo</li>
<li>Comida chegou MUITO cedo!</li>
</ul>
<p>Parking Lot:</p>
<ul>
<li>Sugestão de realizar o dojo de natal num restaurante no formato Uber Dojo!</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dojosp.org/?feed=rss2&amp;p=56</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dojo 56 &#8211; (Testes do) Amigo Secreto&#8230; em Python</title>
		<link>http://www.dojosp.org/?p=42</link>
		<comments>http://www.dojosp.org/?p=42#comments</comments>
		<pubDate>Thu, 13 Nov 2008 15:33:50 +0000</pubDate>
		<dc:creator>marivb</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.dojosp.org/?p=42</guid>
		<description><![CDATA[Data: 03/11/2008 Participantes: R, Leo, Breno, Jac, Mari, Marcelo, Gola, Lameiro, Thiago, Pedro, André, RIcardo, Bani, Juca, Hugo Problema: Amigo secreto sem sorteios na mesma família, em Python Código: http://github.com/dojosp/participant-s-projects/tree/master/57-secret-santa Puxa, tinha realmente muitas pessoas nesse Dojo! Começamos com sugestões de três problemas interessantes, mas por votação descartamos &#8220;Corrida de vetores&#8221; e &#8220;Números espaçados&#8221; para [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><strong>Data</strong>: 03/11/2008</li>
<li><strong>Participantes</strong>: R, Leo, Breno, Jac, Mari, Marcelo, Gola, Lameiro, Thiago, Pedro, André, RIcardo, Bani, Juca, Hugo</li>
<li><strong>Problema</strong>: <a href="http://rubyquiz.com/quiz2.html">Amigo secreto sem sorteios na mesma família</a>, em Python</li>
<li><strong>Código</strong>: http://github.com/dojosp/participant-s-projects/tree/master/57-secret-santa<a href="http://github.com/dojosp/participant-s-projects/tree/master"></a></li>
</ul>
<p>Puxa, tinha realmente muitas pessoas nesse Dojo! Começamos com sugestões de três problemas interessantes, mas por votação descartamos &#8220;Corrida de vetores&#8221; e &#8220;Números espaçados&#8221; para fazer o <a href="http://rubyquiz.com/quiz2.html">amigo secreto sem sorteios na mesma família</a>. O Natal se aproxima!</p>
<p>Votamos pela linguagem também, e no final Python ganhou de Haskell por 1 voto.<span id="more-42"></span></p>
<h3>O Problema</h3>
<p>Recebemos uma lista de pessoas no formato &lt;nome&gt; &lt;sobrenome&gt; &lt;email&gt;, e devemos sortear o amigo secreto para que uma pessoa não sorteie outra que seja da sua família (mesmo sobrenome).</p>
<p>Decidimos também que se não for possível fazer o sorteio respeitando a regra de não ter amigos da mesma família, então sorteia-se quebrando a regra, pois é mais importante ter o amigo secreto do que respeitar a regra!</p>
<p>Mas nem avançamos tanto assim no problema&#8230;</p>
<h3>Codando</h3>
<p>O primeiro teste foi fácil e direto ao ponto: quando temos duas pessoas apenas, uma tira a outra e pronto. Partimos então para ver como sorteia para três pessoas de famílias diferentes. Os problemas começaram por aqui, apesar que demoramos para perceber&#8230; passos grandes demais, e no fim vimos também que tinha mais de uma resposta possível e precisávamos levar isso em conta nos testes. Factível.</p>
<p>Quando chegamos no teste para quatro pessoas&#8230; foi aí que paramos de avançar no código. Por que com quatro pessoas existem várias respostas possíveis, e na tentativa de enumerar todas a gente não tinha certeza que alguma possibilidade não tinha escapado. Sugeriu-se então testar propriedades da resposta produzida, mas tais testes eram complexos e sugeriu-se portanto criar métodos de teste auxiliares, testando-os com TDD. Estranho&#8230; mas foi isso que fizemos até o fim da sessão de código.</p>
<h3>Retrospectiva</h3>
<p>Primeiro as coisas boas:</p>
<ul>
<li>Tinha muita gente (quase batemos nosso recorde de 16 pessoas) e tinha gente nova também</li>
<li>Logo, tinha muito post-it e muita pizza <img src='http://www.dojosp.org/wp-includes/images/smilies/icon_biggrin.gif' alt=':-D' class='wp-smiley' /> </li>
<li>Pessoal gostou de Python, alguns aprenderam um pouco, outros lembraram</li>
<li>Os commits não atrapalham o andar da sessão</li>
<li>Foi muito divertido, e o problema era bem interessante</li>
<li>Aprendemos que <code>pessoas[:-1]</code> pega todos os elementos menos o último do vetor de nomes</li>
<li>E aprendemos que <code>enumerate(pessoas)</code> permite iterar em pares <code>(i, nome)</code> de índices e valores no vetor <code>pessoas</code></li>
</ul>
<p>Por outro lado:</p>
<ul>
<li>Talvez por que tinha muita gente, experimentamos um burburinho no vermelho que não tinha faz um tempo, com direito a platéia usando computador e tudo o mais. Não aguentamos ficar quietos!</li>
<li>Relacionado a isso, alguns sentiram falta das conversas do <a href="http://www.dojosp.org/?p=31">Uber Dojo</a>.</li>
<li>Ainda por conta do número de pessoas, nem todo mundo pode codar. 7 minutos parece muito tempo em um grupo maior.</li>
<li>Python de novo?</li>
<li>Pequenas dificuldades com a linguagem atrapalham (discutimos isso também no Parking Lot)</li>
<li>Quem já sabe python bate o olho na mensagem de erro e entende, sem dar tempo para todos lerem.</li>
<li>Não ficamos convencidos de que todos os participantes entendiam o que estava acontecendo a todo momento.</li>
<li>Talvez com razão, pois alguns não entenderam o motivo do método auxiliar para testes.</li>
<li>Começamos com atraso.</li>
<li>Tivemos alguns passos &#8220;gigantes&#8221; tanto no começo quanto no fim. Faltou lembrar de simplicidade e baby steps.</li>
<li>O problema era &#8220;ruim&#8221; por envolver um sorteio e exigir assim que houvessem várias respostas possíveis. Na verdade o ruim foi que não percebemos isso no começo, o que nos pegou totalmente desprevinidos no meio da sessão. Teria sido um bom dia para experimentar a &#8220;pausa no meio&#8221;, mas não fizemos.</li>
<li>Os testes eram muito trabalhosos, tão complexos que a gente nem chegou no problema.</li>
</ul>
<p>No Parking Lot, discutimos:</p>
<ul>
<li>Dojo na Globalcode &#8211; um convite do pessoal da <a href="http://www.globalcode.com.br">Globalcode</a> de fazer uma sessão no auditório deles lá na av. Paulista.</li>
<li>Distribuir post-its no começo, para preenchermos durante a sessão.</li>
<li>Quando a dupla tem problemas com sintaxe&#8230; a platéia deve ficar calada mesmo assim? Deve esperar eles pedirem ajuda? Ou deve ajudar mesmo sem o pedido, mostrando a mensagem de erro e ensinando o que significa?</li>
<li>Como testar algo com resultado &#8220;aleatório&#8221;?</li>
<li>&#8220;Parece difícil demais? Não entendeu direito? Parece mais complicado do que deveria? Tá errado!&#8221; &#8211; se alguém se sentir assim durante o Dojo, tem algo de errado acontecendo, deveríamos parar e ir com mais calma.</li>
</ul>
<p>Falamos também de uma &#8220;checklist&#8221; de coisas pro Dojo, mas não houve muita aprovação da idéia pois achamos que não seria seguida. Discutimos também a idéia de &#8220;Dojo smells&#8221;, os maus cheiros do Dojo, que poderiam ajudar a gente, e outros, a identificar quando tem algo errado no ar. <img src='http://www.dojosp.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Ah, e queremos reciclar os copos!</p>
<h3>A terceira cadeira</h3>
<p>Pessoal, enquanto escrevia esse post fiquei pensando e tive uma idéia&#8230; queria saber o que vocês acham!</p>
<p>E se tivéssemos uma terceira cadeira lá na frente? A qualquer momento, alguém da platéia poderia vir e sentar nessa cadeira, dando uma força pra dupla que está codando. Ele adquiri temporariamente o &#8220;direito&#8221; de falar no vermelho. É claro que essa pessoa não poderia codar e deveria sair logo da cadeira, mas seria uma maneira de organizar as sugestões que vem da platéia, principalmente no vermelho. Facilitaria também pra ajudar a dupla com problemas de sintaxe ou lembrar de dar um passo mais simples.</p>
<p>Pensei nisso pois tem um formato de open spaces que é parecido (uma roda de cadeiras, sempre deve ter uma vazia, só que em está sentado pode falar; se alguém senta na cadeira vazia, alguém que está sentado deve levantar). E também porque fazemos um pouco disso no Uber Dojo &#8211; ao longo da sessão, várias vezes acontece de alguém sentar com a dupla principal para ajudar ou simplesmente para olhar o que está acontecendo&#8230;</p>
<p>É uma idéia que precisa ser refinada com certeza, mas talvez seja legal. O que vocês acham?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojosp.org/?feed=rss2&amp;p=42</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dojo 53 &#8211; map e filter em Haskell</title>
		<link>http://www.dojosp.org/?p=7</link>
		<comments>http://www.dojosp.org/?p=7#comments</comments>
		<pubDate>Thu, 13 Nov 2008 14:00:24 +0000</pubDate>
		<dc:creator>marivb</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Haskell]]></category>

		<guid isPermaLink="false">http://www.dojosp.epistemol.net/?p=27</guid>
		<description><![CDATA[Data: 29/09/2008 Participantes: Hugo, R, João, Mari, Thiago, Yoshi, Breno Problema: map, filter e foldr em Haskell com HUnit (cuidado! Links da Wikipedia mostram implementação!) Código: http://github.com/dojosp/participant-s-projects/tree/master/53-haskell-basico Decidimos finalmente tentar implementar as clássicas funções map, filter e foldr em Haskell. Cada uma deve fazer o seguinte: map: recebe como parâmetros uma função unária (apenas um [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><strong>Data</strong>: 29/09/2008</li>
<li><strong>Participantes</strong>: Hugo, R, João, Mari, Thiago, Yoshi, Breno</li>
<li><strong>Problema</strong>: <a href="http://en.wikipedia.org/wiki/Map_(higher-order_function)">map</a>, <a href="http://en.wikipedia.org/wiki/Filter_(higher-order_function)">filter</a> e <a href="http://en.wikipedia.org/wiki/Foldl">foldr</a> em Haskell com HUnit (cuidado! Links da Wikipedia mostram implementação!)</li>
<li><strong>Código</strong>: http://github.com/dojosp/participant-s-projects/tree/master/53-haskell-basico</li>
</ul>
<p>Decidimos finalmente tentar implementar as clássicas funções <code>map</code>, <code>filter</code> e <code>foldr</code> em Haskell. Cada uma deve fazer o seguinte:<span id="more-7"></span></p>
<ul>
<li><strong>map</strong>: recebe como parâmetros uma função unária (apenas um parâmetro) e uma lista, e devolve uma lista que é resultado de aplicar a função a cada elemento da lista passada como parâmetro. Por exemplo:<br />
<code>map (+ 5) [2 0 4]</code> devolve <code>[7 5 9]</code></li>
<li><strong>filter</strong>: recebe como parâmetros um predicado (função unária que devolve True ou False) e uma lista, e devolve uma lista com os elementos da lista original que satisfazem o predicado (resposta True). Por exemplo:<br />
<code>filter even [1 2 3 6 5]</code> devolve <code>[2 6]</code></li>
<li><strong>foldr</strong>: essa é mais complicadinha, e nem começamos a fazê-la, então nem vou explicar muito =P. Começando com um exemplo:<br />
<code>foldr (+) 0 [1 2 3]</code> devolve <code>6</code>, que é a soma dos elementos da lista. Então, o foldr recebe uma fuinção binária (com dois parâmetros), um elemento &#8220;base&#8221; (0 no exemplo) e uma lista, e devolve o resultado de usar a função para &#8220;juntar&#8221; todos os elementos da lista.</li>
</ul>
<h3>Codando</h3>
<p>Começamos pelo <code>map</code> que parecia mais fácil. O código cresceu num ritmo acelerado e bom (ou seja todos estavam acompanhando). Apesar de algumas dificuldades com as mensagens de erro, conseguimos contorná-las e terminar o <code>map</code>.</p>
<p>Em seguida atacamos o <code>filter</code>, no mesmo ritmo. Terminamos de implementar no horário, e decidimos não começar o <code>foldr</code>. <img src='http://www.dojosp.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>Retrospectiva</h3>
<p>Reclamamos:</p>
<ul>
<li>Dos atrasos</li>
<li>De não filmar a sessão (para quem quer conhecer)</li>
<li>De não conseguirmos fazer commit no repositório remoto durante a reunião (o git estava dando um erro bizarro que ninguém conhecia)</li>
<li>De erros do compilador Haskell que não entendemos (fomos forçados a declarar o tipo das funções para contorná-los)</li>
<li>De problemas com o editor</li>
</ul>
<p>E mais:</p>
<ul>
<li>O <code>foldr</code> não parece tão fácil quanto os outros</li>
<li>Queremos aprender a implementação do <code>even</code> (verifica se um número é par)</li>
<li>Queremos entender a diferença entre <code>~=?</code> e <code>==</code></li>
</ul>
<p>Por outro lado, aprendemos:</p>
<ul>
<li><code>:t coisa</code> diz o tipo de coisa (no interpretador)</li>
<li>a definir tipo de funções que recebem funções como parâmetro</li>
<li><a href="http://en.wikipedia.org/wiki/Currying">currying</a>, ou seja, funções parciais &#8220;automáticas&#8221;</li>
<li>o que é pattern matching e pattern overlapping</li>
<li><code>import Char</code> traz funções como <code>isLower</code></li>
<li><code>otherwise</code>, uma palavra chave, é um <em>alias</em> para <code>True</code> &#8211; para alguns isso cheira a <em>hack</em>, para outros é açúcar sintático <img src='http://www.dojosp.org/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </li>
</ul>
<p>Além disso, gostamos:</p>
<ul>
<li>que Haskell continua legal e está mais intuitivo</li>
<li>que tivemos pessoas novas</li>
<li>que terminamos <code>map</code> e <code>filter</code></li>
<li>que tivemos um ritmo bom e acelerado</li>
</ul>
<p>No parking lot, discutimos os temas:</p>
<ul>
<li>Não explicamos dojo pro novato</li>
<li>Pq precisamos indicar os tipos? (o que são os erros bizarros?)</li>
<li>O que é &#8220;Char.isLower&#8221; ? Método? Tem algo a ver com P.O.O.?</li>
<li>O main é uma função??</li>
</ul>
<p><em>ps: Buscando links pra colocar neste artigo, descobri que existiu um cara chamado <a href="http://en.wikipedia.org/wiki/Haskell_Curry">Haskell Curry</a>, matemático e lógico norte-americano&#8230;.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojosp.org/?feed=rss2&amp;p=7</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dojo 57 &#8211; Kata do Blocks</title>
		<link>http://www.dojosp.org/?p=46</link>
		<comments>http://www.dojosp.org/?p=46#comments</comments>
		<pubDate>Tue, 11 Nov 2008 14:39:54 +0000</pubDate>
		<dc:creator>flores</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Kata]]></category>

		<guid isPermaLink="false">http://www.dojosp.org/?p=46</guid>
		<description><![CDATA[Data: 10/11/2008, no IME &#8211; USP Participantes: Pedro, Thiago, Hugo, Jorge, R, Flores, Fabs, Mari, Marcelo, Bruno Gola, Renato, Carlos e Ricardo. Kata: Blocks por Mari Carta da Criatividade: Experimente uma idéia aleatória. Código: Estará disponível em breve. Warm up Um primeiro Parking Lot que apareceu foi sobre a numeração atual do Dojo, e acabamos [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><strong>Data: </strong>10/11/2008, no <a href="http://www.ime.usp.br">IME &#8211; USP</a></li>
<li><strong>Participantes:</strong> Pedro, Thiago, Hugo, Jorge, R, Flores, Fabs, Mari, Marcelo, Bruno Gola, Renato, Carlos e Ricardo.</li>
<li><strong>Kata</strong>: <a title="Blocks" href="http://online-judge.uva.es/p/v1/101.html" target="_blank">Blocks</a> por Mari</li>
<li><strong>Carta da Criatividade:</strong> Experimente uma idéia aleatória.</li>
<li><strong>Código</strong>: Estará disponível em breve.</li>
</ul>
<h3>Warm up</h3>
<p>Um primeiro Parking Lot que apareceu foi sobre a numeração atual do Dojo, e acabamos por decidir que esse seria o Dojo 57. Após isso fizemos a escolha do problema. Inicialmente houveram quatro sugestões:</p>
<ul>
<li>Kata do <a title="Blocks" href="http://online-judge.uva.es/p/v1/101.html" target="_blank">Blocks</a></li>
<li>Randori do <a title="Dama" href="https://br.spoj.pl/problems/DAMA/" target="_blank">Dama</a></li>
<li>Randori do <a title="Entertainement" href="http://acmicpc-live-archive.uva.es/nuevoportal/data/problem.php?p=3547">Entertainement </a></li>
<li>Randori do Amigo Secreto: Um programa para sortear amigos secretos com um teste de aleatoriedade.</li>
</ul>
<p>Fizemos a votação e o Kata ganhou. Perguntaram da onde vinha o problema Blocks, e a Mari nos disse que é o segundo mais fácil do <a href="http://online-judge.uva.es/problemset/">UVA</a> (só perdendo para o <a title="3n+1" href="http://online-judge.uva.es/p/v1/100.html">3n+1</a>). Após isso, sorteamos a carta da criatividade: &#8220;Experimente uma idéia aleatória&#8221;, que falava sobre um médico indígena e estratégias aleatórias de caças.</p>
<h3>Coding Time</h3>
<p>Inicialmente, a Mari criou o tipo de dados bloco e um construtor. Com os testes passando, foi feita uma refatoração para funcionar com um número arbitrário de blocos.</p>
<p>No Kata, a Mari começou a criar as operações, iniciando com a <em>pile</em>. Para essa operação, foi criada uma função para tirar um bloco do mundo. Depois criou uma função para devolver os blocos ao mundo recebendo o bloco que deveria voltar e sobre que bloco este deveria entrar, depois a implementou a Operação <em>Pile Over</em>. Infelizmente não terminamos o problema, mas por mais que pareça que fizemos pouco, o Hugo nos disse que para terminar tudo só precisaria implementar mais uma função e todo o resto seria simples de se implementar. Para cada implementação de função, estas ficaram meio grandes, mas se tornaram sucintas com uma boa refatoração, o que tornou o código mais fácil de entender.</p>
<p>A sintaxe de Haskell e os recursos funcionais nos deram a oportunidade de aprender coisas novas como o $, let, map, elem, span e outras coisas.</p>
<h3>Retrospectiva</h3>
<p>Dessa vez, as pessoas receberam os post-its e canetas no início do Dojo, para escreverem os pontos bons e ruins durante o Kata.</p>
<p>Como pontos positivos <img src='http://www.dojosp.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  , os principais temas abordados foram:</p>
<ul>
<li>Haskell e coisas relacionadas a essa linguagem;</li>
<li>Boas explicações;</li>
<li><a title="BrHackDay" href="http://www.hackday.org/">BrHackDay ;<br />
</a></li>
<li>Pessoas Novas ;</li>
<li>Pensar Funcional ;</li>
<li>Refatoração Power ;</li>
</ul>
<p>E como pontos negativos <img src='http://www.dojosp.org/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  , podemos citar:</p>
<ul>
<li>Haskell e coisas relacionadas a essa linguagem ;</li>
<li>Sem testes para o mundo ;</li>
<li>Emacs ;</li>
<li>Giant Step ;</li>
<li>Repositório (foi movido para o Parking Lot) ;</li>
<li>Conversa Paralela ;</li>
<li>Monads (foi movido para o Parking Lot) ;</li>
<li>Moedas do Fabrício;</li>
</ul>
<p>E para o Parking Lot, os principais temas foram:</p>
<ul>
<li>Discussão do reposítório;</li>
<li>Monads;</li>
<li>Começar pelo in no let &#8230; in (isso é o Where na verdade);</li>
<li>Remove recursivo;</li>
<li>$ tem precedência mínima;</li>
<li>Map, elem;</li>
<li>\lambda;</li>
<li>Set up para os testes;</li>
<li>Stick to time?;</li>
<li>Como construir Show e Eq complexos?;</li>
</ul>
<p>O Dojo teve alguns momentos engraçados, como o Fabricio dar sua contribuição para a Pizza em moedas (gerando o ódio do Hugo), a explicação do Hugo de porquê o \lambda é representado por &#8220;\&#8221; (&#8220;é só tirar o pézinho&#8221;), mas a frase da noite foi dirigida ao Fabricio pelo R &#8220;Prum cara preguiçoso que nem você, Lazy Evaluation é ótimo&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojosp.org/?feed=rss2&amp;p=46</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Latinoware 2008</title>
		<link>http://www.dojosp.org/?p=34</link>
		<comments>http://www.dojosp.org/?p=34#comments</comments>
		<pubDate>Mon, 03 Nov 2008 11:40:40 +0000</pubDate>
		<dc:creator>fabsn</dc:creator>
				<category><![CDATA[Dojo]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[foz]]></category>
		<category><![CDATA[latinoware]]></category>

		<guid isPermaLink="false">http://www.dojosp.org/?p=34</guid>
		<description><![CDATA[Código: no github Durante a semana passada, estive no Latinoware a convite da associação Python Brasil, para realizar uma sessão de dojo em python, onde resolvemos o Entertainment, o mesmo problema do Uberdojo 3 (que ainda não tem post ). A sessão foi muito boa, não devendo nada para um dojo em São Paulo, tinha [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><strong>Código</strong>: <a href="http://github.com/dojosp/participant-s-projects/tree/9a787ec3cd3e532cb890c37ae261794b0d1777c6/LATINOWARE-Python">no github</a></li>
</ul>
<p>Durante a semana passada, estive no <a href="http://2008.latinoware.org/" target="_blank">Latinoware</a> a convite da associação Python Brasil, para realizar uma sessão de dojo em python, onde resolvemos o <a href="http://acmicpc-live-archive.uva.es/nuevoportal/data/problem.php?p=3547" target="_blank">Entertainment</a>, o mesmo problema do Uberdojo 3 (que ainda não tem post <img src='http://www.dojosp.org/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ).</p>
<p>A sessão foi muito boa, não devendo nada para um dojo em São Paulo, tinha por volta de 20 pessoas dentre elas o pessoal da comunidade Python (Luciano Ramalho, Marco André, Ramiro Luz, JS e o Rodrigo) entre outros participantes do evento. A princípio havia uma diferença bem nítida entre os participantes, algumas pessoas, eu inclusive, sabiam pouco ou quase nada de python, ao passo que a outra parte era formada por gurus. Muitas coisas deram muito certo, o parking-lot por exemplo ajudou bastante, toda vez que alguém dispersava com alguma discussão, rapidamente transformávamos o tópico em um postit amarelo informando que o assunto seria discutido após a retrospectiva. Aplicamos estritamente a regra de 7 minutos, mas quando o piloto não conhecia muito de python, e eventualmente perdíamos tempo discutindo, dávamos 2 minutro extras.</p>
<p>A culpa é do Fabs foi uma maneira muito divertida e interessante de tirar o medo de errar da plateia, permitindo que o moderador/culpado (o Fabs :p) pudesse lembrar os participantes das práticas do dojo, se desculpando por não ter ensinado corretamente ^.^.</p>
<p>Acatando espertamente o conselho do Hugo, tivemos uma longa retrospectiva de mais de uma hora, e foi pouco. Haviam muitos post-its vermelhos, mas os participantes estavam felizes com isso. Na maior parte dos casos, esses vermelhos eram discussões interessantes ou duvidas do tipo como começar um dojo.</p>
<p>Basicamente, entre as coisas negativas tivemos o equipamento, o formato da sala e alguns detalhes como não ter lousa. Dentre os positivos, eu particularmente achei que o fato de ser um minicurso, em uma sala pequena com, contribui para tudo correr bem. De fato, fazer dojo como fizemos no fisl, com uma platéia de 200+ pessoas é muito mais difícil.</p>
<p>Não conseguimos discutir todo o parking lot -.-, pois estouraríamos o tempo.</p>
<p>Eu também gostei muito de Foz, principalmente das cataratas. Você pode ver fotos da viagem no <a href="http://picasaweb.google.com/fabriciosn/Latinoware2008#" target="_blank">meu picasa</a> , enquanto o Fernando Meyer não paga a conta que nos deve no Flickr.</p>
<p>Provavelmente, lá para o fim da semana, haverá um post sobre a viagem, no <a href="http://www.vidageek.net" target="_blank">blog do vidageek</a>.</p>
<p>Por fim, gostaria de deixar em nome do dojo, meus mais sinceros agradecimentos ao pessoal da <a href="http://www.pythonbrasil.com.br/moin.cgi/" target="_blank">Associação Python Brasil</a>, que pode proporcionar ao nosso dojo ser divulgado ao me levar para falar no evento.</p>
<p>Valeu ^.^.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojosp.org/?feed=rss2&amp;p=34</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>UberDojo02 no Coding Dojo 55</title>
		<link>http://www.dojosp.org/?p=31</link>
		<comments>http://www.dojosp.org/?p=31#comments</comments>
		<pubDate>Sun, 19 Oct 2008 16:48:14 +0000</pubDate>
		<dc:creator>hugo</dc:creator>
				<category><![CDATA[Haskell]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[UberDojo]]></category>

		<guid isPermaLink="false">http://www.dojosp.org/?p=31</guid>
		<description><![CDATA[Código: no github Na última segunda-feira rolou a edição número 55 do Coding Dojo. Ela foi, em muitos sentidos, especial. Para começar, o Danilo Sato estava presente acompanhado de um colega da Toughtworks, George Malamidis. Além disso, o dojo não foi realizado no IME/USP e sim na casa do Thiago Colucci (que fica &#8220;perto&#8221; da [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><strong>Código</strong>: <a href="http://github.com/dojosp/participant-s-projects/tree/9a787ec3cd3e532cb890c37ae261794b0d1777c6/02-UberDojo">no github</a></li>
</ul>
<p>Na última segunda-feira rolou a edição número 55 do Coding Dojo. Ela foi, em muitos sentidos, especial. Para começar, o Danilo Sato estava presente acompanhado de um colega da Toughtworks, <span class="post-info">George Malamidis. Além disso, o dojo não foi realizado no IME/USP e sim na casa do Thiago Colucci (que fica &#8220;perto&#8221; da USP). Por fim, o dojo foi feito no formato UberDojo que vou explicar a seguir.</span></p>
<p>Usamos duas mesas que representaram duas linguagens (Haskell e Ruby) e cada lado da mesa representou um problema (Bank OCR e Minesweeper). Tivemos então 4 notebooks nos quais 4 pares codaram ao mesmo tempo. Tivemos turnos de 7 minutos como sempre e, ao término do turno, o co-piloto virava piloto, o piloto ia para a &#8220;platéia&#8221; e alguém da platéia virava co-piloto. Isso era feito tentando evitar que as duplas se repetissem e que as pessoas caissem no mesmo conjunto problema/linguagem muito freqüentemente. Fizemos isso durante pouco mais de uma hora e estávamos em 10 pessoas da velha guarda (Danilo, Thiago além de Fabricio, Jacqueline, Yoshi, Mariana, Breno, Adolfo e eu) e 4 novatos (George, Renato Willi, Bruno Pedroso e Rafael Schouery). Assim sempre sobravam 6 pessoas não programando para fazer as pizzas que acompanharam (Yoshi, Breno e Jac principalmente cuidaram disso, valeu!) e aprender um pouco vendo os outros programarem.</p>
<p>Demoramos um bocado para escolher os problemas e linguagens assim como para configurar o ambiente inicial nas quatro máquinas para que eles ficassem fáceis de usar para todos. Os turnos foram muito intensos e a galera estava em animada e falando alto procurando ajuda do pessoal que estava livre. Rolou uma boa troca de conhecimentos apesar de não ter tido o telão. O pessoal se divertiu bastante inclusive os novatos que agüentaram muito bem o tranco apesar de terem achado o tempo dos turnos muito curtos.</p>
<p>Em retrospectiva, percebemos que boa parte dos nossos problemas vieram da pressa para tentar dar passos grandes e não gastar um tempinho explicando ao novo co-piloto o que estava acontecendo e quais eram os próximos passos. Também concordamos que esse exercício requer participantes que já saibam bem trabalhar com TDD (Desenvolvimento Dirigido por Testes) e que, apesar de ser mais divertido e excitante que o dojo normal, não podemos manter esse formato em todas as sessões. Decidimos então que faríamos uma sessão desse tipo por mês. Também gostaríamos de ter feito uma retrospectiva mais adequada (ficou só na conversa a retrospectiva que fizemos).</p>
<p>Acho que é isso. Se tentarem isso, por favor, mandem-nos feedback a respeito.<br />
Até o próximo dojo pessoal!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dojosp.org/?feed=rss2&amp;p=31</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
