<?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>WebGoal &#187; Desenvolvimento</title>
	<atom:link href="http://www.webgoal.com.br/categoria/desenvolvimento/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.webgoal.com.br</link>
	<description>Só mais um blog do WordPress</description>
	<lastBuildDate>Mon, 30 Aug 2010 18:59:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
		<item>
		<title>4º Dojo – WebEscolhe</title>
		<link>http://www.webgoal.com.br/desenvolvimento/4%c2%ba-dojo-webescolhe/</link>
		<comments>http://www.webgoal.com.br/desenvolvimento/4%c2%ba-dojo-webescolhe/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 12:36:34 +0000</pubDate>
		<dc:creator>floz</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[GWT]]></category>

		<guid isPermaLink="false">http://www.webgoal.com.br/?p=1369</guid>
		<description><![CDATA[Data: 13/08/2010 Formato: Randori Moderador: Matheus Depois do excelente Kata apresentado pelo Altieres sobre Google Web Toolkit (GWT), chegou a hora do time da WebGoal colocar a mão na massa. O Problema Para não correr o risco de emagrecer, a cada 2 sextas-feiras nós realizamos o WebEscolhe, que nada mais é do que &#8220;Escolha o [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><strong>Data:</strong> 13/08/2010</li>
<li><strong>Formato:</strong> Randori</li>
<li><strong>Moderador:</strong> Matheus</li>
</ul>
<p>Depois do excelente <a title="Kata apresentado pelo Altieres" href="http://www.webgoal.com.br/desenvolvimento/3%C2%BA-dojo-google-web-toolkit/" target="_blank">Kata apresentado pelo Altieres</a> sobre <a title="GWT" href="http://code.google.com/intl/pt-BR/webtoolkit/" target="_blank">Google Web Toolkit</a> (GWT), chegou a hora do time da WebGoal colocar a mão na massa.</p>
<p><strong>O Problema</strong></p>
<p>Para não correr o risco de emagrecer, a cada 2 sextas-feiras nós realizamos o <strong>WebEscolhe</strong>, que nada mais é do que <strong>&#8220;Escolha o que quiser almoçar e coloque na urna. O prato que for sorteado será o prato do dia para todos&#8221;</strong>. É sério, vale pedir qualquer coisa.</p>
<p>Pois bem, o desafio era criar um <strong>WebEscolhe</strong> online com o GWT. Protótipos criados e regras definidas: é hora de começar!</p>
<p style="text-align: center;"><a href="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00144.jpg"><img class="alignnone size-thumbnail wp-image-1374" title="Protótipos" src="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00144-200x160.jpg" alt="" width="100" height="80" /></a> <a href="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00150.jpg"><img class="alignnone size-thumbnail wp-image-1375" title="Protótipo" src="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00150-200x160.jpg" alt="" width="100" height="80" /></a> <a href="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00153.jpg"><img class="alignnone size-thumbnail wp-image-1376" title="Explicando" src="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00153-200x160.jpg" alt="" width="100" height="80" /></a></p>
<p>Assim como no Randori anterior todos participaram. Designers, desenvolvedores e até POs passaram pelas posições de piloto e co-piloto do par e a <strong>experiência </strong>mais uma vez foi incrível. No Dojo fica fácil perceber o valor de uma <strong>equipe unida</strong>. A medida em que as dúvidas aparecem mais o time discute e mantém o <strong>foco </strong>nas soluções.</p>
<p style="text-align: center;"><a href="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00161.jpg"><img class="alignnone size-thumbnail wp-image-1378" title="Pair" src="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00161-200x160.jpg" alt="" width="100" height="80" /></a> <a href="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00157.jpg"><img class="alignnone size-thumbnail wp-image-1377" title="Time!" src="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00157-200x160.jpg" alt="" width="100" height="80" /></a></p>
<p>Software entregue! A primeira versão do WebEscolhe já está rodando em &#8220;beta fechado&#8221; =). É muito estimulante contribuir com parte do valor entregue.</p>
<p style="text-align: center;"><a href="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00167.jpg"><img class="alignnone size-thumbnail wp-image-1379" title="ROI" src="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00167-200x160.jpg" alt="" width="100" height="80" /></a> <a href="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00170.jpg"><img class="alignnone size-thumbnail wp-image-1380" title="Time" src="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00170-200x160.jpg" alt="" width="100" height="80" /></a> <a href="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00172.jpg"><img class="alignnone size-thumbnail wp-image-1381" title="Retrospectiva" src="http://www.webgoal.com.br/wp-content/uploads/2010/08/DSC00172-200x160.jpg" alt="" width="100" height="80" /></a></p>
<p>Este foi eleito o melhor Randori até agora e a seguir seguem os pontos elencados na retrospectiva.</p>
<p><strong>Retrospectiva</strong></p>
<p><strong>Pontos positivos: </strong></p>
<ul>
<li>Nosso 4º Dojo</li>
<li>GWT Rulez!</li>
<li>Organização e pontualidade no Dojo</li>
<li>Definição do objetivo e protótipos ajudaram muito</li>
<li>Dessa vez ficou bem simples</li>
<li>Software funcionando</li>
<li>Integração do Time</li>
<li>Tarefas para designers</li>
<li>Concentração e foco no objetivo</li>
<li>O conector para TV</li>
<li>Tempo de &#8216;ação&#8217; do par</li>
</ul>
<p><strong>Pontos a Melhorar:</strong></p>
<ul>
<li>Não atender celular!</li>
<li>Evitar distrações</li>
<li>Diminuir o tempo da troca do par</li>
<li>TDD</li>
<li>Refatorar no &#8216;tempo extra&#8217;</li>
</ul>
<p><strong>Sugestões de melhoria:</strong></p>
<ul>
<li>Fazer um checklist para facilitar a organização do Dojo</li>
<li>Abrir o Dojo para participantes de fora da WebGoal</li>
<li>Participação não obrigatória</li>
<li>Quando o tema não for do domínio de todos, começar pelos mais experientes para &#8220;engrenar&#8221; mais rápido</li>
<li>Criar 2 filas, uma de pilotos e outra de co-pilotos</li>
<li>Distinguir o que é tela do que é TDD</li>
<li>Moderador atuar como coach para lembrar regras do DOJO</li>
</ul>
<p>Estes eventos estão sendo muito produtivos aqui na WebGoal. Promovam Dojos dentro do seu time, da sua empresa, entre seus amigos. É uma oportunidade excelente de trocar experiência e descobrir formas de solucionar problemas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webgoal.com.br/desenvolvimento/4%c2%ba-dojo-webescolhe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>3º Dojo &#8211; Google Web Toolkit</title>
		<link>http://www.webgoal.com.br/desenvolvimento/3%c2%ba-dojo-google-web-toolkit/</link>
		<comments>http://www.webgoal.com.br/desenvolvimento/3%c2%ba-dojo-google-web-toolkit/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 11:57:53 +0000</pubDate>
		<dc:creator>Mauricio Matsuda</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Kata]]></category>

		<guid isPermaLink="false">http://www.webgoal.com.br/?p=1244</guid>
		<description><![CDATA[Data: 30/07/2010 Formato: Kata Apresentador: Altieres Muitas vezes sentimos um certo receio em usar AJAX/JavaScript, mesmo sabendo das melhorias de desempenho e da experiência do usuário alcançadas com seu uso. Talvez esse receio exista principalmente pela complexidade de se gerenciar uma grande quantidade de código javascript e pelos tradicionais problemas de compatibilidade entre os navegadores. [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><strong>Data:</strong> 30/07/2010</li>
<li><strong>Formato:</strong> Kata</li>
<li><strong>Apresentador:</strong> Altieres</li>
</ul>
<p>Muitas vezes sentimos um certo receio em usar <strong>AJAX/JavaScript</strong>, mesmo sabendo das melhorias de <strong>desempenho </strong>e da experiência do usuário alcançadas com seu uso. Talvez esse receio exista principalmente pela <strong>complexidade </strong>de se gerenciar uma grande quantidade de código javascript e pelos tradicionais problemas de compatibilidade entre os navegadores.</p>
<p>Por esse motivo, fizemos um dojo para apresentação do <a title="GWT" href="http://code.google.com/intl/pt-BR/webtoolkit/" target="_blank">Google Web Toolkit</a> (GWT), visto que sua proposta é exatamente superar estes obstáculos. No GWT, o código da interface é escrito em Java e depois convertido automaticamente em javascript <strong>otimizado </strong>e <strong>compatível </strong>com a maioria dos navegadores.</p>
<p><strong>Retrospectiva</strong></p>
<p>Pontos bons:</p>
<ul>
<li>O formato Kata é bom para aprender assuntos novos</li>
<li>O apresentador conseguiu explicar de forma clara e objetiva</li>
<li>Aprender uma tecnologia nova</li>
<li>Poder utilizar essa tecnologia em projetos reais</li>
<li>Pontualidade para o início dojo</li>
</ul>
<p>Pontos a melhorar:</p>
<ul>
<li>Sala pequena para o número de participantes</li>
<li>Interrupções desnecessárias durante o Dojo</li>
</ul>
<p>Este dojo foi muito proveitoso, tanto pelos comentários feitos na retrospectiva, quanto pelo <strong>interesse </strong>despertado na equipe. Os times de desenvolvimento da WebGoal já estão implementando algumas <strong>aplicações </strong>de teste para conhecer melhor o GWT e estão gostando bastante!</p>
<div id="attachment_560" class="wp-caption alignleft" style="width: 210px"><a href="http://farm5.static.flickr.com/4097/4860646768_e89b54494c.jpg"><img class="size-thumbnail wp-image-560 " title="Apresentador" src="http://farm5.static.flickr.com/4097/4860646768_e89b54494c.jpg" alt="Apresentador" width="200" height="160" /></a><p class="wp-caption-text">Apresentador</p></div>
<div id="attachment_560" class="wp-caption alignleft" style="width: 210px"><a href="http://farm5.static.flickr.com/4094/4860645948_00b3a67210.jpg"><img class="size-thumbnail wp-image-560 " title="Participantes" src="http://farm5.static.flickr.com/4094/4860645948_00b3a67210.jpg" alt="Participantes" width="200" height="160" /></a><p class="wp-caption-text">Participantes</p></div>
<p><a class="wp-oembed" title="Ver mais fotos" href="http://www.flickr.com/photos/webgoal/4860646768/in/set-72157624528250941/" target="_blank">Ver mais fotos</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.webgoal.com.br/desenvolvimento/3%c2%ba-dojo-google-web-toolkit/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>2º Dojo &#8211; Maquina de Votação</title>
		<link>http://www.webgoal.com.br/desenvolvimento/2%c2%ba-dojo-maquina-de-votacao/</link>
		<comments>http://www.webgoal.com.br/desenvolvimento/2%c2%ba-dojo-maquina-de-votacao/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 17:01:50 +0000</pubDate>
		<dc:creator>Mauricio Matsuda</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[Randori]]></category>
		<category><![CDATA[Selenium]]></category>
		<category><![CDATA[testes de aceitação]]></category>

		<guid isPermaLink="false">http://www.webgoal.com.br/?p=1149</guid>
		<description><![CDATA[Data: 16/07/2010 Formato: Randori Moderador: Bruno O objetivo foi entender o funcionamento e a integração do Selenium com o SimpleTest e CakePHP e aprender técnicas para criação de testes de aceitação que direcionam o desenvolvimento e permitem uma rápida validação da interface de aplicações web. O problema proposto foi a criação de uma máquina de [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><strong>Data:</strong> 16/07/2010</li>
<li><strong>Formato:</strong> Randori</li>
<li><strong>Moderador:</strong> Bruno</li>
</ul>
<p>O objetivo foi entender o funcionamento e a integração do <a title="Site oficial do Selenium" href="http://seleniumhq.org/" target="_blank">Selenium</a> com o <a title="Site oficial do SimpleTest" href="http://www.simpletest.org/" target="_blank">SimpleTest</a> e <a title="Site oficial do CakePHP" href="http://www.cakephp.org" target="_blank">CakePHP</a> e aprender técnicas para criação de <strong>testes de aceitação</strong> que direcionam o desenvolvimento e permitem uma rápida <strong>validação da interface</strong> de <strong>aplicações web</strong>.</p>
<div style="text-align: center;"><img class="size-full wp-image-1135 aligncenter" src="http://www.webgoal.com.br/wp-content/uploads/2010/07/maquina_de_votavao1.jpg" alt="" width="250" height="200" /></div>
<p>O problema proposto foi a criação de uma <strong>máquina de votação</strong> na qual o usuário poderia inserir um número de dois dígitos, conferir o nome e a foto do candidato e confirmar seu voto.</p>
<p><strong>Retrospectiva</strong></p>
<p>Pontos bons:</p>
<ul>
<li>2º Dojo da WebGoal</li>
<li>Maior envolvimento dos designers</li>
<li>Testes passando e objetivo alcançado</li>
<li>Integração do time</li>
<li>Feedback rápido na validação de interfaces</li>
<li>Aprender uma nova técnica de teste</li>
</ul>
<p>Pontos a melhorar:</p>
<ul>
<li>Entender que o objetivo é aprender e ensinar</li>
<li>Mais atenção e disciplina da platéia</li>
<li>Maior comunicação passo-a-passo da solução</li>
<li>Realizar baby steps</li>
<li>Aumentar o tempo de duração</li>
<li>Evitar atrasos para iniciar</li>
<li>Disposição das pessoas e da TV</li>
</ul>
<p>Um dos pontos positivos em destaque nesse dojo foi o maior envolvimento dos <strong>designers</strong>, já que conseguimos mesclar tarefas de <strong>interface</strong> feitas para validação através dos testes do Selenium com tarefas de codificação para <strong>automação</strong> dos testes utilizando o SimpleTest e CakePHP.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webgoal.com.br/desenvolvimento/2%c2%ba-dojo-maquina-de-votacao/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>1º Dojo &#8211; Jogo Pedra, Papel e Tesoura</title>
		<link>http://www.webgoal.com.br/desenvolvimento/1%c2%ba-dojo-jogo-pedra-papel-e-tesoura/</link>
		<comments>http://www.webgoal.com.br/desenvolvimento/1%c2%ba-dojo-jogo-pedra-papel-e-tesoura/#comments</comments>
		<pubDate>Mon, 02 Aug 2010 21:18:22 +0000</pubDate>
		<dc:creator>Mauricio Matsuda</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JUnit]]></category>
		<category><![CDATA[Randori]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://www.webgoal.com.br/?p=1144</guid>
		<description><![CDATA[Data: 18/06/2010 Formato: Randori Moderador: Mauricio Com o objetivo de nos prepararmos para o treinamento de eXtreme Programing com o Klaus Wuestefeld, realizamos esse dojo para tirar a ferrugem do nosso TDD utilizando Java e JUnit. Fizemos uma votação entre os participantes para escolher uma aplicação para ser utilizada como exercício no dojo. Foi eleito o jogo [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><strong>Data:</strong> 18/06/2010</li>
<li><strong>Formato:</strong> Randori</li>
<li><strong>Moderador:</strong> Mauricio</li>
</ul>
<p>Com o objetivo de nos prepararmos para o treinamento de <strong><a href="http://www.extremeprogramming.org/">eXtreme Programing</a> </strong>com o <a title="Klaus Wuestefeld" href="http://klauswuestefeld.blogspot.com/" target="_blank">Klaus Wuestefeld</a>, realizamos esse dojo para tirar a ferrugem do nosso <a href="http://pragprog.com/screencasts/v-kbtdd/test-driven-development">TDD</a> utilizando <a href="http://www.java.com/pt_BR/">Java</a> e <a href="http://www.junit.org/">JUnit</a>.<img class="alignright size-full wp-image-1131" src="http://www.webgoal.com.br/wp-content/uploads/2010/07/pedra_papel_tesoura.jpg" alt="" width="250" height="200" /></p>
<p>Fizemos uma votação entre os participantes para escolher uma aplicação para ser utilizada como exercício no dojo. Foi eleito o jogo <strong>Joquempô</strong> (pedra, papel e tesoura), onde cada jogador escolhe um dos símbolos e, conforme a regra descrita na figura ao lado, é definido o vencedor da partida.</p>
<p><strong>Retrospectiva</strong></p>
<p>Pontos bons:</p>
<ul>
<li>1º Dojo da WebGoal</li>
<li>Praticar e relembrar técnicas de TDD com Java e JUnit</li>
<li>Troca de experiências</li>
<li>Nivelamento do time para o treinamento</li>
</ul>
<p>Pontos a melhorar:</p>
<ul>
<li>Build automatizado para os testes</li>
<li>Dupla falar mais sobre a solução que está desenvolvendo</li>
<li>Pensar no simples que funciona</li>
</ul>
<p>Apesar de ser o <strong>1º Dojo realizado na WebGoal</strong> conseguimos atingir nossos objetivos, visto que os participantes que já conheciam as tecnologias Java e JUnit conseguiram treinar e <strong>relembrar </strong>os conceitos e os que não conheciam tiveram a oportunidade de <strong>aprender </strong>os princípios básicos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webgoal.com.br/desenvolvimento/1%c2%ba-dojo-jogo-pedra-papel-e-tesoura/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coding Dojo</title>
		<link>http://www.webgoal.com.br/desenvolvimento/coding-dojo/</link>
		<comments>http://www.webgoal.com.br/desenvolvimento/coding-dojo/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 23:53:40 +0000</pubDate>
		<dc:creator>Mauricio Matsuda</dc:creator>
				<category><![CDATA[Agilidade]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[xp]]></category>
		<category><![CDATA[aprendizado]]></category>
		<category><![CDATA[dojo]]></category>

		<guid isPermaLink="false">http://www.webgoal.com.br/?p=1021</guid>
		<description><![CDATA[A programação é uma arte que requer aprendizado constante e a melhor forma de aprender é praticando. Coding Dojo é uma técnica que surgiu com o objetivo de aprimorar as práticas de programação. Foi conceitualmente inspirada na palavra japonesa Dojo, que significa um local de muito respeito para o treinamento de artes marciais. O Coding [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;">A <strong>programação </strong>é uma arte que requer <strong>aprendizado </strong>constante e a melhor forma de aprender é praticando.</p>
<p style="text-align: center;"><a rel="attachment wp-att-1024" href="http://www.webgoal.com.br/desenvolvimento/coding-dojo/attachment/dojo/"><img class="size-medium wp-image-1024 aligncenter" style="border: 5px solid white;" src="http://www.webgoal.com.br/wp-content/uploads/2010/07/dojo-300x200.jpg" alt="" width="240" height="160" /></a></p>
<p>Coding Dojo é uma técnica que surgiu com o objetivo de aprimorar as práticas de programação. Foi conceitualmente inspirada na palavra japonesa Dojo, que significa um local de muito <strong>respeito</strong> para o <strong>treinamento </strong>de artes marciais.</p>
<p>O Coding Dojo permite que todos os participantes pratiquem, aprendam e ensinem. Para isso, dois princípios básicos devem ser seguidos:</p>
<ul>
<li>Promover o <strong>aprendizado contínuo</strong> no qual todos os envolvidos devem entender e participar;</li>
<li>Realizar trocas constantes de experiências sem a distinção entre os mais e menos experientes, em um ambiente <strong>colaborativo</strong>, <strong>não competitivo</strong> e <strong>inclusivo</strong>.</li>
</ul>
<p style="text-align: justify;">Existem 3 formatos de realização de um Coding Dojo:</p>
<ul>
<li><strong>Kata</strong>: técnica em que um apresentador deve <strong>demonstrar </strong>uma solução previamente desenvolvida. O objetivo é ensinar aos participantes todos os passos necessários e permitir que todos possam<strong> reproduzir</strong> o mesmo resultado. Nesse formato é permitido realizar interrupções para tirar<strong> dúvidas</strong> a qualquer momento.</li>
<li><strong>Randori</strong>: formato que promove a participação de todos. O desenvolvimento da solução é feita <strong>orientada à testes</strong> e com <strong>programação em par</strong>. A cada <strong>turno</strong><strong> </strong>de aproximadamente<strong> </strong>5 minutos, o <strong>piloto </strong>volta para a platéia, o <strong>co-piloto </strong>vira piloto e um <strong>participante da platéia </strong>vira co-piloto. Os comentários são permitidos somente quando os testes estiverem em <strong>verde</strong> e, enquanto estiverem no <strong>vermelho</strong>, a platéia deve permanecer em silêncio.</li>
<li><strong>Kake</strong>: técnica semelhante ao Randori, porém no desenvolvimento há <strong>vários pares</strong> trabalhando em soluções diferentes simultaneamente e a cada turno a <strong>troca </strong>é feita<strong> entre os pares</strong>. Esse formato necessita de um conhecimento mais <strong>avançado</strong> dos participantes.</li>
</ul>
<p>O Coding Dojo proporciona um ambiente onde todos podem <strong>estudar e aprender </strong>novas técnicas e ferramentas, uma vez que elas devem ser praticadas em grupo. Diversos <strong>benefícios </strong>podem ser percebidos em um time praticante de Coding Dojo:</p>
<ul>
<li>Bom <strong>relacionamento </strong>entre as pessoas;</li>
<li><strong>Troca</strong> de experiências;</li>
<li>Todos evoluem seus <strong>conhecimentos</strong>;</li>
<li>Realização de tarefas diferentes do cotidiano de um projeto.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.webgoal.com.br/desenvolvimento/coding-dojo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP com conexão segura ao MySQL</title>
		<link>http://www.webgoal.com.br/desenvolvimento/cakephp-com-conexao-segura-ao-mysql/</link>
		<comments>http://www.webgoal.com.br/desenvolvimento/cakephp-com-conexao-segura-ao-mysql/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 13:25:19 +0000</pubDate>
		<dc:creator>Jonas Alves</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Criptografia]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Segurança]]></category>
		<category><![CDATA[SSL]]></category>

		<guid isPermaLink="false">http://www.webgoal.com.br/?p=917</guid>
		<description><![CDATA[No projeto de um de nossos clientes, surgiu a necessidade de configurar uma conexão segura a um servidor MySQL para garantir a segurança dos dados, pois a conexão seria através da internet. Consideramos algumas opções, entre elas: Túnel SSH VPN Criptografia nativa do MySQL via SSL Após alguns testes, concluímos que a criptografia nativa do [...]]]></description>
			<content:encoded><![CDATA[<p>No projeto de um de nossos clientes, surgiu a necessidade de configurar uma conexão segura a um servidor MySQL para garantir a segurança dos dados, pois a conexão seria através da internet.</p>
<p>Consideramos algumas opções, entre elas:</p>
<ul>
<li>Túnel SSH</li>
<li>VPN</li>
<li>Criptografia nativa do MySQL via SSL</li>
</ul>
<p>Após alguns testes, concluímos que a criptografia nativa do MySQL via SSL é simples de ser configurada e garante a segurança dos dados, além de não precisar de um utilitário externo (SSH, OpenVPN, etc).</p>
<p>No PHP, os dois drivers nativos para MySQL &#8211; mysql e mysqli &#8211; suportam a conexão criptografada. Basta usar o método Mysqli::ssl_set:</p>
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000088;">$connection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ssl_set</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span><span style="color: #000088;">$cert</span><span style="color: #339933;">,</span><span style="color: #000088;">$ca</span><span style="color: #339933;">,</span><span style="color: #000088;">$capath</span><span style="color: #339933;">,</span><span style="color: #000088;">$cipher</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>Porém, descobrimos que os conectores para MySQL do CakePHP (1.2, 1.3 e 2.0) não tem essa funcionalidade. Decidimos então implementar um novo conector baseado no original.</p>
<p><strong>Adaptando o conector MySQL do CakePHP</strong></p>
<p>Criamos o conector <em>DboMysqliSsl</em>, que extende <em>DboMysqli</em>, em <em>cake/libs/model/datasources/dbo/dbo_mysqli_ssl.php</em> e sobrescrevemos o método <em>connect</em>, responsável por estabelecer a conexão. O trecho destacado é a parte que difere da superclasse:</p>
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
App<span style="color: #339933;">::</span><span style="color: #004000;">import</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Core'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'DboMysqli'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000000; font-weight: bold;">class</span> DboMysqliSsl <span style="color: #000000; font-weight: bold;">extends</span> DboMysqli <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">function</span> connect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$config</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">config</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">connected</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><a href="http://www.php.net/is_numeric"><span style="color: #990000;">is_numeric</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'port'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'socket'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'socket'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'port'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'port'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">connection</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> mysqli<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">connection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="display:block;background-color:#ffff66">&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'ssl'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br /></span><span style="display:block;background-color:#ffff66">&nbsp; &nbsp; &nbsp; <span style="color: #339933;">@</span><span style="color: #000088;">$key</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'ssl'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'key'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br /></span><span style="display:block;background-color:#ffff66">&nbsp; &nbsp; &nbsp; <span style="color: #339933;">@</span><span style="color: #000088;">$cert</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'ssl'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cert'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br /></span><span style="display:block;background-color:#ffff66">&nbsp; &nbsp; &nbsp; <span style="color: #339933;">@</span><span style="color: #000088;">$ca</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'ssl'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'ca'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br /></span><span style="display:block;background-color:#ffff66">&nbsp; &nbsp; &nbsp; <span style="color: #339933;">@</span><span style="color: #000088;">$capath</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'ssl'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'capath'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br /></span><span style="display:block;background-color:#ffff66">&nbsp; &nbsp; &nbsp; <span style="color: #339933;">@</span><span style="color: #000088;">$cipher</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'ssl'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'cipher'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br /></span>&nbsp; &nbsp; &nbsp; <br />
<span style="display:block;background-color:#ffff66">&nbsp; &nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">connection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ssl_set</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span><span style="color: #339933;">,</span><span style="color: #000088;">$cert</span><span style="color: #339933;">,</span><span style="color: #000088;">$ca</span><span style="color: #339933;">,</span><span style="color: #000088;">$capath</span><span style="color: #339933;">,</span><span style="color: #000088;">$cipher</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br /></span><span style="display:block;background-color:#ffff66">&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br /></span>&nbsp; &nbsp; <br />
<span style="display:block;background-color:#ffff66">&nbsp; &nbsp; <span style="color: #339933;">@</span><span style="color: #000088;">$flags</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'flags'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br /></span><span style="display:block;background-color:#ffff66">&nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">connected</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">connection</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">real_connect</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'host'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'login'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'password'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'database'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'port'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'socket'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$flags</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br /></span>&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span>_useAlias <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>bool<span style="color: #009900;">&#41;</span><a href="http://www.php.net/version_compare"><span style="color: #990000;">version_compare</span></a><span style="color: #009900;">&#40;</span><a href="http://www.php.net/mysqli_get_server_info"><span style="color: #990000;">mysqli_get_server_info</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">connection</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;4.1&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;&gt;=&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><a href="http://www.php.net/empty"><span style="color: #990000;">empty</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'encoding'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setEncoding</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'encoding'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">connected</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p><strong>Configurando sua conexão (database.php)</strong></p>
<p>Agora, para que sua aplicação CakePHP consiga se conectar a um servidor MySQL com SSL, basta adicionar as seguintes configurações na sua conexão:</p>
<div class="codecolorer-container php geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="display:block;background-color:#ffff66"><a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br /></span>&nbsp; <span style="color: #0000ff;">'driver'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'mysqli_ssl'</span><span style="color: #339933;">,</span><br />
&nbsp; <span style="color: #0000ff;">'persistent'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span><br />
&nbsp; <span style="color: #0000ff;">'host'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'127.0.0.1'</span><span style="color: #339933;">,</span><br />
&nbsp; <span style="color: #0000ff;">'login'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'userssl'</span><span style="color: #339933;">,</span><br />
&nbsp; <span style="color: #0000ff;">'password'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'password'</span><span style="color: #339933;">,</span><br />
&nbsp; <span style="color: #0000ff;">'database'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'meu_sistema'</span><span style="color: #339933;">,</span><br />
&nbsp; <span style="color: #0000ff;">'prefix'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><br />
&nbsp; <span style="color: #0000ff;">'encoding'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'utf8'</span><span style="color: #339933;">,</span><br />
<span style="display:block;background-color:#ffff66">&nbsp; <span style="color: #0000ff;">'flags'</span> <span style="color: #339933;">=&gt;</span> MYSQL_CLIENT_SSL<span style="color: #339933;">,</span><br /></span><span style="display:block;background-color:#ffff66">&nbsp; <span style="color: #0000ff;">'ssl'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><br /></span><span style="display:block;background-color:#ffff66">&nbsp; &nbsp; <span style="color: #0000ff;">'key'</span>    <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'/path/to/meu_sistema/app/config/mysql_ssl/server-key.pem'</span><span style="color: #339933;">,</span><br /></span><span style="display:block;background-color:#ffff66">&nbsp; &nbsp; <span style="color: #0000ff;">'cert'</span>   <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'/path/to/meu_sistema/app/config/mysql_ssl/server-cert.pem'</span><span style="color: #339933;">,</span><br /></span><span style="display:block;background-color:#ffff66">&nbsp; &nbsp; <span style="color: #0000ff;">'ca'</span>     <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'/path/to/meu_sistema/app/config/mysql_ssl/ca-cert.pem'</span><span style="color: #339933;">,</span><br /></span><span style="display:block;background-color:#ffff66">&nbsp; &nbsp; <span style="color: #0000ff;">'capath'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span><br /></span><span style="display:block;background-color:#ffff66">&nbsp; &nbsp; <span style="color: #0000ff;">'cipher'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #009900; font-weight: bold;">null</span><br /></span><span style="display:block;background-color:#ffff66">&nbsp; <span style="color: #009900;">&#41;</span><br /></span><span style="color: #009900;">&#41;</span></div></td></tr></tbody></table></div>
<p>Como a configuração sugere, salve os arquivos indicados em um lugar acessível pela sua aplicação &#8211; no exemplo usamos /path/to/meu_sistema/app/config/mysql_ssl.</p>
<p><strong>Configurando o MySQL para aceitar (ou exigir) conexões criptografadas</strong></p>
<p>Para seu MySQL aceitar conexões criptografadas você terá que, primeiro, gerar os certificados conforme o tópico &#8220;Example 1: Creating SSL files from the command line on Unix&#8221; <a href="http://dev.mysql.com/doc/refman/5.1/en/secure-create-certs.html">desta página do manual do MySQL</a>.</p>
<p>Em seguida, você deve indicar esses certificados no arquivo de configuração do mysql (/etc/mysql/my.cnf no Debian e Ubuntu). Essa configuração já existe por volta da linha 118. Descomente essas linhas e indique o caminho dos seus certificados:</p>
<div class="codecolorer-container text geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">ssl-ca=/etc/mysql/cacert.pem<br />
ssl-cert=/etc/mysql/server-cert.pem<br />
ssl-key=/etc/mysql/server-key.pem</div></div>
<p>Reinicie seu MySQL:</p>
<div class="codecolorer-container bash geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>mysql restart</div></div>
<p>Agora, se você executar a seguinte query no MySQL:</p>
<div class="codecolorer-container sql geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql<span style="color: #66cc66;">&gt;</span> <span style="color: #993333; font-weight: bold;">SHOW</span> <span style="color: #993333; font-weight: bold;">VARIABLES</span> <span style="color: #993333; font-weight: bold;">LIKE</span> <span style="color: #ff0000;">'%ssl%'</span>;</div></div>
<p>Você verá que o SSL está ativado.</p>
<p>Se você quiser exigir o uso do certificado para que um usuários consiga se conectar no seu servidor MySQL, você deve alterar a permissão do usuário, adicionando a opção REQUIRE SSL, conforme o exemplo:</p>
<div class="codecolorer-container sql geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">GRANT</span> <span style="color: #993333; font-weight: bold;">ALL</span> PRIVILEGES <span style="color: #993333; font-weight: bold;">ON</span> <span style="color: #66cc66;">*.*</span> <span style="color: #993333; font-weight: bold;">TO</span> <span style="color: #ff0000;">'userssl'</span>@<span style="color: #ff0000;">'%'</span> <span style="color: #993333; font-weight: bold;">IDENTIFIED</span> <span style="color: #993333; font-weight: bold;">BY</span> <span style="color: #ff0000;">'password'</span> REQUIRE SSL;</div></div>
<p>Pronto, agora você tem uma conexão segura entre sua aplicação CakePHP e seu banco de dados MySQL.</p>
<p>Para acessar seu MySQL com SSL via linha de comando, use os seguintes parâmetros:</p>
<div class="codecolorer-container bash geshi" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">mysql -h127.0.0.1 <span style="color: #660033;">-uuserssl</span> <span style="color: #660033;">-p</span> <span style="color: #660033;">--ssl-ca</span>=ca-cert.pem <span style="color: #660033;">--ssl-cert</span>=client-cert.pem <span style="color: #660033;">--ssl-key</span>=client-key.pem</div></div>
<p><strong>Open Source</strong></p>
<p>Essa modificação foi sugerida para ser incorporada ao framework no <a href="http://cakephp.lighthouseapp.com/projects/42648/tickets/556-mysql-connectors-doesnt-support-ssl">Lighthouse do CakePHP</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.webgoal.com.br/desenvolvimento/cakephp-com-conexao-segura-ao-mysql/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Você precisa amar seu trabalho</title>
		<link>http://www.webgoal.com.br/scrum/voce-precisa-amar-seu-trabalho/</link>
		<comments>http://www.webgoal.com.br/scrum/voce-precisa-amar-seu-trabalho/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 16:23:25 +0000</pubDate>
		<dc:creator>matheus</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Qualidade de vida]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[amor]]></category>
		<category><![CDATA[trabalhador do conhecimento]]></category>

		<guid isPermaLink="false">http://www.webgoal.com.br/?p=817</guid>
		<description><![CDATA[Amor é uma daquelas palavras que possuem vários significados. É um sentimento difícil de ser qualificado e quantificado: afinal, o que significa amar muito ou pouco alguma coisa ou alguém? Platão define o amor erótico (que vem de Eros, o deus do amor). É o amor do desejo, do prazer. Desejamos aquilo que não temos. [...]]]></description>
			<content:encoded><![CDATA[<p>Amor é uma daquelas palavras que possuem vários significados. É um sentimento difícil de ser qualificado e quantificado: afinal, o que significa amar muito ou pouco alguma coisa ou alguém?</p>
<p>Platão define o <strong>amor erótico</strong> (que vem de <em>Eros</em>, o deus do amor). É o amor do desejo, do prazer. Desejamos aquilo que não temos. É o amor que existe na falta. Quando conseguimos aquilo que nos falta, aquilo que desejamos, o amor acaba. É um amor que se renova, começa e acaba várias vezes durante nossas vidas.</p>
<p>No <strong>SCRUM</strong>, esse amor existe durante as Sprints. Queremos atingir a <strong>meta</strong> definida pelo Product Owner, pois o que ele deseja deve ser aquilo que amamos eroticamente. Esse amor atinge seu clímax na reunião de review: mostramos para todos envolvidos e comprometidos no projeto que atingimos a meta. As vezes, fazemos até um churrasco para comemorar! Mas aí, esse amor acaba, pois conseguimos aquilo que desejávamos e atingir essa meta não nos faz mais falta.</p>
<p>Entretanto, também existe a definição de amor de Aristóteles (aluno de Platão). Aristóteles define o <strong>amor filia</strong> (que vem de amizade). É o amor da alegria: ama-se aquilo que se tem. Ama-se na presença, no dia-a-dia, e não na falta. É um amor persistente, constante.</p>
<p>Esse amor também deveria existir no time do projeto durante as Sprints. Amar aquilo que se está fazendo, amar o trabalho no dia-a-dia, na presença, na alegria. Cada um precisa da alegria do outro para ser alegre. Enquanto o amor erótico nos cega (olhamos só para a meta), o amor filia nos mostra novas possibilidades e nos torna mais criativos. Assim, atingir a meta será apenas uma consequência. Não adianta comemorar a meta atingida se o trabalho durante a Sprint foi feito sobre muita pressão e stress. Todo dia tem que valer a pena trabalhar, todo dia tem que ser dia de churrasco!</p>
<p>Portanto, precisamos tanto de amor erótico, quanto de amor filia. Precisamos manter o equilíbrio entre eles. Continuemos erotizados, mas prestemos atenção na filia (alegria do encontro, do cotidiano, do amor na presença). Não é a meta que é a medida da conduta (amor erótico), mas sim o resultado de todo o processo (amor filia).</p>
<p>Esse post foi inspirado na palestra feita por <a title="Clóvis de Barros Filho" href="http://pt.wikipedia.org/wiki/Cl%C3%B3vis_de_Barros_Filho" target="_blank">Clóvis de Barros</a> na HSM ExpoManagement 2009. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.webgoal.com.br/scrum/voce-precisa-amar-seu-trabalho/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Making of do Granatum</title>
		<link>http://www.webgoal.com.br/scrum/making-of-do-granatum/</link>
		<comments>http://www.webgoal.com.br/scrum/making-of-do-granatum/#comments</comments>
		<pubDate>Thu, 10 Dec 2009 18:12:27 +0000</pubDate>
		<dc:creator>matheus</dc:creator>
				<category><![CDATA[Agilidade]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://www.webgoal.com.br/?p=739</guid>
		<description><![CDATA[Há mais ou menos 5 meses, surgiu aqui na WebGoal o interesse de termos um software de controle financeiro que fosse simples e funcional. Depois de procurar muito, nós até encontramos algumas alternativas interessantes no mercado, porém nenhuma nos atendia completamente. Foi aí que decidimos fazer com as nossas próprias mãos! O desejo era ter [...]]]></description>
			<content:encoded><![CDATA[<p>Há mais ou menos 5 meses, surgiu aqui na <strong>WebGoal</strong> o interesse de termos um software de controle financeiro que fosse simples e funcional. Depois de procurar muito, nós até encontramos algumas alternativas interessantes no mercado, porém nenhuma nos atendia completamente. Foi aí que decidimos fazer com as nossas próprias mãos!</p>
<p>O desejo era ter um <strong>software web</strong> seguro, gratuito, desenvolvido utilizando as <strong>práticas ágeis</strong>, em contínua evolução, amparada por um sistema de feedback, onde qualquer usuário pudesse participar sugerindo novas funcionalidades e/ou melhorias para o sistema. Desejo <span style="text-decoration: line-through;">realizado</span> em realização incremental.</p>
<p>O <strong>Granatum</strong> chega na versão 1.0 e já vem cheio de melhorias propostas pelos mais de 500 usuários cadastrados em menos de uma semana. Esses usuários compartilham do mesmo desejo que nós: fazer um  software cada vez mais completo!</p>
<h3>Mas afinal, por que Granatum?</h3>
<p><a href="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_roma.jpg"><img class="alignleft size-thumbnail wp-image-744" title="Romã - Punica Granatum" src="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_roma-200x160.jpg" alt="Romã - Punica Granatum" width="130" height="104" /></a>Granatum é o nome científico da romã (<em>Punica Granatum</em>). Escolhemos esse nome porque a romã é conhecida como a fruta do dinheiro e está relacionada com diversas simpatias para conseguí-lo. =)<br />
<br clear="none" /></p>
<h3>Quem fez?</h3>
<p>Apesar de todos da WebGoal terem colaborado (e muito) para o lançamento da versão 1.0, a equipe oficial &#8211; por assim dizer – foi composta pelo Altieres, Bruno, Jefferson, Mahmoud e Thiago. Equipe multidisciplinar excelente!</p>
<p><a href="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_equipe_1.jpg"><img class="alignnone size-thumbnail wp-image-748" title="Altieres totalmente focado no Granatum" src="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_equipe_1-200x160.jpg" alt="Altieres totalmente focado no Granatum" width="130" height="104" /></a><a href="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_equipe_3.jpg"><img class="alignnone size-thumbnail wp-image-747" title="Equipe completa do Granatum" src="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_equipe_3-200x160.jpg" alt="Equipe completa do Granatum" width="130" height="104" /></a><a href="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_equipe_4.jpg"><img class="alignnone size-thumbnail wp-image-746" title="Thiago e Mahmoud - interface simples e fácil de usar" src="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_equipe_4-200x160.jpg" alt="Thiago e Mahmoud - interface simples e fácil de usar" width="130" height="104" /></a></p>
<h3>Como foi feito?</h3>
<p>Para desenvolver o Granatum utilizamos <strong>SCRUM</strong> e algumas práticas da <strong>XP</strong>. Estamos em constante evolução e adaptação com as práticas ágeis e voltamos a sugerir: pratiquem! O exercício é uma excelente forma de aprendizado. Nos ajuda a evoluir e a evoluir a comunidade ágil.</p>
<p>Ficha técnica:</p>
<ul>
<li>Linguagem: PHP 5</li>
<li>Banco de Dados: MySQL 5</li>
<li>Arquitetura: MVC</li>
<li>Framework: CakePHP</li>
<li>Práticas de engenharia: controle de versão, TDD, refatoração e programação em par</li>
</ul>
<p>Para finalizar, nós mesmos produzimos o vídeo de divulgação. Utilizamos o Flash CS4 para animar o personagem e os cenários, que explicam como o Granatum funciona. Com toda certeza, é muito gratificante ter um resultado tão positivo em tão pouco tempo.</p>
<p>Veja algumas fotos da produção do Granatum:</p>
<p><a href="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_tela_1.jpg"><img class="alignnone size-thumbnail wp-image-743" title="Construção da tela de lançamentos" src="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_tela_1-200x160.jpg" alt="Construção da tela de lançamentos" width="130" height="104" /></a><a href="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_tela_2.jpg"><img class="alignnone size-thumbnail wp-image-742" title="Tela de relatórios" src="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_tela_2-200x160.jpg" alt="Tela de relatórios" width="130" height="104" /></a><a href="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_tela_3.jpg"><img class="alignnone size-thumbnail wp-image-741" title="Implementação com Eclipse e PHP" src="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_tela_3-200x160.jpg" alt="Implementação com Eclipse e PHP" width="130" height="104" /></a><a href="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_kanban.jpg"><img class="size-thumbnail wp-image-745 alignnone" title="Kanban Granatum" src="http://www.webgoal.com.br/wp-content/uploads/2009/12/granatum_kanban-200x160.jpg" alt="Kanban Granatum" width="130" height="104" /></a><a href="http://www.webgoal.com.br/wp-content/uploads/2009/12/IMG_9753.jpg"><img class="alignnone size-thumbnail wp-image-792" title="Fazendo o vídeo" src="http://www.webgoal.com.br/wp-content/uploads/2009/12/IMG_9753-200x160.jpg" alt="Fazendo o vídeo" width="130" height="104" /></a><a href="http://www.webgoal.com.br/wp-content/uploads/2009/12/IMG_9739.jpg"><img class="alignnone size-thumbnail wp-image-793" title="Jeff e a última conferida" src="http://www.webgoal.com.br/wp-content/uploads/2009/12/IMG_9739-200x160.jpg" alt="Jeff e a última conferida" width="130" height="104" /></a></p>
<p>Hoje o Granatum já está disponível para todos que quiserem controlar suas finanças através do endereço <a href="http://granatum.com.br">http://www.granatum.com.br</a>. Você pode fazer seu cadastro utilizando dados anônimos para aumentar ainda mais a sua segurança. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.webgoal.com.br/scrum/making-of-do-granatum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ambiente de trabalho ágil</title>
		<link>http://www.webgoal.com.br/scrum/ambiente-de-trabalho-agil/</link>
		<comments>http://www.webgoal.com.br/scrum/ambiente-de-trabalho-agil/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 15:51:57 +0000</pubDate>
		<dc:creator>Webgoal</dc:creator>
				<category><![CDATA[Agilidade]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[ambiente de trabalho]]></category>

		<guid isPermaLink="false">http://www.webgoal.com.br/?p=613</guid>
		<description><![CDATA[Um dos princípios do manifesto para o desenvolvimento ágil de software é: &#8220;Construir projetos ao redor de indivíduos motivados, dando a eles o ambiente e suporte necessário, e confiar que farão seu trabalho&#8220;. Aqui na WebGoal acreditamos que o ambiente de trabalho deve ser diferenciado e motivador. Para isso, estamos constantemente fazendo mudanças, adequando o [...]]]></description>
			<content:encoded><![CDATA[<p>Um dos princípios do <a href="http://www.manifestoagil.com.br/principios.html">manifesto para o desenvolvimento ágil de software</a> é: &#8220;<em>Construir projetos ao redor de indivíduos motivados, dando a eles o ambiente e suporte necessário, e confiar que farão seu trabalho</em>&#8220;.</p>
<p>Aqui na WebGoal acreditamos que o ambiente de trabalho deve ser diferenciado e motivador. Para isso, estamos constantemente fazendo mudanças, adequando o local de trabalho de acordo com as necessidades e desejos do Time de desenvolvimento. Veja abaixo como trabalhamos na WebGoal.</p>
<table>
<tr>
<td>
<a href="http://www.webgoal.com.br/wp-content/uploads/2009/11/ambiente_webgoal_01.jpg"><img class="size-thumbnail wp-image-615" title="Ambiente de Trabalho WebGoal" src="http://www.webgoal.com.br/wp-content/uploads/2009/11/ambiente_webgoal_01-200x160.jpg" alt="Time de desenvolvimento da WebGoal" width="200" height="160" /></a>
</td>
<td>
<a href="http://www.webgoal.com.br/wp-content/uploads/2009/11/ambiente_webgoal_03.jpg"><img class="size-thumbnail wp-image-617" title="Almoço na WebGoal" src="http://www.webgoal.com.br/wp-content/uploads/2009/11/ambiente_webgoal_03-200x160.jpg" alt="Almoço na WebGoal" width="200" height="160" /></a>
</td>
</tr>
</table>
<p><strong>Mesas</strong>: estão dispostas no centro da sala e os membros do time sentam-se um de frente para o outro. Essa formação favorece a comunicação e o desenvolvimento em par.</p>
<p><strong>Computadores</strong>: não dá para ser ágil com computadores lentos! Aqui na WebGoal utilizamos computadores com processadores Intel Core 2 Duo 2.4 Ghz e 4 Gb de memória RAM. Monitores de 19&#8243; também deixam o desenvolvimento mais confortável.</p>
<p><strong>Quadro-branco</strong>: é utilizado como apoio para discussões (as vezes é melhor desenhar) e para anotações diversas a respeito do projeto. É uma ferramenta muito importante para times ágeis.</p>
<p><strong>Kanban</strong>:  oferece todas as informações relativas ao andamento da iteração de um projeto. Através dele, sabemos quais itens e tarefas estão sendo desenvolvidos, como está o desempenho da equipe e se existem problemas a serem resolvidos.</p>
<p><strong>Alimentação</strong>: fizemos a opção de oferecer almoço na própria empresa. Com um cardápio balanceado e um ambiente familiar, conseguimos uma qualidade de vida que não tínhamos quando almoçávamos em restaurantes. Além do almoço, oferecemos café da manhã e lanche da tarde para todos os membros do time.</p>
<p><strong>Pessoas</strong>:  É claro que não adianta nada disso se você não tiver as pessoas certas. Nossa equipe é formada por profissionais que sabem aproveitar tudo isso para entregar software funcionando no final de cada iteração.</p>
<p>Toda essa preocupação com o ambiente de trabalho é justificada quando percebemos os benefícios que tudo isso traz para atingir nosso objetivo: desenvolver software de forma ágil, com alto e rápido retorno sobre o investimento para os nossos clientes. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.webgoal.com.br/scrum/ambiente-de-trabalho-agil/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Origem da Orientação a Objetos</title>
		<link>http://www.webgoal.com.br/desenvolvimento/origem-da-orientacao-a-objetos/</link>
		<comments>http://www.webgoal.com.br/desenvolvimento/origem-da-orientacao-a-objetos/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 17:25:51 +0000</pubDate>
		<dc:creator>Webgoal</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[orientação a objetos]]></category>

		<guid isPermaLink="false">http://www.webgoal.com.br/?p=530</guid>
		<description><![CDATA[A orientação a objetos tem sua origem nos anos 60 na Noruega, com Kristen Nygaard e Ole-Johan Dahl, no Centro Norueguês de Computação. Através da linguagem Simula 67, foram introduzidos os conceitos de classe e herança. A orientação a objetos foi mais bem conceituada no laboratório da Xerox, em Palo Alto, sendo refinada numa seqüência [...]]]></description>
			<content:encoded><![CDATA[<div>
<p>A <strong>orientação a objetos</strong> tem sua origem nos anos 60 na Noruega, com Kristen Nygaard e Ole-Johan Dahl, no Centro Norueguês de Computação. Através da linguagem Simula 67, foram introduzidos os conceitos de classe e herança.</p>
<p>A orientação a objetos foi mais bem conceituada no laboratório da Xerox, em Palo Alto, sendo refinada numa seqüência de protótipos da linguagem Smalltalk. O líder desse projeto foi Alan Curtis Kay, considerado um dos criadores do termo “programação orientada a objetos”.</p>
<p>Alan Kay começou a programar em Simula depois de conhecer um inovador programa chamado Sketchpad. Sketchpad foi um editor gráfico desenvolvido por Ivan Sutherland, no MIT, em 1963. É considerado um marco na informática, sendo o primeiro editor gráfico orientado a objetos. Era possível colocar bits coloridos no canvas, mas também criar objetos que poderiam ser manipulados distintamente uns dos outros. O Sketchpad permitia que fosse definido um “<em>master drawing</em>“, a partir do qual seriam criadas “<em>instance drawing</em>” (herança).</p>
<p>A partir dos conceitos desse sistema, como também dos seus conhecimentos em Biologia e Matemática, Alan Kay formulou sua analogia “algébrico-biológica”. Ele lançou o postulado de que o computador ideal deveria funcionar como um organismo vivo, isto é, cada “célula” comportar-se-ia relacionando-se com outras células a fim de alcançar um objetivo, entretanto, funcionando de forma autônoma. As células poderiam também reagrupar-se para resolver outros problemas ou desempenhar outras funções, trocando mensagens “químicas” entre elas.</p>
<p>No outono de 1968, Kay teve o seu primeiro encontro com Seymour Papert, no Laboratório de Inteligência Artificial do MIT, e ficou interessado na linguagem Logo. Toda a concepção de Kay sobre o papel do computador na sociedade foi alterada quando ele viu Papert e seus colegas ensinando crianças a programar em Logo. Logo é uma linguagem de programação interpretada, voltada principalmente para crianças e aprendizes em programação. O Logo implementa a filosofia construtivista.</p>
<p>Alan Kay também observou que o conceito de objetos tinha enorme potencial como uma ferramenta cognitiva: havia uma boa correspondência com a maneira de pensar das pessoas sobre o mundo. Ele percebeu que um substantivo isolado faz aparecer uma imagem concreta na mente das pessoas e um verbo isolado não tem esse efeito. Verbos são propriedades dos substantivos: Garotos correm; cachorro corre; água corre; trem corre. Na orientação a objetos chamamos isso de polimorfismo.</p>
<p>Então, Alan Kay pensou em como construir um sistema de software a partir de agentes autônomos que interagissem entre si, estabelecendo os seguintes princípios da orientação a objetos:</p>
<ul>
<li> Qualquer coisa é um objeto.</li>
<li>Objetos realizam tarefas através da requisição de serviços.</li>
<li> Cada objeto pertence a uma determinada classe.</li>
<li> Uma classe agrupa objetos similares.</li>
<li> Um classe possui comportamentos associados ao objeto.</li>
<li> Classes são organizadas em hierarquias.</li>
</ul>
<p>Portando, depois de reunir conceitos de diversas áreas do conhecimento e com base em sua experiência como pesquisador, Alan Kay criou o paradigma de análise e programação mais eficiente da atualidade. Conhecer a origem da orientação a objetos ajuda a compreender como utilizá-la no desenvolvimento de projetos de software.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.webgoal.com.br/desenvolvimento/origem-da-orientacao-a-objetos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
