<?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/" version="2.0">

<channel>
	<title>AURELIO.NET</title>
	
	<link>http://aurelio.net</link>
	<description>Relaxe, leia com calma, aproveite a viagem.</description>
	<lastBuildDate>Wed, 16 May 2012 21:42:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/AurelioJargas" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="aureliojargas" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><image><link>http://aurelio.wordpress.com</link><url>http://aurelio.net/img/icon128/aurelio.png</url><title>Aurelio</title></image><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">AurelioJargas</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>O jeito Shell Script de resolver problemas — Parte 3</title>
		<link>http://aurelio.net/blog/2012/05/10/o-jeito-shell-script-de-resolver-problemas-parte-3/</link>
		<comments>http://aurelio.net/blog/2012/05/10/o-jeito-shell-script-de-resolver-problemas-parte-3/#comments</comments>
		<pubDate>Thu, 10 May 2012 17:40:50 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Vídeo-aula (screencast)]]></category>

		<guid isPermaLink="false">http://aurelio.net/?p=3998</guid>
		<description><![CDATA[→ Parte1, Parte 2 Problema: fatiar um arquivão em pedaços menores, com N linhas cada. Solução fácil. Um único comando. split -l N arquivo.txt Não conhece o comando? Não conhece esta opção específica? Problemas², vai ter que inventar. sed, sempre ele. &#8230; <a href="http://aurelio.net/blog/2012/05/10/o-jeito-shell-script-de-resolver-problemas-parte-3/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>→ <a title="O jeito Shell Script de resolver problemas — Parte 1" href="http://aurelio.net/blog/2011/04/19/o-jeito-shell-script-de-resolver-problemas/">Parte1</a>, <a title="O jeito Shell Script de resolver problemas — Parte 2" href="http://aurelio.net/blog/2012/04/11/o-jeito-shell-script-de-resolver-problemas-parte-2/">Parte 2</a></p>
<p>Problema: fatiar um arquivão em pedaços menores, com N linhas cada.</p>
<p>Solução fácil.<br />
Um único comando.<br />
split -l N arquivo.txt</p>
<p>Não conhece o comando?<br />
Não conhece esta opção específica?<br />
Problemas², vai ter que inventar.</p>
<p>sed, sempre ele.<br />
sed que gera sed: avançado e poderoso.<br />
paste + seq + seq? Quem diria!</p>
<p>Sem arquivos temporários.<br />
Sem loop.<br />
Sem design patterns.</p>
<p>Com mágica.<br />
Com diversão.<br />
Com salada de frutas.</p>
<p>Spoiler: a Mog dá &#8220;oi&#8221; tímido no final ;)</p>
<p><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='640' height='390' src='http://www.youtube.com/embed/usjTrYwIZCo?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent' frameborder='0'></iframe></span></p>
<p>Resumo dos comandos:</p>
<ul>
<li>sed — edita linhas</li>
<li>seq — sequência de números</li>
<li>split — fatia arquivos</li>
<li>paste — junta colunas</li>
</ul>
<p>Histórico:</p>
<pre>### split
seq 20
seq 20 &gt; 20.txt
split -l 5 20.txt
ls
cat xaa
cat xab
rm x*
ls

### sed w
sed -n '1,5 p' 20.txt
sed -n '4,11 p' 20.txt
sed -n '4,11 w foo.txt' 20.txt
ls
cat foo.txt
sed -n '1,5 w foo1.txt' 20.txt
sed -n '6,10 w foo2.txt' 20.txt
cat foo2.txt

### paste + seq
seq 5
seq 1 20
seq 1 5 20
seq 5 5 20
seq 1 5 20 &gt; a1
seq 5 5 20 &gt; a2
paste a1 a2
paste a1 &lt;(seq 5 5 20)
paste &lt;(seq 1 5 20) &lt;(seq 5 5 20)
rm a?

### sed constrói um script sed
paste -d , &lt;(seq 1 5 20) &lt;(seq 5 5 20)
paste -d , &lt;(seq 1 5 20) &lt;(seq 5 5 20) | sed 's/.*/&amp; w foo.txt/'
paste -d , &lt;(seq 1 5 20) &lt;(seq 5 5 20) | sed 's/.*/&amp; w foo-&amp;.txt/'
paste -d , &lt;(seq 1 5 20) &lt;(seq 5 5 20) | sed 's/.*/&amp; w linhas-&amp;.txt/'
paste -d , &lt;(seq 1 5 20) &lt;(seq 5 5 20) | sed 's/.*/&amp; w linhas-&amp;.txt/ ; s/,/-/2'

### aplicação do script sed
paste -d , &lt;(seq 1 5 20) &lt;(seq 5 5 20) | sed 's/.*/&amp; w linhas-&amp;.txt/ ; s/,/-/2' &gt; foo.sed
cat foo.sed
ls
ls
sed -n -f foo.sed 20.txt
ls
cat linhas-1-5.txt
cat linhas-16-20.txt&lt;

### recapitulando: estes são os dois comandos
paste -d , &lt;(seq 1 5 20) &lt;(seq 5 5 20) | sed 's/.*/&amp; w linhas-&amp;.txt/ ; s/,/-/2' &gt; foo.sed
sed -n -f foo.sed 20.txt

### agora num único comando, sem precisar de foo.sed
rm foo.sed
rm linhas-*
paste -d , &lt;(seq 1 5 20) &lt;(seq 5 5 20) | sed 's/.*/&amp; w linhas-&amp;.txt/ ; s/,/-/2' | sed -n -f - 20.txt
paste -d , &lt;(seq 1 5 20) &lt;(seq 5 5 20) | sed 's/.*/&amp; w linhas-&amp;.txt/ ; s/,/-/2' | sed -n -f /dev/stdin 20.txt
ls
cat linhas-6-10.txt</pre>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2012/05/10/o-jeito-shell-script-de-resolver-problemas-parte-3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Resumão das Expressões Regulares numa folha A4 (PDF)</title>
		<link>http://aurelio.net/blog/2012/05/04/resumao-das-expressoes-regulares-numa-folha-a4-pdf/</link>
		<comments>http://aurelio.net/blog/2012/05/04/resumao-das-expressoes-regulares-numa-folha-a4-pdf/#comments</comments>
		<pubDate>Fri, 04 May 2012 21:02:44 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Livro]]></category>

		<guid isPermaLink="false">http://aurelio.net/?p=3982</guid>
		<description><![CDATA[Que tal ter uma folha mágica com várias tabelas que resumem os segredos das Expressões Regulares e suas pegadinhas? Tudo numa única página de uma folha A4. Boa para colar na parede ou deixar dentro da gaveta do escritório, sempre &#8230; <a href="http://aurelio.net/blog/2012/05/04/resumao-das-expressoes-regulares-numa-folha-a4-pdf/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Que tal ter uma folha mágica com várias tabelas que resumem os segredos das Expressões Regulares e suas pegadinhas?</p>
<p>Tudo numa única página de uma folha A4.</p>
<p>Boa para colar na parede ou deixar dentro da gaveta do escritório, sempre ao alcance, para consultar e resolver aquelas dúvidas que sempre aparecem na hora de usar as expressões.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-3987" title="meme-pdf-1" src="http://aurelio.net/wp/wp-content/uploads/2012/05/meme-pdf-1.png" alt="" width="340" height="287" /></p>
<p>E além da folha impressa, que tal ter também uma cópia digital destas tabelas, no formato PDF, para guardar no seu computador e no seu smartphone, e poder consultar rapidamente, mesmo estando na rua?</p>
<p><img class="aligncenter size-full wp-image-3988" title="meme-pdf-2" src="http://aurelio.net/wp/wp-content/uploads/2012/05/meme-pdf-2.png" alt="" /></p>
<p>E se eu te disser que é de graça?</p>
<p><img class="aligncenter size-full wp-image-3989" title="meme-pdf-3" src="http://aurelio.net/wp/wp-content/uploads/2012/05/meme-pdf-3.png" alt="" width="289" height="208" /></p>
<p>Tá na mão:</p>
<div id="attachment_3990" class="wp-caption aligncenter" style="width: 418px"><a href="http://www.piazinho.com.br/#download"><img class="size-full wp-image-3990 " title="PDF resumo expressões regulares" src="http://aurelio.net/wp/wp-content/uploads/2012/05/pdf-regex.png" alt="" width="408" height="292" /></a><p class="wp-caption-text">Clique na imagem para baixar o PDF</p></div>
<blockquote><p><strong>Nota:</strong> Estas são as tabelas que estão no Apêndice B do meu livro <a href="http://www.piazinho.com.br">Expressões Regulares &#8211; Uma abordagem divertida</a>. Aquelas, lá no finalzinho.</p>
<p>Obrigado ao <strong>Lourival Silva Filho</strong> pela ideia de fazer o PDF, e à <a href="http://novatec.com.br">editora Novatec</a> por permitir que eu liberasse de graça este conteúdo do livro!</p></blockquote>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2012/05/04/resumao-das-expressoes-regulares-numa-folha-a4-pdf/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Vídeo-aula: Como aplicar um patch (diff)</title>
		<link>http://aurelio.net/blog/2012/05/02/video-aula-como-aplicar-um-patch-diff/</link>
		<comments>http://aurelio.net/blog/2012/05/02/video-aula-como-aplicar-um-patch-diff/#comments</comments>
		<pubDate>Wed, 02 May 2012 14:59:18 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Vídeo-aula (screencast)]]></category>

		<guid isPermaLink="false">http://aurelio.net/?p=3967</guid>
		<description><![CDATA[Olha, tem vezes que até eu me surpreendo com minha procrastinação. Gravei este vídeo em maio de 2010, mas deixei para publicá-lo &#8220;dali alguns dias&#8221;, pois eu tinha acabado de publicar um vídeo nerd no blog. Coloquei o item &#8220;publicar &#8230; <a href="http://aurelio.net/blog/2012/05/02/video-aula-como-aplicar-um-patch-diff/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Olha, tem vezes que até eu me surpreendo com minha <a href="http://pt.wikipedia.org/wiki/Procrastina%C3%A7%C3%A3o">procrastinação</a>.</p>
<p>Gravei este vídeo em maio de 2010, mas deixei para publicá-lo &#8220;dali alguns dias&#8221;, pois eu tinha <a title="E agora pra variar… um vídeo! :)" href="http://aurelio.net/blog/2010/05/20/e-agora-pra-variar-um-video/">acabado de publicar um vídeo nerd no blog</a>.</p>
<p>Coloquei o item &#8220;publicar vídeo patch&#8221; já no topo do meu arquivo tarefas.txt. Mas nos dias seguintes outras tarefas apareceram, e, cada vez mais longe do topo, este item ficou acumulando poeira durante meses.</p>
<p>Hoje, faltando poucos dias para a gravação do vídeo completar <strong>dois anos</strong>, consegui finalmente resolver a pendência:</p>
<p><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='640' height='390' src='http://www.youtube.com/embed/mfSzWMSpQzM?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent' frameborder='0'></iframe></span></p>
<p>Vídeo rápido (5 min) em que explico o formato de um arquivo patch (diff) e mostro como aplicá-lo no código de um programa, usando o comando patch.</p>
<blockquote><p>E pronto. Só isso. O vídeo já estava no YouTube desde 2010 (como privado), e levei dois anos para marcá-lo como público e escrever este parágrafo de descrição. Vai entender, é a vida…</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2012/05/02/video-aula-como-aplicar-um-patch-diff/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arrumei o barulho no MacBook, era sujeira na ventoinha</title>
		<link>http://aurelio.net/blog/2012/04/19/arrumei-o-barulho-no-macbook-era-sujeira-na-ventoinha/</link>
		<comments>http://aurelio.net/blog/2012/04/19/arrumei-o-barulho-no-macbook-era-sujeira-na-ventoinha/#comments</comments>
		<pubDate>Thu, 19 Apr 2012 03:04:20 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Meu querido diário]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[Vídeo]]></category>

		<guid isPermaLink="false">http://aurelio.net/?p=3676</guid>
		<description><![CDATA[Minha máquina de trabalho é um MacBook de 2007, que apesar da idade e do uso pesado de 10+ horas diárias, todos os dias, ainda funciona muito bem. Porém, cerca de uns 15 dias atrás, ele começou a fazer um &#8230; <a href="http://aurelio.net/blog/2012/04/19/arrumei-o-barulho-no-macbook-era-sujeira-na-ventoinha/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Minha máquina de trabalho é um <a href="http://en.wikipedia.org/wiki/MacBook#Original_polycarbonate_model">MacBook de 2007</a>, que apesar da idade e do uso pesado de 10+ horas diárias, todos os dias, ainda funciona muito bem.</p>
<p>Porém, cerca de uns 15 dias atrás, ele começou a fazer um barulho alto, um zunido. Sabe aquele barulho chato de ventoinha (o ventiladorzinho interno), tão comum num PC? Então.</p>
<p>Fui deixando pra ver se ele parava sozinho, achei que poderia ser por causa do calor de Joinville. Mas que nada, só piorou. Hoje ficou zunindo o dia todo, sem parar, então resolvi deixar a preguiça de lado e pesquisar como arrumar isso.</p>
<p>Pelos artigos que li, muita gente resolve o problema simplesmente <a href="http://declue.hubpages.com/hub/MacBook-Noisy-Fan">limpando a fila de impressão</a>. Nem impressora tenho, então não era o meu caso. Outra possível causa seria um uso excessivo de hardware, que aumentaria a temperatura da máquina. Isso poderia ser disparado por: falta de espaço em disco, falta de RAM, permissões incorretas nos arquivos, ou algum processo desenfreado comendo toda a CPU. Infelizmente para mim, eu não me encaixava em nenhum destes problemas fáceis de resolver.</p>
<p>Voltei à teoria inicial de que o problema era com a ventoinha. Possivelmente o excesso de sujeira, que acumulou durante os anos de uso. Só que para confirmar isso, e limpar a dita cuja, eu teria que abrir o MacBook.</p>
<p>MEDO.</p>
<p>Faz muitos anos a última vez que abri um computador. No PC é tudo mais espaçoso, mais fácil de fuçar sem estragar nada. Notebook é um saco, tudo apertado e frágil. E como esta é minha única máquina, o risco é grande: se eu estragar, fico sem computador.</p>
<p>Me animei a tentar fazer o conserto quando achei este vídeo, que mostra que não tão é complicado abrir o MacBook, basta uma chave de fenda:</p>
<p><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='640' height='390' src='http://www.youtube.com/embed/fQY3YuCHLqo?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent' frameborder='0'></iframe></span></p>
<p>Fui seguindo o vídeo e deu tudo certo. Aliás, a única coisa que não foi igual foi a parte final de puxar o teclado &#8220;gentilmente&#8221;. No meu caso tive que forçar para que ele saísse.</p>
<p>No vídeo não fica claro, mas os parafusos são todos diferentes, é uma festa. Se você for se aventurar pelo mesmo caminho, aconselho ir guardando um por um, na ordem de remoção, para depois não se perder na hora de fechar o bichinho.</p>
<p><a href="https://picasaweb.google.com/lh/photo/0hwbeFH4izCVPKzOMqhxk9MTjNZETYmyPJy0liipFm0?feat=directlink"><img class="aligncenter" title="Parafusos alinhados" src="https://lh5.googleusercontent.com/-QuK7I7mEKvw/T493cIDNrEI/AAAAAAAAAkE/VmVDh3hoURI/s640/Photo%2520Apr%252018%252C%252020%252030%252054.jpg" alt="" width="640" height="478" /></a></p>
<p>Quando consegui finalmente tirar o teclado, fiquei feliz ao ver que havia muito pó ali dentro: na placa, nos fios, na ventoinha. Maravilha! Indício de que o problema poderia ser apenas sujeira.</p>
<p>Limpei por cima, com o que eu tinha aqui em casa: aspirador, esponja de louça, escova de dentes e papel higiênico. Mas dentro da ventoinha ainda tinha muita sujeira, eu precisava abri-la para limpar.</p>
<p>Por sorte foi fácil, bastou desconectar o cabo, desgrudar a fita metálica e remover os dois parafusos pretos. Mais uma forcinha e pronto, a tampinha saiu.</p>
<p><a href="https://picasaweb.google.com/lh/photo/6h2bnJr2EGPf1qrToAGs5tMTjNZETYmyPJy0liipFm0?feat=directlink"><img class="aligncenter" title="Ventoinha suja" src="https://lh6.googleusercontent.com/-p-k1wLLYnm8/T493cZVN2tI/AAAAAAAAAkM/23NsPF3rNXQ/s640/Photo%2520Apr%252018%252C%252020%252042%252054.jpg" alt="" width="478" height="640" /></a></p>
<p>Com a ventoinha na mão, consegui limpá-la usando a escova de dentes. Tinha muito pó grudado em suas pás. Mas saiu fácil, coisa rápida.</p>
<p><a href="https://picasaweb.google.com/lh/photo/3h--Sl2G_vXGs9WGKVfyjNMTjNZETYmyPJy0liipFm0?feat=directlink"><img class="aligncenter" title="Limpando as pás" src="https://lh6.googleusercontent.com/-0Gk0yNbBZxY/T493vb4BWvI/AAAAAAAAAks/l6_2sn6xgTE/s640/Photo%2520Apr%252018%252C%252020%252053%252017.jpg" alt="" width="640" height="478" /></a></p>
<p>Já que estava na faxina, resolvi colocar um pouco de lubrificante (WD-40) no miolo da ventoinha, para que ela deslize melhor. Não sei se isso é aconselhável (não é, veja os comentários deste post), mas de qualquer forma não coloquei muito. Uns giros para escorrer o excesso, mais uma limpezinha e pronto.</p>
<p>Agora era só montar tudo de novo e rezar para que:</p>
<ol>
<li>O computador ligue.</li>
<li>O barulho tenha sumido.</li>
</ol>
<p>Recoloquei a ventoinha, e fiz o caminho inverso do vídeo para recolocar os parafusos.</p>
<p>Felizmente para mim, esta história não teve um final dramático. Ao ligar, tudo funcionou de primeira e agora estou aqui digitando este texto em meu MacBook silencioso :)</p>
<p><a href="https://picasaweb.google.com/109816595539181258628/LimpezaDaVentoinhaDoMacBook">Tem mais algumas fotos lá no Picasa.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2012/04/19/arrumei-o-barulho-no-macbook-era-sujeira-na-ventoinha/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>O jeito Shell Script de resolver problemas — Parte 2</title>
		<link>http://aurelio.net/blog/2012/04/11/o-jeito-shell-script-de-resolver-problemas-parte-2/</link>
		<comments>http://aurelio.net/blog/2012/04/11/o-jeito-shell-script-de-resolver-problemas-parte-2/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 18:01:54 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Vídeo-aula (screencast)]]></category>
		<category><![CDATA[Expressões Regulares]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[Shell Script]]></category>

		<guid isPermaLink="false">http://aurelio.net/?p=3630</guid>
		<description><![CDATA[→ Parte1, Parte 3 Você tem um arquivo. Você precisa extrair dados deste arquivo. Linha de comando na cabeça! Python, Ruby, PHP, JavaScript? Não. C, C++? Fala sério! Shell. Um grep aqui, um sed ali. Uma pitada de expressões regulares. Problema resolvido. &#8230; <a href="http://aurelio.net/blog/2012/04/11/o-jeito-shell-script-de-resolver-problemas-parte-2/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>→ <a title="O jeito Shell Script de resolver problemas — Parte 1" href="http://aurelio.net/blog/2011/04/19/o-jeito-shell-script-de-resolver-problemas/">Parte1</a>, <a title="O jeito Shell Script de resolver problemas — Parte 3" href="http://aurelio.net/blog/2012/05/10/o-jeito-shell-script-de-resolver-problemas-parte-3/">Parte 3</a></p>
<p>Você tem um arquivo.<br />
Você precisa extrair dados deste arquivo.<br />
Linha de comando na cabeça!</p>
<p>Python, Ruby, PHP, JavaScript? Não.<br />
C, C++? Fala sério!<br />
<a href="http://aurelio.net/shell/"> Shell</a>.</p>
<p>Um grep aqui, um <a href="http://aurelio.net/sed/">sed</a> ali.<br />
Uma pitada de <a href="http://aurelio.net/regex/">expressões regulares</a>.<br />
Problema resolvido.</p>
<p>Sorriso no rosto.<br />
Dados no bolso.<br />
Entoa o refrão:</p>
<p>Não precisa ser perfeito.<br />
Não precisa ser polido.<br />
Só precisa funcionar.</p>
<p><span class='embed-youtube' style='text-align:center; display: block;'><iframe class='youtube-player' type='text/html' width='640' height='390' src='http://www.youtube.com/embed/6i3I0vKHtO8?version=3&amp;rel=1&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent' frameborder='0'></iframe></span></p>
<p>Resumo dos comandos:</p>
<ul>
<li>grep — extrai linhas</li>
<li>cut — extrai colunas</li>
<li>sed — edita linhas</li>
<li>tr — troca caracteres</li>
</ul>
<p>Histórico:</p>
<pre>tail -n 50 changelog.t2t
grep ^: changelog.t2t
grep ^: changelog.t2t | sed 's/^: //'
grep ^: changelog.t2t | cut -c 3-10
grep ^: changelog.t2t | cut -c 3-
grep ^: changelog.t2t | cut -c 3- | grep '[0-9]'
grep ^: changelog.t2t | cut -c 3- | grep '[0-9]' | grep v
grep ^: changelog.t2t | cut -c 3- | grep '[0-9]' | grep v | sed 's/^v/200/'
grep ^: changelog.t2t | cut -c 3- | grep '[0-9]' | grep v | sed 's/^v/200/' | tr . -
grep ^: changelog.t2t | cut -c 3- | grep '[0-9]' | grep v | sed 's/^v/200/' | tr . - | sed 's/./&amp;x/'
grep ^: changelog.t2t | cut -c 3- | grep '[0-9]' | grep v | sed 's/^v/200/' | tr . - | sed 's/./&amp;x/2'
grep ^: changelog.t2t | cut -c 3- | grep '[0-9]' | grep v | sed 's/^v/200/' | tr . - | sed 's/./&amp;x/6'
grep ^: changelog.t2t | cut -c 3- | grep '[0-9]' | grep v | sed 's/^v/200/' | tr . - | sed 's/./&amp;x/7'
grep ^: changelog.t2t | cut -c 3- | grep '[0-9]' | sed 's/^v/200/' | tr . - | sed 's/./&amp;-/7'
grep ^: changelog.t2t | cut -c 3- | grep '[0-9]' | sed 's/^v/200/' | tr . - | sed 's/./&amp;-/7' | sed 's/--/-/'
grep ^: changelog.t2t | cut -c 3- | grep '[0-9]' | sed 's/^v/200/' | tr . - | sed 's/./&amp;-/7' | sed 's/--/-/' | grep ..........
grep ^: changelog.t2t | cut -c 3- | grep '[0-9]' | sed 's/^v/200/' | tr . - | sed 's/./&amp;-/7' | sed 's/--/-/' | egrep '.{10}'
grep ^: changelog.t2t | cut -c 3- | grep '[0-9]' | sed 's/^v/200/' | tr . - | sed 's/./&amp;-/7' | sed 's/--/-/' | grep .......... &gt; /tmp/lista.txt</pre>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2012/04/11/o-jeito-shell-script-de-resolver-problemas-parte-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A Mog manja de Linux</title>
		<link>http://aurelio.net/blog/2012/03/23/a-mog-manja-de-linux/</link>
		<comments>http://aurelio.net/blog/2012/03/23/a-mog-manja-de-linux/#comments</comments>
		<pubDate>Fri, 23 Mar 2012 19:01:23 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Meu querido diário]]></category>
		<category><![CDATA[grana]]></category>
		<category><![CDATA[Joinville]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Matrix]]></category>
		<category><![CDATA[Mog]]></category>

		<guid isPermaLink="false">http://aurelio.net/?p=3601</guid>
		<description><![CDATA[Antes de mais nada, preciso dizer que a Mog está traindo o movimento e-hippie. Tudo bem, ela continua com sua lojinha de oncinha e seus artigos femininos, ambos empreendimentos alternativos muito bem sucedidos, mas ultimamente percebo que ela anda flertando &#8230; <a href="http://aurelio.net/blog/2012/03/23/a-mog-manja-de-linux/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Antes de mais nada, preciso dizer que a Mog está traindo o <a href="http://aurelio.net/blog/2010/09/23/estou-ha-5-anos-desempregado-viva/">movimento e-hippie</a>. Tudo bem, ela continua com sua <a href="http://www.coisasdeoncinha.com.br/">lojinha de oncinha</a> e seus <a href="http://www.mulherzice.com.br">artigos femininos</a>, ambos empreendimentos alternativos muito bem sucedidos, mas ultimamente percebo que ela anda flertando com o funcionalismo público! O_o</p>
<blockquote><p><a href="http://en.wikipedia.org/wiki/Et_tu,_Brute%3F">Et tu, Brute?</a></p></blockquote>
<p>Dos concursos públicos que ela estava vendo, um em especial fez seus olhinhos brilharem: <a href="http://fatma2011.fepese.org.br">FATMA 2011</a> (Fundação do Meio Ambiente &#8211; SC), que tinha vaga de Sociólogo em Joinville. Peraí. Sociólogo? Meio Ambiente? Aqui em Joinville? Perfeito! Uma ótima chance de a Mog finalmente poder exercer a Sociologia, pondo em prática sua <a href="http://aurelio.net/blog/2008/07/11/garota-nota-10/">brilhante</a> e <a href="http://aurelio.net/blog/2009/04/17/garota-nota-10-2/">premiada</a> formação acadêmica.</p>
<p>Decidida a não perder esta (rara) oportunidade, ela se empenhou para este concurso. Foram semanas estudando aqui em casa, diariamente, várias horas por dia. Nossa única mesa (de jantar, de almoço, de café) virou sua biblioteca. E lá estava a Mog, concentrada, em meio a pilhas de papéis: apostilas, provas antigas, leis ambientais…</p>
<p>Mas o esforço valeu. Ontem à noite saiu o resultado do concurso, e aqui em casa foi uma explosão de alegria. Adivinha quem encabeçou a <a href="http://fatma2011.fepese.org.br/?go=download&amp;arquivo=r_lst_lotacao_funcao_8521_121.pdf&amp;path=7">lista dos aprovados</a>?</p>
<p><img class="aligncenter size-full wp-image-3602" title="concurso-fatma-2011-sociologo" src="http://aurelio.net/wp/wp-content/uploads/2012/03/concurso-fatma-2011-sociologo.png" alt="Lista de aprovados FATMA 2011 - cargo Sociólogo em Joinville" width="619" height="306" /></p>
<blockquote><p>A Mog é primeirona!<br />
\o/<br />
Ah, essa menina me dá tanto orgulho!</p></blockquote>
<p>Como se não bastasse a alegria de ela ter sido a primeira, ainda tem mais. Tá vendo aquela coluna marcada em vermelho na tabela? Ali é a nota das questões de informática. Eram cinco, e a Mog foi a única que <strong>acertou todas</strong>!</p>
<blockquote><p>É o orgulho do pai! Digo, do marido nerd :)</p></blockquote>
<h2>E o Linux, onde entra na história?</h2>
<p>Agora! Olha só qual foi uma das questões de informática que a Mog acertou:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-3603" style="border: 1px solid black;" title="mog-chmod" src="http://aurelio.net/wp/wp-content/uploads/2012/03/mog-chmod.png" alt="Pergunta sobre o chmod" width="371" height="201" /></p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-3626" title="mog-epic-win3" src="http://aurelio.net/wp/wp-content/uploads/2012/03/mog-epic-win3.jpg" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2012/03/23/a-mog-manja-de-linux/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Erro 404 na Web API REST/JSON – O que fazer?</title>
		<link>http://aurelio.net/blog/2012/03/20/erro-404-na-web-api-rest-json-o-que-fazer/</link>
		<comments>http://aurelio.net/blog/2012/03/20/erro-404-na-web-api-rest-json-o-que-fazer/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 20:20:42 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Dropbox]]></category>
		<category><![CDATA[Funções ZZ]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://aurelio.net/?p=3595</guid>
		<description><![CDATA[Hoje comecei a estudar sobre Web APIs do tipo REST, para fazer uma API bacana para as Funções ZZ. A ideia é facilitar o acesso às funções por outros programas, via Internet. Como parte de meus estudos, fui ver como &#8230; <a href="http://aurelio.net/blog/2012/03/20/erro-404-na-web-api-rest-json-o-que-fazer/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hoje comecei a estudar sobre <a href="http://en.wikipedia.org/wiki/Web_service#Web_API">Web APIs</a> do tipo <a href="http://en.wikipedia.org/wiki/Representational_state_transfer">REST</a>, para fazer uma API bacana para as <a href="http://funcoeszz.net">Funções ZZ</a>. A ideia é facilitar o acesso às funções por outros programas, via Internet.</p>
<p>Como parte de meus estudos, fui ver como se comportam as Web APIs de serviços famosos, para ver nos exemplos &#8220;do mundo real&#8221; quais as melhores práticas de sua implementação.</p>
<p>Comecei por uma tarefa bem simples: o que o servidor responde quanto eu tento acessar uma URL inválida na API?</p>
<p>Eu esperava encontrar um padrão, e simplesmente usar este padrão na minha própria API. Mas veja só o que encontrei.</p>
<h2>Dropbox</h2>
<p><a href="https://api.dropbox.com/1/foo">https://api.dropbox.com/1/foo</a></p>
<pre>{
    error: "Not Found"
}</pre>
<h2>Flickr</h2>
<p><a href="http://api.flickr.com/services/rest/?format=json&amp;method=foo">http://api.flickr.com/services/rest/?format=json&amp;method=foo</a></p>
<pre>jsonFlickrApi({
    "stat":"fail",
    "code":112,
    "message":"Method \"foo\" not found"
})</pre>
<h2>Google</h2>
<p><a href="http://ajax.googleapis.com/ajax/services/foo">http://ajax.googleapis.com/ajax/services/foo</a></p>
<pre>404</pre>
<p><a href="http://ajax.googleapis.com/ajax/services/search/foo">http://ajax.googleapis.com/ajax/services/search/foo</a></p>
<pre>404</pre>
<p><a href="https://www.googleapis.com/language/foo">https://www.googleapis.com/language/foo</a></p>
<pre>"Not Found"</pre>
<p><a href="https://www.googleapis.com/language/translate/foo">https://www.googleapis.com/language/translate/foo</a></p>
<pre>"Not Found"</pre>
<h2>Facebook</h2>
<p><a href="https://graph.facebook.com/foo">https://graph.facebook.com/foo</a></p>
<pre>{
   "error": {
      "message": "(#803) Some of the aliases you requested do not exist: foo",
      "type": "OAuthException",
      "code": 803
   }
}</pre>
<h2>Twitter</h2>
<p><a href="https://dev.twitter.com/docs/error-codes-responses">A documentação</a> me disse que eu encontraria esta mensagem de erro:</p>
<pre>{
    "errors": [
        {
            "message": "Sorry, that page does not exist",
            "code": 34
        }
    ]
}</pre>
<p>Eu juro que tentei, mas essa mensagem específica eu não consegui ver :)</p>
<p><a href="https://api.twitter.com/1/foo">https://api.twitter.com/1/foo</a></p>
<pre>404</pre>
<p><a href="https://api.twitter.com/1/foo.json">https://api.twitter.com/1/foo.json</a></p>
<pre>404</pre>
<p><a href="https://api.twitter.com/1/statuses/foo.json">https://api.twitter.com/1/statuses/foo.json</a></p>
<pre>{
    error: "Could not authenticate you.",
    request: "/1/statuses/foo.json"
}</pre>
<p><a href="https://api.twitter.com/1/statuses/show.json?id=foo">https://api.twitter.com/1/statuses/show.json?id=foo</a></p>
<pre>{
    request: "/1/statuses/show.json?id=foo",
    error: "No status found with that ID."
}</pre>
<h2>Conclusão</h2>
<p>Nenhuma :)</p>
<p>Ainda não sei qual é o &#8220;certo&#8221; a se fazer quando alguém tentar acessar uma URL inválida dentro da minha API.</p>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2012/03/20/erro-404-na-web-api-rest-json-o-que-fazer/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>10 anos de SedSokoban</title>
		<link>http://aurelio.net/blog/2012/03/16/10-anos-de-sedsokoban/</link>
		<comments>http://aurelio.net/blog/2012/03/16/10-anos-de-sedsokoban/#comments</comments>
		<pubDate>Fri, 16 Mar 2012 15:08:14 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[10anos]]></category>
		<category><![CDATA[Coisinha]]></category>
		<category><![CDATA[Funções ZZ]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Livro]]></category>
		<category><![CDATA[mídia]]></category>
		<category><![CDATA[MiGuXeiToR]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[sedsed]]></category>
		<category><![CDATA[SedSokoban]]></category>
		<category><![CDATA[Shell Script Profissional]]></category>

		<guid isPermaLink="false">http://aurelio.net/?p=3589</guid>
		<description><![CDATA[Agora que vi aqui no calendário, que ontem foi uma data especial: dia 15/3 marca o nascimento do meu &#8220;filhote&#8221; mais bizarro, o joguinho SedSokoban, que agora em 2012 completa 10 anos! Eita, mas olhar para essa foto antiga, além &#8230; <a href="http://aurelio.net/blog/2012/03/16/10-anos-de-sedsokoban/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Agora que vi aqui no calendário, que ontem foi uma data especial: dia 15/3 marca o nascimento do meu &#8220;filhote&#8221; mais bizarro, o joguinho <a href="http://aurelio.net/bin/#sokoban">SedSokoban</a>, que agora em 2012 completa 10 anos!</p>
<div class="wp-caption aligncenter" style="width: 345px"><img title="SedSokoban" src="http://aurelio.net/soft/sedsokoban/shot.png" alt="" width="335" height="399" /><p class="wp-caption-text">O clássico jogo Sokoban, escrito em Sed</p></div>
<p>Eita, mas olhar para essa foto antiga, além do saudosismo do joguinho em si, me traz lembranças de toda uma época: eu usava Linux, fvwm como gerenciador de janelas (<a href="http://aurelio.net/doc/dotfiles/fvwmrc.txt">.fvwmrc</a>), e ali está o inseparável xterm, com sua tela preta e sua fonte… peculiar.</p>
<p>Era bom, mas hoje é tudo melhor. E viva o progresso :)</p>
<p>Quer rodar o SedSokoban agora, em sua máquina? Tá fácil. Vá num terminal e cole estes dois comandos:</p>
<pre>wget http://aurelio.net/sed/sokoban/sokoban.sed
sed -nf sokoban.sed</pre>
<p>Já aviso que a jogabilidade é horrível. Você deve apertar a seta e depois dar Enter, para cada movimento. Este é um jogo que não serve para divertir nem para passar o tempo. O seu grande mérito foi ter sido escrito usando uma ferramenta limitada, o <a href="http://aurelio.net/sed/">sed</a>, que não é uma linguagem de programação, mas sim um editor de textos! Coisa de nerd :P</p>
<p><a href="http://aurelio.net/sed/sokoban/sokoban.sed.html">Dá uma olhada no código-fonte dele</a>. A parte boa está no final, depois dos mapas. Dez anos atrás, quando fiz este código, eu entendia ele. Hoje ele me dá medo :)</p>
<blockquote><p>Estou pensando em talvez dissecar este código em um apêndice no (ainda não iniciado) <a href="http://aurelio.net/blog/2011/06/24/vi-livro-sed-txt/">livro de sed</a>, igual fiz com as <a href="http://funcoeszz.net">Funções ZZ</a> no livro <a href="http://www.shellscript.com.br">Shell Script Profissional</a>.</p></blockquote>
<p>Mas uma lição importante que este joguinho me ensinou, e que depois reaprendi com o <a href="http://www.coisinha.com.br/miguxeitor/">MiGuXeiToR</a> e outros, é que fazer coisas sérias/úteis não tem apelo popular. O povão gosta mesmo é de futilidades.</p>
<blockquote><p><a href="http://aurelio.net/blog/2009/07/03/10anos-sed/">http://aurelio.net/blog/2009/07/03/10anos-sed/</a></p></blockquote>
<blockquote><p>Em 2002 [...] vi <a href="http://games.slashdot.org/story/02/03/21/0217219/SedSokoban">meu nome no maior site nerd da época</a>: o Slashdot. Mas o motivo foi meio frustrante para mim. Pra ver como as coisas são: o <a href="http://aurelio.net/sedsed/">sedsed</a> levou meses para ficar pronto e exigiu todo meu conhecimento de Sed, ao extremo. Mas o que me deixou “famoso” foi o trabalho de uma única noite: ter feito o jogo Sokoban em Sed.</p></blockquote>
<blockquote><p><a href="http://aurelio.net/blog/2008/05/22/um-ano-de-miguxeitor/">http://aurelio.net/blog/2008/05/22/um-ano-de-miguxeitor/</a></p></blockquote>
<blockquote><p>O MiGuXeiToR correu o país pela Internet, divulgado pelo boca a boca, até chegar à mídia tradicional. Dei entrevistas, vi meu nome em jornais, até de um programa de televisão participei. Tudo muito rápido e inesperado, nada disso foi planejado. Sem querer eu tinha criado um viral.</p></blockquote>
<p>Olha, esse negócio de <a href="http://aurelio.net/tag/10anos/">comemorar 10 anos</a> das coisas faz eu me sentir tão… velho.</p>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2012/03/16/10-anos-de-sedsokoban/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MoneyLog Experience 5</title>
		<link>http://aurelio.net/blog/2012/03/15/moneylog-experience-5/</link>
		<comments>http://aurelio.net/blog/2012/03/15/moneylog-experience-5/#comments</comments>
		<pubDate>Thu, 15 Mar 2012 18:50:08 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Dropbox]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[MoneyLog]]></category>
		<category><![CDATA[nuvem]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[Webstandards]]></category>

		<guid isPermaLink="false">http://aurelio.net/?p=3570</guid>
		<description><![CDATA[Demorou, mas chegou :) Hoje, dia 15/3, exatamente dois anos e sete meses após o lançamento da versão 4, está saindo do forno a novíssima versão 5 do MoneyLog \o/ Eu estava desde o início de janeiro trabalhando nesta versão &#8230; <a href="http://aurelio.net/blog/2012/03/15/moneylog-experience-5/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Demorou, mas chegou :)</p>
<p>Hoje, dia 15/3, exatamente dois anos e sete meses após o <a title="MoneyLog Experience 4" href="http://aurelio.net/blog/2009/08/15/moneylog-experience-4/">lançamento da versão 4</a>, está saindo do forno a novíssima versão 5 do MoneyLog \o/</p>
<div class="wp-caption aligncenter" style="width: 510px"><img title="MoneyLog v5" src="http://aurelio.net/moneylog/img/v5-cloud-daily-500.jpg" alt="" width="500" height="433" /><p class="wp-caption-text">All your cloud are belong to us!</p></div>
<p>Eu estava desde o início de janeiro trabalhando nesta versão nova. Foram 300+ horas de trabalho, <a href="http://code.google.com/p/moneylog-dev/source/list?num=25&amp;start=608">400+ commits no SVN</a> e muitos pepinos algorítmicos resolvidos. Este foi o maior pacote de mudanças desde o <a title="MoneyLog Experience – Finanças descomplicadas" href="http://aurelio.net/blog/2006/07/08/moneylog-experience/">lançamento do MoneyLog em 2006</a>.</p>
<ul>
<li>Quer interface nova? <a href="http://aurelio.net/moneylog/v5/#ui">Tem</a>.</li>
<li>Quer integração com Dropbox? <a href="http://aurelio.net/moneylog/cloud/">Tem</a>.</li>
<li>Quer interface pra smartphone? <a href="http://aurelio.net/moneylog/v5/#mobile">Tem</a>.</li>
<li>Quer relatório de tags? <a href="http://aurelio.net/moneylog/v5/#relatorio-de-tags">Tem</a>.</li>
<li>Quer somatório das linhas selecionadas? <a href="http://aurelio.net/moneylog/v5/#somatorio-de-linhas">Tem</a>.</li>
<li>Quer proteger com senha? <a href="http://aurelio.net/moneylog/v5/#senha">Tem</a>.</li>
<li>Quer plugins? <a href="https://github.com/oreio/moneylog-plugins">Tem</a>.</li>
<li>Até <a href="http://aurelio.net/moneylog/">site novo</a> também tem :)</li>
</ul>
<p><strong>Se você nunca usou o MoneyLog</strong>, teste <a href="http://aurelio.net/moneylog/browser/app/">a demonstração online</a> e veja se você gosta do jeitão dele fazer as coisas. Se gostar, você pode escolher usá-lo <a href="http://aurelio.net/moneylog/cloud/">online</a> ou <a href="http://aurelio.net/moneylog/portable/">offline</a>. Aconselho também ler <a href="http://aurelio.net/moneylog/about/#filosofia">este pequeno texto</a>, que explica a diferença do MoneyLog para outros apps financeiros. E não se preocupe, ele é gratuito :)</p>
<p><strong>Se você já usa o MoneyLog</strong>, recomendo uma lida com calma no <a href="http://aurelio.net/moneylog/v5/">guia de novidades</a>, para saber tudo o que há de novo. Você vai gostar! Não deixe de conferir também o <a href="http://aurelio.net/moneylog/cloud/">MoneyLog Cloud</a>, que é a grande estrela desse lançamento. Ah, e sabia que <a href="http://aurelio.net/moneylog/v5/#lancamentos">o Tab não é mais obrigatório</a>?</p>
<p>Novatos ou experientes, também recomendo uma boa lida em dois guias novos que escrevi, dissecando dois assuntos quentes:</p>
<ul>
<li><a href="http://aurelio.net/moneylog/input/">Guia de Lançamentos</a></li>
<li><a href="http://aurelio.net/moneylog/config/">Guia de Configuração</a></li>
</ul>
<p>Ah, outra novidade. Agora estou usando <a href="http://aurelio.uservoice.com/forums/152493-moneylog">um site para concentrar ideias</a>. Teve uma idea pra melhorar o MoneyLog? Quer votar nas melhores ideias? Chega lá.</p>
<p>Bem, agora é contigo. Experimente, descubra, leia, atualize. Aproveite para renovar o assunto &#8220;finanças&#8221; em sua vida. Se você ainda não controla seus gastos, é uma boa hora para começar!</p>
<p>E se você gostar muuuito dessa versão nova, que tal <a href="http://aurelio.net/moneylog/donate/">fazer uma doação</a> para este e-mendigo que vos escreve? :)</p>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2012/03/15/moneylog-experience-5/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Lançar software é um saco!</title>
		<link>http://aurelio.net/blog/2012/03/02/lancar-software-e-um-saco/</link>
		<comments>http://aurelio.net/blog/2012/03/02/lancar-software-e-um-saco/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 14:07:52 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Dropbox]]></category>
		<category><![CDATA[MoneyLog]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://aurelio.net/?p=3558</guid>
		<description><![CDATA[Primeiro fiz um desabafo no Google+, mas agora eu quero registrar em detalhes, aqui no blog, o porquê lançar software é um saco. Fazer o software é uma delícia, mas aprontá-lo para o lançamento público, seja a versão inicial ou &#8230; <a href="http://aurelio.net/blog/2012/03/02/lancar-software-e-um-saco/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Primeiro <a href="https://plus.google.com/u/0/109816595539181258628/posts/DZxD1PREFQw">fiz um desabafo no Google+</a>, mas agora eu quero registrar em detalhes, aqui no blog, o porquê lançar software é um saco.</p>
<p>Fazer o software é uma delícia, mas aprontá-lo para o lançamento público, seja a versão inicial ou as posteriores, é um martírio.</p>
<p>Como neste exato momento estou passando pelo martírio, aprontando a versão nova do <a href="http://aurelio.net/moneylog/">MoneyLog</a>, quero compartilhar o que acontece.</p>
<h2>A parte divertida</h2>
<p>Toda a diversão de ser programador acontece antes, quando você tem a ideia em sua cabeça, amadurece ela, depois codifica o primeiro protótipo funcional, e vai aprimorando até chegar no ponto que o programa está <strong>bom para o seu uso</strong>.</p>
<p>Neste ponto uma decisão crucial: este programa viverá para sempre aqui no meu HD ou vou colocar no GitHub pra que outros possam usar também?</p>
<p>Àqueles que escolhem a primeira opção, eu entendo perfeitamente, pois publicar algo decente dá, muito, muito, MUITO trabalho.</p>
<p>Voltemos ao MoneyLog. Desde o início do ano eu comecei a trabalhar na versão nova. Todos os dias, várias horas por dia, totalizando 255 horas de trabalho até hoje. É um trabalho voluntário, não remunerado, que faço porque quero e porque gosto.</p>
<p>Foi cansativo, claro. Mas eu me diverti muito no processo, resolvendo os vários desafios que pipocam a todo instante. E o resultado me deixou muito orgulhoso, há várias novidades excitantes para anunciar.</p>
<p>Anunciar? Epa. Agora chegou a parte chata.</p>
<h2>A parte chata 1: adaptar para uso geral</h2>
<p><strong>Para mim</strong>, para o meu uso, na minha máquina, no meu navegador, <strong>o programa está perfeito</strong>. Eu não precisaria mexer em mais nada. Mas como este é um programa que eu publiquei e lanço versões novas de tempos em tempos, ele não é mais só meu.</p>
<p>Ele tem vários usuários, cada um com a sua máquina, o seu navegador, as suas necessidades e o seu próprio nível de conhecimento sobre o programa e sobre as tecnologias que o cercam. Eu prezo pelos usuários e quero que eles tenham a melhor experiência possível com o software.</p>
<p>Assim sendo, não basta o programa funcionar na minha máquina. Eu tenho que conseguir testar em várias configurações e sistemas diferentes, para encontrar os problemas antes de lançar a versão nova. Não são problemas meus, eu não serei afetado por eles, mas isso será a diferença entre uma boa ou má experiência para um usuário.</p>
<p><strong>Adaptar o programa para o uso geral leva tempo</strong>, é chato, e sempre vai faltar alguma coisa. Sempre vai ter um usuário com alguma configuração obscura que vai ter problemas, mas isso você só vai saber depois do lançamento.</p>
<h2>A parte chata 2: documentação</h2>
<p>Mas tá. Mesmo quando eu consigo testar tudo num número suficiente de ambientes e considerar que agora sim, o código está pronto, eu não posso simplesmente chegar e dizer:</p>
<blockquote><p>&#8220;Daí galera, terminei a versão nova do MoneyLog, baixa lá no SVN&#8221;</p></blockquote>
<p>Imediatamente, eu seria inundado com uma série de perguntas:</p>
<ul>
<li>Quais as novidades?</li>
<li>Como usar as novidades?</li>
<li>Alguma coisa foi removida?</li>
<li>Tem uma lista completa de todas as mudanças?</li>
<li>Vai funcionar no meu celular?</li>
<li>Tem alguma incompatibilidade com a versão anterior?</li>
<li>Se tiver incompatibilidade, como faço para resolver?</li>
<li>Como faço a atualização?</li>
<li>Se der pau, o que faço?</li>
<li>Onde é o SVN?</li>
<li>SVN?</li>
<li>MoneyLog? :)</li>
</ul>
<p>Entende? Não é assim que brincadeira funciona.</p>
<p>Não basta lançar somente o código. O programa não é somente o código. <strong>Deve haver documentação</strong>, você deve se antecipar às dúvidas dos usuários e colocar as respostas de maneira clara, seja no README, na tela de ajuda do programa, no manual, no website, onde for.</p>
<p>Se você não fizer isso, tudo o que vai ganhar é uma chuva de dúvidas, que terá que responder individual e repetidamente. Isso, é claro, se você conseguir despertar algum interesse. Um programa sem website, sem uma explicação ou demonstração de uso, dificilmente chama a atenção dos potenciais usuários.</p>
<blockquote><p>Se você costuma &#8220;lançar&#8221; software desse jeito, apenas jogando o código no GitHub e achando que isso é suficiente, pare para pensar. Você não está lançando nada, só está salvando teu código num servidor público. Na prática, isso não significa muita coisa.</p></blockquote>
<h2>Mas eu só quero programar! :(</h2>
<p>Eu também.</p>
<p>Mas isso só é possível se você fizer programas apenas para uso pessoal e nunca passar para nenhuma outra pessoa.</p>
<p>Porém, compartilhar é algo natural para o ser humano. Você teve trabalho fazendo o programa, é normal querer que amigos e outras pessoas usem ele também. Ou talvez você queira vender seu programa.</p>
<p>O fato é que, a partir do momento que você decide que seu código será usado por outra pessoa fora você mesmo, um universo de novas tarefas e novos problemas será colocado no seu colo e você terá que resolver.</p>
<p>Neste momento você entende que &#8220;ser programador&#8221; é muito mais do que digitar códigos.</p>
<h2>Um exemplo real</h2>
<p>Olhe a minha situação atual, de hoje. O código do MoneyLog está pronto <a href="http://code.google.com/p/moneylog-dev/source/checkout">no SVN</a>. Não tem mais o que polir nem o que arrumar. Está tudo funcionando como deveria.</p>
<p>Então o que falta para lançar logo essa versão nova?</p>
<ul class="spaced">
<li><strong>Escrever a lista completa de mudanças</strong> desde a versão anterior (Changelog). Vou ter que ler todas as mensagens de log, de todas as mudanças, e fazer um resumão. Sabe quantas mensagens são? <a href="http://code.google.com/p/moneylog-dev/source/list?num=500&amp;start=580">500</a>. <a href="http://aurelio.net/moneylog/svn/NEWS.html">FEITO</a></li>
<li><strong>Preparar um guia sobre as novidades</strong>, com fotos, demonstrando como usar. Ou quem sabe fazer um vídeo. Tanto para usuários novos quanto para os já existentes, demonstrar as funcionalidades é a melhor maneira de apresentá-las e ensinar seu uso.</li>
<li><strong>Escrever um guia de migração</strong> para usuários da versão anterior, pois há mudanças que quebraram alguns componentes. <a href="http://aurelio.net/moneylog/beta/update-2012.html">FEITO</a></li>
<li><strong>Escrever um guia sobre o Dropbox</strong>, que agora será possível usar para guardar os dados. Surgirão várias dúvidas, então um FAQ especial tem que ser feito. <a href="http://aurelio.net/moneylog/cloud/">FEITO</a></li>
<li><strong>Escrever um guia sobre configuração</strong>, pois aumentou bastante o número de configurações disponíveis e não há documentação sobre elas. Se o usuário não souber o que há e como usar, que sentido faz haver configuração? <a href="http://aurelio.net/moneylog/config/">FEITO</a></li>
<li><strong>Escrever um guia sobre os quatro &#8220;sabores&#8221;</strong> que o programa vai ter a partir de agora: Cloud, Browser, Portable, Beta. O usuário vai ficar confuso tendo que escolher uma versão para usar, então devo me antecipar e tornar essa decisão mais fácil. <a href="http://aurelio.net/moneylog/">FEITO</a></li>
<li><strong>Atualizar <a href="http://aurelio.net/moneylog/faq/">o FAQ</a></strong>. As várias mudanças tornaram alguns itens obsoletos, outros ficaram mais simples e talvez alguns não funcionem mais. Preciso conferir um por um.</li>
<li><strong>Atualizar o website do programa.</strong> Ou melhor dizendo, refazer o website. Há muitas novidades, tenho que dar destaque para elas, e o site velho não vai encaixar. Também preciso &#8220;apresentar&#8221; o programa para quem não conhece. Serão muitos textos e screenshots novos, reestruturação de URLs, vai dar trabalho.</li>
<li><strong>Pescar o nome de todos que ajudaram</strong> a fazer essa versão, com código, com palpites e testes e fazer uma lista de agradecimento. Terei que vasculhar no Changelog, histórico do twitter, meu email e minhas anotações.</li>
<li><strong>Atualizar o <a href="http://aurelio.net/soft/padfiles/moneylog-pad.xml">arquivo PAD</a></strong> do programa, para que sites de download sejam notificados que há uma versão nova.</li>
<li><strong>Preparar as versões em inglês</strong> do programa e atualizar o <a href="http://aurelio.net/soft/moneylog/">minissite gringo</a>.</li>
<li><strong>Escrever o texto de anúncio da versão nova</strong>, que será publicado aqui no blog, falando sobre os principais destaques e novidades. Uma vez publicado este texto, posso considerar a versão nova oficialmente lançada.</li>
</ul>
<p>Essas são as tarefas maiores, que eu lembrei agora. Ainda tem as minitarefas tipo mudar o número de versão no código, gerar a versão final, marcar a tag no SVN, conferir links, anunciar no twitter, responder dúvidas pós-anúncio, entre outras.</p>
<p>Bem, mas é isso. Agora preciso voltar ao trabalho e dar um jeito nessa lista de tarefas, senão esse MoneyLog v5 não vai sair nunca :)</p>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2012/03/02/lancar-software-e-um-saco/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 0.580 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-05-16 19:13:46 --><!-- Compression = gzip -->

