<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Francisco Souza]]></title>
  <link href="http://www.franciscosouza.com.br/atom.xml" rel="self"/>
  <link href="http://www.franciscosouza.com.br/"/>
  <updated>2012-07-10T22:15:55-03:00</updated>
  <id>http://www.franciscosouza.com.br/</id>
  <author>
    <name><![CDATA[Francisco Souza]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Como foi a #qconsp 2011?]]></title>
    <link href="http://www.franciscosouza.com.br/2011/09/13/como-foi-a-qconsp-2011/"/>
    <updated>2011-09-13T20:13:17-03:00</updated>
    <id>http://www.franciscosouza.com.br/2011/09/13/como-foi-a-qconsp-2011</id>
    <content type="html"><![CDATA[<p>Rolou no último final de semana a segunda edição do <a title="QCONSP" href="http://www.qconsp.com" target="_blank">QCONSP</a>, principal evento de arquitetos e desenvolvedores do Brasil. O evento é organizado pela <a title="InfoQ BR" href="http://www.infoqbr.com" target="_blank">InfoQ Brasil</a> em parceria com a <a title="Caelum" href="http://www.caelum.com.br" target="_blank">Caelum</a>.</p>

<p>O evento foi realmente muito bom, com um nível técnico praticamente inquestionável. A organização também é incrível. A forma como a Caelum coleta feedback deveria ser um exemplo para todo mundo, sem falar na comida em abundância :) Pena ter faltado um pouco de tomadas e alguns problemas com a rede wifi (é, fazer rede wireless pra 850 pessoas não é fácil&#8230;), mas o evento foi realmente muito bom.<!--more--></p>

<p>No domingo apresentei, junto ao <a title="Andrews Medina" href="http://www.andrewsmedina.com" target="_blank">Andrews Medina</a>, a palestra <a title="Os complicados testes de interfaces e componentes web" href="http://www.qconsp.com/palestra/andrews-medina/os-complicados-testes-de-interfaces-e-componentes-web" target="_blank">Os complicados testes de interfaces e componentes web</a>. Na palestra, apresentamos um breve histórico e alguns conceitos envolvidos com os testes de interfaces e componentes ricos. Mostramos algumas características do <a title="QUnit" href="http://docs.jquery.com/Qunit" target="_blank">QUnit</a>, <a title="Jasmine" href="http://pivotal.github.com/jasmine/" target="_blank">Jasmine</a>, <a title="jasmine-splinter-runner" href="https://github.com/cobrateam/jasmine-splinter-runner" target="_blank">jasmine-splinter-runner</a>, <a title="Splinter" href="http://splinter.cobrateam.info" target="_blank">Splinter</a>, <a title="Selenium" href="http://seleniumhq.org" target="_blank">Selenium</a>, <a title="Sikuli" href="http://sikuli.org/" target="_blank">Sikuli</a>, dentre outras ferramentas. Incluímos ainda alguns exemplos com código ao vivo com o Jasmine, Splinter e Sikuli.</p>

<p>Os slides estão aqui:</p>

<div id="__ss_9215230" style="width: 100%; text-align: center;"><strong style="display: block; margin: 12px 0 4px;"><a title="Os complicados testes de interface" href="http://www.slideshare.net/franciscosouza/os-complicados-testes-de-interface" target="_blank">Os complicados testes de interface</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9215230" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"></iframe></div>


<p>&nbsp;</p>

<p>E os códigos que apresentamos estão no Github: <a title="Exemplos de código da palestra na QConSP 2011" href="https://github.com/fsouza/palestra-qconsp-2011" target="_blank">https://github.com/fsouza/palestra-qconsp-2011</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[QConSP 2011: eu vou, e vou palestrar!]]></title>
    <link href="http://www.franciscosouza.com.br/2011/07/11/qconsp-2011-eu-vou-e-vou-palestrar/"/>
    <updated>2011-07-11T19:00:24-03:00</updated>
    <id>http://www.franciscosouza.com.br/2011/07/11/qconsp-2011-eu-vou-e-vou-palestrar</id>
    <content type="html"><![CDATA[<p>Em Setembro vai rolar a segunda edição da QConSP, versão brasileira do <a title="QCon" href="http://qconferences.com/" rel="nofollow" target="_blank">principal evento de arquitetos e desenvolvedores do mundo</a>. O evento é organizado pelo <a title="InfoQ Brasil" href="http://infoq.com/br/" rel="nofollow" target="_blank">InfoQ Brasil</a> em parceria com a <a title="Caelum" href="http://www.caelum.com.br" rel="nofollow" target="_blank">Caelum</a>. No <a title="Como foi a QConSP 2010?" href="http://blog.caelum.com.br/qconsp-2010-como-foi-o-principal-evento-de-arquitetos-e-desenvolvedores-no-brasil/" rel="nofollow" target="_blank">ano passado o evento bombou</a>, e tenho certeza que este ano não será diferente.</p>

<p>Marcarei presença apresentando, junto ao <a title="Andrews Medina" href="http://www.andrewsmedina.com" rel="nofollow" target="_blank">Andrews Medina</a>, a palestra <a title="Os complicados testes de interfaces e componentes web" href="http://www.qconsp.com/palestra/andrews-medina/os-complicados-testes-de-interfaces-e-componentes-web" rel="nofollow" target="_blank">&#8220;Os complicados testes de interfaces e componentes web&#8221;</a>, na trilha <a title="QConSP 2011 | O browser como plataforma" href="http://www.qconsp.com/track/browser" rel="nofollow" target="_blank">&#8220;O browser como plataforma&#8221;</a>. Na palestra, apresentaremos algumas técnicas para testar interfaces web, seja de forma integrada ou de forma unitária (componentes isolados), usando ferramentas como <a title="Splinter" href="http://splinter.cobrateam.info" target="_blank">Splinter</a> e <a title="Jasmine" href="http://pivotal.github.com/jasmine/" rel="nofollow" target="_blank">Jasmine</a>.</p>

<p>Além da nossa palestra, o evento também contará com apresentações de feras como <a title="Guilherme Silveira" href="http://www.qconsp.com/palestrante/guilherme-silveira" rel="nofollow" target="_blank">Guilherme Silveira</a>, <a title="Jim Webber" href="http://www.qconsp.com/palestrante/jim-webber" rel="nofollow" target="_blank">Jim Webber</a>, <a title="Evan Weaver" href="http://www.qconsp.com/palestrante/evan-weaver" rel="nofollow" target="_blank">Evan Weaver</a> e <a title="Palestrantes da QConSP 2011" href="http://www.qconsp.com/palestrantes" rel="nofollow" target="_blank">outros</a>. A QConSP 2011 vai acontecer nos dias 10 e 11 de Setembro, no Centro Fecomercio de Eventos, em São Paulo. Ainda da tempo de se <a title="Inscrições na QConSP 2011" href="http://www.qconsp.com/inscricoes" rel="nofollow" target="_blank">inscrever</a>!</p>

<p>Nos vemos lá! :)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FISL 12: eu fui, e foi foda!]]></title>
    <link href="http://www.franciscosouza.com.br/2011/07/04/fisl-12-eu-fui-e-foi-foda/"/>
    <updated>2011-07-04T20:51:37-03:00</updated>
    <id>http://www.franciscosouza.com.br/2011/07/04/fisl-12-eu-fui-e-foi-foda</id>
    <content type="html"><![CDATA[<p>Certa vez li em algum lugar que o primeiro FISL nunca se esquece, e começo a acredita que seja verdade. Além da agradável temperatura abaixo de 10 graus em Porto Alegre, o evento foi uma oportunidade incrível de conhecer algumas figurinhas da comunidade e muito aprendizado.</p>

<p>Participei apenas de dois dias do evento. Na sexta-feira, apresentei junto com o <a title="Andrews Medina" href="http://www.andrewsmedina.com" target="_blank">Andrews Medina</a> a palestra <a title="Testando interfaces web com Splinter" href="http://www.slideshare.net/franciscosouza/testando-interfaces-web-com-splinter-8481476" target="_blank">&#8220;Testando interfaces web com Splinter&#8221;</a> e gastei um tempinho no stand da <a title="Globo.com" href="http://globo.com" target="_blank">Globo.com</a>, onde também apresentei o <a title="django-htmlmin" href="https://github.com/cobrateam/django-htmlmin" target="_blank">django-htmlmin</a>, na sessão de lighting talks da comunidade <a title="Python Brasil" href="http://www.python.org.br" target="_blank">Python Brasil</a> (<a title="django-htmlmin" href="http://www.slideshare.net/franciscosouza/djangohtmlmin-reduzindo-tamanho-do-response-com-python" target="_blank">você pode ver os slides aqui</a>).<!--more--></p>

<p><img class="aligncenter size-full wp-image-1199" title="Lighting talk da comunidade Python Brasil no stand da Globo.com" src="http://cdn.souza.cc/2011/07/js-lighting-talk-pythonbrasil1.jpg" alt="Lighting talk da comunidade Python Brasil no stand da Globo.com" width="600" height="450" /></p>

<p>No sábado eu e o Andrews fomos convidados pelo <a title="Igor Macaubas" href="http://www.macaubas.com" target="_blank">Igor Macaubas</a> para falar rapidamente sobre o <a title="Posts sobre splinter" href="http://www.franciscosouza.com.br/tag/splinter">Splinter</a> na palestra &#8220;Por que amamos open source na Globo.com&#8221;. O Igor mandou muito bem na palestra, e a galera pode ver um pouco do que consumimos e produzimos de open source dentro e fora da Globo.com.</p>

<p><img class="aligncenter size-full wp-image-1198" title="Andrews Medina, Francisco Souza e Igor Macaúbas no FISL 12" src="http://cdn.souza.cc/2011/07/andrews-francisco-igor-fisl.jpg" alt="Andrews Medina, Francisco Souza e Igor Macaúbas no FISL 12" width="600" height="450" /></p>

<p>Como não deveria deixar de ser, o networking do evento foi excelente. Eu esperava bem menos do FISL, principalmente no quesito técnico, e fiquei totalmente impressionado com o evento. Após altos papos e um excelente churrasco na casa do <a title="Xiru" href="http://blog.xiru.org/" target="_blank">Xiru</a>, estou pensando seriamente em desistir de não ir à <a title="Python Brasil" href="http://www.pythonbrasil.org.br" target="_blank">Python Brasil</a> esse ano :) Aliás, se você pode ir ao evento, não perca!</p>

<p>No mais, é isso! Fica agora a vontade de querer estar no FISL no ano que vem, agitando a comunidade e comendo muito churrasco!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Vai ao FISL?! Junte-se ao #cobrateam em mais um splinter sprint!]]></title>
    <link href="http://www.franciscosouza.com.br/2011/06/27/vai-ao-fisl-junte-se-ao-cobrateam-em-mais-um-splinter-sprint/"/>
    <updated>2011-06-27T03:20:45-03:00</updated>
    <id>http://www.franciscosouza.com.br/2011/06/27/vai-ao-fisl-junte-se-ao-cobrateam-em-mais-um-splinter-sprint</id>
    <content type="html"><![CDATA[<p><img class="alignleft size-full wp-image-1169" title="FISL - Fórum Internacional de Software Livre" src="http://cdn.souza.cc/2011/06/fisl-logo1.jpg" alt="FISL - Fórum Internacional de Software Livre" width="200" height="199" />Isso mesmo! Estamos organizando mais um <a title="Splinter" href="http://splinter.cobrateam.info" target="_blank">splinter</a> sprint, projeto open source do <a title="#cobrateam" rel="nofollow" href="http://cobrateam.info" target="_blank">#cobrateam</a>. Vai acontecer entre os dias 29 de Junho e 02 de Julho, durante o <a title="FISL - Fórum Internacional de Software Livre" rel="nofollow" href="http://fisl.softwarelivre.org" target="_blank">FISL</a> - Fórum Internacional de Software Livre -, em Porto Alegre. Se você não vai ao evento, sem problemas, junte-se a nós remotamente! :) Vou aproveitar o espaço para prover algumas informações sobre o Splinter, roubando do post do <a title="Andrews Medina" href="http://andrewsmedina.com" target="_blank">Andrews Medina</a>&#8230;</p>

<!--more-->


<h3>O que é o splinter?</h3>


<p>Splinter é uma ferramenta <a title="Posts sobre open source" href="http://www.franciscosouza.com.br/tag/open-source">open source</a> para testes de aplicações web utilizando <a title="Posts sobre Python" href="http://www.franciscosouza.com.br/tag/python" target="_blank">Python</a>. Com ele, é possível automatizar ações do browser, como visitar URLs e interagir com formulários e elementos HTML.</p>

<p>Página do splinter no github: <a title="Splinter at Github" rel="nofollow" href="https://github.com/cobrateam/splinter" target="_blank">https://github.com/cobrateam/splinter</a></p>

<p>Site e documentação do splinter: <a title="Splinter - automate web application actions using python" rel="nofollow" href="http://splinter.cobrateam.info" target="_blank">http://splinter.cobrateam.info</a></p>

<h3>O que é um splinter sprint?</h3>


<p>Um splinter sprint é uma desculpa para desenvolvedores reunirem-se , focados por um tempo para melhorar o splinter, corrigindo <a title="Splinter issues" rel="nofollow" href="http://github.com/splinter/cobrateam/issues" target="_blank">bugs</a>, adicionando features e melhorando a <a title="Splinter docs" rel="nofollow" href="http://splinter.cobrateam.info/docs/" target="_blank">documentação</a>.</p>

<p>Qualquer um, em qualquer lugar do mundo, pode participar e contribuir. Se você nunca contribuiu com o splinter antes, esta é a oportunidade perfeita para você começar!</p>

<h3>Onde e quando?</h3>


<p>Durante todos os dias do evento (de 29 de junho a 02 de julho). Você pode participar presencialmente, em Porto Alegre, ou remotamente.</p>

<h3>Como contribuir?</h3>


<ol>
    <li>Escolha uma <a title="Splinter issues" rel="nofollow" href="http://github.com/cobrateam/splinter/issues" target="_blank">issue</a></li>
    <li>Faça um fork</li>
    <li>Faça commit e push da sua contribuição</li>
    <li>Envie um &#8220;pull request&#8221;. <em>Não se esqueça: todas as novas features devem ser testadas e documentadas.</em></li>
</ol>


<h3>Preparando-se para o sprint</h3>


<p>Instale um <a title="IRC" rel="nofollow" href="http://en.wikipedia.org/wiki/Internet_Relay_Chat" target="_blank">IRC</a> client, para que você possa juntar-se a nós no canal #cobrateam no Freenode. Se estiver afim de participar, seja presencialmente no FISL, ou online, sua ajuda será bem vinda!</p>

<p>Para mais informações, acesse a <a title="Splinter sprint 29 de junho a 02 de julho" rel="nofollow" href="https://github.com/cobrateam/splinter/wiki/sprint29jun2011" target="_blank">página do sprint no wiki</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Dev in Cachu backstage: Small Acts e uma lição de vida]]></title>
    <link href="http://www.franciscosouza.com.br/2011/05/08/dev-in-cachu-backstage-small-acts-e-uma-licao-de-vida/"/>
    <updated>2011-05-08T21:06:00-03:00</updated>
    <id>http://www.franciscosouza.com.br/2011/05/08/dev-in-cachu-backstage-small-acts-e-uma-licao-de-vida</id>
    <content type="html"><![CDATA[<p>Caramba! Eu demorei uma semana pra conseguir parar e blogar sobre o <a title="Dev in Cachu" href="http://www.devincachu.com.br" target="_blank">Dev in Cachu</a>. Organizadores, palestrantes e participantes já escreveram sobre o evento, como ele foi, como foram as palestras, e toda a coisa mais. O Leo Hackin &#8220;cuspiu&#8221; uma <a title="Review Dev in Cachu 2011, por Leo Hackin" href="http://www.leohackin.com.br/2011/05/review-sobre-devincachu-interior-do-es-bombando/" target="_blank">review sobre o Dev in Cachu</a> em tempo recorde, enquanto outras pessoas &#8220;mais normais&#8221; como <a title="Dev in Cachu 2011: eu fui! - por Andrews Medina" href="http://andrewsmedina.com/2011/05/04/dev-cachu-eu-fui/" target="_blank">Andrews Medina</a>, <a title="Review Dev in Cachu: Incrível" href="http://jeveaux.com/2011/review-devincachu-incrivel/" target="_blank">Paulo Jeveaux</a>, <a title="Dev in Cachu: Ducar*lh*" href="http://blog.magnomachado.com.br/devincachu-2011-ducarlh/" target="_blank">Magno Machado</a>, <a title="Review Dev in Cachu, por Breno Martinusso" href="http://martinusso.com/review-sobre-dev-in-cachu-2011/" target="_blank">Breno Martinusso</a>, <a title="Dev in Cachu 2011, por Dênis Ferrari" href="http://www.heroisdati.com/devincachu-2011/" target="_blank">Dênis Ferrari</a> e <a title="Era pra ser uma review do Dev in Cachu 2011..." href="http://www.tagliati.com.br/2011/05/08/era-pra-ser-uma-review-do-devincachu/" target="_blank">André Tagliati</a> escreveram sobre o evento durante essa semana que passou.</p>

<p>Dada a quantidade de material já produzida por excelentes profissionais, resolvi escrever um post que não é uma review do evento, mas um pouco dos bastidores de como tudo começou (ou pelo menos como eu acho que começou).  <!--more--></p>

<p>O <a title="Dev in Cachu" href="http://www.devincachu.com.br">Dev in Cachu</a> nasceu (não exatamente com este nome, não exatamente com este formato) na minha cabeça e na cabeça da <a title="Andressa Agnhesi" href="http://www.agnhesi.com" target="_blank">Andressa Agnhesi</a> bem no começo de 2010, quando eu já estava em Vitória, mas ainda não estava na <a title="Giran" href="http://www.giran.com.br" target="_blank">Giran</a> (na verdade, minha ida já estava certa, e eu estava de aviso prévio em outra empresa :P). Montamos, juntos a alguns amigos, um pequeno grupo de desenvolvedores de software com intuito de estudar novas tecnologias, organizar dojos e planejar um evento. A ideia era fazermos reuniões periódicas e mais um monte de coisa&#8230; bom, depois da primeira reunião onde poucas pessoas compareceram e a maioria se atrasou, a ideia morreu.</p>

<p>Tempo depois, em Outubro de 2010, fiz contato com algumas pessoas e descobri o nascimento de um grupo de desenvolvedores na cidade de Cachoeiro de Itapemirim: o <a title="nerdes;" href="http://www.nerdes.org/" target="_blank">nerdes;</a>. Envolvido nesse grupo, estava um velho conhecido, que convidei para dar palestra na III Jacitec, evento do <a title="IFES" href="http://www.ifes.edu.br" target="_blank">IFES</a>, <a title="IFES, Campus Cachoeiro de Itapemirim" href="http://www.ci.ifes.edu.br/" target="_blank">campus Cachoeiro de Itapemirim</a>. O evento foi um momento interessante de networking e intersecção de ideias: percebi que mais pessoas queriam fazer algo no sul do Espírito Santo, e foi o que aconteceu. A partir daí, tínhamos um nome e até um domínio registrado, podíamos começar! :)</p>

<p>No começo do post, eu disse que o Dev in Cachu nasceu na cabeça de duas pessoas. É mentira. Baseado no conhecimento que tenho sobre os desenvolvedores e estudantes de Cachoeiro de Itapemirim, e no feedback que recebemos do Dev in Cachu 2011, afirmo que o Dev in Cachu já existia na cabeça de dezenas de desenvolvedores em Cachoeiro de Itapemirim. Por que, então, o evento não aconteceu antes? Posso tentar responder essa pergunta contando a história do site do próprio Dev in Cachu&#8230;</p>

<p>Registramos o domínio em Dezembro, ficamos um tempo em inércia e já em 2011, <a title="Francisco Souza na Globo.com" href="http://www.franciscosouza.com.br/2011/01/27/mae-to-na-globo/" target="_blank">quando eu já estava na Globo.com</a>, resolvemos que o evento seria em Abril. Mandei um e-mail para os meus colegas de organização dizendo &#8220;não se preocupem, eu faço o site!&#8221;. Duas semanas depois, estávamos exatamente no mesmo lugar, com um nome, um domínio e nenhum site no ar. Foi o momento que eu &#8220;pedi pra sair&#8221; e mandei outro e-mail para os colegas dizendo &#8220;não da pra mim, quem puder faz o site aí&#8221;. Quatro horas depois, o site estava no ar, tínhamos um perfil no Twitter e já estávamos começando a pedir patrocínio&#8230; Como diria o <a title="Henrique Bastos" href="http://henriquebastos.net" target="_blank">Henrique Bastos</a>, você pode chamar isso como quiser, eu escolhi chamar de <a title="Small Acts Manifesto" href="http://smallactsmanifesto.org" target="_blank">Small Acts</a>.</p>

<p>Entendi que o motivo de o evento não ter acontecido antes é bem simples: temos problema em começar algo. Todos têm ideias geniais para melhorar a vida das pessoas, mas esquecem que são atos, e não ideias, que fazem a diferença na vida das pessoas. O evento nasceu sem nenhuma palestra, sem nenhum patrocinador, sem documento de patrocínio, mas com cinco pessoas que queriam que algo acontecesse e uma que teve iniciativa para dar o primeiro passo. E, de acordo com as más línguas, o evento foi um sucesso! Aprendi, de verdade, o profundo valor do <em>&#8220;Do it, as simple as you can, just what is essential to pass it forward&#8221;.</em></p>

<p>Deu trabalho fazer o Dev in Cachu acontecer, mas a sensação de sucesso e dever cumprido me fazem pensar que tudo valeu a pena. No mais, um muito obrigado a todas as pessoas que estavam ali dentro daquele auditório, e aos não-presentes que, de alguma forma, colaboraram para que o evento acontecesse. Que venha o Dev in Cachu II, <a title="2012" href="http://www.whowillsurvive2012.com/" target="_blank">antes que o mundo acabe </a>:)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Coding dojo na Globo.com: sucesso!]]></title>
    <link href="http://www.franciscosouza.com.br/2011/04/18/coding-dojo-na-globo-com-sucesso/"/>
    <updated>2011-04-18T15:23:20-03:00</updated>
    <id>http://www.franciscosouza.com.br/2011/04/18/coding-dojo-na-globo-com-sucesso</id>
    <content type="html"><![CDATA[<p>No último sábado rolou a primeira edição do <a title="dojo.globo" href="http://github.com/globocom/dojo.globo" target="_blank">dojo.globo</a>, o coding dojo da Globo.com. Trata-se de mais uma iniciativa de reunir a comunidade de desenvolvedores no Rio de Janeiro. O dojo aconteceu no Bloco 7  do <a title="Città América" href="http://www.citta-america.com/" target="_blank">Shopping Città América</a>, e contou com mais de trinta participantes: incluindo desde estudantes até profissionais experientes, incluindo um convidado internacional <span style="text-decoration: line-through;">(que eu esqueci o nome)</span>! . O evento começou com uma <a title="Coding Dojo" href="http://www.slideshare.net/franciscosouza/coding-dojo-7651590" target="_blank">rápida apresentação</a>, onde expliquei o que é e como funciona um coding dojo. Em seguida, os participantes foram divididos em dois grupos para duas sessões simultâneas!</p>

<p>&nbsp;</p>

<!--more-->


<p>[caption id=&#8221;attachment_1157&#8221; align=&#8221;aligncenter&#8221; width=&#8221;650&#8221; caption=&#8221;Explicando para a galera o que é coding dojo e como essa bagunça funciona :)&#8221;]<img class="size-full wp-image-1157" title="Apresentação sobre Coding Dojo" src="http://d3r4tlsmw3jkg0.cloudfront.net/2011/04/apresentacao-inicial-francisco-souza.jpg" alt="Apresentação sobre Coding Dojo" width="650" height="488" />[/caption]</p>

<p style="text-align: left;">&nbsp;</p>


<p style="text-align: left;">Apesar da divisão, algumas pessoas <span style="text-decoration: line-through;">(leia-se: eu)</span> &#8220;flutuaram&#8221; entre os grupos e conseguiram participar da construção dos problemas nos dois grupos, pulando de uma sala pra outra em momentos oportunos.</p>


<p style="text-align: left;">&nbsp;</p>


<p>[caption id=&#8221;attachment_1159&#8221; align=&#8221;aligncenter&#8221; width=&#8221;650&#8221; caption=&#8221;Cláudio Berrondo em um momento &quot;ééé, tem que fazer esse negócio ficar verde&quot; x)&#8221;]<img class="size-full wp-image-1159" title="Cláudio Berrondo em um momento &quot;ééé, tem que fazer esse negócio passar&quot; x)" src="http://d3r4tlsmw3jkg0.cloudfront.net/2011/04/francisco-souza-claudio-berrondo.jpg" alt="Cláudio Berrondo em um momento &quot;ééé, tem que fazer esse negócio passar&quot; x)" width="650" height="488" />[/caption]</p>

<p style="text-align: left;">&nbsp;</p>


<p style="text-align: left;">Os dois grupos utilizaram <a title="Posts sobre Python" href="http://www.franciscosouza.com.br/tag/python">Python</a> para implementar três problemas: <a title="FizzBuzz" href="http://dojopuzzles.com/problemas/exibe/fizzbuzz/" target="_blank">FizzBuzz</a>, <a title="Encontre o telefone" href="http://dojopuzzles.com/problemas/exibe/encontre-o-telefone/" target="_blank">Encontre o telefone</a> e <a title="Cheque por extenso" href="http://dojopuzzles.com/problemas/exibe/cheque-por-extenso/" target="_blank">Cheque por extenso</a>. Houve uma parada para um generoso coffee break, oportunidade valiosa para um incrível momento de networking (dois pontos mega positivos da nossa <a title="Retrospectiva dojo.globo 16/04/2011" href="https://github.com/globocom/dojo.globo/blob/master/2011-04-16/retrospectiva.markdown" target="_blank">retrospectiva</a>).</p>


<p style="text-align: left;">&nbsp;</p>


<p>[caption id=&#8221;attachment_1158&#8221; align=&#8221;aligncenter&#8221; width=&#8221;650&#8221; caption=&#8221;Coffee break e networking&#8221;]<img class="size-full wp-image-1158" title="Coffe break e networking" src="http://d3r4tlsmw3jkg0.cloudfront.net/2011/04/galera-coffee-break.jpg" alt="Coffe break e networking" width="650" height="488" />[/caption]</p>

<p>&nbsp;</p>

<p>Os códigos das soluções estão disponíveis no <a title="Globojo 16/04/2011" href="https://github.com/globocom/globojo/tree/master/2011-04-16" target="_blank">Github</a>, assim como a retrospectiva e uma lista com os problemas sugeridos. Essa foi apenas a primeira de muitas edições que ainda virão! Se você é do Rio de Janeiro, ou quer saber quando vai rolar o próximo dojo, não perca tempo! Inscreva-se hoje em nosso <a title="Grupo de discussão globo.dojo" href="http://groups.google.com/group/globojo" target="_blank">grupo de discussão</a> e fique por dentro da programação de próximas edições.</p>

<p>&nbsp;</p>

<p>[caption id=&#8221;attachment_1160&#8221; align=&#8221;aligncenter&#8221; width=&#8221;650&#8221; caption=&#8221;Foto final, conseguida depois de muita luta com o timer da câmera&#8221;]<img class="size-full wp-image-1160" title="Galera I Globojo" src="http://d3r4tlsmw3jkg0.cloudfront.net//2011/04/foto-final-galera.jpg" alt="Galera I Globojo" width="650" height="488" />[/caption]</p>

<p>&nbsp;</p>

<p>No mais, um muito obrigado a toda a galera presente e envolvida, foi sensacional! :)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Vem aí: Dev in Cachu 2011]]></title>
    <link href="http://www.franciscosouza.com.br/2011/03/01/vem-ai-dev-in-cachu-2011/"/>
    <updated>2011-03-01T12:56:09-03:00</updated>
    <id>http://www.franciscosouza.com.br/2011/03/01/vem-ai-dev-in-cachu-2011</id>
    <content type="html"><![CDATA[<p>O ano de 2011 começou em ritmo acelerado! Durante o processo seletivo da Globo.com, eu já estava envolvido com alguns amigos na organização de um evento de desenvolvimento de software no sul do estado do Espírito Santo. Depois de um pequeno período de inércia, voltamos com a corda toda e lá está: no dia 30 de abril, acontecerá o maior evento de desenvolvimento de softwares da história do sul do estado do Espírito Santo, o <a title="Dev in Cachu 2011" href="http://www.devincachu.com.br" target="_blank">Dev in Cachu</a>! :)</p>

<p><img class="size-full wp-image-1154 alignright" style="margin-left: 10px; margin-right: 10px;" title="Dev in Cachu 2011, eu vou!" src="http://d3r4tlsmw3jkg0.cloudfront.net/2011/03/dev-in-cachu-2011.png" alt="Dev in Cachu 2011, eu vou!" width="250" height="102" /></p>

<p>Serão sete palestras, dois coffee breaks e muito networking à disposição do público. Contaremos com presença de palestrantes de renome nacional, falando sobre temas diversos como <a title="Agile" href="http://agilemanifesto.org" target="_blank">Agile</a>, .NET Framework e <a title="Python" href="http://www.python.org" target="_blank">Python</a>. Eu marcarei presença ajudando na organização, entregando água para os palestrantes e me aventurando em uma palestra muito bacana com meu amigo <a title="Andrews Medina" href="http://www.andrewsmedina.com/" target="_blank">Andrews Medina</a>, com o título &#8220;Os 4 trabalhos de Python: resolvendo desafios de diferentes propósitos com uma linguagem multipropósito&#8221;. Nos baseamos na história mitológica &#8220;Os 12 trabalhos de Hércules&#8221; para criar <a title="Os doze trabalhos de Python" href="http://github.com/cobrateam/osdozetrabalhos" target="_blank">&#8220;Os 12 trabalhos de Python&#8221;</a>, onde vamos fazer algumas coisas divertidas usando esta linguagem de programação. Quatro desses desafios serão apresentados no Dev in Cachu!</p>

<p>Quer saber quais são as outras palestras? Confira nossa <a title="Programação do Dev in Cachu 2011" href="http://www.devincachu.com.br/programacao.php" target="_blank">página de programação</a> e conheça melhor nossos <a title="Palestrantes no Dev in Cachu 2011" href="http://www.devincachu.com.br" target="_blank">palestrantes</a>. O evento acontecerá no dia 30 de abril, no <a title="Centro Universitário São Camilo" href="http://www.saocamilo-es.br" target="_blank">Centro Universitário São Camilo</a>, <a title="São Camilo, Campus I" href="http://maps.google.com.br/maps/place?cid=9165776474801434707&amp;q=Centro+Educ+S%C3%A3o+Camilo-Faculdade+S%C3%A3o+Camilo+Esp+Santo&amp;hl=pt-BR&amp;dtab=0&amp;sll=-20.860837,-41.119605&amp;sspn=0.005594,0.009645&amp;ie=UTF8&amp;ll=-20.853378,-41.129165&amp;spn=0,0&amp;z=16" target="_blank">Campus I</a>. O campus fica em excelente localização, ao lado do <a title="Shopping Sul" href="http://www.shoppingsul-es.com.br/" target="_blank">maior shopping do sul do Espírito Santo</a>, que conta com uma praça de alimentação preparada para receber os participantes do Dev in Cachu! :)</p>

<p>Está esperando o que? <a title="Inscrição no Dev in Cachu 2011" href="http://www.devincachu.com.br/inscricao.php" target="_blank">Faça já sua inscrição</a> e garanta sua vaga! ;)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Mãe, tô na Globo!]]></title>
    <link href="http://www.franciscosouza.com.br/2011/01/27/mae-to-na-globo/"/>
    <updated>2011-01-27T00:37:58-02:00</updated>
    <id>http://www.franciscosouza.com.br/2011/01/27/mae-to-na-globo</id>
    <content type="html"><![CDATA[<p><a title="G1" rel="nofollow" href="http://g1.globo.com" target="_blank"><img class="size-full wp-image-1144 alignright" title="G1" src="http://d3r4tlsmw3jkg0.cloudfront.net/2011/01/logo-g1.png" alt="G1" width="69" height="47" align="right" /></a>Eu estava quase certo que a Giran seria a primeira empresa a me aturar por um ano, mas parece que me enganei mais uma vez. 2010 foi um ano totalmente sensacional na <a title="Giran" href="http://www.giran.com.br" target="_blank">Giran</a>, mas em 2011 um novo emprego em uma nova cidade de um novo estado me esperam com quilos de novos desafios! Em Fevereiro vou me juntar ao time de <a title="G1 - Jornalismo na Globo.com" href="http://g1.globo.com" target="_blank">jornalismo</a> da <a title="Globo.com" href="http://globo.com" target="_blank">Globo.com</a>.</p>

<p>Entrei na Giran em Março e comecei trabalhando em um projeto utilizando <a title="Ruby on Rails" href="http://www.rubyonrails.org" target="_blank">Ruby on Rails</a>. Desde então, trabalhei em alguns outros projetos pontuais utilizando outras tecnologias e linguagens, como <a title="Posts sobre PHP" href="http://www.franciscosouza.com.br/tag/php">PHP</a>, <a title="Posts sobre Python" href="http://www.franciscosouza.com.br/tag/python">Python</a>, Ruby e <a title="Posts sobre Java" href="http://www.franciscosouza.com.br/tag/java">Java</a> :)<a title="Giran Soluções e Ensino" rel="nofollow" href="http://www.giran.com.br" target="_blank"><img class="alignleft size-medium wp-image-1143" title="Giran" src="http://d3r4tlsmw3jkg0.cloudfront.net/2011/01/g-de-giran-300x298.png" alt="Giran" width="76" height="75" align="left" /></a> Além de algumas aventuras aleatórias com outras linguagens e plataformas. Tem sido uma experiência incrível trabalhar ao lado de um <a title="Time da Giran" href="http://www.giran.com.br/time" target="_blank">time</a> de excelentes profissionais, nunca antes na história desse país eu aprendi e amadureci tanto quanto neste tempo que estive na Giran. Me envolvi em eventos e dojos, me aventurei como palestrante, ministrei um <a title="Curso de Django" href="http://www.giran.com.br/cursos/django" target="_blank">curso de Django</a>, joguei no <a title="Rails Rumble" href="http://blog.giran.com.br/2010/09/devs-da-giran-no-rails-rumble-2010/" target="_blank">Rails Rumble</a> e adquiri experiência com websites com vários acessos (<a title="Wine" href="http://www.wine.com.br" target="_blank">Wine</a>, maior e-commerce de vinhos da América Latina).</p>

<p>Além desse enorme aprendizado e coisas técnicas malucas, também me acostumei a ganhar da <a title="Flavia Missi" href="http://www.flaviamissi.com.br" target="_blank">Flavia Missi</a> e do <a title="André Tagliati" href="http://www.tagliati.com.br" target="_blank">Tagliati</a> nas partidas de Fifa no Xbox, e a ouvir o <a title="Almir Mendes" href="http://www.almirmendes.com" target="_blank">Almir M3nd3s</a> reclamando por perder todas as lutas para o <a title="Leo Hackin" href="http://www.leohackin.com.br" target="_blank">Leo Hackin</a> (no Street Fighter IV). Por fim, mas não menos importante, fiz grandes amigos que com certeza vou levar para a vida toda!</p>

<p>Na Globo.com, vou trabalhar principalmente com Python, e tenho certeza que vou encontrar desafios muito bacanas, e aprendizados nunca antes experimentados. Estou muito motivado com o ano de 2011 e esse enorme salto profissional, e espero que tudo dê certo nessa nova aventura!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Meu ambiente de trabalho em 7 itens]]></title>
    <link href="http://www.franciscosouza.com.br/2011/01/21/meu-ambiente-de-trabalho-em-sete-itens/"/>
    <updated>2011-01-21T23:15:43-02:00</updated>
    <id>http://www.franciscosouza.com.br/2011/01/21/meu-ambiente-de-trabalho-em-sete-itens</id>
    <content type="html"><![CDATA[<p>Após ser convocado pelo <a title="Jeveaux" rel="nofollow" href="http://jeveaux.com" target="_blank">Jeveaux</a> e pelo <a title="Almir Mendes" rel="nofollow" href="http://www.almirmendes.com" target="_blank">Almir M3nd3s</a> a escrever sobre meu ambiente de trabalho, resolvi tirar as teias de aranha do blog, escrever um post sobre o tema e seguir a modinha. Montei uma seleção de ferramentas e &#8220;coisas&#8221; sem as quais não vivo tanto no meu trabalho na <a title="Giran" rel="nofollow" href="http://www.giran.com.br" target="_blank">Giran</a> quanto em casa quando estou brincando de programar. Confesso que foi difícil enumerar apenas sete itens, mas vamos lá&#8230;</p>

<h3>1. Pessoas totalmente sensacionais</h3>


<p>[caption id=&#8221;attachment_1137&#8221; align=&#8221;aligncenter&#8221; width=&#8221;649&#8221; caption=&#8221;Difícil é combinar uma pose&#8221;]<img class="size-full wp-image-1137" title="Time da Giran" src="http://d3r4tlsmw3jkg0.cloudfront.net/2011/01/time-giran.jpg" alt="Time da Giran" width="649" height="336" />[/caption]</p>

<p>Esse é o ponto mais importante. Pode parecer blá blá blá e clichezinho de agilista-pseudo-telectual, mas o fato é que eu não estaria apto a desempenhar meu trabalho sem as pessoas com quem trabalho. <span style="color: #cccccc;"><del>Os recursos</del></span>As pessoas do <a title="Time da Giran" rel="nofollow" href="http://www.giran.com.br/time" target="_blank">time da Giran</a> formam o conjunto de gente doida mais incrível com quem já tive o prazer de trabalhar. Estou saindo da <a title="Giran Soluções e Ensino" rel="nofollow" href="http://www.giran.com.br" target="_blank">Giran</a>, no próximo mês vou para a <a title="Globo.com" rel="nofollow" href="http://globo.com" target="_blank">Globo.com</a> (e isso vai ser assunto de outro post nos próximos dias ;D), e a parte ruim desse enorme salto profissional é deixar a Giran, abandonar <strong>geograficamente</strong> os grandes amigos que fiz nesse quase um ano de trabalho :)</p>

<h3>2. Git e Github</h3>


<p><img class="size-full wp-image-1134 alignright" title="Github" src="http://d3r4tlsmw3jkg0.cloudfront.net/2011/01/octocat-github.png" alt="Github" width="94" height="94" />Sim, eu coloquei o <a title="Git" rel="nofollow" href="http://www.git-scm.com" target="_blank">Git</a> e o <a title="Github" rel="nofollow" href="http://github.com" target="_blank">Github</a> em primeiro lugar entre as tecnologias. Posso dizer com certeza que o Github é a minha principal rede social, vira e mexe vejo algum projeto bacana e começo seguir, faço fork e to sempre enviando meus commits pra uma ou outra coisa. Também usamos Git aqui na Giran, e espero poder carregar essa incrível ferramenta comigo por qualquer lugar que eu for. Independente do sistema operacional, o Git estará presente. Claro que também uso o <a title="Mercurial" rel="nofollow" href="http://mercurial.selenic.com/" target="_blank">Mercurial</a> e o <a title="BitBucket" rel="nofollow" href="http://bitbucket.org" target="_blank">Bitbucket</a>, e tenho que dizer que o Bitbucket está cada vez melhor e mais bonito, mas o Github já faz parte da minha vida.</p>

<h3>3. (Mac|G)?Vim</h3>


<p>Primeiramente, quero deixar claro que copiei mesmo na cara dura a regex do <a title="Almir Mendes no Twitter" rel="nofollow" href="http://twitter.com/m3nd3s" target="_blank">@m3nd3s</a>. Agora, falando um pouco do Vim, posso descreve-lo de forma bem direta como o editor de texto mais produtivo que eu conheço. <img class="alignleft" title="Vim" src="http://d3r4tlsmw3jkg0.cloudfront.net/2011/01/vim-editor_logo.png" alt="Vim" width="115" height="115" />Eu sei, eu sei, pra você o seu editor de texto é o mais produtivo, mas no meu blog é a minha opinião que conta :-P Claro que o meu Vim é turbinado com <a title="Francisco Souza's vimfiles" rel="nofollow" href="http://github.com/fsouza/vimfiles" target="_blank">alguns plugins, snippets e funções</a>. O <a title="Jeveaux on Twitter" rel="nofollow" href="http://twitter.com/jeveaux" target="_blank">@jeveaux</a> gosta de implicar comigo dizendo que meu Vim demora mais pra carregar do que o <a title="Eclipse" rel="nofollow" href="http://www.eclipse.org" target="_blank">Eclipse</a>. Balela, o Eclipse carrega em 8 segundos e o Vim em 7 segundos e 958 milésimos. A propósito, eu ainda utilizo o Eclipse para trabalhar em projetos Java, por que não encontrei nenhum plugin para imports automáticos no Vim sem transformá-lo numa IDE que fica compilando meus códigos e obtendo informações de execução (como as IDEs pesadonas por aí), então continuo utilizando o Eclipse para trabalhar com <a title="Posts sobre Java" href="http://www.franciscosouza.com.br/tag/java">Java</a>. E sigo com o Vim para todas as outras coisas: <a title="Posts sobre Python" href="http://www.franciscosouza.com.br/tag/python">Python</a>, Ruby, XML, HTML, CSS, JavaScript e o que for! :)</p>

<h3>4. Python</h3>


<p>Sou apaixonado por tecnologia, desenvolvimento de software, <a title="Posts sobre agile" href="http://www.franciscosouza.com.br/tag/agile">agile</a>, <a title="Posts sobre TDD" href="http://www.franciscosouza.com.br/tag/tdd">TDD</a>, <a title="Posts sobre XP" href="http://www.franciscosouza.com.br/tag/xp">XP</a>, linguagens dinâmicas, etc., etc., etc., mas preciso confessar que tenho um carinho especial pela linguagem de programação <a title="Python" rel="nofollow" href="http://www.python.org" target="_blank">Python</a>. É uma das ferramentas mais poderosas que conheço e utilizo, e não <img class="alignright size-full wp-image-1138" title="Python powered" src="http://d3r4tlsmw3jkg0.cloudfront.net/2011/01/francisco-souza-python-powered.png" alt="Python powered" width="140" height="182" />consigo imaginar meu cotidiano sem essa linguagem. Aonde quer que eu vá, independente do sistema operacional, eu levo o Vim, o Git e o Python comigo! Não, eu não sou xiita, não vou dizer pra você que a resposta para todos os problemas da sua vida é Python, nem que você deve deixar de usar o que está utilizando para utilizar Python. Não estou nem mesmo dizendo que Python é a melhor linguagem de programação do planeta (mas bem que eu poderia :-P), só quero dizer que a linguagem é incrível e eu não vivo sem ela!</p>

<p>No dia a dia, utilizo Python para aventuranças, testes de conceitos e <a title="Posts sobre Python" href="http://www.franciscosouza.com.br/tag/python">posts no blog</a>, desenvolvemos o <a title="Novo site da Giran" rel="nofollow" href="http://blog.giran.com.br/2010/12/novo-site-da-giran/" target="_blank">novo site da Giran </a>em Python (usando o <a title="Posts sobre Flask" href="http://www.franciscosouza.com.br/tag/flask">Flask</a>), para automatização de tarefas pequenas, no desenvolvimento de projetos open source (<a title="Splinter" rel="nofollow" href="http://github.com/cobrateam/splinter" target="_blank">Splinter</a>, <a title="Lettuce" rel="nofollow" href="http://github.com/gabrielfalcao/lettuce" target="_blank">Lettuce</a>, <a title="Flask" rel="nofollow" href="http://github.com/mitsuhiko/flask" target="_blank">Flask</a>, <a title="Flask-MongoAlchemy" rel="nofollow" href="http://github.com/cobrateam/flask-mongoalchemy" target="_blank">Flask-MongoAlchemy</a>, etc.), <a title="Curso de Django na Giran" rel="nofollow" href="http://www.giran.com.br/cursos/django" target="_blank">treinamentos de Django</a> e projetos pessoais.</p>

<h3>5. Mac OS X/Linux</h3>


<p>Sim, o Mac OS é para moças (pode ficar bravinho e fazer comentário, xiita :-P), mas moças estáveis. Desde que entrei na Giran, tive a experiência de trabalhar com um Macbook Pro, <img class="alignleft" title="Linux na veia :D" src="http://d3r4tlsmw3jkg0.cloudfront.net/2011/01/tux-150x150.png" alt="Linux na veia :D" width="105" height="105" />uma máquina excelente, mas com um sistema operacional que não <strong>me</strong> agradou muito: apesar da estabilidade, o Finder é um dos piores softwares que já usei na vida, sem falar de outras limitações estranhas e a necessidade de sair procurando um monte de aplicações ali e aqui. Sim, essa crítica é vazia e sem fundamentações, mas entenda: eu uso Mac há quase um ano e minha conclusão é que ainda prefiro Linux. E é por que eu gosto e me sinto mais à vontade com Linux, não por que eu odeio a Apple, o Mac OS ou o Steve Jobs. Pra mim, o Linux é melhor, e ponto final, não há espaço para debates aqui ;)</p>

<h3>6. Terminal/Bash</h3>


<p><img class="size-thumbnail wp-image-1140 alignright" title="Terminal" src="http://d3r4tlsmw3jkg0.cloudfront.net/2011/01/terminal-150x150.png" alt="Terminal" width="150" height="150" />Sim, eu preciso de uma telinha preta (ou roxa, no caso do Ubuntu :P) para digitar comandos. Tanto no Mac OS quanto no Linux eu utilizo o Bash como terminal. Como no caso do Vim, também personalizei o bash com alguns arquivos e essa <a title=".bashrc" rel="nofollow" href="https://github.com/fsouza/bash-files/blob/master/.bashrc" target="_blank">personalização também está no Github</a>. Desde o vício de digitar <em>ls</em> e <em>git status</em> até a construção de alguns <em>bash scripts</em> e <em>Makefiles</em> onde agrupo meus comandos mais comuns para determinados projetos.</p>

<p>Uso, em geral, o Bash para tarefas de desenvolvimento do dia a dia, e também nas minhas brincadeiras do dia a dia com minha máquina virtual na Linode. Vira e mexe o blog fica fora do ar por que faço alguma &#8220;caquinha&#8221; no nginx e tudo cai, mas vale o aprendizado, e o bash é o companheiro certo de madrugadas de hackings e momentos que invento de brincar de sysadmin.</p>

<h3>7. Algo rabiscável</h3>


<p><a title="Rabisco" rel="nofollow" href="http://www.flickr.com/photos/franciscossouza/5221255912/" target="_blank"><img class="alignleft size-medium wp-image-1141" title="Rabisco" src="http://d3r4tlsmw3jkg0.cloudfront.net/2011/01/uml-giran-225x300.jpg" alt="Rabisco" width="95" height="126" /></a>Sou viciado em rabiscar coisas. Meus cadernos são totalmente rabiscados, minha apostila de inglês e meus materiais da faculdade parecem cadernos de crianças na creche. Rabisco o teclado do computador, rabisco a carcaça do Macbook Pro, tenho um quadro branco no meu quarto e de vez em quando invento moda de escrever cartas para meus amigos (sim, eu escrevo cartas :-P). Rabisco o scrum board alheio, a tela do meu celular e de vez em quando algumas camisetas e bermudas (sim :P). Enfim, qualquer coisa que parecer rabiscável, eu rabisco. Por isso, <em>sempre</em> tenho papel por perto para não rabiscar coisas que parecem rabiscáveis, mas na verdade não são :)</p>

<h3>Passando a bola pra frente</h3>


<p>Como eu tenho que dar todo segmento à modinha, vou convocar uma turma para escrever sobre os seus respectivos ambientes de trabalho:</p>

<ul>
    <li>Andressa Agnhesi (<a title="Andressa Agnhesi on Twitter" rel="nofollow" href="http://twitter.com/agnhesi" target="_blank">@agnhesi</a>)</li>
    <li>Andrews Medina (<a title="Andrews Medina on Twitter" rel="nofollow" href="http://twitter.com/andrewsmedina" target="_blank">@andrewsmedina</a>)</li>
    <li>Flavia Missi (<a title="Flavia Missi on Twitter" rel="nofollow" href="http://twitter.com/flaviamissi" target="_blank">@flaviamissi</a>)</li>
    <li>Henrique Pereira (<a title="ikkebr on Twitter" rel="nofollow" href="http://twitter.com/ikkebr" target="_blank">@ikkebr</a>)</li>
    <li>Herberth Amaral (<a title="Herberth Amaral" href="http://twitter.com/herberthamaral" target="_blank">@herberthamaral</a>) - <em>sim, adicionei depois :-P</em></li>
    <li>Hugo Lopes (<a title="Hugo Lopes on Twitter" rel="nofollow" href="http://twitter.com/hltbra" target="_blank">@hltbra</a>)</li>
    <li>Osvaldo Santana (<a title="Osvaldo Santana on Twitter" rel="nofollow" href="http://twitter.com/osantana" target="_blank">@osantana</a>)</li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Começou o FLISOL 2011 em Vitória: submeta sua palestra!]]></title>
    <link href="http://www.franciscosouza.com.br/2010/12/28/comecou-o-flisol-2011-em-vitoria-submeta-sua-palestra/"/>
    <updated>2010-12-28T00:10:24-02:00</updated>
    <id>http://www.franciscosouza.com.br/2010/12/28/comecou-o-flisol-2011-em-vitoria-submeta-sua-palestra</id>
    <content type="html"><![CDATA[<p>Esta semana demos início à organização do FLISOL 2011, que acontecerá em um sábado, no dia 09 de abril. Em Vitória, estamos trabalhando em um evento de dia inteiro, em local ainda a ser definido, mas já estamos recebendo inscrições de palestras! Ficou interessado? Você pode submeter sua proposta de palestra preenchendo o formulário abaixo:<!--more--></p>

<p>Loading&#8230;</p>

<p>Você pode enviar quantas propostas quiser, mas caso mais de uma proposta sua seja escolhida, você deverá escolher apenas uma para apresentar. A ideia é fazer um evento que marque o movimento de software livre no estado, será um evento organizado por todos nós e precisamos da sua colaboração! :)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Curso de Django em Vitória, na Giran]]></title>
    <link href="http://www.franciscosouza.com.br/2010/12/03/curso-de-django-em-vitoria-na-giran/"/>
    <updated>2010-12-03T14:42:10-02:00</updated>
    <id>http://www.franciscosouza.com.br/2010/12/03/curso-de-django-em-vitoria-na-giran</id>
    <content type="html"><![CDATA[<p>Hoje lançamos o <a title="Novo site da Giran" rel="nofollow" href="http://blog.giran.com.br/2010/12/novo-site-da-giran/" target="_blank">novo site da Giran</a>, que construímos utilizando <a title="Flask" rel="nofollow" href="http://flask.pocoo.org" target="_blank">Flask</a> e o <a title="Google App Engine" href="http://appengine.google.com" target="_blank">Google App Engine</a>. Foi uma grande oportunidade de aprendizado para o time, e um momento de imersão em práticas como <a title="Posts sobre TDD" href="http://www.franciscosouza.com.br/tag/tdd">TDD</a> e integração contínua para os membros do time que ainda não tinham experiência com tais práticas.</p>

<p><img class="aligncenter size-large wp-image-1128" title="Django" src="http://d3r4tlsmw3jkg0.cloudfront.net/2010/12/django-logo-transparent-1024x356.png" alt="Django" width="640" height="222" /></p>

<p>Junto ao lançamento do novo site, incluímos uma novidade bem bacana: <a title="Giran Fast Tracks" href="http://www.giran.com.br/cursos" target="_blank">Giran Fast Tracks</a>, que são cursos rápidos e imersivos sobre alguma-tecnologia-que-alguém-do-time-escolher. E entre os cursos que começarão a acontecer em Janeiro de 2011, está o primeiro <strong>curso de <a title="Posts sobre Django" href="http://www.franciscosouza.com.br/tag/django">Django</a> no Espírito Santo</strong>, o framework web para perfeccionistas com prazos. Além do curso de Django, temos também os cursos  de <a title="CodeIgniter" rel="nofollow" href="http://codeigniter.com" target="_blank">CodeIgniter</a>, <a title="VRaptor" rel="nofollow" href="http://vraptor.caelum.com.br" target="_blank">VRaptor</a> e <a title="Posts sobre Scrum" href="http://www.franciscosouza.com.br/tag/scrum">Scrum</a>. São cursos com 16 horas de carga horária e uma dinâmica focada no aprendizado prático do uso das ferramentas abordadas :)</p>

<p>Ficou interessado? Quer saber mais detalhes sobre o <a title="Curso de Django" rel="nofollow" href="http://www.giran.com.br/cursos/django" target="_blank">curso de Django</a>? Entre em <a title="Entre em contato com a Giran" href="http://www.giran.com.br/contato" target="_blank">contato com a Giran</a>!</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Quarta edição do Liberdade Interativa em Dezembro]]></title>
    <link href="http://www.franciscosouza.com.br/2010/12/01/quarta-edicao-do-liberdade-interativa-em-dezembro/"/>
    <updated>2010-12-01T14:04:09-02:00</updated>
    <id>http://www.franciscosouza.com.br/2010/12/01/quarta-edicao-do-liberdade-interativa-em-dezembro</id>
    <content type="html"><![CDATA[<p>Na próxima semana, teremos em Vitória a quarta edição do <a title="Liberdade Interativa" href="http://www.tux-es.org/liberdadeinterativa/" target="_blank">Liberdade Interativa</a>, evento organizado pela comunidade <a title="Tux-ES" href="http://www.tux-es.org" target="_blank">Tux-ES</a>, que tem como objetivo aproximar as pessoas da comunidade de software livre do Espírito Santo. Nesta edição, de caráter relativamente especial, contaremos com a presença de um visitante carioca: <a title="Henrique Bastos" href="http://www.henriquebastos.net" target="_blank">Henrique Bastos</a>, diretor de tecnologia da <a title="Myfreecomm" href="http://www.myfreecomm.com.br/" target="_blank">Myfreecomm</a> e membro da comunidade de desenvolvedores de software do Rio de Janeiro.</p>

<p>O evento será na próxima quarta-feira, dia 08 de dezembro de 2010, no auditório central da <a title="Faesa" href="http://site.faesa.br/" target="_blank">Faesa da Av. Vitória</a>, começando às 18:30. Serão três palestras e logo depois do evento, contaremos um não-tão-tradicional-ainda-por-aqui <a title="Hora Extra" href="http://horaextra.org" target="_blank">#horaextra</a>, em um boteco próximo de você! =P</p>

<p>A programação completa do evento é a seguinte:</p>

<p>18h30min - Credenciamento
18h45min - Abertura
19h00min - <a href="#palestra-bdd-francisco-souza">BDD: Desenvolvimento guiado por comportamento (Francisco Souza)</a>
19h50min - <a href="#palestra-comunidade-henrique-bastos">Empreendendo uma comunidade de sucesso (Henrique Bastos)</a>
20h40min - <a href="#palestra-git-jeveaux">Controle de versão sem dor de cabeça com Git (Paulo Jeveaux)</a>
21h30min - #horaextra</p>

<h2>Detalhes das palestras:</h2>


<h3><a name="palestra-bdd-francisco-souza"></a><strong>Desenvolvimento guiado por comportamento</strong></h3>


<p><span style="color: #000000;"><em>Behaviour-driven  development (BDD) é um tema emergente. Trata-se de uma prática de  especificação e design de software, que tem como efeito colateral a  construção de testes de regressão capazes de ajudar na garantia do  funcionamento de um software. Nesta palestra você conhecerá os conceitos  do desenvolvimento guiado por comportamento (BDD), e entenderá como  guiar o design e a arquitetura de um software através da escrita de  especificações executáveis e de alto nível.</em></span></p>

<p><strong>Palestrante:</strong> Francisco Souza
<em><a href="http://www.franciscosouza.com"><img class="alignright size-full wp-image-1123" title="Francisco Souza" src="http://d3r4tlsmw3jkg0.cloudfront.net/2010/12/5011882338_c0f750ce78_s.jpg" alt="Francisco Souza" width="75" height="75" /></a>Mundialmente conhecido no interior de Cachoeiro de Itapemirim, <a title="Francisco Souza" href="http://www.franciscosouza.com" target="_blank">Francisco Souza</a> é membro do time de desenvolvedores e jogadores de videogame da <a title="Giran" href="http://www.giran.com.br/" target="_blank">Giran</a>. É apaixonado por desenvolvimento de softwares, entusiasta em <a title="Python" href="http://www.python.org/" target="_blank">Python</a>, <a title="Django" href="http://www.djangoproject.com/" target="_blank">Django</a> e software livre, viciado em <a title="Coding dojo" href="http://codingdojo.org/" target="_blank">coding dojos</a> e associado à <a title="Associação Python Brasil" href="http://associacao.python.org.br/" target="_blank">Associação Python Brasil</a>.  Participa ativamente nas comunidades locais de desenvolvimento e  software livre. Por último, mas não menos importante, é estudante de  Licenciatura em Informática e possui todas as certificações PMP  (Professional Mario Player).</em></p>

<h3><a name="palestra-comunidade-henrique-bastos"></a><strong>Empreendendo uma comunidade de sucesso</strong></h3>


<p><em>Descubra  como canalizar o poder da Internet em ações reais! Como utilizar o  mundo virtual para organizar grupos de pessoas de forma colaborativa,  distribuída e auto-gerenciada. Conheça as lições aprendidas com a  experiência de mais de 2 anos empreendendo a comunidade de software do  Rio de Janeiro. Uma comunidade que começou local e vem se expandindo  para além das fronteiras do estado e do país.</em></p>

<p><strong>Palestrante:</strong> Henrique Bastos
<em><a id="internal-source-marker_0.03816027946059808" href="http://henriquebastos.net/"></a><a href="http://www.henriquebastos.net"><img class="size-full wp-image-1121 alignright" title="Henrique Bastos" src="http://d3r4tlsmw3jkg0.cloudfront.net/2010/12/henrique.png" alt="Henrique Bastos" width="86" height="86" /></a>Henrique Bastos é apaixonado por desenvolvimento de software! Trabalha desenvolvendo sistemas com <a href="http://python.org/">Python</a>, <a href="http://www.djangoproject.com/">Django</a> e <a href="http://agilemanifesto.org/">Métodos Ágeis</a>. Além de atuar constantemente nas comunidades de software organizando <a href="http://devinrio.com.br/2009">eventos</a> e <a href="http://pythoncampus.org/">encontros</a>, ministrando <a href="http://henriquebastos.net/tag/palestra/">palestras</a>, <a href="http://henriquebastos.net/tag/curso/">cursos</a> e <a href="http://henriquebastos.net/2010/02/09/pycon-python-and-open-source-community-on-floss-weekly/">evangelizando</a> o desenvolvimento sustentável de software, no Brasil e no <a href="http://henriquebastos.net/2010/04/13/balanco-da-pycon-2010/">exterior</a>.</em></p>

<h3><a name="palestra-git-jeveaux"></a><strong>Controle de versão sem dor de cabeça com Git</strong></h3>


<p>GIT  é um projeto open source, escrito originalmente por Linus Torvalds para  manter o controle de versão do código do Kernel do Linux de forma  distribuída e focada em eficiência e rapidez. Descubra como aproveitar o  poder desta ferramenta para gerenciar de maneira simples e eficaz o  código dos seus projetos também.</p>

<p><strong>Palestrante:</strong> Paulo César M. Jeveaux
<em><a id="internal-source-marker_0.03816027946059808" href="http://jeveaux.com/"></a></em></p>

<p><em><a id="internal-source-marker_0.03816027946059808" href="http://jeveaux.com/"></a><a href="http://www.jeveaux.com"><img class="alignright size-full wp-image-1126" title="Paulo César M. Jeveaux" src="http://d3r4tlsmw3jkg0.cloudfront.net/2010/12/paulo-jeveaux.jpg" alt="Paulo César M. Jeveaux" width="75" height="75" /></a>Jeveaux trabalha na <a href="http://www.giran.com.br/">Giran Soluções e Ensino</a>,  onde atua com desenvolvimento de plataformas e serviços para internet  de alta performance e escalabilidade utilizando metodologias ágeis como  XP e Scrum. É fundador do <a href="http://esjug.org/">Grupo de Usuários Java do Espírito Santo</a> (ESJug), do grupo de metodologias ágeis (Agile-ES), foi administrador do <a href="http://portaljava.com/">PortalJava</a> por 8 anos e hoje participa da moderação do <a href="http://guj.com.br/">GUJ</a>. Possui mais de 9 anos de experiência em desenvolvimento de sistemas em diversos segmentos, passando por <a href="http://globo.com/">globo.com</a>, Vale, Claro, Xerox, CEF e outras. Grande entusiasta e participante ativo das comunidades de Java, Agile, Ruby e Linux.</em></p>

<p>Até lá, galera! :D</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Educação: a melhor ideia a ser divulgada]]></title>
    <link href="http://www.franciscosouza.com.br/2010/11/21/educacao-a-melhor-ideia-a-ser-divulgada/"/>
    <updated>2010-11-21T22:01:56-02:00</updated>
    <id>http://www.franciscosouza.com.br/2010/11/21/educacao-a-melhor-ideia-a-ser-divulgada</id>
    <content type="html"><![CDATA[<p>Este foi o título do post escrito pelo <a title="Educação: a melhor idéia a ser divulgada" href="http://herberthamaral.com/2010/11/educacao-a-melhor-ideia-a-ser-divulgada/" target="_blank">Herberth Amaral</a>, que faz uma referência à campanha em prol dos blogs educativos, iniciada por Alessandro Brandão, do blog <a title="English Experts" rel="nofollow" href="http://www.englishexperts.com.br/" target="_blank">English Experts</a>, no qual ele me convoca e convoca alguns outros blogueiros a escrever sobre o tema. Me aproveitei do título do Herberth para apresentar algumas impressões minha sobre a divulgação de blogs educativos. De antemão, me sinto surpreso e também orgulhoso por qualificarem meu blog como um blog educativo.</p>

<p>A maior parte do conteúdo que publico tanto neste quando no meu <a title="Francisco Souza" href="http://www.franciscosouza.com" target="_blank">outro blog</a> é baseada nas minhas experiências ou na minha vontade de brincar com algumas coisas, e compartilhar o resultado disso (como a sequência de posts apresentando o uso de diversos frameworks <a title="Posts sobre Python" href="http://www.franciscosouza.com.br/tag/python" target="_self">Python</a> no <a title="Posts sobre Google App Engine" href="http://www.franciscosouza.com.br/tag/google-app-engine/" target="_self">Google App Engine</a>), em alguns casos, o objetivo inicial era compartilhar conhecimento com um amigo mais próximo e então eu decidi que seria legal trazer para o blog. Em seu artigo, Herberth apresentou a ideia de um espírito competitivo que plenamente eu repudio. Estabelecer uma concorrência entre blogs é uma coisa muito ridícula e infantil, afinal de contas, estamos todos aqui com o mesmo objetivo.</p>

<p>Esse post é curto, um pouco fora do comum que eu costumo escrever, mas é um posicionamento de apoio à campanha inciada pelo Alessandro. Neste momento, estou juntando-me a diversos blogueiros e twitteiros ilustres, como Herberth Amaral, Alessandro Brandão e Eike Batista. Divulgue esta ideia, faça sua parte! Não convocarei nenhum blogueiro explicitamente, mas espero contar com o apoio de todos os blogueiros que lerem este post.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Livro Python e Django]]></title>
    <link href="http://www.franciscosouza.com.br/2010/11/02/livro-python-e-django/"/>
    <updated>2010-11-02T18:44:03-02:00</updated>
    <id>http://www.franciscosouza.com.br/2010/11/02/livro-python-e-django</id>
    <content type="html"><![CDATA[<p><a title="Python e Django" href="http://novatec.com.br/livros/pythonedjango/" target="_blank"><img class="alignright size-full wp-image-1113" title="Python e Django" src="http://d3r4tlsmw3jkg0.cloudfront.net/2010/11/capa_ampliada9788575222478.jpg" alt="Python e Django" width="234" height="315" /></a>Na última semana recebi o excelente livro Python e Django - Desenvolvimento ágil de aplicações web, escrito por <a title="Osvaldo Santana" rel="nofollow" href="http://twitter.com/osantana" target="_blank">Osvaldo Santana</a> e Thiago Galesi, da <a title="Triveos" href="http://www.triveos.com.br/" target="_blank">Triveos</a>. O livro foi lançado pela editora <a title="Novatec" href="http://www.novatec.com.br/" target="_blank">Novatec</a>, que me enviou um exemplar para avaliação. De forma sucinta, posso dizer que o livro é totalmente sensacional e vale cada centavo que custa. Os autores estão de parabéns pelo material de qualidade sobre <a title="Python" href="http://www.python.org" target="_blank">Python</a> e <a title="Django" href="http://www.djangoproject.com" target="_blank">Django</a>.</p>

<p>A primeira parte do livro apresenta a linguagem Python de forma simples e direta, incluindo também um pequeno manual de referência das funções builtin, uma lista com os módulos da biblioteca padrão e fazendo uma rápida (e ótima) menção ao uso do <a title="virtualenv" rel="nofollow" href="http://virtualenv.openplans.org/" target="_blank">virtualenv</a> para desenvolvimento com ambientes isolados.</p>

<p>A partir do oitavo capítulo, o livro apresenta o framework Django, contando um pouco da história do mesmo, explicando sua arquitetura, forma de instalação e o seu uso num projeto de agenda de eventos. Diferente da abordagem adotada por <a title="Marinho Brandão" rel="nofollow" href="http://www.marinhobrandao.com" target="_blank">Marinho Brandão</a> no livro <a title="Aprendendo Django no Planeta Terra" rel="nofollow" href="http://www.aprendendodjango.com" target="_blank">Aprendendo Django no Planeta Terra</a>, aqui os autores estão um pouco mais preocupados com os conceitos por trás do framework (até por se tratar de públicos diferentes).</p>

<p>Alguns pontos que gostaria de destacar:</p>

<ol>
    <li>Trata-se do melhor material introdutório de Django em português que eu conheço;</li>
    <li>Além de excelente material introdutório, também é um ótimo manual de referência da linguagem Python e do próprio framework Django;</li>
    <li>Achei foda incluírem referência ao desenvolvimento utilizando o virtualenv;</li>
    <li>Os autores foram muito felizes com o detalhamento do Django ORM no capítulo 14 e a demonstração da Django Debug Toolbar no capítulo 16;</li>
    <li>O capítulo que trata sobre Deploy e implantação também foi muito feliz ao abordar deploy com virtualenv, mas acho que outro servidor além do Apache também poderia ser abordado;</li>
    <li>Ponto para o Apêndice A que fala sobre depuração em Python utilizando o Python debugger;</li>
    <li>O Apêndice B fala da instalação do Python no Windows, mas o livro deixa um pouco a desejar quanto ao uso de Django no Windows. Na minha opinião não chega a ser um problema: só por que você pode desenvolver em Python no Windows não significa que você deva =P</li>
</ol>


<p>Na <a title="Python e Django" rel="nofollow" href="http://novatec.com.br/livros/pythonedjango/" target="_blank">página do livro no site da Novatec</a> é possível fazer o download da introdução e do sumário do livro. Ficou interessado no livro? Você pode comprá-lo com 20% de desconto utilizando o código promocional <strong>FSOUZA</strong> até Dezembro! :)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[III Liberdade Interativa]]></title>
    <link href="http://www.franciscosouza.com.br/2010/10/29/iii-liberdade-interativa/"/>
    <updated>2010-10-29T21:56:13-02:00</updated>
    <id>http://www.franciscosouza.com.br/2010/10/29/iii-liberdade-interativa</id>
    <content type="html"><![CDATA[<p>Como da para reparar no banner do site, o <a title="Liberdade Interativa" rel="nofollow" href="http://www.tux-es.org/liberdadeinterativa" target="_blank">Liberdade Interativa</a> chega à terceira edição, e, pela primeira vez, sem uma palestra minha =P A comunidade <a title="Tux-ES" rel="nofollow" href="http://www.tux-es.org" target="_blank">Tux-ES</a> está organizando a terceira edição do Liberdade Interativa, que acontecerá novamente numa quinta-feira à noite, dia 11 de novembro, na Faesa da Av. Vitória. Não é necessário fazer inscrição, apenas apareça! A programação é a seguinte:</p>

<!--more-->


<p><strong>Desenvolvimento ágil com Scrum</strong>
<strong>Palestrante:</strong> <a title="Jeveaux" rel="nofollow" href="http://www.jeveaux.com" target="_blank">Paulo Cesar M. Jeveaux</a>
Jeveaux trabalha na Giran Soluções e Ensino, onde atua com desenvolvimento de plataformas e serviços para internet de alta performance e escalabilidade utilizando metodologias ágeis como XP e Scrum. É fundador do Grupo de Usuários Java do Espírito Santo (ESJug), do grupo de metodologias ágeis (Agile-ES), foi administrador do PortalJava por 8 anos e hoje participa da moderação do GUJ. Possui mais de 9 anos de experiência em desenvolvimento de sistemas em diversos segmentos, passando por <a href="http://globo.com/" target="_blank">globo.com</a>, Vale, Claro, Xerox, CEF e outras. Grande entusiasta e participante ativo das comunidades de Java, Agile, Ruby e Linux.</p>

<p><strong>Introdução ao TDD: Desenvolvimento guiado por testes</strong>
<strong>Palestrante:</strong> <a title="Leo Hackin" rel="nofollow" href="http://www.leohackin.com.br" target="_blank">Leo &#8220;Hackin&#8221;</a>
Léo Hackin trabalha na Giran, onde atua como consultor e arquiteto especialista em aplicações web e mobile e como aprendiz eterno de XP/Scrum/qualquer-coisa-que-melhore-o-trabalho-das-pessoas. Atuante no mercado de internet à desde 96, já desenvolveu soluções para as mais diversas plataformas para clientes como Vale, Claro, CEF, Xerox, Sebrae e outras além de vários trabalhos como consultor/desenvolvedor para diversas agências do estado. Atualmente coordena o grupo PHP-ES e divide seu tempo (ou tenta) entre sua vida geek, trabalho, música, Rails, Python e seu blog.</p>

<p><strong>Expressões regulares</strong>
<strong>Palestrante:</strong> <a title="Almir Mendes" rel="nofollow" href="http://www.almirmendes.net" target="_blank">Almir &#8220;M3nd3s&#8221;</a>
Profissional na área de TI desde 1999. Apaixonado por Software Livre e desenvolvimento Web, já trabalhou tanto com desenvolvimento de ferramentas Web PHP quanto com suporte e administração de ambientes servidores GNU/Linux e ferramentas OpenSource. Graduando em Ciência da Computação na FAESA. Certificado LPIC-1 (Junior Level Linux Professional). Membro ativo da comunidade Software Livre local, atuando ativamente em comunidades como PHP-ES e Tux-ES.</p>

<p>Infelizmente não poderei comparecer a esta edição por causa de uma prova na faculdade, mas tenho certeza que o evento será excelente, uma oportunidade única de networking e palestras de altíssimo nível! :)</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[O que eu ando aprontando?]]></title>
    <link href="http://www.franciscosouza.com.br/2010/10/11/o-que-eu-ando-aprontando/"/>
    <updated>2010-10-11T22:50:28-03:00</updated>
    <id>http://www.franciscosouza.com.br/2010/10/11/o-que-eu-ando-aprontando</id>
    <content type="html"><![CDATA[<p>O blog deu uma esfriada, mas é que a vida anda meio corrida, e tenho travado algumas batalhas com o meu notebook nos últimos tempos. Além da faculdade que vem sugando meu tempo de forma desumana, o trabalho na Giran vai de vento em popa, continuo me aventurando nas minhas vidas de apresentações e palestras, também tenho tentado me dedicar mais a projetos open source (codar mais, postar menos =P).<!--more--></p>

<p>Criamos internamente na Giran o <a title="Giran Siege" rel="nofollow" href="http://blog.giran.com.br/2010/09/giran-siege-palestras-internas-da-giran/" target="_blank">Giran Siege</a>, nosso ciclo interno de palestras. Já participei com duas apresentações: <a title="Behaviour-driven development and acceptance tests on Java web applications " rel="nofollow" href="http://www.slideshare.net/franciscosouza/behaviourdriven-development-and-acceptance-tests-on-java-web-applications" target="_blank">Behaviour-driven development and acceptance tests on Java web applications</a> (BDD para testes de aceitação em Java) e <a title="Flask: Microframework para construção de aplicações web em Python" rel="nofollow" href="http://www.slideshare.net/franciscosouza/flask-microframework-para-construo-de-aplicaes-web-em-python-5257773" target="_blank">Flask: Microframework para construção de aplicações web em Python</a>. Ainda este mês farei minha terceira apresentação, sobre o <a title="Express" rel="nofollow" href="http://expressjs.com/" target="_blank">Express</a>, um framework web <a title="node.js" rel="nofollow" href="http://nodejs.org" target="_blank">node.js</a>, será no dia 27.</p>

<p>Na próxima semana, no dia 20 de Outubro, vou ao <a title="IFES - Campus Cachoeiro de Itapemirim" rel="nofollow" href="http://www.ci.ifes.edu.br" target="_blank">IFES de Cachoeiro de Itapemirim</a> apresentar a palestra &#8220;Seja lento, seja ágil: Entendendo a cultura e o ecossistema ágil&#8221;, durante a III Jornada Acadêmica de Ciência, Tecnologia e Cultura (JACITEC). A palestra será às 20h20min, no auditório do campus de Cachoeiro de Itapemirim do IFES. A programação na noite de quarta será a seguinte:</p>

<ul>
    <li>17h - Configurando um Proxy autenticado com Squid e Sarg (<a title="Euzébio Viana" rel="nofollow" href="http://twitter.com/euzebioviana" target="_blank">Euzébio Viana</a> - IFES);</li>
    <li>18h - Implementando RIA com Flex (<a title="Leonardo Eloy" rel="nofollow" href="http://twitter.com/EloyLeonardo" target="_blank">Leonardo Eloy</a> - IFES).</li>
    <li>19h - Arena de coding dojo - é nozes \o/;</li>
    <li>20:20h - Seja lento, seja ágil: Entendendo a cultura e o ecossistema ágil (<a title="Francisco Souza" rel="nofollow" href="http://twitter.com/franciscosouza" target="_blank">Francisco Souza</a> - <a title="Giran" rel="nofollow" href="http://www.giran.com.br" target="_blank">Giran Soluções e Ensino</a>);</li>
    <li>21:10h - Introdução ao TDD - Desenvolvimento Guiado por Testes (<a title="Magno Machado" rel="nofollow" href="http://twitter.com/magnomp" target="_blank">Magno Machado</a> e <a title="Breno Martinusso" rel="nofollow" href="http://twitter.com/martinusso" target="_blank">Breno Martinusso</a> - <a title="Gerpos Sistemas" rel="nofollow" href="http://www.gerpos.com.br" target="_blank">Gerpos Sistemas</a>).</li>
</ul>


<p>Mas a III Jacitec não será só na quarta-feira, o evento contará ainda com a apresentação <em>&#8220;Regulamentação da profissão de informática: vantagem ou desvantagem?&#8221;</em>, que será apresentada pela amiga <a title="Andressa Agnhesi" rel="nofollow" href="http://twitter.com/agnhesi" target="_blank">Andressa Agnhesi</a>, da <a title="UFES" rel="nofollow" href="http://www.ufes.br" target="_blank">UFES</a>, na <strong>terça-feira, dia 19 de Outubro às 20:45h</strong>, e a palestra <em>&#8220;Assumindo o controle da situação com sistemas de controle de versão&#8221;</em>, que será apresentada pelo Edgard Cunha, da Micronline Sistemas e Internet, na <strong>sexta-feira, dia 22 de Outubro às 15h</strong>.</p>

<p>No mais, tenho posts estacionados na mente e nos rascunhos do blog, e um dia eles devem sair. Não se espante se o blog seguir abandonado por mais um tempo, mas prometo que pelo menos nas férias da faculdade eu volto à atividade de forma mais ativa =P</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[II Workshop de PHP do Espírito Santo: foi show!]]></title>
    <link href="http://www.franciscosouza.com.br/2010/08/28/ii-workshop-de-php-do-espirito-santo-foi-show/"/>
    <updated>2010-08-28T19:28:16-03:00</updated>
    <id>http://www.franciscosouza.com.br/2010/08/28/ii-workshop-de-php-do-espirito-santo-foi-show</id>
    <content type="html"><![CDATA[<p>Catei o título do post sobre o <a title="II Liberdade Interativa" href="http://www.franciscosouza.com.br/2010/08/20/ii-liberdade-interativa-foi-show/" target="_self">II Liberdade Interativa</a>, por que o evento manteve o padrão &#8220;show&#8221; de qualidade =D O II Workshop de PHP do Espírito Santo aconteceu no dia 28 de agosto de 2010, na <a title="UVV" rel="nofollow" href="http://www.uvv.br" target="_blank">UVV</a>, e eu também apresentei uma palestra neste evento, sobre o framework, com um colega de trabalho, o <a title="André Tagliati" rel="nofollow" href="http://www.taglaiti.com.br" target="_blank">André Tagliati</a>. Apresentamos a palestra entitulada &#8220;CodeIgniter: Turbinando a produtividade com MVC&#8221;. cb45b779a3d441e6a88ffba6facf7b4d<!--more--></p>

<p>Além da minha palestra com o Tagliati, também foram apresentadas as palestras:</p>

<ul>
    <li>PHPzeiro: Adote um framework, palestra bacana e divertida apresentada pelo <a title="Leo Hackin" rel="nofollow" href="http://www.leohackin.com.br" target="_blank">Leo Hackin</a>, que aproveitou o momento para implicar um pouco com os designers e o <span style="text-decoration: line-through;">Gligli </span>André Tagliati;</li>
    <li>MySQL: Técnicas simples e eficazes para tirar o máximo do seu servidor Mysql, apresentada pelo Marcelo Raposo, que demonstrou com autoridade no assunto temas como otimização e uso de cache para melhorar o tempo de resposta do servidor, além de outras configurações do MySQL, como tamanho de buffer, limite de conexões, storage engine, etc.;</li>
    <li>PHP Data Objects - Interface única de comunicação com SGBDs, apresentada pelo <a title="Almir M3nd3s" rel="nofollow" href="http://www.almirmendes.net" target="_blank">Almir M3nd3s</a>, o guru da comunidade de software livre capixaba. A palestra foi bastante bacana e tentou apresentar alguns padrões conhecidos em outras linguagens como Java (JDBC) e Python (Python DB API), incluindo o uso simplificado da API;</li>
    <li>Moodle: fazendo EAD de qualidade com PHP, apresentada pelo <a title="Lucas Coradini" rel="nofollow" href="http://www.lucascoradini.com" target="_blank">Lucas Coradini</a>, o designer da parada, mas que também saca de programação e tem uma certa experiência com educação à distância. Como eu faço um curso à distância e já conhecia o contexto, achei a palestra bastante bacana e útil. O mais bacana é que o Coradini mandou MUITO bem, e surpreendeu grande parte do público que esperava menos da palestra;</li>
    <li>Desenvolvimento ágil de software com Scrum, apresentada pelo <a title="Makoto Hashimoto" rel="nofollow" href="http://www.makoto.blog.br" target="_blank"><span style="text-decoration: line-through;">Oscar </span>Makoto Hashimoto</a> e <a title="Paulo Jeveaux" rel="nofollow" href="http://www.jeveaux.com/blog/" target="_blank">Paulo Jeveaux</a>. A interação com a plateia e a demonstração de interesse da galera, inclusive nas conversas pós-evento, demonstram claramente que o Makoto e o <em>Já vou</em> mandaram SUPER bem.</li>
</ul>


<p>O balanço do evento, no final das contas, foi o padrão show de qualidade, e perceber a presença das pessoas do interior do estado. Para quem quiser os slides da minha apresentação, eu disponibilizei no SlideShare :) Se você tiver interesse em reaproveitar a apresentação, <a title="Contato" href="http://www.franciscosouza.com.br/contato">entre em contato comigo</a> que eu envio em formato ODP ou PPT :)</p>

<p>&nbsp;</p>

<div id="__ss_5075678" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="CodeIgniter: turbinando a produtividade com MVC" rel="nofollow" href="http://www.slideshare.net/franciscosouza/codeigniter-turbinando-a-produtividade-com-mvc">CodeIgniter: turbinando a produtividade com MVC</a></strong><object id="__sse5075678" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=apresentacaocodeigniter-100828090946-phpapp02&amp;stripped_title=codeigniter-turbinando-a-produtividade-com-mvc" /><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=apresentacaocodeigniter-100828090946-phpapp02&amp;stripped_title=codeigniter-turbinando-a-produtividade-com-mvc" name="__sse5075678" allowscriptaccess="always" allowfullscreen="true"></embed></object>&nbsp;
<div style="padding: 5px 0 12px;">View more <a rel="nofollow" href="http://www.slideshare.net/">presentations</a> from <a rel="nofollow" href="http://www.slideshare.net/franciscosouza">Francisco Souza</a>.</div>
</div>


<p>&nbsp;</p>

<p>&nbsp;</p>

<p>No mais, é isso. Até o III Workshop de PHP do Espírito Santo, que, quem sabe, não role no interior do estado.  ;)</p>

<script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;c2=7400849&amp;c3=1&amp;c4=&amp;c5=&amp;c6="></script>


<script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;c2=7400849&amp;c3=1&amp;c4=&amp;c5=&amp;c6="></script>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[II Liberdade Interativa: foi show!]]></title>
    <link href="http://www.franciscosouza.com.br/2010/08/20/ii-liberdade-interativa-foi-show/"/>
    <updated>2010-08-20T14:26:43-03:00</updated>
    <id>http://www.franciscosouza.com.br/2010/08/20/ii-liberdade-interativa-foi-show</id>
    <content type="html"><![CDATA[<p>Ontem aconteceu a segunda edição do <a title="Liberadade Interativa" rel="nofollow" href="http://www.tux-es.org/liberdadeinterativa/" target="_blank">Liberdade Interativa</a>, um evento da comunidade <a title="Tux ES" rel="nofollow" href="http://www.tux-es.org" target="_blank">Tux-ES</a>. O evento contou com três apresentações: na primeira, a <a title="Rapha" rel="nofollow" href="http://twitter.com/ra_pha" target="_blank">Rapha</a> falou sobre o Bacula, uma ferramenta para backups de servidores em redes. Logo depois da Rapha, <span style="text-decoration: line-through;">fui desafiado</span> apresentei a palestra &#8220;Django: o framework web para perfeccionistas com prazo&#8221;. Fechando o evento, o colega <a title="Almir M3nd3s" rel="nofollow" href="http://twitter.com/m3nd3s" target="_blank">M3nd3s</a> apresentou a palestra &#8220;Iptables - Entendendo como fazer um firewall pessoal&#8221;.<!--more--></p>

<p>Excetuando o fato que estourei um pouquinho o tempo na minha apresentação, o momento foi super válido, pois pude contar com a colaboração do público com muitas perguntas e comentários, e acredito que pelo menos algumas pessoas ficaram interessadas em dar uma olhada no Django. Também foi bacana o momento pós-evento onde puder trocar uma ideia com algumas pessoas, inclusive um aluno da UFES que está utilizando Django para uma aplicação de backend em seu trabalho de conclusão de curso.</p>

<p>Disponibilizei os slides da apresentação no SlideShare:</p>

<div id="__ss_5015915" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Django: O Framework web para perfeccionistas com prazos" rel="nofollow" href="http://www.slideshare.net/franciscosouza/django-o-framework-web-para-perfeccionistas-com-prazos" target="_blank">Django: O Framework web para perfeccionistas com prazos</a></strong><object id="__sse5015915" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=apresentacaodjango-100819211400-phpapp01&amp;stripped_title=django-o-framework-web-para-perfeccionistas-com-prazos" /><param name="name" value="__sse5015915" /><param name="allowfullscreen" value="true" /><embed id="__sse5015915" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=apresentacaodjango-100819211400-phpapp01&amp;stripped_title=django-o-framework-web-para-perfeccionistas-com-prazos" name="__sse5015915" allowscriptaccess="always" allowfullscreen="true"></embed></object>&nbsp;
<div style="padding: 5px 0 12px;">View more <a rel="nofollow" href="http://www.slideshare.net/" target="_blank">presentations</a> from <a rel="nofollow" href="http://www.slideshare.net/franciscosouza" target="_blank">Francisco Souza</a>.</div>
</div>


<p>Como os slides não fazem muito sentido sem as notas, também disponibilizo os slides com as notas, para quem tiver interesse:</p>

<div id="__ss_5020424" style="width: 477px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Django: o framework web para perfeccionistas com prazos" rel="nofollow" href="http://www.slideshare.net/franciscosouza/django-o-framework-web-para-perfeccionistas-com-prazos" target="_blank">Django: o framework web para perfeccionistas com prazos</a></strong><object id="__sse5020424" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="477" height="510" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/doc_player.swf?doc=101pdfsamapresentacaodjango-100820121739-phpapp02&amp;stripped_title=django-o-framework-web-para-perfeccionistas-com-prazos-5020424" /><param name="name" value="__sse5020424" /><param name="allowfullscreen" value="true" /><embed id="__sse5020424" type="application/x-shockwave-flash" width="477" height="510" src="http://static.slidesharecdn.com/swf/doc_player.swf?doc=101pdfsamapresentacaodjango-100820121739-phpapp02&amp;stripped_title=django-o-framework-web-para-perfeccionistas-com-prazos-5020424" name="__sse5020424" allowscriptaccess="always" allowfullscreen="true"></embed></object>&nbsp;
<div style="padding: 5px 0 12px;">View more <a rel="nofollow" href="http://www.slideshare.net/" target="_blank">documents</a> from <a rel="nofollow" href="http://www.slideshare.net/franciscosouza" target="_blank">Francisco Souza</a>.</div>
</div>


<p>Novamente, gostaria muito de feedback, então se você tem alguma crítica, comentário, dúvida ou qualquer coisa, entre em contato comigo, ou faça um comentário aqui :) E no mais, é isso! Nos vemos no III Liberdade Interativa! ;)</p>

<script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;c2=7400849&amp;c3=1&amp;c4=&amp;c5=&amp;c6="></script>


<script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;c2=7400849&amp;c3=1&amp;c4=&amp;c5=&amp;c6="></script>




<script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;c2=7400849&amp;c3=1&amp;c4=&amp;c5=&amp;c6="></script>


<script src="http://b.scorecardresearch.com/beacon.js?c1=7&amp;c2=7400849&amp;c3=1&amp;c4=&amp;c5=&amp;c6="></script>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Voando com o Flask no Google App Engine]]></title>
    <link href="http://www.franciscosouza.com.br/2010/08/12/voando-com-o-flask-no-google-app-engine/"/>
    <updated>2010-08-12T14:40:55-03:00</updated>
    <id>http://www.franciscosouza.com.br/2010/08/12/voando-com-o-flask-no-google-app-engine</id>
    <content type="html"><![CDATA[<p><img class="alignright size-full wp-image-1095" title="Flask" src="http://d3r4tlsmw3jkg0.cloudfront.net/2010/08/logo-full.png" alt="Flask" width="201" height="164" />Depois de uma pequena pausa, chegamos finalmente à terceira parte da série de posts sobre o uso de frameworks Python no Google App Engine. Após abordar o uso do <a title="Voando com o Django no Google App Engine" href="http://www.franciscosouza.com.br/2010/08/02/voando-com-o-django-no-google-app-engine/" target="_blank">Django</a> e do <a title="Voando com o web2py no Google App Engine" href="http://www.franciscosouza.com.br/2010/08/06/voando-com-o-web2py-no-google-app-engine/" target="_blank">web2py</a> no App Engine, agora veremos como usar o <a title="Flask" rel="nofollow" href="http://flask.pocoo.org" target="_blank">Flask</a>, um microframework para Python baseado no <a title="Werkzeug" rel="nofollow" href="http://werkzeug.pocoo.org" target="_blank">Werkzeug</a>, no <a title="Jinja2" rel="nofollow" href="http://jinja.pocoo.org/2/" target="_blank">Jinja2</a> e em boas intenções. Diferente do Django e do web2py, o Flask não possui uma camada de abstração do banco de dados, não é um framework full stack. Trata-se de uma excelente decisão de design, uma vez que é possível trabalhar com o <a title="SQLAlchemy" rel="nofollow" href="http://www.sqlalchemy.org" target="_blank">SQLAlchemy</a> (ou qualquer outro ORM) em sistemas que usam bancos de dados relacionais, e a API nativa para os bancos de dados não relacionais, quando for o caso.<!--more--></p>

<p>O fato de o Flask ser um microframework significa que há mais espaço para customização e menos acoplamento, porém é um pouco mais trabalhoso (mas não difícil) construir uma aplicação com Flask, pois há muitos blocos a serem montados, e o Flask não faz 10 bilhões de coisas pelo desenvolvedor. Apesar disso tudo, desenvolver com Flask é prazeroso e divertido! Como o Flask não conta com uma camada de abstração de dados nem um ORM, vamos utilizar a <a title="API de armazenamento de dados - App Engine" rel="nofollow" href="http://code.google.com/intl/pt-BR/appengine/docs/python/datastore/" target="_blank">API nativa de armazenamento de dados do Google App Engine</a>.</p>

<p>Como foi feito nas duas primeiras partes, vamos criar um blog versão mini onde teremos duas <em>views</em>: uma para listar os posts, de acesso público, e uma para escrever posts, com acesso restrito por login. O primeiro passo, como nos outros casos, é configurar o ambiente de desenvolvimento. É algo simples, mas da um pouco de trabalho :) Primeiro, é necessário criar o diretório da aplicação e colocar lá dentro o arquivo <em>app.yaml</em> do Google App Engine, com o seguinte conteúdo:</p>

<p>[cc lang=&#8221;yaml&#8221;]application: gaeseries
version: 3
runtime: python
api_version: 1</p>

<p>handlers:
- url: .*
  script: main.py[/cc]</p>

<p>Apenas definimos o ID da aplicação, a versão e um <em>handler</em> para todas as requisições: um script chamado <em>main.py</em>, que definiremos mais adiante. Vamos primeiro criar a aplicação do Flask, e depois lidar com o Google App Engine.</p>

<p>Depois de configurar o <em>app.yaml</em>, vamos instalar o Flask e suas dependências (Werkzeug, Jinja2 e simplejson) dentro da nossa aplicação. Basta baixar as bibliotecas e adicionar na raiz do projeto. Eis abaixo os comandos necessários num Linux/Mac para instalar as ferramentas citadas acima:</p>

<p>[cc lang=&#8221;bash&#8221;]$ wget http://github.com/mitsuhiko/flask/zipball/0.6
$ unzip mitsuhiko-flask-0.6-0-g5cadd9d.zip
$ cp -r mitsuhiko-flask-5cadd9d/flask ~/Projetos/blog/gaeseries
$ wget http://pypi.python.org/packages/source/W/Werkzeug/Werkzeug-0.6.2.tar.gz
$ tar -xvzf Werkzeug-0.6.2.tar.gz
$ cp -r Werkzeug-0.6.2/werkzeug ~/Projetos/blog/gaeseries/
$ wget http://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.5.tar.gz
$ tar -xvzf Jinja2-2.5.tar.gz
$ cp -r Jinja2-2.5/jinja2 ~/Projetos/blog/gaeseries/
$ wget http://pypi.python.org/packages/source/s/simplejson/simplejson-2.1.1.tar.gz
$ tar -xvzf simplejson-2.1.1.tar.gz
$ cp -r simplejson-2.1.1/simplejson ~/Projetos/blog/gaeseries/[/cc]</p>

<p>Note que, no meu caso, o projeto está dentro de <em>~/Projetos/blog/gaeseries</em>, por isso copiei tudo que era necessário para este diretório. Agora temos tudo que precisamos para começar a codificar nossa aplicação. Para isso, vamos criar um pacote chamado <em>blog</em>:</p>

<p>[cc lang=&#8221;bash&#8221;]$ mkdir blog
$ touch blog/<strong>init</strong>.py[/cc]</p>

<p>Adicionamos então ao <em><strong>init</strong>.py</em> o código que define a nossa aplicação, nada muito complexo, digno de um microframework:</p>

<p>[cc lang=&#8221;python&#8221;]from flask import Flask
import settings</p>

<p>app = Flask(&#8216;blog&#8217;)
app.config.from_object(&#8216;blog.settings&#8217;)</p>

<p>import views[/cc]</p>

<p>Importamos dois módulos: <em>settings</em> e <em>views</em>. Estes módulos irão conter algumas configurações da aplicação e as <em>views</em> da aplicação, respectivamente. Vamos usar novamente o nosso amigo <em>touch</em> para criar os arquivos:</p>

<p>[cc lang=&#8221;bash&#8221;]$ touch blog/settings.py
$ touch blog/views.py[/cc]</p>

<p>Aqui está um exemplo de código para o arquivo <em>settings.py</em>:</p>

<p>[cc lang=&#8221;python&#8221;]DEBUG=True
SECRET_KEY=&#8217;dev_key_h8hfne89vm&#8217;
CSRF_ENABLED=True
CSRF_SESSION_LKEY=&#8217;dev_key_h8asSNJ9s9=+&#8217;[/cc]</p>

<p>Bom, agora podemos finalmente criar nosso único modelo, o modelo <em>Post</em>. Dentro do diretório da aplicação, vamos criar um arquivo chamado <em>models.py</em>, onde ficarão armazenados nossos modelos. Eis abaixo o código do modelo:</p>

<p>[cc lang=&#8221;python&#8221;]from google.appengine.ext import db</p>

<p>class Post(db.Model):</p>

<pre><code>title = db.StringProperty(required = True)
content = db.TextProperty(required = True)
when = db.DateTimeProperty(auto_now_add = True)
author = db.UserProperty(required = True)[/cc]
</code></pre>

<p>A última propriedade é uma instância <em>UserProperty</em>, uma &#8220;chave estrangeira&#8221; para um usuário, um objeto fornecido pela <a title="API das Contas do Google" rel="nofollow" href="http://code.google.com/intl/pt-BR/appengine/docs/python/users/" target="_blank">API de usuários do Google App Engine</a>. Nosso modelo já está pronto, e podemos começar as criar as <em>views</em> da aplicação, onde vamos lidar com as requisições do usuário. Primeiro, vamos criar a <em>view</em> de listagem dos posts, que vai ser acessada na URL <em>/posts</em>, dentro do arquivo <em>views.py</em>:</p>

<p>[cc lang=&#8221;python&#8221;]from blog import app
from models import Post
from flask import render_template</p>

<p>@app.route(&#8216;/posts&#8217;)
def list_posts():</p>

<pre><code>posts = Post.all()
return render_template('list_posts.html', posts=posts)[/cc]
</code></pre>

<p>Na última linha da <em>view</em>, foi feita uma chamada à função <em>render_template</em>, fornecida pelo Flask. O primeiro parâmetro da função é uma <em>string</em> contendo o nome do <em>template</em> a ser renderizado. Vamos então criar este <em>template</em> para que a listagem funcione. Para isto, é necessário criar um diretório chamado <em>templates</em> dentro do diretório da aplicação, dentro deste diretório, foi criado um arquivo <em>base.html</em>, que define o <em>layout</em> dos <em>template</em>s. O código do arquivo <em>base.html</em> pode ser visto aqui: <a title="Código do template base.html" rel="nofollow" href="http://gist.github.com/519845" target="_blank">http://gist.github.com/519845</a>.</p>

<p>Podemos então criar o <em>template list_posts.html</em>, que herda de <em>base.html</em>. O código deste <em>template</em> está aqui: <a title="Código do template list_posts.html" rel="nofollow" href="http://gist.github.com/519846" target="_blank">http://gist.github.com/519846</a>.</p>

<p>Para testar a <em>view</em> que acabamos de criar, precisamos executar o servidor de desenvolvimento do Google App Engine localmente, que lê o arquivo <em>app.yaml</em>. Assim, precisamos agora criar o script <em>main.py</em> para executar nossa aplicação do Flask. Toda aplicação Flask é também uma aplicação WSGI. Podemos utilizar então a biblioteca padrão do Google App Engine para executar aplicações WSGI:</p>

<p>[cc lang=&#8221;python&#8221;]from google.appengine.ext.webapp.util import run_wsgi_app
from blog import app</p>

<p>run_wsgi_app(app)[/cc]</p>

<p>Agora nossa aplicação está pronta para ser executada, e podemos fazer isso da mesma forma que fizemos no post sobre <em>web2py</em>, executando o script <em>dev_appserver.py</em> provido no SDK do Google App Engine:</p>

<pre>$ /usr/local/google_appengine/dev_appserver.py .</pre>


<p>Agora é possível acessar a listagem de <em>posts</em> na URL <em>http://localhost:8080/posts</em>, o único problema é que não há nenhum <em>post</em> ainda para ser listado :) Então vamos criar a <em>view</em> onde será possível escrever <em>posts</em>, esta <em>view</em> será protegida por login. Logo, para restringir o acesso a esta <em>view</em>, podemos usar um <em>decorator</em>. O único problema aqui é que nem o Flask nem o App Engine fornecem um <em>decorator</em> bacanudo para restringir o acesso à <em>view new_post</em>. O que fazer? Vamos criar um <em>decorator</em>, e colocá-lo dentro de um módulo <em>decorators.py</em> e importar este <em>decorator</em> no módulo <em>views.py</em>. Aqui está o código do módulo <em>decorators.py</em>:</p>

<p>[cc lang=&#8221;python&#8221;]from functools import wraps
from google.appengine.api import users
from flask import redirect, request</p>

<p>def login_required(func):</p>

<pre><code>@wraps(func)
def decorated_view(*args, **kwargs):
    if not users.get_current_user():
        return redirect(users.create_login_url(request.url))
    return func(*args, **kwargs)
return decorated_view[/cc]
</code></pre>

<p>Na <em>view new_post </em>vamos trabalhar com formulários, e para isto também precisamos de outra biblioteca. Uma biblioteca muito boa é o WTForms (que eu apresentei aqui certa vez, no post de <a title="Formulários inteligentes no Pylons com WTForms" href="http://www.franciscosouza.com.br/2010/04/27/formularios-inteligentes-no-pylons-com-wtforms/" target="_self">integração entre WTForms e Pylons</a>). É possível integrar o WTForms com o Flask utilizando a extensão Flask-WTF. Novamente, precisamos instalar na raiz do nosso projeto as duas ferramentas, da seguinte forma:</p>

<p><code>$ wget http://pypi.python.org/packages/source/W/WTForms/WTForms-0.6.zip
$ unzip WTForms-0.6.zip
$ cp -r WTForms-0.6/wtforms ~/Projetos/blog/gaeseries/
$ wget http://pypi.python.org/packages/source/F/Flask-WTF/Flask-WTF-0.2.3.tar.gz
$ tar -xvzf Flask-WTF-0.2.3.tar.gz
$ cp -r Flask-WTF-0.2.3/flaskext ~/Projetos/blog/gaeseries/</code></p>

<p>Agora sim, com o WTForms e o Flask-WTF instalados, podemos construir a classe de formulário e depois, finalmente, a <em>view new_post</em> e o <em>template</em> que exibirá o formulário. Eu coloquei a definição do formulário dentro do módulo <em>views.py</em>, mas em caso de aplicações maiores, o ideal é por os formulários dentro de um ou mais módulos separados. Aqui está a definição do formulário:</p>

<p>[cc lang=&#8221;python&#8221;]from flaskext import wtf
from flaskext.wtf import validators</p>

<p>class PostForm(wtf.Form):</p>

<pre><code>title = wtf.TextField('Title', validators=[validators.Required()])
content = wtf.TextAreaField('Content', validators=[validators.Required()])[/cc]
</code></pre>

<p>E, finalmente (antes tarde do que nunca =P), podemos criar a nossa <em>view new_post</em>:</p>

<p>[cc lang=&#8221;python&#8221;]@app.route(&#8216;/posts/new&#8217;, methods = [&#8216;GET&#8217;, &#8216;POST&#8217;])
@login_required
def new_post():</p>

<pre><code>form = PostForm()
if form.validate_on_submit():
    post = Post(title = form.title.data,
                content = form.content.data,
                author = users.get_current_user())
    post.put()
    flash('Post saved on database.')
    return redirect(url_for('list_posts'))
return render_template('new_post.html', form=form)[/cc]
</code></pre>

<p>E aqui está o <em>template new_post.html</em>: <a title="Código do template new_post.html" rel="nofollow" href="http://gist.github.com/520110" target="_blank">http://gist.github.com/520110</a>. Agora nossa aplicação está pronta: é necessário efetuar login para escrever posts, e a listagem de posts está disponível publicamente.</p>

<p>Você pode acessar a aplicação online neste endereço: <a title="Veja a versão online da aplicação" rel="nofollow" href="http://3.latest.gaeseries.appspot.com" target="_blank">http://3.latest.gaeseries.appspot.com</a> (utilize sua conta do Google para efetuar login e escrever <em>posts</em>).</p>

<p>O código completo da aplicação está disponível no Github: <a title="Código da aplicação, disponível no Github" rel="nofollow" href="http://github.com/fsouza/gaeseries/tree/flask" target="_blank">http://github.com/fsouza/gaeseries/tree/flask</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Voando com o web2py no Google App Engine]]></title>
    <link href="http://www.franciscosouza.com.br/2010/08/06/voando-com-o-web2py-no-google-app-engine/"/>
    <updated>2010-08-06T08:30:52-03:00</updated>
    <id>http://www.franciscosouza.com.br/2010/08/06/voando-com-o-web2py-no-google-app-engine</id>
    <content type="html"><![CDATA[<p><img class="alignright size-full wp-image-1092" title="web2py" src="http://d3r4tlsmw3jkg0.cloudfront.net/2010/08/web2py_logo.png" alt="web2py" width="120" height="105" />Chegamos à segunda parte da série de posts sobre o uso de frameworks Python no Google App Engine. O framework da vez é o <a title="web2py" rel="nofollow" href="http://www.web2py.com" target="_blank">web2py</a>, um leve e poderoso framework web fullstack. Assim como o Django, um dos principais recursos do web2py é uma poderosa camada de abstração dos dados (DAL - <em>data abstraction layer</em>), mas diferente do Django, a camada de abstração de dados do web2py foi projetada para dar suporte a bancos de dados não-relacionais, e conta com <strong>suporte nativo</strong> ao BigTable.<!--more--></p>

<p>Antes de tudo, devemos configurar nosso ambiente. Para isto, é necessário acessar o <a title="web2py" rel="nofollow" href="http://www.web2py.com" target="_blank">site oficial do web2py</a> e baixar o arquivo <em>web2py_src.zip</em> na seção de downloads. Após baixar o pacote zip, basta extraí-lo. Será criado um diretório chamado <em>web2py</em>, onde nosso projeto estará localizado. A estrutura de projeto padrão fornecida pelo web2py já vem preparada para o Google App Engine, isto significa que há um arquivo <em>app.yaml</em> pronto para ser personalizado:</p>

<p>[cc lang=&#8221;yaml&#8221;]application: gaeseries
version: 2
api_version: 1
runtime: python</p>

<p>handlers:</p>

<ul>
<li><p>url: /(?P<a>.+?)/static/(?P<b>.+)
static_files: applications/\1/static/\2
upload: applications/(.+?)/static/(.+)
secure: optional
expiration: &#8220;90d&#8221;</p></li>
<li><p>url: /admin-gae/.*
script: $PYTHON_LIB/google/appengine/ext/admin
login: admin</p></li>
<li><p>url: /_ah/queue/default
script: gaehandler.py
login: admin</p></li>
<li><p>url: .*
script: gaehandler.py<br/>
secure: optional</p></li>
</ul>


<p>skip_files: |
 ^(.<em>/)?(
 (app.yaml)|
 (app.yml)|
 (index.yaml)|
 (index.yml)|
 (#.</em>#)|
 (.<em>~)|
 (.</em>.py[co])|
 (.<em>/RCS/.</em>)|
 (..<em>)|
 ((admin|examples|welcome).tar)|
 (applications/(admin|examples)/.</em>)|
 (applications/.<em>?/databases/.</em>) |
 (applications/.<em>?/errors/.</em>)|
 (applications/.<em>?/cache/.</em>)|
 (applications/.<em>?/sessions/.</em>)|
 )$[/cc]</p>

<p>As únicas mudanças estão localizadas nas duas primeiras linhas: o nome da aplicação e a sua versão, como esta é a segunda parte da série de posts, então eu configurei a aplicação <em>gaeseries</em> na versão <em>2</em>.</p>

<p>Dentro da estrutura gerada pelo web2py, existe um diretório chamado <em>applications</em>, é neste diretório que ficam as aplicações do web2py. O web2py fornece por padrão uma aplicação chamada <em>welcome</em> que serve como esqueleto para a criação de novas aplicações. Para criar a aplicação <em>blog</em>, basta copiar o diretório <em>welcome</em> com um novo nome: <em>blog</em>. Este é o procedimento adotado para criar qualquer aplicação. Agora que temos a aplicação criada, vamos seguir com os mesmos passos do </a><a title="Voando com o Django no Google App Engine" href="http://www.franciscosouza.com.br/2010/08/02/voando-com-o-django-no-google-app-engine/">post sobre Django</a>: serão duas <em>actions</em> dentro de um <em>controller</em>, uma para listar todos os posts registrados no blog e outra para escrever um post.</p>

<p>A primeira coisa a fazer é definir o modelo, nossa tabela no banco de dados. Dentro do diretório da nossa aplicação (<em>blog</em>), existe um subdiretório chamado <em>models</em> contendo um módulo Python chamado <em>db.py</em>. É neste arquivo que definimos nossos modelos. Note que o web2py fornece diversas configurações por padrão, como a integração com o BigTable e o sistema de autenticação (que usaremos mais adiante). Vamos apenas adicionar ao final do arquivo nosso modelo post, com o seguinte código:</p>

<p>[cc lang=&#8221;python&#8221;]current_user_id = (auth.user and auth.user.id) or 0</p>

<p>db.define_table(&#8216;posts&#8217;, db.Field(&#8216;title&#8217;),</p>

<pre><code>            db.Field('content', 'text'),
            db.Field('author', db.auth_user, default=current_user_id, writable=False),
            db.Field('date', 'datetime', default=request.now, writable=False)
           )
</code></pre>

<p>db.posts.title.requires = IS_NOT_EMPTY()
db.posts.content.requires = IS_NOT_EMPTY()[/cc]</p>

<p>O código pode parecer estranho, mas é bastante simples: foi definida uma tabela no banco de dados (<em>define_table</em>) chamada <em>posts</em>, com quatro campos: <em>title</em> (uma string) , <em>content</em> (outra string =P), <em>author</em> (uma referência para a tabela <em>auth_user</em>, fornecida pela aplicação de autenticação nativa do web2py) e <em>date</em> (do tipo data, com preenchimento automático com a data e hora corrente). Nas duas últimas linhas, foram definidas as validações para os campos <em>title</em> e <em>content</em>.</p>

<p>Com o modelo configurado, podemos definir o <em>controller</em> e suas <em>actions</em>. No web2py, os <em>controllers</em> são módulos Python que ficam dentro do diretório <em>controllers</em> (na estrutura da aplicação). Dentro de cada módulo Python, definimos funções que representam as <em>actions</em> do <em>controller</em>. O web2py conta com a seguinte convenção para URLs: <em>/&lt;aplicação&gt;/&lt;controller&gt;/&lt;action&gt;</em>. Assim, vamos criar um <em>controller</em> chamado <em>posts</em> que será acessado na URL <em>/blog/posts</em>. Nesta URL, exibiremos a listagem de posts. Para isto, definimos a <em>action index</em> dentro do <em>controller posts.py</em>:</p>

<p>[cc lang=&#8221;python&#8221;]def index():</p>

<pre><code>posts = db().select(db.posts.ALL)
return response.render('posts/index.html', locals())[/cc]
</code></pre>

<p>O código é pequeno e simples, um padrão do web2py :) Na primeira linha, nós listamos todos os <em>posts</em> presentes no banco de dados e na segunda linha nós encaminhamos estes <em>posts</em> para a renderização da <em>view</em> <em>posts/index.html</em>. No web2py, as <em>views</em> ficam localizadas dentro do diretório <em>views</em> da aplicação. Assim, dentro do diretório <em>blog/views</em> devemos criar a nossa view, com o seguinte código: <a title="Código da view posts/index.html" rel="nofollow" href="http://gist.github.com/509116" target="_blank">http://gist.github.com/509116</a>.</p>

<p>Podemos conferir o resultado executando o servidor de desenvolvimento do Google App Engine localmente com um simples comando (tenho a SDK do Google App Engine dentro de /usr/local/google_appengine):</p>

<pre>$ /usr/local/google_appengine/dev_appserver.py .</pre>


<p>O comando deve ser executado dentro da raiz do projeto. Assim, quando acessarmos no browser a URL http://localhost:8080/blog/posts veremos a listagem de <em>posts</em>. Na verdade, não, pois ainda não há nenhum <em>post</em> cadastrado ;P Bom, vamos então criar a <em>action</em> protegida por login para salvar um post no banco de dados. Eis o código da <em>action</em>:</p>

<p>[cc lang=&#8221;python&#8221;]@auth.requires_login()
def new():</p>

<pre><code>form = SQLFORM(db.posts, fields=['title','content'])
if form.accepts(request.vars, session):
    response.flash = 'Post saved.'
    redirect(URL('blog', 'posts', 'index'))
return response.render('posts/new.html', dict(form=form))[/cc]
</code></pre>

<p>Note que <em>action</em> foi decorada com o <em>decorator auth.requires_login()</em>, que indica que para acessar esta <em>action</em> o usuário deve estar autenticado no sistema. A aplicação de autenticação do <em>web2py</em> provê uma <em>action</em> de login, assim como <em>action</em> para registro do usuário, não é necessário se preocupar com isso. Eis aqui o código da <em>view posts/new.html</em>: <a title="Código da view posts/new.html" rel="nofollow" href="http://gist.github.com/509125" target="_blank">http://gist.github.com/509125</a>.</p>

<p>Totalmente simplório, o web2py sabe se virar muito bem sozinho :)</p>

<p>Finalmente nossa aplicação está pronta para ir para produção nos servidores do Google App Engine, então podemos executar o <em>deploy</em> de maneira mágica:</p>

<pre>$ /usr/local/google_appengine/appcfg.py update .</pre>


<p>E pronto! A aplicação está online e disponível no endereço <a title="Veja esta aplicação online" rel="nofollow" href="http://2.latest.gaeseries.appspot.com" target="_blank">http://2.latest.gaeseries.appspot.com</a>. Você pode se logar utilizando o usuário <strong>demo@demo.com</strong> com a senha <strong>demo</strong>.</p>

<p>O código da aplicação está disponível no Gitbub: <a title="Veja o código desta aplicação" rel="nofollow" href="http://github.com/fsouza/gaeseries/tree/web2py" target="_blank">http://github.com/fsouza/gaeseries/tree/web2py</a>.</p>
]]></content>
  </entry>
  
</feed>
