<?xml version="1.0"?>
<rss version="2.0.">
  <channel>
    <title>Advogato blog for jarod</title>
    <link>http://www.advogato.org/person/jarod/</link>
    <description>Advogato blog for jarod</description>
    <language>en-us</language>
    <generator>mod_virgule</generator>
    <pubDate>Thu, 24 Jul 2008 19:58:40 GMT</pubDate>
    <item>
      <pubDate>Mon, 21 Jul 2008 22:13:11 GMT</pubDate>
      <title>Dr. Project</title>
      <link>http://www.advogato.org/person/jarod/diary.html?start=113</link>
      <guid>http://feeds.feedburner.com/~r/walterdevlog/~3/341930583/dr-project</guid>
      <description>&lt;p&gt;&lt;a href="https://www.drproject.org/" &gt;https://www.drproject.org/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Apesar da recente populariza&#xE7;&#xE3;o de sistemas de controles de vers&#xE3;o distribu&#xED;dos como o git ou o mercurial, o svn ainda &#xE9; a ferramenta mais popular para controle de vers&#xF5;es. E junto com ele, quase sempre est&#xE1; o trac, que adiciona ao reposit&#xF3;rio um wiki, tickets e outras ferramentas para gerenciar o desenvolvimento.&lt;/p&gt;

&lt;p&gt;Por&#xE9;m, a maior quest&#xE3;o dos usu&#xE1;rios com o trac &#xE9; ter de subir uma instala&#xE7;&#xE3;o do trac para cada reposit&#xF3;rio. N&#xE3;o &#xE9; uma tarefa muito dif&#xED;cil, mas convenhamos, podia ser mais f&#xE1;cil.&lt;/p&gt;

&lt;p&gt;Pensando nisso, a Universidade de Toronto fez um fork do trac, adicionando a capacidade de m&#xFA;ltiplos projetos. Entre as facilidades oferecidas, podemos citar, por exemplo, que criar um projeto no DrProject j&#xE1; cria o respectivo reposit&#xF3;rio. &lt;/p&gt;


&lt;h2&gt;Compara&#xE7;&#xE3;o&lt;/h2&gt;
&lt;p&gt;O &lt;a href="http://www.drproject.org" class="ext-link" &gt;DrProject&lt;/a&gt; era originalmente um fork do portal open source leve chamado &lt;a href="http://trac.edgewall.org" class="ext-link" &gt;Trac&lt;/a&gt;. Essa &#xE9; a compara&#xE7;&#xE3;o dos dois hoje:
&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt; DrProject&lt;/td&gt;
&lt;td&gt; Trac&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; M&#xFA;ltiplos projetos por portal&lt;/td&gt;
&lt;td&gt; sim&lt;/td&gt;
&lt;td&gt; n&#xE3;o&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; Listas de e-mails integradas&lt;/td&gt;
&lt;td&gt; sim&lt;/td&gt;
&lt;td&gt; n&#xE3;o&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; Controle de Acesso baseado em Roles&lt;/td&gt;
&lt;td&gt; sim&lt;/td&gt;
&lt;td&gt; n&#xE3;o&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; Contas de Usu&#xE1;rios externas&lt;/td&gt;
&lt;td&gt; sim&lt;/td&gt;
&lt;td&gt; por plugins de terceiros&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; Camada de banco de dados&lt;/td&gt;
&lt;td&gt; Elixir/SQLAlchemy&lt;/td&gt;
&lt;td&gt; SQL manual&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; Navegador de reposit&#xF3;rio Subversion&lt;/td&gt;
&lt;td&gt; sim&lt;/td&gt;
&lt;td&gt; sim&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; Support a Perforce, BZR, etc.&lt;/td&gt;
&lt;td&gt; n&#xE3;o&lt;/td&gt;
&lt;td&gt; por plugins de terceiros&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; Busca Cross-Component&lt;/td&gt;
&lt;td&gt; sim&lt;/td&gt;
&lt;td&gt; sim&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; Administra&#xE7;&#xE3;o baseada em Web&lt;/td&gt;
&lt;td&gt; sim&lt;/td&gt;
&lt;td&gt; parcial&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; Sintaxe do Wiki&lt;/td&gt;
&lt;td&gt; Markdown&lt;/td&gt;
&lt;td&gt; custom&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; Milestones&lt;/td&gt;
&lt;td&gt; Sim&lt;/td&gt;
&lt;td&gt; Sim&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; Tagging&lt;/td&gt;
&lt;td&gt; yes&lt;/td&gt;
&lt;td&gt; by third-party plugin&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;

&lt;td&gt; Remote Scripting API&lt;/td&gt;
&lt;td&gt; yes&lt;/td&gt;
&lt;td&gt; no&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; Client-Side Javascript&lt;/td&gt;
&lt;td&gt; Dojo&lt;/td&gt;
&lt;td&gt; handwritten Javascript&lt;/td&gt;

&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; RSS Feeds&lt;/td&gt;
&lt;td&gt; yes&lt;/td&gt;
&lt;td&gt; yes&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; Custom Ticket Views&lt;/td&gt;
&lt;td&gt; no&lt;/td&gt;

&lt;td&gt; yes&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;
&lt;td&gt; Integra&#xE7;&#xE3;o ao Eclipse&lt;/td&gt;
&lt;td&gt; n&#xE3;o&lt;/td&gt;
&lt;td&gt; por plugins de terceiros&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;Segundo Jeff Balogh, o trunk dele &#xE9; est&#xE1;vel, com o desenvolvimento feito nos branches.&lt;/p&gt;

&lt;p&gt;O projeto foi originalmente desenvolvido para uso no &lt;a href="http://boo-box.com/link/bid:856/lang:pt-BR/tags:educa%E7%E3o/format:box" class="bbli" &gt;ensino&lt;img src="http://boo-box.com/bbli" alt="[bb]" class="bbic" /&gt;&lt;/a&gt;. Numa troca de e-mail r&#xE1;pida com os desenvolvedores, perguntei no que isso se fazia presente no projeto. David Wolever me disse que o sistema de permiss&#xF5;es &#xE9; um reflexo disso, j&#xE1; que num projeto open source o acesso ao c&#xF3;digo n&#xE3;o precisa ser restrito. Greg Wilson me falou a respeito das listas de e-mail integradas, e das opera&#xE7;&#xF5;es em lote, como criar v&#xE1;rios projetos com nomes sequenciais - que s&#xE3;o &#xFA;teis dentro de um ambiente de ensino.&lt;/p&gt;

&lt;p&gt;A instala&#xE7;&#xE3;o do projeto foi parecida com a do trac, com a exce&#xE7;&#xE3;o que o DrProject espera que os reposit&#xF3;rios estejam dentro dele, j&#xE1; que ele os administra. Numa tentativa de atualiza&#xE7;&#xE3;o, o meu banco de dados (sqlite) teve algum problema, mas logo depois o problema desapareceu. Sinais de que o projeto ainda tem muito o que andar, mas &#xE9; uma boa pedida pra adicionar na lista de coisas a testar.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=LrOD1J" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=LrOD1J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=Niu5Xj" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=Niu5Xj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=OhcCVj" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=OhcCVj" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/walterdevlog/~4/341930583" height="1" width="1"/&gt;</description>
    </item>
    <item>
      <pubDate>Thu, 17 Jul 2008 22:09:52 GMT</pubDate>
      <title>2+2 = 5</title>
      <link>http://www.advogato.org/person/jarod/diary.html?start=112</link>
      <guid>http://feeds.feedburner.com/~r/walterdevlog/~3/338407987/2-2-5</guid>
      <description>&lt;p&gt;Se tem uma coisa que me irrita, &#xE9; quando as pessoas d&#xE3;o nomes as coisas de uma forma n&#xE3;o condizente.&lt;/p&gt;

&lt;p&gt;Por exemplo, trabalhando com o Plone e categoriza&#xE7;&#xE3;o de objetos. Voc&#xEA; j&#xE1; imagina que para procurar objetos por categorias voc&#xEA; ir&#xE1; esbarrar em &lt;em&gt;categories&lt;/em&gt;, &lt;em&gt;category&lt;/em&gt;, at&#xE9; um poss&#xED;vel &lt;em&gt;tag&lt;/em&gt;. Mas dentro do Plone, voc&#xEA; busca por &lt;em&gt;Subject&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Mas em um outro caso, &#xE9; o Plone que me salva. Se voc&#xEA; vai adicionar uma informa&#xE7;&#xE3;o geogr&#xE1;fica a um objeto, voc&#xEA; logo pensa em &lt;em&gt;location&lt;/em&gt;. Ao menos &#xE9; o que a tela de edi&#xE7;&#xE3;o do Plone mostra. E &#xE9; o que o Dublin Core chama de &lt;em&gt;&lt;a href="http://dublincore.org/usage/terms/history/#coverage-006" &gt;coverage&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Voc&#xEA;s podem achar que eu estou sendo excessivamente chato com isso, mas lembre-se que voc&#xEA; sempre ter&#xE1; de gastar alguns segundos para associar a palavra ao seu significado espec&#xED;fico dentro daquele contexto onde ela tem um significado alien&#xED;gena&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=eH5NpJ" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=eH5NpJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=xUESjj" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=xUESjj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=quZhlj" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=quZhlj" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/walterdevlog/~4/338407987" height="1" width="1"/&gt;</description>
    </item>
    <item>
      <pubDate>Tue, 15 Jul 2008 22:07:05 GMT</pubDate>
      <title>Escreva para quem vai dar manuten&#xE7;&#xE3;o!</title>
      <link>http://www.advogato.org/person/jarod/diary.html?start=111</link>
      <guid>http://feeds.feedburner.com/~r/walterdevlog/~3/336084259/escreva-para-quem-vai-dar-manutencao</guid>
      <description>&lt;p&gt;Do &lt;a href="http://c2.com/cgi/wiki?CodeForTheMaintainer" &gt;C2 Wiki&lt;/a&gt;, atrav&#xE9;s do &lt;a href="http://www.codinghorror.com/blog/archives/001137.html" &gt;Coding Horror&lt;/a&gt;: "Sempre codifique como se a pessoa que vai dar manuten&#xE7;&#xE3;o no seu c&#xF3;digo fosse um psicopata violento que sabe onde voc&#xEA; mora."&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=0nbcjJ" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=0nbcjJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=NLyK4j" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=NLyK4j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=lWlOFj" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=lWlOFj" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/walterdevlog/~4/336084259" height="1" width="1"/&gt;</description>
    </item>
    <item>
      <pubDate>Wed, 9 Jul 2008 21:05:48 GMT</pubDate>
      <title>Bugs mais velhos do que eu! (ou voc&#xEA;!)</title>
      <link>http://www.advogato.org/person/jarod/diary.html?start=110</link>
      <guid>http://feeds.feedburner.com/~r/walterdevlog/~3/330851759/bugs-antigos-bsd-unix-corrigidos</guid>
      <description>&lt;p&gt;Dois meses atr&#xE1;s eu fiquei espantado com a idade do bug do BSD que tinha sido corrigido: &lt;a href="http://it.slashdot.org/article.pl?sid=08/05/11/1339228" &gt;25 anos&lt;/a&gt;. Pois n&#xE3;o &#xE9; que hoje eu fico sabendo de um bug no &lt;a href="http://en.wikipedia.org/wiki/Yacc" &gt;yacc&lt;/a&gt; do OpenBSD que remonta h&#xE1; &lt;a href="http://bsd.slashdot.org/article.pl?sid=08/07/08/2236232" &gt;33 anos&lt;/a&gt;? Mais velho que eu!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=whGOUJ" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=whGOUJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=thFUzj" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=thFUzj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=CAAnSj" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=CAAnSj" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/walterdevlog/~4/330851759" height="1" width="1"/&gt;</description>
    </item>
    <item>
      <pubDate>Tue, 8 Jul 2008 21:10:07 GMT</pubDate>
      <title>Protocol Buffers</title>
      <link>http://www.advogato.org/person/jarod/diary.html?start=109</link>
      <guid>http://feeds.feedburner.com/~r/walterdevlog/~3/329863611/protocol-buffers</guid>
      <description>&lt;p&gt;&lt;a href="http://google-opensource.blogspot.com/2008/07/protocol-buffers-googles-data.html" &gt;http://google-opensource.blogspot.com/2008/07/protocol-buffers-googles-data.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&#xC9; o nome do mais novo projeto do google &lt;a href="http://google-opensource.blogspot.com/2008/07/protocol-buffers-googles-data.html" &gt;disponibilizado para a comunidade do c&#xF3;digo livre&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Segundo a descri&#xE7;&#xE3;o no an&#xFA;ncio do projeto, ele nasceu da necessidade de serializar dados e trocar esses dados serializados pela rede de forma eficiente. J&#xE1; nasceu com vers&#xF5;es para Java, C++, ou Python.&lt;/p&gt;

&lt;p&gt;Voc&#xEA; define uma descri&#xE7;&#xE3;o de um objeto, um arquivo .proto, e o compilador gera o c&#xF3;digo necess&#xE1;rio para acesso na linguagem que voc&#xEA; escolher, dentre as tr&#xEA;s suportadas.&lt;/p&gt;

&lt;p&gt;Segundo a documenta&#xE7;&#xE3;o: "Protocol buffers are now Google's lingua franca for data &#x2013; at time of writing, there are 48,162 different message types defined in the Google code tree across 12,183 .proto files. They're used both in RPC systems and for persistent storage of data in a variety of storage systems."&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=SfA74J" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=SfA74J" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=Qat8aj" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=Qat8aj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=nMdvYj" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=nMdvYj" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/walterdevlog/~4/329863611" height="1" width="1"/&gt;</description>
    </item>
    <item>
      <pubDate>Fri, 4 Jul 2008 21:08:47 GMT</pubDate>
      <title>Ajude a sustentar a Wikip&#xE9;dia e outros projetos, sem colocar a m&#xE3;o no bolso, e concorra a um Eee PC!</title>
      <link>http://www.advogato.org/person/jarod/diary.html?start=108</link>
      <guid>http://feeds.feedburner.com/~r/walterdevlog/~3/326713975/campanha-wikipedia-br-linux</guid>
      <description>&lt;p&gt;&lt;b&gt;Ajude a sustentar a Wikip&#xE9;dia e outros projetos, sem colocar a m&#xE3;o no bolso, e concorra a um Eee PC!&lt;/b&gt;&lt;br /&gt;&#x2026;e tamb&#xE9;m a pen drives, card drives, camisetas geeks, livros e mais! O &lt;a href="http://br-linux.org/" &gt;BR-Linux&lt;/a&gt; e o &lt;a href="http://efetividade.net/" &gt;Efetividade&lt;/a&gt; lan&#xE7;aram uma &lt;a href="http://br-linux.org/2008/campanha-wikipedia/" &gt;campanha&lt;/a&gt; para ajudar a Wikimedia Foundation e outros mantenedores de projetos que usamos no dia-a-dia on-line. Se voc&#xEA; puder doar diretamente, ou contribuir de outra forma, s&#xE3;o sempre melhores op&#xE7;&#xF5;es. Mas se n&#xE3;o puder, veja as regras da promo&#xE7;&#xE3;o e &lt;a href="http://br-linux.org/2008/campanha-wikipedia/" &gt;participe&lt;/a&gt; - quanto mais divulga&#xE7;&#xE3;o, maior ser&#xE1; a doa&#xE7;&#xE3;o do BR-Linux e do Efetividade, e voc&#xEA; ainda concorre a diversos brindes!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=AGlkQJ" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=AGlkQJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=YAyZCj" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=YAyZCj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=k0jFcj" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=k0jFcj" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/walterdevlog/~4/326713975" height="1" width="1"/&gt;</description>
    </item>
    <item>
      <pubDate>Thu, 3 Jul 2008 21:07:03 GMT</pubDate>
      <title>Mais Text Munger</title>
      <link>http://www.advogato.org/person/jarod/diary.html?start=107</link>
      <guid>http://feeds.feedburner.com/~r/walterdevlog/~3/326078339/mais-text-munger</guid>
      <description>&lt;blockquote&gt;&lt;p&gt;Whitespace, punctuation, numbers -- anything that isn't a word -- should also remain unchanged.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Ou seja, minha implementa&#xE7;&#xE3;o anterior est&#xE1; fundamentalmente errada &lt;img src="http://devlog.waltercruz.com/rsc/smilies/pidgin/wink.gif" alt="&amp;#59;&amp;#41;" class="middle" /&gt;&lt;/p&gt;

&lt;p&gt;E eu s&#xF3; li essa parte do enunciado depois do coment&#xE1;rio do &lt;a href="http://rodolpho.eckhardt.com.br/blog/" &gt;Rodolpho&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Mas &#xE9; f&#xE1;cil de resolver, usando o shlex mesmo:&lt;/p&gt;

&lt;div class="code"&gt;&lt;div class="python" style="font-family: monospace;"&gt;&lt;br /&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;import&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;sys&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;import&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;shlex&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;from&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;random&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;import&lt;/span&gt; shuffle&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; munge&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;text&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; t = &lt;span style="color: #dc143c;"&gt;shlex&lt;/span&gt;.&lt;span style="color: #dc143c;"&gt;shlex&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;text, &lt;span style="color: #dc143c;"&gt;posix&lt;/span&gt;=&lt;span style="color: #008000;"&gt;False&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; t.&lt;span style="color: black;"&gt;quotes&lt;/span&gt; = &lt;span style="color: #483d8b;"&gt;&amp;quot;'&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; t.&lt;span style="color: black;"&gt;whitespace&lt;/span&gt; = &lt;span style="color: #483d8b;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #808080; font-style: italic;"&gt;#print(list(t))&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; s = &lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;munge_word&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;word&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;for&lt;/span&gt; word &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; t&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #ff7700;font-weight:bold;"&gt;print&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;.&lt;span style="color: black;"&gt;join&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;s&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; munge_word&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;aword&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; s = &lt;span style="color: #008000;"&gt;list&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;aword&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; first = s.&lt;span style="color: black;"&gt;pop&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff4500;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #ff7700;font-weight:bold;"&gt;try&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; last = s.&lt;span style="color: black;"&gt;pop&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #ff7700;font-weight:bold;"&gt;except&lt;/span&gt; &lt;span style="color: #008000;"&gt;IndexError&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; aword&lt;br /&gt;
&amp;nbsp; &amp;nbsp; shuffle&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;s&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; first + &lt;span style="color: #483d8b;"&gt;''&lt;/span&gt;.&lt;span style="color: black;"&gt;join&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;s&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt; + last&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;try&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; s = &lt;span style="color: #008000;"&gt;open&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #dc143c;"&gt;sys&lt;/span&gt;.&lt;span style="color: black;"&gt;argv&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff4500;"&gt;1&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: black;"&gt;read&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; munge&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;s&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;except&lt;/span&gt; &lt;span style="color: #008000;"&gt;IndexError&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &lt;span style="color: #ff7700;font-weight:bold;"&gt;print&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;&amp;quot;Usage: munge.py file&amp;quot;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=EqTuUJ" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=EqTuUJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=VfapGj" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=VfapGj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=3NIy4j" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=3NIy4j" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/walterdevlog/~4/326078339" height="1" width="1"/&gt;</description>
    </item>
    <item>
      <pubDate>Tue, 1 Jul 2008 23:05:36 GMT</pubDate>
      <title>Mysql usando bazaar, no launchpad!</title>
      <link>http://www.advogato.org/person/jarod/diary.html?start=106</link>
      <guid>http://feeds.feedburner.com/~r/walterdevlog/~3/324382284/mysql-usando-bazaar-no-launchpad</guid>
      <description>&lt;p&gt;&lt;a href="http://blogs.mysql.com/kaj/2008/06/19/version-control-thanks-bitkeeper-welcome-bazaar/" &gt;http://blogs.mysql.com/kaj/2008/06/19/version-control-thanks-bitkeeper-welcome-bazaar/&lt;/a&gt;&lt;/p&gt;&lt;div&gt;&lt;div&gt;&lt;img src="http://devlog.waltercruz.com/media/blogs/devlog/./.evocache/Bazaar_Logo.png/fit-320x320.png" alt="" title="" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Voc&#xEA; pode at&#xE9; torcer o nariz para o fato de ser o launchpad, ou ser o bazaar, mas para mim, isso &#xE9; uma seta gigantesca em dire&#xE7;&#xE3;o a comunidade. Finalmente, o mysql est&#xE1; substituindo o bitkeeper por um sistema de controle de vers&#xF5;es livre, e colocando isso num 'forge' p&#xFA;blico e bem conhecido. Uma &#xF3;tima novidade, principalmente para a comunidade. &lt;img src="http://devlog.waltercruz.com/rsc/smilies/pidgin/wink.gif" alt="&amp;#59;&amp;#41;" class="middle" /&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=UjuzYJ" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=UjuzYJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=79Ow3j" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=79Ow3j" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=9kC6Pj" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=9kC6Pj" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/walterdevlog/~4/324382284" height="1" width="1"/&gt;</description>
    </item>
    <item>
      <pubDate>Tue, 1 Jul 2008 21:10:45 GMT</pubDate>
      <title>Scammer atrapalhado</title>
      <link>http://www.advogato.org/person/jarod/diary.html?start=105</link>
      <guid>http://feeds.feedburner.com/~r/walterdevlog/~3/324139133/scammer-atrapalhado</guid>
      <description>&lt;p&gt;Uma imagem vale mais do que mil palavras nesse caso.. Reparem o nome da fun&#xE7;&#xE3;o disparada no link falso: onClickUnsafeLink .&lt;/p&gt;

&lt;p&gt;&lt;a href="http://devlog.waltercruz.com/media/blogs/devlog/scammer.png" &gt;&lt;img src="http://devlog.waltercruz.com/media/blogs/devlog/.evocache/scammer.png/fit-400x320.png" alt="scammer" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=jmbpgJ" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=jmbpgJ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=DSMycj" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=DSMycj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=b5uvpj" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=b5uvpj" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/walterdevlog/~4/324139133" height="1" width="1"/&gt;</description>
    </item>
    <item>
      <pubDate>Mon, 30 Jun 2008 21:11:48 GMT</pubDate>
      <title>Text Munger (ou nem tudo &#xE9; como deveria ser)</title>
      <link>http://www.advogato.org/person/jarod/diary.html?start=104</link>
      <guid>http://feeds.feedburner.com/~r/walterdevlog/~3/323289456/text-munger</guid>
      <description>&lt;p&gt;Tudo come&amp;#231;ou quando eu esbarrei &lt;a class="http reference" href="http://importantshock.wordpress.com/2007/11/11/15-programming-exercises/" &gt;nesse link&lt;/a&gt; . O texto cont&amp;#233;m 15 exerc&amp;#237;cios de programa&amp;#231;&amp;#227;o, entre eles o que eu me propus a fazer, o &lt;a class="http reference" href="http://www.rubyquiz.com/quiz76.html" &gt;text munger&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;O exerc&amp;#237;cio consiste no seguinte: dado um texto qualquer, o text munger deve retornar o texto com as palavras desse texto modificadas da seguinte forma: ao inv&amp;#233;s da palavra original, teremos a primeira letra da palavra original, o resto da palavra (com exce&amp;#231;&amp;#227;o da &amp;#250;ltima letra) embaralhado seguido da &amp;#250;ltima letra da palavra.&lt;/p&gt;

&lt;p&gt;Dentre as v&amp;#225;rias solu&amp;#231;&amp;#245;es dispon&amp;#237;veis no ruby quiz, a solu&amp;#231;&amp;#227;o em destaque, de Gordon Thiesfeld, usa a express&amp;#227;o regular \b para dividir as palavras. Express&amp;#245;es regulares s&amp;#227;o iguais em qualquer linguagem, certo? Bom, quase certo. O b funciona da mesma forma no ruby, perl e php, mas funciona de forma diferente no python. Ou n&amp;#227;o funciona. Na verdade, n&amp;#227;o sei se &amp;#233; um bug da implementa&amp;#231;&amp;#227;o ou algo assim.&lt;/p&gt;

&lt;p&gt;Eu poderia usar outra regex para dividir as palavras e as pontua&amp;#231;&amp;#245;es, mas j&amp;#225; que o fato do \b n&amp;#227;o funcionar tinha me deixado frustrado com as regex (e eu n&amp;#227;o queria pensar muito nelas, pra mim o \b deveria funcionar), parti para outra solu&amp;#231;&amp;#227;o. Descobri o &lt;a class="http reference" href="http://www.oreillynet.com/onlamp/blog/2007/10/pymotw_shlex.html" &gt;shlex&lt;/a&gt;, um analisador l&amp;#233;xico simples, que para o que eu precisava, funcionava muito bem.&lt;/p&gt;

&lt;p&gt;Minha solu&amp;#231;&amp;#227;o para o problema:&lt;/p&gt;

&lt;div class="code"&gt;&lt;div class="python" style="font-family: monospace;"&gt;&lt;br /&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;import&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;sys&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;import&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;shlex&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;from&lt;/span&gt; &lt;span style="color: #dc143c;"&gt;random&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;import&lt;/span&gt; shuffle&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; munge&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;text&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; t = &lt;span style="color: #dc143c;"&gt;shlex&lt;/span&gt;.&lt;span style="color: #dc143c;"&gt;shlex&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;text, &lt;span style="color: #dc143c;"&gt;posix&lt;/span&gt;=&lt;span style="color: #008000;"&gt;False&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; t.&lt;span style="color: black;"&gt;quotes&lt;/span&gt; = &lt;span style="color: #483d8b;"&gt;&amp;quot;'&amp;quot;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; s = &lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt;munge_word&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;word&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt; &lt;span style="color: #ff7700;font-weight:bold;"&gt;for&lt;/span&gt; word &lt;span style="color: #ff7700;font-weight:bold;"&gt;in&lt;/span&gt; t&lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #ff7700;font-weight:bold;"&gt;print&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;&amp;quot; &amp;quot;&lt;/span&gt;.&lt;span style="color: black;"&gt;join&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;s&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;def&lt;/span&gt; munge_word&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;aword&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; s = &lt;span style="color: #008000;"&gt;list&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;aword&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; first = s.&lt;span style="color: black;"&gt;pop&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #ff4500;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #ff7700;font-weight:bold;"&gt;try&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; last = s.&lt;span style="color: black;"&gt;pop&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #ff7700;font-weight:bold;"&gt;except&lt;/span&gt; &lt;span style="color: #008000;"&gt;IndexError&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; aword&lt;br /&gt;
&amp;nbsp; &amp;nbsp; shuffle&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;s&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &lt;span style="color: #ff7700;font-weight:bold;"&gt;return&lt;/span&gt; first + &lt;span style="color: #483d8b;"&gt;''&lt;/span&gt;.&lt;span style="color: black;"&gt;join&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;s&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt; + last&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;try&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; s = &lt;span style="color: #008000;"&gt;open&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #dc143c;"&gt;sys&lt;/span&gt;.&lt;span style="color: black;"&gt;argv&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#91;&lt;/span&gt;&lt;span style="color: #ff4500;"&gt;1&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#93;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;.&lt;span style="color: black;"&gt;read&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; munge&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;s&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #ff7700;font-weight:bold;"&gt;except&lt;/span&gt; &lt;span style="color: #008000;"&gt;IndexError&lt;/span&gt;:&lt;br /&gt;
&amp;nbsp; &lt;span style="color: #ff7700;font-weight:bold;"&gt;print&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #483d8b;"&gt;&amp;quot;Usage: munge.py file&amp;quot;&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Observe que a solu&amp;#231;&amp;#227;o n&amp;#227;o est&amp;#225; 100% igual a proposta em ruby. Devido a jun&amp;#231;&amp;#227;o em (&amp;quot; &amp;quot;.join(s)), acabam aparecendo uns espa&amp;#231;os em branco que n&amp;#227;o existiam no texto original.&lt;br /&gt;
Existe ainda uma &lt;a class="http reference" href="http://kodumaro.blogspot.com/2008/06/embaralhando-palavras.html" &gt;solu&amp;#231;&amp;#227;o em smalltalk&lt;/a&gt; proposta pelo Rodrigo Cacilhas no kodumaro. E voc&amp;#234; gosta de exerc&amp;#237;cios assim? Sabe porque o \b na implementa&amp;#231;&amp;#227;o de regex do python n&amp;#227;o funciona como eu esperava? (ou ser&amp;#227;o minhas expectativas que est&amp;#227;o erradas?). Os coment&amp;#225;rios est&amp;#227;o a&amp;#237; para voc&amp;#234;s!&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=FouqxI" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=FouqxI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=Cp936i" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=Cp936i" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/walterdevlog?a=PpFAai" &gt;&lt;img src="http://feeds.feedburner.com/~f/walterdevlog?i=PpFAai" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/walterdevlog/~4/323289456" height="1" width="1"/&gt;</description>
    </item>
  </channel>
</rss>
