<?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>BernardoFontes.net</title>
	<atom:link href="http://www.bernardofontes.net/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bernardofontes.net/blog</link>
	<description>Tecnolgia - Desenvolvimento Ágil - Comunidade</description>
	<lastBuildDate>Tue, 20 Dec 2011 14:08:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Rocksmith: Como Aprender A Tocar Guitarra Jogando Videogame</title>
		<link>http://www.bernardofontes.net/blog/rocksmith-como-aprender-a-tocar-guitarra-jogando-videogame/</link>
		<comments>http://www.bernardofontes.net/blog/rocksmith-como-aprender-a-tocar-guitarra-jogando-videogame/#comments</comments>
		<pubDate>Tue, 20 Dec 2011 14:08:05 +0000</pubDate>
		<dc:creator>Bernardo Fontes</dc:creator>
				<category><![CDATA[Games]]></category>
		<category><![CDATA[ensino]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[gamificação]]></category>
		<category><![CDATA[ps3]]></category>
		<category><![CDATA[rocksmith]]></category>

		<guid isPermaLink="false">http://www.bernardofontes.net/blog/?p=385</guid>
		<description><![CDATA[O que a sua namorada diria se você deixar de sair com ela para ficar jogando videogame em uma noite de sexta-feira? Agora, o que ela falaria se você tocasse na guitarra um cover daquela música que ela adora? O novo jogo da Ubisoft, o Rocksmith, tenta conciliar os dois mundos. Basicamente, ele é um [...]]]></description>
			<content:encoded><![CDATA[<p>O que a sua namorada diria se você deixar de sair com ela para ficar jogando videogame em uma noite de sexta-feira? Agora, o que ela falaria se você tocasse na guitarra um cover daquela música que ela adora? O novo jogo da <a href="http://www.ubi.com/UK/default.aspx" target="_blank">Ubisoft</a>, o <a href="http://rocksmith.ubi.com/rocksmith/en-US/home/" target="_blank">Rocksmith</a>, tenta conciliar os dois mundos. Basicamente, ele é um jogo de videogame feito para te ensinar a tocar músicas com uma guitarra de verdade.</p>
<p>O jogo é bem no estilo de <a href="http://hub.guitarhero.com/" target="_blank">Guitar Hero</a>, mas usando uma guitarra como controle e baseado em uma temática diferente! O jogo não tem um modo de história e nem um personagem bonitinho. A principal interação do jogo é você aprender a tocar novas músicas para poder fazer shows em palcos cada vez mais maneiros! Além disso, existem mini games e exercícios específicos para você aperfeiçoar técnicas para tocar guitarra. Vejam o vídeo do gameplay para sentirem melhor o que ele é:<br />
<center><br />
<media><br />
<iframe width="640" height="360" src="http://www.youtube.com/embed/q2x5APUBfFQ" frameborder="0" allowfullscreen></iframe><br />
</media><br />
</center></p>
<p>O mais interessante do jogo é que ele traz o conceito de <a href="http://en.wikipedia.org/wiki/Gamification" target="_blank">gamificação</a> para o ensino de guitarra. Mas não se limita a só dar achievements para o jogador. O jogo se destaca em dois pontos que estão diretamente associados à questão do feedback, essencial para o aprendizado.</p>
<p>O primeiro ponto é que o feedback é em tempo real! Não sou muito fã do <a href="http://hub.guitarhero.com/" target="_blank">Guitar Hero</a> e um dos motivos é porque não parece que você está tocando a música. Quando você erra, a guitarra simplesmente para de tocar e você não consegue saber o que você fez. No <a href="http://rocksmith.ubi.com/rocksmith/en-US/home/" target="_blank">Rocksmith</a>, você ouve quando está fazendo <del datetime="2011-12-20T13:55:08+00:00">merda</del> algo errado. Ou seja, o jogo não esconde o seu erro e o mostra para você, fazendo com que você sinta o impacto que ele causa.</p>
<p>O outro ponto é que o jogo é inteligente e respeita o tempo de aprendizado do jogador. Não existem opções de pré-configuradas de dificuldade, o clássico trio easy, medium e hard. Então, no <a href="http://rocksmith.ubi.com/rocksmith/en-US/home/" target="_blank">Rocksmith</a>, não é você que deve se adequar à dificuldade, mas sim o contrário &#8211; a complexidade do jogo se encaixa na sua experiência com o instrumento. Ao longo do tempo, a dificuldade das músicas vão aumentando respeitando a sua curva de aprendizado.</p>
<p>Por esses dois pontos, acho que essa abordagem vai além da visão comum de gamificação. Nâo enxergo essa prática como simplesmente dar bônus para o jogador: assim você o trata como um bebê. Colocar a gamificação no ensino não é uma questão de recompensas, mas sim de acompanhamento &#8211; enxergar os passos do aluno e criar um ambiente em que ele possa avançar sem que ele encare isso como uma tarefa.</p>
<p>Se você puder viver essa experiência, vale muito à pena. Ah, cabe dizer também que é muito divertido jogar o multiplayer com 2 guitarras! Compre o jogo, faça o seu show e dê a sua opinião sobre o assunto aqui nos comentários!</p>
<p>PS.: Para saber mais sobre gamificação vale a pena dar uma olhada <a href="http://www.slideshare.net/iMENDE5/game-thinking-9490478" target="_blank">nesses slides</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bernardofontes.net/blog/rocksmith-como-aprender-a-tocar-guitarra-jogando-videogame/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Profile de List Comprehensions Em Python</title>
		<link>http://www.bernardofontes.net/blog/profile-de-list-comprehensions-em-python/</link>
		<comments>http://www.bernardofontes.net/blog/profile-de-list-comprehensions-em-python/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 02:24:06 +0000</pubDate>
		<dc:creator>Bernardo Fontes</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[ppqsp]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.bernardofontes.net/blog/?p=370</guid>
		<description><![CDATA[Em desenvolvimento de software sempre é comum ouvirmos aquela pergunta &#8220;E esse código é performático?&#8221;. Apesar de nem sempre ser o mais importante a se saber, essa pergunta é bem frequente e eu mesmo me peguei com essa indagação com as list comprehensions do Python. Então, resolvi fazer um profile para tirar as minhas dúvidas. [...]]]></description>
			<content:encoded><![CDATA[<p>Em desenvolvimento de software sempre é comum ouvirmos aquela pergunta <em>&#8220;E esse código é performático?&#8221;</em>. Apesar de <strong>nem sempre</strong> ser o mais importante a se saber, essa pergunta é bem frequente e eu mesmo me peguei com essa indagação com as <a href="http://docs.python.org/tutorial/datastructures.html#list-comprehensions">list comprehensions</a> do <a href="http://python.org/">Python</a>. Então, resolvi fazer um profile para tirar as minhas dúvidas.</p>
<p>As dúvidas surgiram durante o curso <a href="http://blog.ramgarlic.com/2011/11/curso-online-python-para-quem-sabe.html">Python Para Quem Sabe Python</a> do <a href="https://twitter.com/#!/luciano">Luciano Ramalho</a>. O curso é excelente e estou vendo vários conceitos mais internos do <a href="http://python.org/">Python</a> em que eu nunca tive a oportunidade de me aprofundar. Durante a primeira aula, foi mostrado a <a href="http://docs.python.org/tutorial/datastructures.html#list-comprehensions">list comprehension</a> e a comparação com um <a href="http://docs.python.org/tutorial/controlflow.html#for-statements">laço for</a> normal focando na legibilidade do código. Depois disso, perguntei sobre a performance e o pessoal deu a ideia implementarmos um <a href="http://en.wikipedia.org/wiki/Profiling_%28computer_programming%29">profile</a> para medirmos essa questão e experimentarmos nós mesmos esse processo.</p>
<p>O <a href="https://twitter.com/#!/joaodubas">João Dubas</a>, que também está no curso, começou com uma abordagem em que me baseei e fiz um fork. Na minha medição, quis comparar alguns cenários, sendo eles:</p>
<ol>
<li>Somente o filter de uma lista;</li>
<li>Somente o map para uma lista;</li>
<li>Filter e map para uma lista;</li>
</ol>
<p>Para cada um desses cenários existiam 3 implementações &#8211; uma com o <a href="http://docs.python.org/tutorial/controlflow.html#for-statements">laço for</a> normal, uma com <a href="http://docs.python.org/tutorial/datastructures.html#list-comprehensions">list comprehension</a> e outra utilizando as funções <a href="http://docs.python.org/library/functions.html#map">map</a> e <a href="http://docs.python.org/library/functions.html#filter">filter</a> do <a href="http://python.org/">Python</a>. A ideia desse post é compartilhar, <strong>sem nenhuma pretensão científica</strong>, os resultados que obtive. Então, segue o output:</p>
<blockquote>
<pre>***** FILTER PROFILING *****
                              fn min        mean       max      
        filter_with_normal_for() 0.35435510 0.35819454 0.36282516
filter_with_list_comprehension() 0.30340981 0.31135285 0.32254100
       filter_with_filter_func() 0.21948600 0.22835863 0.26977205

***** MAP PROFILING *****
                           fn min        mean       max      
        map_with_normal_for() 0.36617208 0.37257178 0.39629292
map_with_list_comprehension() 0.29344010 0.29665232 0.30447888
          map_with_map_func() 0.28689599 0.29024918 0.30203104

***** MAP + FILTER PROFILING *****
                                 fn min        mean       max      
        mapfilter_with_normal_for() 0.46366715 0.47172487 0.48409891
mapfilter_with_list_comprehension() 0.42643499 0.42990112 0.43452096
    mapfilter_with_mapfilter_func() 0.36422396 0.36758418 0.38192511</pre>
</blockquote>
<p>Se os cenários que eu escrevi estiverem corretos e não ter comido nenhuma  mosca com algum detalhe, em todos os cenários as <a href="http://docs.python.org/tutorial/datastructures.html#list-comprehensions">list comprehension</a> se mostraram a segunda melhor solução, perdendo para a utilização das <a href="http://docs.python.org/library/functions.html">funções bultins</a> do <a href="http://python.org/">Python</a>. No segundo cenário,  ela ficou bem próxima da implementação utilizando o <a href="http://docs.python.org/library/functions.html#map">map</a>. Isso dá para <strong>supor</strong> que a diferença de performance ficou a cargo do <a href="http://docs.python.org/library/functions.html#filter">filter</a> e não no <a href="http://docs.python.org/library/functions.html#map">map</a>. Em  todos os casos a solução normal utilizando o <a href="http://docs.python.org/tutorial/controlflow.html#for-statements">laço for</a> é a menos performática.</p>
<p>Como disse, essa medição não teve nenhum pretexto científico e foi apenas uma maneira divertida de fomentar uma discussão muito interessante na lista da turma do <a href="http://blog.ramgarlic.com/2011/11/curso-online-python-para-quem-sabe.html">PPQSP</a> sobre o valor da performance do código em detrimento da sua legibilidade. Eu também sou da escola do <a href="https://twitter.com/#!/luciano">Luciano Ramalho</a> ao gostar das <a href="http://docs.python.org/tutorial/datastructures.html#list-comprehensions">list comprehensions</a> por elas deixarem claras quais as intenções do código. Mas também compreendo que podem existir casos em que esse tipo de preocupação com performance existem, apesar de não achá-los comuns. Portanto, primeiro escrevo o código bonito para depois otimizá-lo se necessário!</p>
<p>O código que eu fiz para fazer essa medição está <a href="https://github.com/berinhard/ppqsp">nesse repositório do Github</a> e você pode executar o script na sua máquina para ver quais os seus resultados executando os comandos abaixo:</p>
<blockquote><p><code>$ wget <a href="https://raw.github.com/berinhard/ppqsp/master/class_0/for_profiler.py" target="_blank">https://raw.github.com/berinhard/ppqsp/master/class_0/for_profiler.py</a><br />
$ python for_profiler.py</code></p></blockquote>
<p>Espero que vocês se divirtam fazendo as medições e sintam-se a vontade para compartilhar os resultados aqui nos comentários!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bernardofontes.net/blog/profile-de-list-comprehensions-em-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agradecimentos do Projeto Final</title>
		<link>http://www.bernardofontes.net/blog/agradecimentos-do-projeto-final/</link>
		<comments>http://www.bernardofontes.net/blog/agradecimentos-do-projeto-final/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 11:40:40 +0000</pubDate>
		<dc:creator>Bernardo Fontes</dc:creator>
				<category><![CDATA[Pessoal]]></category>
		<category><![CDATA[comunidade]]></category>
		<category><![CDATA[dojorio]]></category>
		<category><![CDATA[projeto final]]></category>
		<category><![CDATA[uff]]></category>

		<guid isPermaLink="false">http://www.bernardofontes.net/blog/?p=339</guid>
		<description><![CDATA[Como alguns sabem no início de dezembro vou fazer a defesa do meu projeto final. O nome é Coding Dojo: Novas Possibilidades para o Ensino de Programação e já falei dele aqui quando pedi para o pessoal colaborar com a pesquisa que fiz. Estou terminando de revisá-lo e formatá-lo agora para entregá-lo aos professores. Assim [...]]]></description>
			<content:encoded><![CDATA[<p>Como alguns sabem no início de dezembro vou fazer a defesa do meu projeto final. O nome é <strong>Coding Dojo: Novas Possibilidades para o Ensino de Programação</strong> e já falei <a href="http://www.bernardofontes.net/blog/a-historia-do-dojo-na-uff/" target="_blank">dele aqui</a> quando pedi para o pessoal <a href="http://www.bernardofontes.net/blog/pesquisa-coding-dojo-2/" target="_blank">colaborar com a pesquisa</a> que fiz. Estou terminando de revisá-lo e formatá-lo agora para entregá-lo aos professores. Assim que terminar, vou compartilhar ele com todos aqui neste espaço, mas tem uma parte que eu gostaria de compartilhar desde já.</p>
<p>Para mim aquele papel com palavras impressas ganha valor quando penso nas pessoas e nas histórias que tive com elas e que moldaram quem sou para escrever o que escrevi. Então, sem fazer média, considero a parte dos agradecimentos como a parte mais importante e é exatamente ela que quero compartilhar aqui:</p>
<blockquote><p><strong>Agradecimentos</strong></p>
<p>Gostaria de agradecer:</p>
<p style="text-align: right;">A minha avó, Dona Adélia, por me ajudar durante esses 5</p>
<p style="text-align: right;">morando sozinho me alimentando com os seus deliciosos quitutes congelados;</p>
<p style="text-align: right;">&nbsp;</p>
<p style="text-align: right;">Ao meu pai, Henrique, por ser um exemplo e, acima de tudo, um ídolo para mim;</p>
<p style="text-align: right;">&nbsp;</p>
<p style="text-align: right;">A minha mãe, Marcia, por sempre se preocupar, me aconselhar e</p>
<p style="text-align: right;">me dar tudo o que precisei para me tornar o profissional que sou hoje;</p>
<p style="text-align: right;">&nbsp;</p>
<p style="text-align: right;">Aos meus irmãos, Eduardo e Thiago, pelos anos juntos,</p>
<p style="text-align: right;">históras dividas no apartamento e exemplo de união;</p>
<p style="text-align: right;">&nbsp;</p>
<p style="text-align: right;">A minha namorada, Paula, que ainda que tão longe</p>
<p style="text-align: right;">se manteve perto sempre me ajudando a olhar para frente;</p>
<p style="text-align: right;">&nbsp;</p>
<p style="text-align: right;">A toda a minha família sempre presente na minha vida;</p>
<p style="text-align: right;">&nbsp;</p>
<p style="text-align: right;">Aos amigos da faculdade, especialmente o João Luis e o Gabriel,</p>
<p style="text-align: right;">irmãos para mim, por esses anos em que, juntos, dividimos sucessos e fracassos;</p>
<p style="text-align: right;">&nbsp;</p>
<p style="text-align: right;">Aos amigos de Friburgo, especialmente o Wanderson, o Fernando e</p>
<p style="text-align: right;">o Luis Felipe, por todas histórias que tivemos</p>
<p style="text-align: right;">e por, mesmo depois de sair da cidade, continuarmos juntos;</p>
<p style="text-align: right;">&nbsp;</p>
<p style="text-align: right;">Aos amigos Flávio, Thiago, Henrique e Luciano, companheiros</p>
<p style="text-align: right;">na Dekode e que deram a motivação final para esse projeto;</p>
<p style="text-align: right;">&nbsp;</p>
<p style="text-align: right;">Aos novos amigos Gerardo, Elias, João Felipe e Luisão, que acolheram</p>
<p style="text-align: right;">o Coding Dojo da UFF e hoje seguem com ele;</p>
<p style="text-align: right;">&nbsp;</p>
<p style="text-align: right;">A todas as pessoas que já participaram do Coding Dojo da UFF,</p>
<p style="text-align: right;">este que por várias vezes enxerguei como um filho;</p>
<p style="text-align: right;">&nbsp;</p>
<p style="text-align: right;">A todos os que já estiveram no Pós-Dojo da UFF pelas</p>
<p style="text-align: right;">excelentes conversas e noites divertidas;</p>
<p style="text-align: right;">&nbsp;</p>
<p style="text-align: right;">As comunidades do Rio de Janeiro e, principalmente,</p>
<p style="text-align: right;">à DojoRio porque se não fossem vocês nada do que escrevi existiria;</p>
<p style="text-align: right;">&nbsp;</p>
<p style="text-align: right;">Por último, ao Álvaro, ao Henrique e ao Vinícius. Obrigado pelas pílulas vermelhas.</p>
<p style="text-align: right;">&nbsp;</p>
</blockquote>
<p style="text-align: left;">Novamente, muito obrigado à todos!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bernardofontes.net/blog/agradecimentos-do-projeto-final/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Apresentando o django-testtools</title>
		<link>http://www.bernardofontes.net/blog/apresentando-o-django-testtools/</link>
		<comments>http://www.bernardofontes.net/blog/apresentando-o-django-testtools/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 15:54:59 +0000</pubDate>
		<dc:creator>Bernardo Fontes</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[pythonbrasil]]></category>
		<category><![CDATA[testes]]></category>

		<guid isPermaLink="false">http://www.bernardofontes.net/blog/?p=340</guid>
		<description><![CDATA[Na PythonBrasil[7] apresentei a palestra Testando Aplicações Django: Quando, Como e Onde?. Após a palestra, me comprometi a compartilhar mais as minhas visões sobre testes e os códigos que venho utilizado para me auxilar. Então, para dar início, quero compartilhar com vocês o django-testtools. O django-testtols é uma pequena biblioteca Python que criamos na Dekode [...]]]></description>
			<content:encoded><![CDATA[<p>Na <a href="http://www.pythonbrasil.org.br/">PythonBrasil[7]</a> apresentei a palestra <a href="http://www.slideshare.net/bernardofontes/testando-aplicaes-django-quando-como-e-onde">Testando Aplicações Django: Quando, Como e Onde?</a>. Após a palestra, me comprometi a compartilhar mais as minhas visões sobre testes e os códigos que venho utilizado para me auxilar. Então, para dar início, quero compartilhar com vocês o <a href="https://github.com/dekode/django-testtools">django-testtools</a>.</p>
<p>O <a href="https://github.com/dekode/django-testtools">django-testtols</a> é uma pequena biblioteca <a href="http://www.python.org/">Python</a> que criamos na <a href="http://dekode.com.br">Dekode</a> com o intuito de extender a própria <a href="https://docs.djangoproject.com/en/dev/topics/testing/#testing-tools">infraestrutura de testes do Django</a> respeitando o seu design original. </p>
<p>Nas listas que participo, este assunto ainda não é levantado com muita frequência. A intenção de divulgar este projeto é promover a discussão e troca de experiências sobre testes de aplicações <a href="https://www.djangoproject.com/">Django</a> na comunidade. Assim poderemos documentar estratégias e reaproveitar os códigos com o que formos aprendendo.</p>
<p>O fato do <a href="https://github.com/dekode/django-testtools">django-testtools</a> respeitar a estrutura e a maneira de se escrever testes no <a href="https://www.djangoproject.com/">Django</a> e ser apenas uma extensão também são fatores importantes para poder guiar a discussão. Gostaria de discutir mais os significados, organização, intenção e valor dos testes do que frameworks e <a href="http://en.wikipedia.org/wiki/Domain-specific_language">DSLs</a> que não respeitam a <a href="http://pt.wikipedia.org/wiki/Verdade_dos_materiais">verdade material</a> da linguagem. Acredito que o <a href="http://docs.python.org/library/unittest.html">unittest</a> e o <a href="https://www.djangoproject.com/">Django</a> já fornecem ferramentas úteis para escrevermos testes e desenvolvermos respeitando o <a href="http://improveit.com.br/xp/praticas/tdd">TDD</a>. Então, o principal a ser discutido é como fazê-lo de uma maneira sustentável.</p>
<p>Vou continuar a abordar o tema nesse espaço e gostaria de ouvir o que você pensa sobre o assunto. Para ficar por dentro das nossas próximas publicações, mantenha contato pelo <a href="http://github.com/dekode">Github</a>, <a href="http://twitter.com/dekodehq">Twitter</a> ou <a href="https://www.facebook.com/pages/Dekode/147625925327941">Facebook</a>.</p>
<p>Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bernardofontes.net/blog/apresentando-o-django-testtools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Participe da PythonBrasil[7] &#8211; O 7º Encontro Brasileiro da Comunidade Python</title>
		<link>http://www.bernardofontes.net/blog/participe-da-pythonbrasil7-o-7%c2%ba-encontro-brasileiro-da-comunidade-python/</link>
		<comments>http://www.bernardofontes.net/blog/participe-da-pythonbrasil7-o-7%c2%ba-encontro-brasileiro-da-comunidade-python/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 04:34:21 +0000</pubDate>
		<dc:creator>Bernardo Fontes</dc:creator>
				<category><![CDATA[Comunidade]]></category>
		<category><![CDATA[comunidade]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[palestras]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[pythonbrasil]]></category>

		<guid isPermaLink="false">http://www.bernardofontes.net/blog/?p=334</guid>
		<description><![CDATA[Daqui a exatas duas semanas acontecerá a PythonBrasil[7]! Esse ano o evento será em São Paulo e promete ser muito bom. Com mais de 80 palestras, treinamentos, sprints de desenvolvimento projetos Python, Open Spaces e Lightning Talks, o evento vai estar recheado de muita informação sobre desenvolvimento, sobre a comunidade e sobre o mundo do [...]]]></description>
			<content:encoded><![CDATA[<p>Daqui a exatas duas semanas acontecerá a <a href="http://www.pythonbrasil.org.br/2011">PythonBrasil[7]</a>! Esse ano o evento será em São Paulo e promete ser muito bom. Com mais de 80 palestras, treinamentos, sprints de desenvolvimento projetos <a href="http://www.python.org">Python</a>, Open Spaces e Lightning Talks, o evento vai estar recheado de muita informação sobre desenvolvimento, sobre a comunidade e sobre o mundo do <a href="http://www.python.org">Python</a>.</p>
<p>Este ano, o evento contará com algumas presenças internacionais de peso no mundo <a href="http://www.python.org">Python</a> como <a href="http://www.zope.com/about_us/management/james_fulton.html">Jim Fulton</a>, <a href="http://holdenweb.blogspot.com/">Steve Holden</a>, <a href="http://plone.org/author/runyaga">Alan Runyan</a> e muitos outros. Além desses também teremos importantes nomes do cenário nacional participando do evento com palestras e treinamentos.</p>
<p><center></p>
<div>
<a href="http://www.pythonbrasil.org.br/" title="PythonBrasil[7]"><br />
<img src="http://www.python.org.br/banners-pythonbrasil/pythonbrasil7-fullbanner.gif" alt="PythonBrasil[7]" /><br />
</a>
</div>
<p></center></p>
<p>Participei da <a href="http://old.pythonbrasil.org.br/2010">PythonBrasil[6]</a> no ano passado, em Curitiba, e posso dizer que foi uma excelente experiência. Estar em contato com pessoas que vivem <a href="http://www.python.org">Python</a> seja no trabalho ou seja pelo prazer de programar na linguagem que ama resulta em uma grande troca de conhecimento e você pode sair aprendendo muito. Seja você um ninja na linguagem ou apenas um iniciante.</p>
<p>Para finalizar, este ano, além de participar como ouvinte, tive a honra de ter uma submissão palestra aceita. Na palestra <a href="http://www.pythonbrasil.org.br/2011/programacao/grade-do-evento/django/testando-aplicacoes-django-quando-como-e-onde">&#8220;Testando Aplicações Django: Quando, Como e Onde&#8221;</a>, pretendo abordar alguns padrões de escrita de código de teste que aprendi durante meu início no mundo Django na <a href="http://www.myfreecomm.com.br">Myfreecomm</a> e torna-se mais sólido agora trabalhando na <a href="http://www.dekode.com.br">Dekode</a>. Além disso, também pretendo falar de algumas ferramentas e processos que podem ajudar na escrita dos seus testes.</p>
<p>Então não perca tempo e <a href="http://www.pythonbrasil.org.br/2011/inscricoes">inscreva-se logo no evento</a>! Nos vemos lá!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bernardofontes.net/blog/participe-da-pythonbrasil7-o-7%c2%ba-encontro-brasileiro-da-comunidade-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apresentando o mongoengine_fuel</title>
		<link>http://www.bernardofontes.net/blog/apresentando-o-mongoengine_fuel/</link>
		<comments>http://www.bernardofontes.net/blog/apresentando-o-mongoengine_fuel/#comments</comments>
		<pubDate>Mon, 30 May 2011 13:49:19 +0000</pubDate>
		<dc:creator>Bernardo Fontes</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[mongoengine]]></category>
		<category><![CDATA[mongoengine_fuel]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[testes]]></category>

		<guid isPermaLink="false">http://www.bernardofontes.net/blog/?p=318</guid>
		<description><![CDATA[Gostaria de apresentar para vocês o meu projeto chamado mongoengine_fuel. Ele é uma ferramenta para criar instâncias de documentos do MongoDB (um banco de dados não relacional) que foram descritos utilizando-se um ORM chamado mongoengine. Esse projeto é fruto de necessidades para agilizar a escrita de testes no projeto que estou trabalhando na Myfreecomm que [...]]]></description>
			<content:encoded><![CDATA[<p>Gostaria de apresentar para vocês o meu projeto chamado <a href="http://pypi.python.org/pypi/mongoengine_fuel/1.0">mongoengine_fuel</a>. Ele é uma ferramenta para criar instâncias de documentos do <a href="http://www.mongodb.org/">MongoDB</a> (um <a href="http://pt.wikipedia.org/wiki/NoSQL">banco de dados não relacional</a>) que foram descritos utilizando-se um <a href="http://en.wikipedia.org/wiki/Object-relational_mapping">ORM</a> chamado <a href="http://mongoengine.org/">mongoengine</a>. Esse projeto é fruto de necessidades para agilizar a escrita de testes no projeto que estou trabalhando na <a href="http://www.myfreecomm.com.br/">Myfreecomm</a> que faz uso do <a href="http://mongoengine.org/">mongoengine</a>. Ele é extremamente baseado no <a href="https://github.com/vandersonmota/model_mommy/">model_mommy</a>, uma ferramenta de mesmo propósito que o <a href="http://pypi.python.org/pypi/mongoengine_fuel/1.0">mongoengine_fuel</a> mas voltado para o <a href="https://www.djangoproject.com/">Django</a>. O código está <a href="https://github.com/berinhard/mongoengine_fuel">nesse repositório do Github</a> e, obviamente, todos estão convidados a contribuir no seu crescimento. Por hora, vou só colocar <a href="https://gist.github.com/998903">esse gist</a> mostrando como é o funcionamento básico do <a href="http://pypi.python.org/pypi/mongoengine_fuel/1.0">mongoengine_fuel</a>:</p>
<p><media><script src="https://gist.github.com/998903.js?file=mongoengine_fuel_usage.py"></script></media></p>
<p>Vale dizer que o <a href="http://pypi.python.org/pypi/mongoengine_fuel/1.0">mongoengine_fuel</a> já suporta alguns dos principais campos que o <a href="http://mongoengine.org/">mongoengine</a> te permite usar. Ainda não estão todos os campos pois eu defini um limite básico para lançá-lo que de era atender as necessidades do meu projeto na <a href="http://www.myfreecomm.com.br/">Myfreecomm</a>. Como os campos que implementei já combrem os campos utilizados, coloquei no ar.</p>
<p>Espero que vocês tenham gostado e aguardo críticas e sugestões. Como esse foi o meu primeiro projeto de código aberto, aprendi muito com essa experiência e tive que vencer uma série de medos pessoais para conseguir colocar o código no ar. Não cabe nesse post falar sobre isso, já que o foco dele é apresentar a ferramenta. Mas, em breve, farei um post para compartilhar com vocês as experiências e impressões que pude tirar desse processo.</p>
<p>Entretanto, não posso deixar de agradecer ao meu amigo <a href="https://github.com/vandersonmota">Vanderson Mota</a> pelo incentivo e apoio que me deu ao longo do desenvolvimento do <a href="http://pypi.python.org/pypi/mongoengine_fuel/1.0">mongoengine_fuel</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bernardofontes.net/blog/apresentando-o-mongoengine_fuel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testando Emissão de Signals no Django</title>
		<link>http://www.bernardofontes.net/blog/testando-emissao-de-signals-no-django/</link>
		<comments>http://www.bernardofontes.net/blog/testando-emissao-de-signals-no-django/#comments</comments>
		<pubDate>Fri, 06 May 2011 13:30:10 +0000</pubDate>
		<dc:creator>Bernardo Fontes</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[testes]]></category>

		<guid isPermaLink="false">http://www.bernardofontes.net/blog/?p=310</guid>
		<description><![CDATA[Utilizar os signals do Django é uma prática que eu gosto bastante. Ela tem os seus prós e contras, eu sei, mas para desenvolver apps plugáveis ele é bastante útil. Mas recentemente enfrentei um problema para testar a emissão dos sinais exatamente de uma app que tem a premissa de ser plugável. O cenário era [...]]]></description>
			<content:encoded><![CDATA[<p>Utilizar os <a href="http://docs.djangoproject.com/en/dev/ref/signals/">signals do Django</a> é uma prática que eu gosto bastante. Ela tem os seus prós e contras, eu sei, mas para desenvolver <a href="http://www.slideshare.net/nowells/djangocon-09-presentation-pluggable-applications">apps plugáveis</a> ele é bastante útil. Mas recentemente enfrentei um problema para testar a emissão dos sinais exatamente de uma app que tem a premissa de ser plugável.</p>
<p>O cenário era o seguinte. A app emissora possui uma lógica interna <a href="http://docs.djangoproject.com/en/dev/topics/signals/#defining-and-sending-signals">disparar quatro sinais</a>, cada um referente a avaliação resultante. Assim, os que consomem essa app, <a href="http://docs.djangoproject.com/en/dev/topics/signals/#listening-to-signals">podem se conectar apenas aos sinais</a> que representem casos relevantes para eles. Poderia ter feito tudo em um único sinal, mas o problema dessa abordagem é que estaríamos jogando a lógica interna dessa primeira app para todas consumidores e tornando-os responsáveis por lidar com ela.</p>
<p>Como a <a href="http://docs.djangoproject.com/en/dev/topics/signals/#defining-and-sending-signals">emissão</a> e a <a href="http://docs.djangoproject.com/en/dev/topics/signals/#listening-to-signals">recepção</a> do são sinal duas coisas diferentes e inclusive em apps diferentes, resolvi separar os testes nessas duas áreas também. Na app emissora do signal criei um <a href="http://docs.djangoproject.com/en/dev/topics/testing/">TestCase</a> para ser responsável somente por validar a lógica de emissão do signal que está dentro de uma <a href="http://docs.djangoproject.com/en/dev/topics/http/views/">view</a>. Esse foi o primeiro passo e não tive problema nenhum com ele. O problema veio na hora de testar e criar o código para os receptores do sinal.</p>
<p>Ao conectar os receptores da app consumidora aos seus respectivos sinais, sempre que eu rodava os testes da app que disparava os sinais eles falhavam porque essas funções receptoras, como estavam conectadas, eram executadas sem ter as <a href="http://docs.djangoproject.com/en/dev/topics/testing/#fixture-loading">fixtures do modelo</a> que elas consomem carregadas. Então, o problema era rodar os testes de emissão dos sinais de maneira desacoplada, ou seja, fazer com que os sinais ignorassem as suas conexões.</p>
<p>Então, o que eu fiz foi dar uma olhada no <a href="https://github.com/django/django/blob/master/django/dispatch/dispatcher.py">código do Django para entender o funcionamento dos sinais</a>. Basicamente, um sinal mantém uma lista de receivers que são referências para as conexões ao sinal. A cada nova conexão, ele atualiza essa lista e, <a href="http://docs.djangoproject.com/en/dev/topics/signals/#sending-signals">ao chamar o send</a>, ele vai executando as funções que estão nesses receivers. Então a abordagem que eu tomei foi criar um <a href="http://www.voidspace.org.uk/python/articles/unittest2.shtml#setupclass-and-teardownclass">setUpClass e tearDownClass</a> no TestCase. Assim, no <a href="http://www.voidspace.org.uk/python/articles/unittest2.shtml#setupclass-and-teardownclass">setUpClass</a> eu salvo a lista de receivers do sinal e seto uma lista vazia no lugar e, no <a href="http://www.voidspace.org.uk/python/articles/unittest2.shtml#setupclass-and-teardownclass">tearDownClass</a>, eu recupero essa lista setando o receivers do sinal corretamente. Esse <a href="https://gist.github.com/958910#file_django_test_signal.py">gist do Github</a> mostra o funcionamento:</p>
<p><media><script src="https://gist.github.com/958910.js?file=django_test_signal.py"></script></media></p>
<p>Não sei se é a solução ideal, mas consegui resolver tranquilamente o meu problema. Entendo que testar sinais envolve testar o fluxo inteiro, entretanto, fazer isso com duas apps separadas iria me gerar acoplamento entre os testes e, além disso, para o teste da app consumidora, eu teria que ter conhecimento do funcionamento interno da app emissora do sinal para saber quem chamar e como chamar para disparar o sinal desejado. Portanto, acho essa solução bem viável.</p>
<p>Vale dizer que os <a href="http://www.voidspace.org.uk/python/articles/unittest2.shtml#setupclass-and-teardownclass">classmethods de setUpClass e tearDownClass</a> estão disponíveis apenas no <a href="http://www.voidspace.org.uk/python/articles/unittest2.shtml">unittest2</a> que o <a href="http://docs.djangoproject.com/en/dev/releases/1.3/#unittest2-support">Django só incorporou a partir do Django 1.3</a>. Portanto, se você usa o Django 1.2 ou menor, você precisar usar o TestCase do <a href="http://www.voidspace.org.uk/python/articles/unittest2.shtml">unittest2</a> para conseguir usar esses classmethods.</p>
<p>Resolvi fazer esse post depois te ter pesquisado na web e não achar nada, a não ser <a href="http://groups.google.com/group/django-users/browse_thread/thread/91aa0e47242682a9/78db241ab0a5e011?lnk=raot">dessa thread</a> do <a href="http://www.meiocodigo.com/">Vinicius Mendes</a> não respondida no <a href="http://groups.google.com/group/django-users">django-users</a>.</p>
<p>Até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bernardofontes.net/blog/testando-emissao-de-signals-no-django/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Pesquisa Coding Dojo</title>
		<link>http://www.bernardofontes.net/blog/pesquisa-coding-dojo-2/</link>
		<comments>http://www.bernardofontes.net/blog/pesquisa-coding-dojo-2/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 17:58:05 +0000</pubDate>
		<dc:creator>Bernardo Fontes</dc:creator>
				<category><![CDATA[Comunidade]]></category>
		<category><![CDATA[Ensino]]></category>
		<category><![CDATA[comunidade]]></category>
		<category><![CDATA[dojorio]]></category>
		<category><![CDATA[ensino]]></category>
		<category><![CDATA[uff]]></category>

		<guid isPermaLink="false">http://www.bernardofontes.net/blog/?p=304</guid>
		<description><![CDATA[Como eu disse no post sobre a história do Dojo na UFF, eu estou fazendo um Projeto Final sobre o Coding Dojo. Para alimentá-lo de informação, resolvi criar uma pesquisa simples sobre o que as pessoas acham do Coding Dojo como ferramenta de ensino e integração social levando em conta a participação em comunidades de [...]]]></description>
			<content:encoded><![CDATA[<p>Como eu disse no <a href="http://www.bernardofontes.net/blog/a-historia-do-dojo-na-uff/">post sobre a história do Dojo na UFF</a>, eu estou fazendo um Projeto Final sobre o Coding Dojo. Para alimentá-lo de informação, resolvi criar uma pesquisa simples sobre o que as pessoas acham do Coding Dojo como ferramenta de ensino e integração social levando em conta a participação em comunidades de desenvolvimento. Gostaria da colaboração e contribuição de vocês para a responder esse questionário que está bem pequeno. Segue o link:</p>
<p><a href="https://spreadsheets.google.com/viewform?hl=pt_BR&#038;formkey=dEk3WUtGdlA2Q3hraXZiWFhKYXJ5b2c6MQ#gid=0">https://spreadsheets.google.com/viewform?hl=pt_BR&#038;formkey=dEk3WUtGdlA2Q3hraXZiWFhKYXJ5b2c6MQ#gid=0</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bernardofontes.net/blog/pesquisa-coding-dojo-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Computação Forense na UFF</title>
		<link>http://www.bernardofontes.net/blog/computacao-forense-na-uff/</link>
		<comments>http://www.bernardofontes.net/blog/computacao-forense-na-uff/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 12:29:23 +0000</pubDate>
		<dc:creator>Bernardo Fontes</dc:creator>
				<category><![CDATA[Ensino]]></category>
		<category><![CDATA[computação forense]]></category>
		<category><![CDATA[comunidade]]></category>
		<category><![CDATA[ensino]]></category>
		<category><![CDATA[uff]]></category>

		<guid isPermaLink="false">http://www.bernardofontes.net/blog/?p=279</guid>
		<description><![CDATA[A história recente dos alunos Ciência da Computação na UFF vem mostrando um grande levante por parte destes com foco em fazer e aprender sem esperar que a universidade tome a iniciativa. Fatos como a retomada da InfoMarka, empresa júnior da Computação, e a história do Dojo na UFF, mostram como os alunos estão engajados [...]]]></description>
			<content:encoded><![CDATA[<p>A história recente dos alunos Ciência da Computação na UFF vem mostrando um grande levante por parte destes com foco em fazer e aprender sem esperar que a universidade tome a iniciativa. Fatos como <a href="http://www.bernardofontes.net/blog/93/">a retomada da InfoMarka</a>, empresa júnior da Computação, e <a href="http://www.bernardofontes.net/blog/a-historia-do-dojo-na-uff/">a história do Dojo na UFF</a>, mostram como os alunos estão engajados em empreender no meio acadêmico.</p>
<p>No último pós-dojo, descobri mas uma dessas iniciativas. Dois alunos do curso, a <a href="http://twitter.com/#!/carolzamith">Carol Zamith</a> e o Rafael Toscano, sempre se interessaram sobre segurança da informação. Entretanto, essa é uma área que <del datetime="2011-04-17T14:41:36+00:00">não é abordada</del> é muito pouco abordada pela universidade. Insatisfeitos com isso, eles resolveram montar um grupo de estudos em <a href="http://pt.wikipedia.org/wiki/Computa%C3%A7%C3%A3o_forense">Computação Forense</a> para satisfazer a demanda.</p>
<p>O curioso é que o grupo já existe há 6 meses! Eles possuem <a href="http://ufforense.wordpress.com/">um blog</a> onde colocam notícias sobre os temas abordados na reunião, temas sobre o domínio e discussões que podem surgir. O link é <a href="http://ufforense.wordpress.com/">esse aqui</a> e vale muito a pena conferir o que a galera vem fazendo de perto. Lembrando, esse é um evento aberto a toda comunidade e, se você quer participar, é só para aparecer na sala do <strong>Dojo na UFF (230-B)</strong> no <strong>Bloco D</strong> do <strong>Campus da Praia Vermelha</strong>. Os encontros rolam sempre nas <strong>sextas-feiras</strong> e começam sempre às <strong>14:00</strong>  e vão até a galera ficar esgotada.</p>
<p>Se eu bem conheço essa galera e, pelo que já venho ouvindo das ideias megalomaníacas do <a href="http://www.othiago.com/">Thiago Garcia</a>, esse é apenas o começo de mais um movimento a favor da explanação do conhecimento na UFF. Aguardem, porque ainda mais está por vir dessa galera extremamente enérgica!</p>
<p>PS.: Vale a pena dar uma olhada no <a href="http://www.othiago.com/2011/04/quer-mudar-de-vida-pergunte-me-como.html">post do Thiago</a> falando sobre a experiência dele com o Dojo e como este modificou a sua vida.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bernardofontes.net/blog/computacao-forense-na-uff/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Walking Line no Vim</title>
		<link>http://www.bernardofontes.net/blog/walking-line-no-vim/</link>
		<comments>http://www.bernardofontes.net/blog/walking-line-no-vim/#comments</comments>
		<pubDate>Wed, 13 Apr 2011 12:39:30 +0000</pubDate>
		<dc:creator>Bernardo Fontes</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://www.bernardofontes.net/blog/?p=275</guid>
		<description><![CDATA[Faz um tempo atrás e eu adaptei um plugin que achei na internet para o Vim cuja ideia é facilitar o uso do debugger do do Python. O que o plugin faz é mapear teclas para inserir ou remover uma linha que importa o módulo de debug do Python e cria um tracepoint. Criei o [...]]]></description>
			<content:encoded><![CDATA[<p>Faz um tempo atrás e eu <a href="http://www.bernardofontes.net/blog/ipython-debugger-no-vim/">adaptei um plugin que achei na internet para o Vim cuja ideia é facilitar o uso do debugger do do Python</a>. O que o plugin faz é mapear teclas para inserir ou remover uma linha que importa o módulo de debug do <a href="http://www.python.org">Python</a> e cria um tracepoint. Criei o plugin utilizando um <a href="http://vimdoc.sourceforge.net/htmldoc/if_pyth.html">módulo Python que se comunica com o Vim</a>.</p>
<p>Gostei da experiência e, em um dia de <a href="http://dojorio.org">Dojo</a>, vi no <a href="http://projects.gnome.org/gedit/">Gedit</a> do <a href="http://twitter.com/#!/joaofelipenp">João Felipe</a> um atalhozinho que ele desenvolveu em que ele andava com uma linha para cima e para baixo com as setas do teclado. Ou seja, ele não precisava ficar copiando e colando a linha onde quisesse. Agora, basta ele andar com a linha até a posição que ele quer. Questionado se o <a href="http://www.vim.org/">Vim</a> podia fazer isso, eu prontamente disse: &#8220;Claro!&#8221;. Assim, como eu disse que ele tinha esse poder, eu tinha que validar isso de alguma maneira. Questão de honra, né?</p>
<p>Pesquisei no <a href="http://google.com">Google</a> <del datetime="2011-04-13T12:18:18+00:00">por muito pouco tempo, porque eu queria mesmo é desenvolver,</del> e não achei nada que fizesse isso. Então pensei em fazer usando <a href="http://www.python.org">Python</a> e <a href="http://vimdoc.sourceforge.net/htmldoc/if_pyth.html">o mesmo módulo</a> que eu já havia feito para criar o do debugger. Fiz e coloquei <a href="https://gist.github.com/917440">nesse Gist do Github</a>:</p>
<p><media><script src="https://gist.github.com/917440.js?file=line_walker"></script></media></p>
<p>O código não está dos melhores, confesso, mas foi interessante porque achei que seria algo simples e, quando dei por mim, estava com um papel na mão para controlar os índices de maneira correta e não deixar estourar o buffer do <a href="http://www.vim.org/">Vim</a>.</p>
<p>O código atual funciona para apenas uma linha. Nesses dias, descobri que o do <a href="http://projects.gnome.org/gedit/">Gedit</a> funciona para múltiplas linhas, então agora a ideia e expandir esse cara, o que que não sei se é possível usando <a href="http://vimdoc.sourceforge.net/htmldoc/if_pyth.html">esse módulo</a> e <a href="http://www.python.org">Python</a> porque não olhei a documentação toda ainda. Acho que tem que ser no código do <a href="http://www.vim.org/">Vim</a> mesmo. Mas, a ideia é a de aceitar que, no modo visual com seleção de linhas, ele mova todas as linhas selecionadas. Quem quiser, obviamente, pode colaborar e ajudar para fazer isso.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bernardofontes.net/blog/walking-line-no-vim/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

