<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Vítor Baptista</title>
	
	<link>http://vitorbaptista.com</link>
	<description>"Você deve ser a mudança que deseja ver no mundo." Gandhi</description>
	<lastBuildDate>Thu, 02 Feb 2012 16:37:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/VitorBaptista" /><feedburner:info uri="vitorbaptista" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Continuous Integration for Android apps with Jenkins and Maven3</title>
		<link>http://feedproxy.google.com/~r/VitorBaptista/~3/NJUCou48r2E/</link>
		<comments>http://vitorbaptista.com/continuous-integration-for-android-apps-with-jenkins-and-maven3/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 17:36:06 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[hudson]]></category>
		<category><![CDATA[jenkins]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://vitorbaptista.com/?p=5600</guid>
		<description><![CDATA[Pre-requisites Ubuntu (I&#8217;m using 11.04) Jenkins (I&#8217;m using v1.4.21) Android SDK (I&#8217;m using r12) Git Installing Xvnc We need to run Android&#8217;s emulator to test the interface. For such, we need a X server running on the machine. The easier way to do so on a headless box is using Xvnc. To install it, do: [...]]]></description>
			<content:encoded><![CDATA[<h3>Pre-requisites</h3>
<p><a href="http://www.ubuntu.com" title="Ubuntu" target="_blank">Ubuntu</a> (I&#8217;m using 11.04)<br />
<a href="https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu" title="Installing Jenkins on Ubuntu" target="_blank">Jenkins</a> (I&#8217;m using v1.4.21)<br />
<a href="http://developer.android.com/sdk/installing.html" title="Installing Android SDK" target="_blank">Android SDK</a> (I&#8217;m using r12)<br />
<a href="http://git-scm.com" target="_blank">Git</a></p>
<h3>Installing Xvnc</h3>
<p>We need to run Android&#8217;s emulator to test the interface. For such, we need a X server running on the machine. The easier way to do so on a headless box is using Xvnc. To install it, do:</p>
<pre>$ sudo apt-get install vnc4server</pre>
<p>If you don&#8217;t have a window manager (GNOME, KDE, etc.), install fluxbox, a lightweight WM:</p>
<pre>$ sudo apt-get install fluxbox</pre>
<p>After this, we have to set a password for the vncserver.</p>
<pre>$ sudo su jenkins
$ vncserver

You will require a password to access your desktops.

Password:
Verify:

New 'luna:1 (jenkins)' desktop is luna:1

Creating default startup script /var/lib/jenkins/.vnc/xstartup
Starting applications specified in /var/lib/jenkins/.vnc/xstartup
Log file is /var/lib/jenkins/.vnc/luna:1.log</pre>
<h3>Configuring git</h3>
<p>We need to configure Jenkins&#8217; user git name and e-mail. To do so, open a terminal and do:</p>
<pre>$ sudo su jenkins
$ git config --global user.name "Jenkins"
$ git config --global user.email "jenkins@no-email.com"</pre>
<h3>Configuring Jenkins</h3>
<p>If you haven&#8217;t changed Jenkins&#8217; configurations, it&#8217;s server is listening at <a href="http://localhost:8080" target="_blank">http://localhost:8080</a>. Open it and click into <em>Manage Jenkins</em> -> <em>Configure System</em>. Scroll down to the <em>Android</em> subsection, and write your Android SDK path into the text input. Then, find the <em>Maven</em> subsection, click into Add Maven and set the values as:<br />
<center><img src="http://vitorbaptista.com/wp-content/uploads/2011/07/03-install-maven3-using-jenkins.png" alt="Install Maven3 using Jenkins" title="Install Maven3 using Jenkins" width="493" height="212" class="aligncenter size-full wp-image-5610" /></center></p>
<p>Also, go to Jenkins&#8217; main page then <em>Manage Jenkins</em> -> <em>Manage Plugins</em> and, at the <em>Available</em> tab, look for the plugins <em>Hudson Xvnc</em>, <em>Jenkins Zentimestamp</em>, <em>Android Emulator</em> and <em>Jenkins GIT</em>. Check every one of them and click <em>Install</em>. At the following screen, check <em>Restart Jenkins when installation is complete and no jobs are running</em>.</p>
<p><center><a href="http://vitorbaptista.com/wp-content/uploads/2011/07/plugins.png"><img src="http://vitorbaptista.com/wp-content/uploads/2011/07/plugins-300x87.png" alt="Jenkins Plugins" title="Jenkins Plugins" width="300" height="87" class="aligncenter size-medium wp-image-5638" /></a></center></p>
<h3>Adding a project to Jenkis</h3>
<p>We&#8217;re going to add the <em>morseflash</em> example from <a href="http://code.google.com/p/maven-android-plugin/" title="maven-android-plugin" target="_blank">maven-android-plugin</a> samples to our Jenkis, to check if everything is configured properly.</p>
<ul>
<li>Download the samples from <a href="https://github.com/jayway/maven-android-plugin-samples/tarball/alpha" title="maven-android-plugin-samples" target="_blank">https://github.com/jayway/maven-android-plugin-samples/tarball/alpha</a>;</li>
<li>Extract into /tmp (or any other folder) and rename jayway-maven-android-plugin-samples-3fe4aed to samples (just to make it easier);</li>
<li>Create a git repository inside the <em>morseflash</em> subfolder using:
<pre>$ git init
$ git add *
$ git commit -a -m "Initial commit."
</pre>
</li>
<li>Edit the line 16 in <em>pom.xml</em>, changing from <em>${maven.build.timestamp}</em> to <em>${BUILD_ID}</em>;
<li>Open <a href="http://localhost:8080">http://localhost:8080</a> and click in <em>New Job</em>;</li>
<li>Write &#8220;morseflash&#8221; in <em>Job name</em>, select <em>Build a maven2/3 project</em> and click <em>OK</em>;</li>
<li>Configure it like the following image and click <em>Save</em>:<br />
<center><a href="http://vitorbaptista.com/wp-content/uploads/2011/07/morseflash.png"><img src="http://vitorbaptista.com/wp-content/uploads/2011/07/morseflash-355x1024.png" alt="morseflash jenkins configuration" title="morseflash jenkins configuration" width="355" height="1024" class="aligncenter size-large wp-image-5622" /></a></center></li>
</ul>
<p>After this, you can wait a little bit and Jenkins will automatically build the first version, or you can click in <em>Build Now</em>. Either way, a new build will appear at the <em>Build History</em> block in the bottom left of the page:<br />
<center><img src="http://vitorbaptista.com/wp-content/uploads/2011/07/buildhistory.png" alt="Build History" title="Build History" width="271" height="77" class="aligncenter size-full wp-image-5626" /></center></p>
<p>Click on its link, then click in <em>Console Output</em>. You should see a lot of messages passing by and, in the end, you should see something like:</p>
<pre>[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] MorseFlash Parent ................................. SUCCESS [1.319s]
[INFO] MorseFlash - Library .............................. SUCCESS [5.048s]
[INFO] MorseFlash - App .................................. SUCCESS [4.028s]
[INFO] MorseFlash - Instrumentation Test ................. SUCCESS [12.702s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 25.714s
[INFO] Finished at: Thu Jul 21 14:05:31 BRT 2011
[INFO] Final Memory: 19M/197M
[INFO] ------------------------------------------------------------------------
channel stopped
[android] Stopping Android emulator
[android] Archiving emulator log
Terminating xvnc.
$ vncserver -kill :10
Killing Xvnc4 process ID 25580
Finished: SUCCESS</pre>
<p>Bingo! You now have a Continuous Integration infrastructure for Android apps. Every minute Jenkins pools git and, if it finds something new, rebuilds everything. If something goes wrong, check if you did all the steps of the tutorial. If you can&#8217;t figure it out, ask a question in the comments section and I&#8217;ll try to help.</p>
<h3>References</h3>
<ul>
<li><a href="http://developer.android.com/sdk/installing.html" target="_blank">Installing the Android SDK</a></li>
<li><a href="https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu" target="_blank">Installing Jenkins on Ubuntu</a></li>
<li><a href="http://code.google.com/p/maven-android-plugin/" target="_blank">Maven Android Plugin</a></li>
<li><a href="http://blog.dahanne.net/2011/07/18/run-ui-tests-on-a-headless-jenkins-hudson-continuous-integration-server-running-ubuntu" target="_blank">Run UI tests on a headless Jenkins / Hudson Continuous Integration server running Ubuntu</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/VitorBaptista/~4/NJUCou48r2E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/continuous-integration-for-android-apps-with-jenkins-and-maven3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://vitorbaptista.com/continuous-integration-for-android-apps-with-jenkins-and-maven3/</feedburner:origLink></item>
		<item>
		<title>Meu ambiente de desenvolvimento em 7 itens</title>
		<link>http://feedproxy.google.com/~r/VitorBaptista/~3/jZYP5KCcqtk/</link>
		<comments>http://vitorbaptista.com/meu-ambiente-de-desenvolvimento-em-7-itens/#comments</comments>
		<pubDate>Fri, 04 Feb 2011 20:25:33 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Diversos]]></category>

		<guid isPermaLink="false">http://vitorbaptista.com/?p=5547</guid>
		<description><![CDATA[Por acaso, estava lendo o blog do @mauriciojr e descobri que ele me convidou pra essa brincadeira. Máquina/SO Uso meu notebook, um Asus G50Vt-X5, com Ubuntu 10.04 para todas minhas tarefas. De alguns anos pra cá, virei adepto do uso de dois monitores. Já não consigo mais viver sem. Uso o do notebook, de 15.4&#8243;, [...]]]></description>
			<content:encoded><![CDATA[<p>Por acaso, estava lendo o blog do <a href="http://twitter.com/mauriciojr">@mauriciojr</a> e descobri que ele me convidou pra essa brincadeira.</p>
<h3>Máquina/SO</h3>
<p>Uso meu notebook, um Asus G50Vt-X5, com Ubuntu 10.04 para todas minhas tarefas. De alguns anos pra cá, virei adepto do uso de dois monitores. Já não consigo mais viver sem. Uso o do notebook, de 15.4&#8243;, com um LG de 22&#8243; conectado via HDMI.</p>
<h3>Editor/IDE</h3>
<p>Sempre fui adepto do <a href="http://www.vim.org">Vim</a>. Há uns tempos, dei uma olhada no <a href="http://www.gnu.org/software/emacs">Emacs</a>, até trabalhei e gostei um pouco com ele, mas acabei voltando as origens.</p>
<p>Quando estava brincando com desenvolvimento pro <a href="http://www.android.com">Android</a>, usei o <a href="http://www.eclipse.org">Eclipse</a>. Mas, para todo resto, Vim na cabeça.</p>
<h3>Terminal</h3>
<p><a href="http://software.jessies.org/terminator">Terminator</a>! É um software que roda vários terminais em uma única tela, dividindo-a verticalmente ou horizontalmente. Antes de conhecê-lo usava o Screen para isso, mas achei o Terminator bem melhor.</p>
<h3>Browser</h3>
<p>Chrome para o dia-a-dia e Firefox com os plugins básicos <a href="http://getfirebug.com/">Firebug</a>, <a href="http://chrispederick.com/work/web-developer/">WebDeveloper</a> e <a href="http://developer.yahoo.com/yslow/">YSlow</a> para debugs.</p>
<h3>Software</h3>
<p>Além dos que já falei (e dos que ainda vou falar), meu computador sempre está com o <a href="http://wiki.go-docky.com/index.php?title=Welcome_to_the_Docky_wiki">Docky</a>, <a href="http://do.davebsd.com/">Gnome-Do</a> e <a href="http://www.pidgin.im">Pidgin</a> abertos, e o <a href="http://www.getmiro.com">Miro</a> para acompanhar algumas séries.</p>
<h3>Source code</h3>
<p>Normalmente todos meus projetos estão sob controle de versão do <a href="http://git-scm.com/">Git</a> e, os que preciso fazer backup ou receber contribuições, mando pro <a href="http://gitorious.com/vitorbaptista/">gitorious</a>.</p>
<h3>Música</h3>
<p>Antigamente (quando meu notebook tinha 512 MB de RAM) usava o <a href="http://mpd.wikia.com">MPD</a> e <a href="http://mpd.wikia.com/wiki/Client:Ncmpc">NCMPC</a> para indexar e tocar músicas. Agora uso o <a href="http://www.rhythmbox.org/">Rhythmbox</a> mesmo, mas sinto falta de poder navegar pelos diretórios das músicas, e não pela organização do próprio Rhythmbox.</p>
<p>Para continuar a brincadeira, eu indico o <a href="http://twitter.com/fernandosmb">@fernandosmb</a>, <a href="http://twitter.com/jrmb">@jrmb</a> e <a href="http://twitter.com/barbarodrigo">@barbarodrigo</a>.</p>
<img src="http://feeds.feedburner.com/~r/VitorBaptista/~4/jZYP5KCcqtk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/meu-ambiente-de-desenvolvimento-em-7-itens/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://vitorbaptista.com/meu-ambiente-de-desenvolvimento-em-7-itens/</feedburner:origLink></item>
		<item>
		<title>Comprimindo o diretório /usr (Ou como instalar o Ubuntu 10.04 em menos de 1.5 GB)</title>
		<link>http://feedproxy.google.com/~r/VitorBaptista/~3/23K60Jwj6OY/</link>
		<comments>http://vitorbaptista.com/comprimindo-o-diretorio-usr-ou-como-instalar-o-ubuntu-10-04-em-menos-de-1-5-gb/#comments</comments>
		<pubDate>Sat, 22 Jan 2011 01:47:22 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[netbook]]></category>
		<category><![CDATA[squashfs]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[unionfs]]></category>

		<guid isPermaLink="false">http://vitorbaptista.com/?p=5520</guid>
		<description><![CDATA[No natal passado dei para minha namorada, Samara, um netbook: o Asus EeePC 2G Surf. Ele foi o primeiro netbook lançado, com processador de 800 MHz, 512 MB de RAM e 2 GB de SSD. Infelizmente, para diferenciá-lo de modelos mais caros, alguém na Asus teve a ideia imbecil genial de soldar a memória RAM [...]]]></description>
			<content:encoded><![CDATA[<p>No natal passado dei para minha namorada, <a href="http://twitter.com/sam_guimaraes">Samara</a>, um netbook: o <a href="http://www.asus.com/product.aspx?P_ID=wKYj8iaGqPwNPJVF">Asus EeePC 2G Surf</a>. Ele foi o primeiro netbook lançado, com processador de 800 MHz, 512 MB de RAM e 2 GB de SSD. Infelizmente, para diferenciá-lo de modelos mais caros, alguém na Asus teve a ideia <del datetime="2011-01-22T00:54:27+00:00">imbecil</del> genial de soldar a memória RAM e o SSD. Ou seja, é impossível fazer um upgrade nele.</p>
<p>Passei meus dias antes do natal de 2009 pesquisando como instalar um Sistema Operacional usável com essa limitação de espaço. A instalação do Ubuntu, pelada, gastava mais de 4 GB. Depois de algumas noites mal dormidas, consegui instalar o <a href="http://www.xubuntu.org/">Xubuntu 9.04</a> capado, com um browser minimalista (<a href="http://en.wikipedia.org/wiki/Midori_(web_browser)">Midori</a>) e algumas coisas mais. Ficou usável, mas longe de bom. Mais de um ano depois, finalmente tomei vergonha na cara de fazer direito.</p>
<p>Comprei um cartão MicroSD de 8 GB e fui instalar o Ubuntu 10.10 nele. Consegui sem muito esforço, simplesmente colocando o / no SSD de 2 GB e o /usr e o /home em duas partições no cartão de memória. Ficou legal, gostei da interface <a href="http://unity.ubuntu.com/">Unity</a>, e tava tudo funcionando. Quando mostrei para ela, depois de brincar por uns 30 segundos, ela disse: &#8220;Tá muito lento!&#8221;.</p>
<p><center><br />
<div id="attachment_5523" class="wp-caption aligncenter" style="width: 310px"><a href="http://vitorbaptista.com/wp-content/uploads/2011/01/Ubuntu-Unity.jpeg"><img src="http://vitorbaptista.com/wp-content/uploads/2011/01/Ubuntu-Unity-300x168.jpg" alt="Ubuntu Netbook Edition 10.10 (Unity)" title="Ubuntu 10.10 Unity" width="300" height="168" class="size-medium wp-image-5523" /></a><p class="wp-caption-text">Ubuntu Unity - Lindo, mas 'muito lento'</p></div><br />
</center></p>
<p>Ok, segunda tentativa. Levei o netbook para casa e fui falar com <a href="http://www.google.com.br">Deus</a>. Descobri que a Unity é realmente mais pesada, e era melhor usar o Ubuntu 10.04 Netbook Edition. Mas, se o problema dela era velocidade, pesquisei mais um pouco sobre como otimizar. Foi aí que encontrei o ótimo blog do <a href="http://stevehanov.ca/blog/index.php?id=48">Steve Hanov</a>, onde ele dá 4 dicas para otimizar o Ubuntu quando ele for usado em de um drive USB. Neste post só vou falar da terceira dica (a mais importante para mim): comprimindo os arquivos.</p>
<p>O diretório /usr é normalmente o maior diretório de uma instalação do Linux. Nele ficam todos os binários dos programas instalados, bibliotecas, códigos-fonte, etc.. Para se ter uma ideia, quando instalei o Ubuntu 10.10 no netbook da Samara, o /usr tinha cerca de 1.8 GB, enquanto todas as outras pastas juntas não chegavam a 700 MB. Então, se queremos diminuir o tamanho de uma instalação, nada mais lógico que começar com o maior culpado.</p>
<p>A ideia é comprimir a /usr. Para isso usamos o <a href="http://squashfs.sourceforge.net/">squashfs</a>. Com ele, criaremos um sistema de arquivos comprimido, virtual, somente leitura. Conseguimos diminuir a pasta para cerca de 700 MB. Mas, para não ficarmos com a /usr somente leitura, usamos também o <a href="http://aufs.sourceforge.net/">aufs2</a>. O que ele faz é simular uma partição de leitura e escrita em cima da criada pelo squashfs. Ele faz isso criando uma &#8220;camada&#8221; em cima da partição /usr. Quando tentarmos ler um arquivo de lá, o aufs2 vai nos mostrar o que foi comprimido com o squashfs. Se tentarmos criar um arquivo, ele o cria em uma outra pasta (que vamos definir), mas nos mostra como se tivesse criado na /usr, nos dando a ilusão que essa partição é de leitura e escrita, quando não é. Não se preocupe com esses detalhes técnicos. Tudo vai ficar mais claro conforme fomos fazendo (espero).</p>
<p>Antes de tudo, instale o pacote squashfs-tools:<br />
<code>sudo apt-get install squashfs-tools</code></p>
<p>Depois adicione as seguintes linhas ao arquivo /etc/modules:<br />
<code>squashfs<br />
loop</code></p>
<p>Crie as pastas onde irão ficar as partições virtuais squashfs e aufs2:<br />
<code>sudo mkdir -p /squashed/usr /squashed/usr/ro /squashed/usr/rw</code></p>
<p>Comprima a pasta /usr em uma imagem dentro de /squashed/usr:<br />
<code>sudo mksquashfs /usr /squashed/usr/usr.sqfs</code></p>
<p>Adicione as seguintes linhas ao arquivo /etc/fstab:<br />
<code>/squashed/usr/usr.sfs   /squashed/usr/ro   squashfs   loop,ro   0 0<br />
usr    /usr    aufs    udba=reval,br:/squashed/usr/rw:/squashed/usr/ro  0 0</code></p>
<p>Reinicie o computador. Tudo deve funcionar normalmente, então você pode apagar o diretório /usr, fazendo:<br />
<code>sudo umount /usr<br />
sudo rm -rf /usr</code></p>
<p>Se houve algum problema, tente voltar para os passos anteriores e descobrir o que deu errado. Qualquer coisa mande um comentário que tentarei ajudar.</p>
<p>Um bônus de comprimir seu /usr é que, além de ocupar bem menos espaço, o computador ficará mais rápido. As máquinas de hoje em dia têm processadores muito mais velozes que os discos, então um tempo maior é gasto lendo um programa no HD do que executando-o. Como os programas estão comprimidos, precisa-se ler menos dados, tornando o computador mais rápido.</p>
<p><center><br />
<div id="attachment_5526" class="wp-caption aligncenter" style="width: 310px"><a href="http://vitorbaptista.com/wp-content/uploads/2011/01/Ubuntu_10.04.png"><img src="http://vitorbaptista.com/wp-content/uploads/2011/01/Ubuntu_10.04-300x175.png" alt="Ubuntu 10.04 Netbook Edition" title="Ubuntu 10.04 Netbook Edition" width="300" height="175" class="size-medium wp-image-5526" /></a><p class="wp-caption-text">Ubuntu 10.04 Netbook Edition - Lindo e muito rápido</p></div><br />
</center></p>
<p>No final, o Ubuntu 10.04 está ocupando menos de 1.5 GB do SSD do netbook, que ganhou mais uns anos de vida útil com a Samara. Eu não fiz benchmarks, mas a diferença é visível. Ele está levando 1m30s para iniciar, mais 10s para abrir o Chrome e 30s para abrir o OpenOffice.org. Nada mal para um netbook de 2007 <img src='http://vitorbaptista.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Este post foi baseado no <a href="http://stevehanov.ca/blog/index.php?id=48">Optimizing Ubuntu to run from a USB key or SD card</a> e <a href="http://forums.gentoo.org/viewtopic-t-646289.html">[TRICKS] Speed up system with aufs + squashfs</a>.</p>
<img src="http://feeds.feedburner.com/~r/VitorBaptista/~4/23K60Jwj6OY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/comprimindo-o-diretorio-usr-ou-como-instalar-o-ubuntu-10-04-em-menos-de-1-5-gb/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://vitorbaptista.com/comprimindo-o-diretorio-usr-ou-como-instalar-o-ubuntu-10-04-em-menos-de-1-5-gb/</feedburner:origLink></item>
		<item>
		<title>Reportagem sobre a Maratona Internacional de Dados Abertos no Jornal da Paraíba (JPB)</title>
		<link>http://feedproxy.google.com/~r/VitorBaptista/~3/1xhOOxwn6E8/</link>
		<comments>http://vitorbaptista.com/reportagem-sobre-a-maratona-internacional-de-dados-abertos-no-jpb2/#comments</comments>
		<pubDate>Sun, 05 Dec 2010 02:20:38 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Transparência]]></category>
		<category><![CDATA[jpb2]]></category>
		<category><![CDATA[maratona]]></category>
		<category><![CDATA[odhd]]></category>
		<category><![CDATA[opendataday]]></category>
		<category><![CDATA[sagres]]></category>
		<category><![CDATA[tce]]></category>
		<category><![CDATA[transparencia]]></category>

		<guid isPermaLink="false">http://vitorbaptista.com/?p=5404</guid>
		<description><![CDATA[Seu browser não suporta HTML5. Veja a reportagem no site do jornal.]]></description>
			<content:encoded><![CDATA[<p><center><br />
<video src='http://vitorbaptista.com/wp-content/uploads/2010/12/entrevista-jpb2-04-12-10.ogv' controls='controls'><br />
Seu browser não suporta HTML5. Veja a reportagem no <a href='http://jpb2.cabobranco.tv.br/index.php?ev=1&#038;d=2010-12-04'>site do jornal.</a><br />
</video><br />
</center></p>
<img src="http://feeds.feedburner.com/~r/VitorBaptista/~4/1xhOOxwn6E8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/reportagem-sobre-a-maratona-internacional-de-dados-abertos-no-jpb2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
<enclosure url="http://vitorbaptista.com/wp-content/uploads/2010/12/entrevista-jpb2-04-12-10.ogv" length="2838744" type="video/ogg" />
		<feedburner:origLink>http://vitorbaptista.com/reportagem-sobre-a-maratona-internacional-de-dados-abertos-no-jpb2/</feedburner:origLink></item>
		<item>
		<title>Raspagem dos dados do TCE-PB</title>
		<link>http://feedproxy.google.com/~r/VitorBaptista/~3/yZSBCFBR3hc/</link>
		<comments>http://vitorbaptista.com/raspagem-dos-dados-do-tce-pb/#comments</comments>
		<pubDate>Sun, 05 Dec 2010 01:17:20 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Transparência]]></category>
		<category><![CDATA[odhd]]></category>
		<category><![CDATA[sagres]]></category>
		<category><![CDATA[tce]]></category>
		<category><![CDATA[thacker]]></category>
		<category><![CDATA[transparencia]]></category>

		<guid isPermaLink="false">http://vitorbaptista.com/?p=5383</guid>
		<description><![CDATA[Esta é minha proposta conjunta com o Fernando Brito para as Microbolsas Hacker do pessoal do Transparência Hacker. Quem somos nós? Eu, o Vítor, sou quase (espero) bacharel em Computação. Estou no último período do curso na UFPB, faltando só defender a monografia. Acompanho a lista do thacker desde a cópia do Blog do Planalto, [...]]]></description>
			<content:encoded><![CDATA[<p>Esta é minha proposta conjunta com o <a href="http://fernandobrito.com">Fernando Brito</a> para as <a href="http://blog.esfera.mobi/microbolsas-hacker-nov11/">Microbolsas Hacker</a> do pessoal do <a href="http://www.thacker.com.br">Transparência Hacker</a>.</p>
<p><strong>Quem somos nós?</strong></p>
<p>Eu, o Vítor, sou quase (espero) bacharel em Computação. Estou no último período do curso na UFPB, faltando só defender a monografia. Acompanho a lista do thacker desde a cópia do Blog do Planalto, mas nunca participei ativamente. <a href="http://vitorbaptista.com/descobrindo-qual-e-a-operadora-de-um-telefone/">Fiz</a> <a href="http://vitorbaptista.com/bingo-do-ze-parte-1/">alguns</a> <a href="http://vitorbaptista.com/despesas-da-prefeitura-municipal-de-joao-pessoa-de-2003-ate-2009/">pequenos</a> <a href="http://vitorbaptista.com/gastos-dos-deputados-paraibanos-com-telefonia-combustiveis-e-lubrificantes/">hacks</a> e nada mais.</p>
<p>O Fernando é graduando em Estatística, mas amanhã vai prestar vestibular para Computação. Entrou na lista do thacker também há algum tempo e está desenvolvendo um <a href="https://github.com/thacker/devedores-pgfz">hack</a> que lista os devedores da previdência social.</p>
<p><strong>O que vocês vão fazer?</strong></p>
<p>O Tribunal de Contas da Paraíba disponibiliza os dados de todos os municípios (e do governo) do estado em <a href="http://sagres.tce.pb.gov.br">http://sagres.tce.pb.gov.br</a>. Os dados estão relativamente bem organizados, mas falta uma API e visualizações mais amigáveis, gráficos, etc..</p>
<p>Estão disponíveis receita, despesas, empenhos, licitações, folha de pessoal, obras, veículos entre outros. A maioria dessas informações até que estão bem detalhadas, mas outras apresentam certas inconsistências que certamente serão repassadas ao orgão responsável.</p>
<p>Queremos raspar esses dados e disponibilizá-los em uma API. Após isto, iremos criar uma página semelhante ao <a href="http://cmsp.topical.com.br/">http://cmsp.topical.com.br/</a>, com gráficos que facilitem seu entendimento e que possibilitem cidadãos comuns obterem mais informações sobre a prestação de contas de orgãos de municípios e do estado da Paraíba.</p>
<p><strong>Qual o retorno para a comunidade THacker?</strong></p>
<p>Estamos documentando todo o processo e achamos que o know-how adquirido irá ajudar e encorajar outras equipes que desejem fazer algo semelhante em estados diferentes do nosso. </p>
<p>Além disso iremos disponibilizar todo o código fonte do projeto. A parte do código que raspa os dados do site do TCE-PB é bem específica para o nosso caso, mas o site e as visualizações com certeza ajudarão outros projetos.</p>
<p>O resultado final poderá ser usado como case de sucesso e será mais um argumento ao nosso favor, mostrando o poder e a necessidade da adoção de políticas de dados abertos. </p>
<p>Quando concluído, o projeto irá também chamar um pouco mais da atenção da mídia e principalmente dos hackers do Nordeste. Diferentemente do eixo Rio-São Paulo, aqui existe uma grande falta de interesse pelo tema e há uma enorme escassez de comunidades que lidem com o movimento de dados abertos.</p>
<p>Nós organizamos uma instância do Open Data Day aqui na Paraíba justamente com este objetivo: agregar pessoas, até conseguimos espaço para <a href="http://jpb2.cabobranco.tv.br/index.php?ev=1&#038;d=2010-12-04">uma entrevista</a> na associada local da Globo. Todavia sabemos que ainda há muito mais a ser feito e que essa pode ser justamente a oportunidade que estava nos faltando.</p>
<img src="http://feeds.feedburner.com/~r/VitorBaptista/~4/yZSBCFBR3hc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/raspagem-dos-dados-do-tce-pb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://vitorbaptista.com/raspagem-dos-dados-do-tce-pb/</feedburner:origLink></item>
		<item>
		<title>Bingo do Zé – Parte 1</title>
		<link>http://feedproxy.google.com/~r/VitorBaptista/~3/49pc9Mex6dw/</link>
		<comments>http://vitorbaptista.com/bingo-do-ze-parte-1/#comments</comments>
		<pubDate>Thu, 04 Nov 2010 01:34:33 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[bingo do ze]]></category>
		<category><![CDATA[computação]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[projetos]]></category>

		<guid isPermaLink="false">http://vitorbaptista.com/?p=5089</guid>
		<description><![CDATA[Agora que as eleições passaram (e Ricardo Coutinho venceu), resolvi parar um pouco e escrever sobre o Bingo do Zé. Como tudo começou O @pizzariaze @alexandrend lançou no dia 17 15 de outubro uma cartela com algumas pérolas do candidato Zé Maranhão. A ideia era que você imprimisse e fosse marcando ao assistir aos debates. [...]]]></description>
			<content:encoded><![CDATA[<p>Agora que as eleições passaram (e Ricardo Coutinho venceu), resolvi parar um pouco e escrever sobre o <a href="http://labs.vitorbaptista.com/bingodoze/">Bingo do Zé</a>.</p>
<h3>Como tudo começou</h3>
<p>O <del datetime="2010-11-06T15:33:39+00:00"><a href="http://twitter.com/pizzariaze">@pizzariaze</a></del> <a href="http://twitter.com/alexandrend">@alexandrend</a> lançou no dia <del datetime="2010-11-06T15:33:39+00:00">17</del> 15 de outubro uma cartela com algumas pérolas do candidato Zé Maranhão. A ideia era que você imprimisse e fosse marcando ao assistir aos debates.</p>
<p><center><a href="http://pizzariadoze.blogspot.com/2010/10/bingo-do-ze-maranhao-para-acompanhar.html"><img src="http://vitorbaptista.com/wp-content/uploads/2010/11/bingo_do_ze-207x300.jpg" alt="Bingo Do Zé" title="Bingo Do Zé" width="207" height="300" class="aligncenter size-medium wp-image-5092" /></a></center></p>
<p>Achei genial. Teve uma boa repercussão no Twitter e, no dia seguinte, <a href="http://kelon.org">Alan Kelon</a>, um professor da UFPB e amigo, lançou um desafio na lista de estudantes de Computação da federal: fazer uma aplicação web com a ideia do bingo. Fiquei com isto na cabeça.</p>
<p>Naquele dia estava com insônia. Já eram mais de 2 da manhã e não tinha sono algum. Então <a href="http://twitter.com/sam_guimaraes">Samara</a>, minha namorada, me liga. Também estava lesando no computador. Contei pra ela sobre o bingo e, depois de rirmos bastante, veio a proposta: bora fazer agora? <img src='http://vitorbaptista.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Ela disse sim <img src='http://vitorbaptista.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<h3>Primeira versão</h3>
<p>Três horas da manhã de uma terça-feira, estávamos eu e ela com o notebook na cama e um modem 3G. Primeiro passo: procurar algo já pronto. Rapidamente encontrei <a href="http://threadbarecanvas.com/jquery/bingo-card-javascript-and-jquery/">este post</a> que mostrava como fazer um bingo &#8220;padrão&#8221; com JavaScript, JQuery e CSS. </p>
<p><center><a href="http://threadbarecanvas.com/wp-content/uploads/2009/10/index.html"><img src="http://vitorbaptista.com/wp-content/uploads/2010/11/bingo-original-300x282.png" alt="" title="Bingo" width="300" height="282" class="aligncenter size-medium wp-image-5096" /></a></center></p>
<p>Perfeito! Só precisaria modificar pra usar frases ao invés de números e estilizá-lo. Depois de pouco mais de uma hora chegamos a isso:<br />
<center><a href="http://vitorbaptista.com/wp-content/uploads/2010/11/bingodoze-antigo.png"><img src="http://vitorbaptista.com/wp-content/uploads/2010/11/bingodoze-antigo-300x289.png" alt="" title="Bingo Do Zé" width="300" height="289" class="aligncenter size-medium wp-image-5098" /></a></center></p>
<h3>Alguns detalhes técnicos</h3>
<p>Houve duas sacadas que acho interessante falar. Se você não for de computação ou não estiver interessado em saber como funciona o bingo, aguarde pela parte 2 deste post.</p>
<h4>Gerando uma URL única para cada cartela</h4>
<p>Fiz algumas funções pra compartilhar o bingo no twitter. Uma delas é que, quando você fecha uma linha ou coluna (exceto a central) ou a cartela toda, você pode enviar uma mensagem do tipo &#8220;Fiz 2 colunas no #BingoDoZe!&#8221;. Mas, pra ficar mais interessante, queria adicionar o link da sua cartela nesse tweet. Mas como?</p>
<p>O sistema é feito todo só com JavaScript. Não consigo (facilmente) usar um banco de dados. Primeiro pensei em reescrevê-lo em Ruby ou PHP, mas fiquei com preguiça. Pensei mais um pouco, fiquei olhando o código para ver se surgia alguma ideia, então me veio a luz. Antes de tudo, deixe-me explicar como funciona o código.</p>
<p>Eu tenho um array com as pérolas. Para gerar a cartela, eu o embaralho e coloco os 25 primeiros termos e nos campos do bingo. A solução que encontrei para gerar sempre a mesma é adicionar uma semente ao algoritmo do <em>Math.random()</em>.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> fillCards<span style="color: #009900;">&#40;</span>seed<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    Math.<span style="color: #660066;">seedrandom</span><span style="color: #009900;">&#40;</span>seed<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> shuffle <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #CC0000;">0.5</span> <span style="color: #339933;">-</span> Math.<span style="color: #660066;">random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">var</span> termos_shuffled <span style="color: #339933;">=</span> termos.<span style="color: #660066;">sort</span><span style="color: #009900;">&#40;</span>shuffle<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;=</span> <span style="color: #CC0000;">24</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #006600; font-style: italic;">// Pula a imagem de Maranhão</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">==</span> <span style="color: #CC0000;">12</span><span style="color: #009900;">&#41;</span>
            <span style="color: #000066; font-weight: bold;">continue</span><span style="color: #339933;">;</span>
&nbsp;
        $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#cell'</span><span style="color: #339933;">+</span>i<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span>termos_shuffled<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Uma linguagem de programação gera números (pseudo-)aleatórios a partir de diversos cálculos em cima de um valor inicial. Se você puder definir qual é esse valor, então a função sempre retornará os mesmos resultados. O que faz isso é a linha 2, <em>Math.seedrandom(seed)</em>.</p>
<p>Infelizmente, não tem como fazer isso nativamente em JavaScript. Mas basta adicionar o <a href="http://davidbau.com/encode/seedrandom.js">seedrandom.js</a>, criado pelo David Bau e disponibilizado no <a href="http://davidbau.com/archives/2010/01/30/random_seeds_coded_hints_and_quintillions.html">seu blog</a>. Funcionou perfeitamente.</p>
<p>Como seed usei um hash na URL, na forma <a href="http://labs.vitorbaptista.com/bingodoze/#367660">http://labs.vitorbaptista.com/bingodoze/#367660</a> (neste caso, o seed é #367660). Ao entrar em <a href="http://labs.vitorbaptista.com/bingodoze">http://labs.vitorbaptista.com/bingodoze</a>, se já houver um hash, usa ele como seed. Caso contrário, gera um aleatoriamente.</p>
<h4>Salvando que campos foram marcados</h4>
<p>Depois do passo anterior os jogadores conseguem compartilhar suas cartelas. Mas quem acessar meu link vai encontrá-la vazia. Como persistir os campos marcados?</p>
<p>Seguindo a ideia de adicionar os dados à URL, tive a ideia de codificar o que foi marcado em um inteiro. Bem simples: tenho um número com 25 bits, cada um representando uma célula. Os que estiverem em 1, estão ativos; em 0, desativos.</p>
<p>Para isso, há duas funções principais: cartelaToMask() e maskToCartela(mask). A primeira retorna um inteiro que representa a cartela, e a segunda faz o caminho inverso, recebendo um inteiro e preenchendo a cartela. Vejamos:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> cartelaToMask<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">var</span> mask <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;=</span> <span style="color: #CC0000;">24</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#cell'</span><span style="color: #339933;">+</span>i<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hasClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ativo'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
            mask <span style="color: #339933;">|=</span> masks<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">return</span> mask<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Bem simples. Há o inteiro mask inicializado com 0 e, para cada célula, checo se ela tem a classe CSS &#8220;ativo&#8221;. Se sim, eu coloco o bit correspondente em 1. No final, retorno o mask.</p>
<p>O array masks usado no algoritmo possui as potências de 2 já calculadas. Ou seja, masks[0] == 1, masks[1] == 2, masks[2] == 4, e por aí vai. É uma solução muito deselegante. O ideal seria gerar esses valores provavelmente usando bit shifting.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> maskToCartela<span style="color: #009900;">&#40;</span>mask<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;=</span> <span style="color: #CC0000;">24</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>mask <span style="color: #339933;">&amp;</span> masks<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
            $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#cell'</span><span style="color: #339933;">+</span>i<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'ativo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>O caminho contrário é bem parecido. Eu faço um laço de 0 até 24 pegando o bit correspondente (mask &#038; masks[i]). Se ele estiver ativo, adiciono a classe &#8220;ativo&#8221; à célula. Pronto.</p>
<p>Esse inteiro é codificado em hexadecimal e adicionado a URL. Assim temos algo como <a href="http://labs.vitorbaptista.com/bingodoze/#367660-1d50170">http://labs.vitorbaptista.com/bingodoze/#367660-1d50170</a>, onde #367660 é a semente e 1d50170 é a máscara.</p>
<p>Se você faz computação e teve problemas em entender a lógica dos operadores bit-a-bit usados nesse código, dê uma lida <a href="http://www.htmlstaff.org/ver.php?id=4333">aqui</a>. É simples e pode ser bem útil.</p>
<p>Eu pretendia só falar das estatísticas do Bingo do Zé, mas acabei me empolgando e falando demais. Vou deixá-las para a parte 2 deste post. Se você estiver curioso, pode ir vendo as estatísticas de tweets em <a href="http://summarizr.labs.eduserv.org.uk/?keyword=bingodoze">http://summarizr.labs.eduserv.org.uk/?keyword=bingodoze</a></p>
<img src="http://feeds.feedburner.com/~r/VitorBaptista/~4/49pc9Mex6dw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/bingo-do-ze-parte-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://vitorbaptista.com/bingo-do-ze-parte-1/</feedburner:origLink></item>
		<item>
		<title>Gastos dos deputados paraibanos com Telefonia, Combustíveis e Lubrificantes</title>
		<link>http://feedproxy.google.com/~r/VitorBaptista/~3/Su-8OmNCvd8/</link>
		<comments>http://vitorbaptista.com/gastos-dos-deputados-paraibanos-com-telefonia-combustiveis-e-lubrificantes/#comments</comments>
		<pubDate>Sun, 03 Oct 2010 04:33:04 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Transparência]]></category>
		<category><![CDATA[3g oi claro vivo paraíba]]></category>
		<category><![CDATA[deputados]]></category>
		<category><![CDATA[transparência]]></category>
		<category><![CDATA[transparência pública]]></category>

		<guid isPermaLink="false">http://vitorbaptista.com/?p=2187</guid>
		<description><![CDATA[Hoje, conversando com o Fernando Brito, ele me mostrou um site muito interessante: o da Câmara dos Deputados. Mais especificamente, a parte de Cota para Exercício da Atividade Parlamentar (mais detalhes). Nele, podemos ver onde os deputados estão gastando dinheiro, em um nível de detalhamento muito grande. Podemos ver quanto foi gasto, pra quem foi [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje, conversando com o <a href="http://www.fernandobrito.com/" target="_blank">Fernando Brito</a>, ele me mostrou um site muito interessante: o da <a href="http://www.camara.gov.br/">Câmara dos Deputados</a>. Mais especificamente, a parte de <a href="http://www2.camara.gov.br/transparencia/cota-para-exercicio-da-atividade-parlamentar/verba_indenizatoria_index" target="_blank">Cota para Exercício da Atividade Parlamentar</a> (<a href="http://www.direito2.com.br/acam/2009/mai/21/mesa-divulga-ato-que-cria-cota-unica-para-atividade-parlamentar" target="_blank">mais detalhes</a>). Nele, podemos ver onde os deputados estão gastando dinheiro, em um nível de detalhamento muito grande. Podemos ver quanto foi gasto, pra quem foi pago, quando e a categoria.</p>
<p>Por curiosidade, fui ver os gastos do <a href="http://www.efraimfilho.com.br">Efraim Filho</a> (DEM). Daí que me deparo com:</p>
<p><center><br />
<div id="attachment_2206" class="wp-caption aligncenter" style="width: 310px"><a href="http://vitorbaptista.com/wp-content/uploads/2010/10/efraimfilho.png"><img src="http://vitorbaptista.com/wp-content/uploads/2010/10/efraimfilho-300x100.png" alt="CEAP de Efraim Filho" title="CEAP de Efraim Filho" width="300" height="100" class="size-medium wp-image-2206" /></a><p class="wp-caption-text">WTF?!</p></div><br />
</center></p>
<p>Como assim? <strong>R$ 4.125,06</strong> em combustível?! <strong>R$ 2.850,84</strong> de telefone?! Em um mês?!?! Como ele conseguiu? Fui ver de outros deputados e me deparei com números parecidos. Aparentemente, é normal gastar alguns milhares de reais por mês comprando gasolina e pagando a conta de telefone.</p>
<p>Para variar, lá vou eu fazer o scrapping dessa página. Duas horas depois, consegui montar estas tabelas:<br />
<center></p>
<table border="1">
<tr>
<th>Deputado</th>
<th>Combust. e Lubrific.</th>
<th>Telefonia</th>
</tr>
<tr>
<td>ARMANDO ABÍLIO (PTB)</td>
<td>R$ 3.924,46</td>
<td><strong>R$ 2.876,46</strong></td>
</tr>
<tr>
<td>DAMIÃO FELICIANO (PDT)</td>
<td>R$ 3.424,78</td>
<td>R$ 1.144,66</td>
</tr>
<tr>
<td>EFRAIM FILHO (DEM)</td>
<td>R$ 2.950,66</td>
<td>R$ 1.006,01</td>
</tr>
<tr>
<td>LUIZ COUTO (PT)</td>
<td>R$ 1.271,95</td>
<td>R$ 1.406,68</td>
</tr>
<tr>
<td>MAJOR FÁBIO (DEM)</td>
<td>R$ 2.043,00</td>
<td>R$ 827,82</td>
</tr>
<tr>
<td>MANOEL JUNIOR (PMDB)</td>
<td><strong>R$ 4.235,14</strong></td>
<td>R$ 2.128,04</td>
</tr>
<tr>
<td>MARCONDES GADELHA (PSC)</td>
<td>R$ 2.942,35</td>
<td>R$ 1.893,33</td>
</tr>
<tr>
<td>RÔMULO GOUVEIA (PSDB)</td>
<td>R$ 3.135,14</td>
<td>R$ 1.636,98</td>
</tr>
<tr>
<td>RONALDO CUNHA LIMA (PSDB)</td>
<td>R$ 734,13</td>
<td>&#8212;</td>
</tr>
<tr>
<td>VITAL DO RÊGO FILHO (PMDB)</td>
<td>R$ 2.870,52</td>
<td>R$ 2.045,92</td>
</tr>
<tr>
<td>WALTER BRITO NETO (PRB)</td>
<td>R$ 1.124,44</td>
<td>&#8212;</td>
</tr>
<tr>
<td>WELLINGTON ROBERTO (PR)</td>
<td>R$ 3.700</td>
<td>R$ 1.271,12</td>
</tr>
<tr>
<td>WILSON BRAGA (PMDB)</td>
<td>R$ 4.212,07</td>
<td>R$ 1.562,76</td>
</tr>
<tr>
<td>WILSON SANTIAGO (PMDB)</td>
<td>R$ 3.911,33</td>
<td>R$ 2.339,48</td>
</tr>
</table>
<p></center></p>
<p>Estes dados refletem a média de gastos entre 01/2007 até 09/2010, 45 meses. Se pegarmos quem gastou mais com combustível, <a href="http://www.manoeljunior.net/" target="_blank">Manoel Júnior</a>, que ficou com uma média de R$ 4.235,14, e multiplicarmos isso por 45 meses, são <strong>R$ 190.581,30</strong>. Vamos considerar que ele usou 70% dinheiro pra comprar gasolina e o resto pra lubrificantes, e que tenha pago, em média, R$ 3 por litro. São <strong>44.468,97 litros</strong>. Digamos que ele tenha um carro que consome bastante, fazendo 5 km/l. Daria pra rodar <strong>222.344,85 km</strong>.</p>
<p>Para comparação, a costa brasileira tem 7.408 km. Com essa quantidade de combustível, ele poderia ter <strong>ido do cabo Orange até o arroio Chuí mais de 30 vezes</strong>. Dá mais ou menos uma vez a cada mês e meio, durante aos 3 anos e 9 meses os quais temos acesso aos dados.</p>
<p>Mas, pela pouca pesquisa que fiz até agora, esses gastos são normais. Ele não gasta muito mais do que os outros deputados. Isso me faz chegar a conclusão que ou há algo de muito estranho nesses gastos, ou há algo que eu não saiba. Quem sabe esse combustível não é para carro, mas para seus jatinhos particulares?</p>
<p>Alguém sabe quanto consome um Legacy?</p>
<p><em><strong>P.S.:</strong> Quem quiser ver os dados que consegui extrair e, quem sabe, descobrir outras coisas, é só <a href='http://vitorbaptista.com/wp-content/uploads/2010/10/deputados-pb.db_.zip'>clicar aqui</a>. Ele é um banco de dados <a href="http://www.sqlite.org/" target="_blank">sqlite3</a>. Por enquanto só tem os deputados paraibanos, mas estou baixando todos os outros e publicarei aqui.</em></p>
<img src="http://feeds.feedburner.com/~r/VitorBaptista/~4/Su-8OmNCvd8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/gastos-dos-deputados-paraibanos-com-telefonia-combustiveis-e-lubrificantes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://vitorbaptista.com/gastos-dos-deputados-paraibanos-com-telefonia-combustiveis-e-lubrificantes/</feedburner:origLink></item>
		<item>
		<title>Descobrindo qual é a operadora de um telefone</title>
		<link>http://feedproxy.google.com/~r/VitorBaptista/~3/6aNprz4qQYg/</link>
		<comments>http://vitorbaptista.com/descobrindo-qual-e-a-operadora-de-um-telefone/#comments</comments>
		<pubDate>Sat, 02 Oct 2010 22:28:50 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[captcha]]></category>
		<category><![CDATA[mashup]]></category>
		<category><![CDATA[operadora]]></category>
		<category><![CDATA[portabilidade]]></category>

		<guid isPermaLink="false">http://vitorbaptista.com/?p=2020</guid>
		<description><![CDATA[24/09/2011 &#8211; Há alguns meses a ABR Telecom trocou o captcha por outro bem mais forte. Logo, o site não funciona mais. Se alguém precisar dessa funcionalidade, basta comprar o acesso por meros R$ 4.372,21 mensais Desde março de 2009, há no Brasil a portabilidade numérica para telefones fixos e celulares. Isto quer dizer que [...]]]></description>
			<content:encoded><![CDATA[<p><strong>24/09/2011</strong> &#8211; <em>Há alguns meses a ABR Telecom trocou o captcha por outro bem mais forte. Logo, o site não funciona mais. Se alguém precisar dessa funcionalidade, basta comprar o acesso por meros <a href="http://vitorbaptista.com/wp-content/uploads/2010/10/GOP_CP_Apresentação-Solução-BDT-para-TCR_20110413_v1.4.pdf">R$ 4.372,21 mensais</a> <img src='http://vitorbaptista.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </em></p>
<p>Desde março de 2009, há no Brasil a portabilidade numérica para telefones fixos e celulares. Isto quer dizer que podemos trocar de operadora de telefonia sem trocar de número. Assim, se outra empresa oferecer um plano mais vantajoso, podemos migrar para ela sem precisar avisar a todos nossos contatos que trocamos de número.</p>
<p>Mas isso também gera um problema: antes, cada operadora tinha uma faixa de números. Na Paraíba, a gente sabia que um celular era da <a href="http://www.oi.com.br" target="_blank">Oi</a> se começasse com 88, da <a href="http://www.claro.com.br" target="_blank">Claro</a> se fosse com 93, etc. Com a portabilidade não dá mais pra saber assim, é preciso consultar o número no site da <a href="consultanumero.abr.net.br:8080/consultanumero" target="_blank">ABR Telecom</a>.</p>
<p>Até aí tudo bem. Mas eu tenho quase 500 contatos no meu celular, toda vez que eu quiser saber se posso ligar para um número sem ter que pagar minutos extra (tenho bônus pra Oi), vou ter que consultar nessa página? Preciso de uma maneira melhor.</p>
<p>Eu tenho um celular com <a href="http://www.android.com">Android</a>, o <a href="http://pt.wikipedia.org/wiki/Nexus_One" target="_blank">Nexus One</a>. De cara, pensei em fazer um aplicativo que consultasse os dados da ABR Telecom e me mostrasse qual é a operadora de cada contato, quem sabe com um ícone ao lado da foto. Não deve ser muito complexo. Mas, quando fui ver, me deparei com o primeiro problema: o <a href="http://pt.wikipedia.org/wiki/Captcha" target="_blank">CAPTCHA</a>.</p>
<p><center><a href="http://consultanumero.abr.net.br:8080/consultanumero/"><img src="http://vitorbaptista.com/wp-content/uploads/2010/10/captcha-abr.png" alt="CAPTCHA da ABR Telecom" title="CAPTCHA da ABR Telecom" width="350" height="101" class="aligncenter size-full wp-image-2031" /></a></center></p>
<p>CAPTCHA são aquelas letras distorcidas que a gente tem que digitar em alguns sites. Ele serve para evitar que uma pessoa automatize uma determinada tarefa, como tentar logar em um site, criar contas no orkut. Desta forma, ele evita que alguém crie um programa para testar todas as possibilidades de sua senha no GMail, por exemplo. Idealmente, as letras são muito difíceis de um computador detectar, mas fáceis para um humano.</p>
<p>O site da ABR Telecom tem um CAPTCHA. Do jeito que ele está, eu não consigo fazer um programa para checar a operadora dos meus 500 contatos. A não ser que eu consiga quebrar esse CAPTCHA. Hum&#8230;</p>
<p><center><a href="http://qualeaoperadora.de/6132160000"><img src="http://vitorbaptista.com/wp-content/uploads/2010/10/qualeaoperadora-300x141.png" alt="qualeaoperadora.de" title="qualeaoperadora.de" width="300" height="141" class="aligncenter size-medium wp-image-2028" /></a></center></p>
<p>Foi isso que eu fiz (explico em outro post). Não foi difícil, eles usam um CAPTCHA muito simples. Daí nasceu o <a href="http://qualeaoperadora.de" target="_blank">http://qualeaoperadora.de</a>, um site que tem a mesma funcionalidade que o ABR Telecom (inclusive usa ele por baixo dos panos), mas sem o CAPTCHA. Assim, você pode criar novos softwares e sites usando as informações do meu. Isto está bem na moda, e se chama <a href="http://pt.wikipedia.org/wiki/Mashup" target="_blank">mashup</a>.</p>
<p>Eu não parei por aí. Além de você poder acessar as informações digitando no site, ou adicionando diretamente o telefone na URL (como em <a href="http://qualeaoperadora.de/6132160000" target="_blank">http://qualeaoperadora.de/6132160000</a>), você também pode pegar em dois formatos diferentes: YAML e JSONP. Para o primeiro, basta adicionar .yml ao final (<a href="http://qualeaoperadora.de/6132160000.yml" target="_blank">http://qualeaoperadora.de/6132160000.yml</a>); para o segundo, adicione .json (<a href="http://qualeaoperadora.de/6132160000.json" target="_blank">http://qualeaoperadora.de/6132160000.json</a>). Se quiser especificar a função pra callback, também pode fazer <a href="http://qualeaoperadora.de/6132160000.json?callback=minhaFuncao" target="_blank">http://qualeaoperadora.de/6132160000.json?callback=minhaFuncao</a>. Em JSONP, eu também retorno uma URL para o logotipo da operadora e a UF do Estado.</p>
<p>Ainda não fiz o software para buscar isso no meu Android, nem sei se vou fazer. Mas, com esse site, você mesmo pode fazê-lo. Esteja à vontade, mashups são divertidas. Se fizer algo, não deixe de me avisar <img src='http://vitorbaptista.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ah! Se você quiser dar uma olhada no código do <a href="http://qualeaoperadora.de" target="_blank">http://qualeaoperadora.de</a>, ele é livre e está disponível em <a href="http://www.gitorious.com/vitorbaptista/qualeaoperadora-de" target="_blank">http://www.gitorious.com/vitorbaptista/qualeaoperadora-de</a></p>
<img src="http://feeds.feedburner.com/~r/VitorBaptista/~4/6aNprz4qQYg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/descobrindo-qual-e-a-operadora-de-um-telefone/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		<feedburner:origLink>http://vitorbaptista.com/descobrindo-qual-e-a-operadora-de-um-telefone/</feedburner:origLink></item>
		<item>
		<title>Despesas da Prefeitura Municipal de João Pessoa de 2003 até 2009</title>
		<link>http://feedproxy.google.com/~r/VitorBaptista/~3/Tn8rkp9Oi1E/</link>
		<comments>http://vitorbaptista.com/despesas-da-prefeitura-municipal-de-joao-pessoa-de-2003-ate-2009/#comments</comments>
		<pubDate>Fri, 01 Oct 2010 01:38:23 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Transparência]]></category>
		<category><![CDATA[joão pessoa]]></category>
		<category><![CDATA[pmjp]]></category>
		<category><![CDATA[prefeitura]]></category>
		<category><![CDATA[sagres]]></category>
		<category><![CDATA[transparência]]></category>

		<guid isPermaLink="false">http://vitorbaptista.com/?p=1698</guid>
		<description><![CDATA[Nas últimas 2 horas estive brincando com o SAGRES do TCU/PB, vendo que informações eu conseguiria extrair de lá. Para começar, resolvi pegar as despesas da PMJP e, com a ajuda do Google Charts e o gchartrb, consegui montar o gráfico acima (que preciso melhorar). Mesmo com o gráfico em um formato longe do ideal, [...]]]></description>
			<content:encoded><![CDATA[<p><center><a href="http://vitorbaptista.com/wp-content/uploads/2010/09/pmjp2003-2009.png"><img src="http://vitorbaptista.com/wp-content/uploads/2010/09/pmjp2003-2009-300x207.png" alt="Despesas da PMJP entre 2003 e 2009" title="Despesas da PMJP entre 2003 e 2009" width="300" height="207" class="aligncenter size-medium wp-image-1706" /></a></center></p>
<p>Nas últimas 2 horas estive brincando com o <a href="http://sagres.tce.pb.gov.br" target="_blank">SAGRES do TCU/PB</a>, vendo que informações eu conseguiria extrair de lá. Para começar, resolvi pegar as despesas da <a href="http://www.joaopessoa.pb.gov.br/" target="_blank">PMJP</a> e, com a ajuda do <a href="http://code.google.com/apis/chart/" target="_blank">Google Charts</a> e o <a href="http://gchartrb.rubyforge.org/" target="_blank">gchartrb</a>, consegui montar o gráfico acima (que preciso melhorar).</p>
<p>Mesmo com o gráfico em um formato longe do ideal, difícil de analisar, a gente consegue já detectar uma coisa estranha: o gasto com saúde vinha subindo desde 2003, até que atingiu um pico de <strong>R$ 241.988.558,22</strong> em 2006, então teve um pequeno decréscimo em 2007 para <strong>R$ 237.756.865,33</strong> e, em, 2008, despencou para <strong>R$ 109.935.777,73</strong>, caindo ainda mais um pouco em 2009, chegando em R$ <strong>103.841.384,21</strong>. Comparando o valor de 2006 com o de 2009, houve uma queda de <strong>~ 54,57%</strong> em 3 anos. O que aconteceu nesta época para justificar essa diferença?</p>
<p>Vou melhorar o código e, em breve, vou disponibilizá-lo aqui. Com o mesmo código dá para pegar as despesas de qualquer município paraibano. E, possivelmente, pernambucano e piauiense também (pois ambos usam o SAGRES). Também vou procurar uma forma melhor de visualizar esses (e outros) dados.</p>
<img src="http://feeds.feedburner.com/~r/VitorBaptista/~4/Tn8rkp9Oi1E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/despesas-da-prefeitura-municipal-de-joao-pessoa-de-2003-ate-2009/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://vitorbaptista.com/despesas-da-prefeitura-municipal-de-joao-pessoa-de-2003-ate-2009/</feedburner:origLink></item>
		<item>
		<title>Redirecionando e-mails do seu domínio para o mailinator</title>
		<link>http://feedproxy.google.com/~r/VitorBaptista/~3/zW2onzAv2SU/</link>
		<comments>http://vitorbaptista.com/redirecionando-e-mails-do-seu-dominio-para-o-mailinator/#comments</comments>
		<pubDate>Tue, 28 Sep 2010 20:48:37 +0000</pubDate>
		<dc:creator>Vítor Baptista</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[mailinator]]></category>
		<category><![CDATA[spam]]></category>

		<guid isPermaLink="false">http://vitorbaptista.com/?p=1338</guid>
		<description><![CDATA[Há algumas semanas fiz um sistema para detectar a operadora de um telefone (motivo de um próximo post). Fiquei empolgado por finalmente começar a brincar com JavaScript e registrei um domínio pra ele: http://qualeaoperadora.de. Então, hoje vi uma propaganda no meu Gmail: English Speaking &#8211; EffortlessEnglishClub.com?learn &#8211; 7 Rules You Must Know To Speak English [...]]]></description>
			<content:encoded><![CDATA[<p>Há algumas semanas fiz um sistema para detectar a operadora de um telefone (motivo de um próximo post). Fiquei empolgado por finalmente começar a brincar com JavaScript e registrei um domínio pra ele: http://qualeaoperadora.de. Então, hoje vi uma propaganda no meu Gmail:</p>
<blockquote><p><a href="http://effortlessenglishclub.com/7-rules-to-learn-excellent-english-speaking?englishspeaking&#038;gclid=CPfo7Jb2qqQCFaxd7AodRRju3g" target="_blank">English Speaking</a> &#8211; EffortlessEnglishClub.com?learn &#8211; 7 Rules You Must Know To Speak English Fast</p></blockquote>
<p>Hum. 7 regras? OK, vamos ver. Quando entrei no site, encontrei um monte de propagandas e <strong>5</strong> caixas do tipo &#8220;Coloque seu e-mail aqui para que possamos te mandar <del datetime="2010-09-28T20:12:52+00:00">SPAM</del> o eBook&#8221;.</p>
<p><center><br />
<a href="http://vitorbaptista.com/wp-content/uploads/2010/09/efortlessenglish.png"><img src="http://vitorbaptista.com/wp-content/uploads/2010/09/efortlessenglish-300x143.png" alt="Efortless English" title="Efortless English" width="300" height="143" class="size-medium wp-image-1339" /></a><br />
</center></p>
<p>Já recebo e-mails o suficiente me dizendo que sou broxa e/ou tenho pinto pequeno. Então fui tentar usar o <a href="http://www.mailinator.com" target="_blank">Mailinator</a>.</p>
<p><strong>* FAIL! *</strong></p>
<p>Eles bloqueiam e-mails @mailinator.com. Tentei um outro domínio do pessoal do Mailinator, @safetymail.info, e mesma coisa. Provavelmente há em algum lugar pela web uma lista dos domínios deles.</p>
<p>A solução? Usar meu próprio domínio!</p>
<p>O Mailinator tem uma funcionalidade muito engenhosa: ele aceita e-mails vindos de qualquer domínio. Assim, basta mudar o <a href="http://en.wikipedia.org/wiki/MX_record" target="_blank"MX record</a> do seu domínio pra <strong>mail.mailinator.com</strong> e pronto.</p>
<p>Fazer isto depende da onde você hospeda seu domínio. Eu hospedo na Dreamhost. Lá, basta:</p>
<p><center><br />
<div id="attachment_1344" class="wp-caption aligncenter" style="width: 173px"><a href="http://vitorbaptista.com/wp-content/uploads/2010/09/dreamhost1.png"><img src="http://vitorbaptista.com/wp-content/uploads/2010/09/dreamhost1.png" alt="" title="dreamhost1" width="163" height="108" class="size-full wp-image-1344" /></a><p class="wp-caption-text">Vá em Mail -> Custom MX / Gmail</p></div><br />
<div id="attachment_1341" class="wp-caption aligncenter" style="width: 310px"><a href="http://vitorbaptista.com/wp-content/uploads/2010/09/dreamhost2.png"><img src="http://vitorbaptista.com/wp-content/uploads/2010/09/dreamhost2-300x16.png" alt="" title="dreamhost2" width="300" height="16" class="size-medium wp-image-1341" /></a><p class="wp-caption-text">Clique em Edit no seu domínio</p></div><br />
<div id="attachment_1342" class="wp-caption aligncenter" style="width: 310px"><a href="http://vitorbaptista.com/wp-content/uploads/2010/09/dreamhost3.png"><img src="http://vitorbaptista.com/wp-content/uploads/2010/09/dreamhost3-300x49.png" alt="" title="dreamhost3" width="300" height="49" class="size-medium wp-image-1342" /></a><p class="wp-caption-text">Preencha com o servidor MX do Mailinator e clique em Update</p></div><br />
</center></p>
<p>Pronto, agora você pode usar o Mailinator normalmente, usando, por exemplo, <a href="mailto:vitor@qualeaoperadora.de>vitor@qualeaoperadora.de</a>.</p>
<p>Funciona da mesma forma (e vai para a mesma caixa) que <a href="mailto:vitor@mailinator.com">vitor@mailinator.com</a>.</p>
<p>Ah, e você também pode usar os e-mails @qualeaoperadora.de. Espero que, por este post estar em português, os spammers não consigam adicionar meu domínio à blacklist do Mailinator <img src='http://vitorbaptista.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/VitorBaptista/~4/zW2onzAv2SU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://vitorbaptista.com/redirecionando-e-mails-do-seu-dominio-para-o-mailinator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://vitorbaptista.com/redirecionando-e-mails-do-seu-dominio-para-o-mailinator/</feedburner:origLink></item>
	</channel>
</rss>

