<?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>Funções ZZ</title>
	
	<link>http://aurelio.net</link>
	<description>Tudo sobre as ZZ: versões novas, dicas e bastidores!</description>
	<lastBuildDate>Wed, 08 Feb 2012 17:05:04 +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/FuncoesZZ" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="funcoeszz" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><image><link>http://funcoeszz.net/</link><url>http://aurelio.net/img/icon128/zz.png</url><title>zzlogo</title></image><item>
		<title>$ vi livro-sed.txt</title>
		<link>http://aurelio.net/blog/2011/06/24/vi-livro-sed-txt/</link>
		<comments>http://aurelio.net/blog/2011/06/24/vi-livro-sed-txt/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 01:44:13 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Livro]]></category>
		<category><![CDATA[Conectiva]]></category>
		<category><![CDATA[Expressões Regulares]]></category>
		<category><![CDATA[Funções ZZ]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[Shell Script]]></category>
		<category><![CDATA[txt2tags]]></category>
		<category><![CDATA[Vim]]></category>

		<guid isPermaLink="false">http://aurelio.net/?p=3032</guid>
		<description><![CDATA[Amiguinhos, MUITO OBRIGADO a todos que mandaram sugestões, eu finalmente me decidi e gostaria de avisar que ontem comecei a trabalhar no meu próximo livro, que será sobre o comando sed. Eu sei que estou atrasado, eu sei que isso &#8230; <a href="http://aurelio.net/blog/2011/06/24/vi-livro-sed-txt/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Amiguinhos, MUITO OBRIGADO a todos que <a href="http://aurelio.net/proximo-livro/">mandaram sugestões</a>, eu finalmente me decidi e gostaria de avisar que <strong>ontem comecei a trabalhar no meu próximo livro</strong>, que será sobre o <a href="http://aurelio.net/sed/">comando sed</a>.</p>
<p>Eu sei que estou atrasado, eu sei que isso já deveria estar pronto há anos, e é deprimente perceber quanto tempo passou sem eu ter feito um livro novo. O <a href="http://www.shellscript.com.br/">Shell Script Profissional</a> é de abril de 2008! Mas é assim que funciona, durante estes anos não deu o tesão de escrever, e <strong>sem tesão não tem ação</strong>, é um loop infinito de escreve-apaga-escreve-apaga e nunca sai do lugar.</p>
<p>Felizmente a abstinência terminou e agora estou aqui, empolgadíssimo para ficar semanas (meses?) enclausurado, escrevendo um livrinho novo. A escolha do tema favoreceu muito a volta da inspiração, pois <strong>o sed é meu comando Unix preferido</strong> e posso ficar horas falando sem parar sobre ele :)</p>
<p>O sed é uma ferramenta que, <a href="http://aurelio.net/blog/2009/07/03/10anos-sed/">após uma década</a>, continuo usando quase que diariamente. Sempre tem algum texto pra limpar, pra reformatar, pra apagar algum pedaço e quando vejo <a href="http://aurelio.net/blog/2011/04/19/o-jeito-shell-script-de-resolver-problemas/">lá estou eu na tela preta digitando algum comando sed</a>. Esse é um filme mais repetido que <a href="http://www.youtube.com/watch?v=8WCXDsXDAcc">Curtindo a Vida Adoidado</a> na Sessão da Tarde :)</p>
<p>Uso o sed porque é útil e porque eu gosto. Ele é um bichinho estranho, que parece alienígena, mas esconde uma simplicidade bela, que só quem o conhece bem sabe admirar (tipo o <a href="http://aurelio.net/vim/">Vim</a>). E quando combinado com <a href="http://aurelio.net/er/">expressões regulares</a>, mostra seu verdadeiro poder e faz mágicas.</p>
<blockquote><p>Já cheguei ao cúmulo de <a href="http://aurelio.net/sed/sokoban/sokoban.sed.html">fazer joguinho com sed</a>, mas <a href="https://github.com/oreio/scripts/blob/master/html-scraps-to-wordpress-xml/recados2wordpress-meta.sh#L92">hoje sou mais moderado</a> :)</p></blockquote>
<p>O sed foi importante desde o ínicio de minha carreira: foi a primeira ferramenta do Unix que aprendi a dominar, quando ainda era estagiário. Ser o &#8220;guru do sed&#8221; dentro da empresa (Conectiva) significou muito para mim na época. Foi por causa do sed que tive que aprender expressões regulares, as <a href="http://funcoeszz.net">Funções ZZ</a> usam sed no lugar de outras ferramentas para garantir compatibilidade entre sistemas e o <a href="http://txt2tags.org/pt/">txt2tags</a> só existe porque um dia eu quis escrever um <a href="http://aurelio.net/sed/sed-HOWTO/">sed-HOWTO</a> em SGML. Mais detalhes sobre essas histórias no post <a href="http://aurelio.net/blog/2009/07/03/10anos-sed/">10 anos: Sed</a>.</p>
<pre>$ ls -1 zz* | wc -l             # Nas 125 funções ZZ...
     125
$ grep -w sed zz* | wc -l       # ...o sed é usado 331 vezes!
     311</pre>
<p>Enfim, o sed estava lá desde o começo, participou das minhas criações mais importantes e continua firme e forte na minha rotina. Fazendo esse retrospecto, fica claro que é minha obrigação moral retribuir e fazer esta homenagem à ferramenta, fechando a trinca de livros: <strong>Shell + Sed + Expressões Regulares</strong>.</p>
<ul>
<li>Eu sei que sed é um assunto de nicho.</li>
<li>Eu sei que o público é restrito.</li>
<li>Eu sei que vai vender pouco.</li>
</ul>
<p>Mas tudo bem, quero fazer este livro de qualquer jeito. Não quero morrer com este conhecimento guardado na cabeça. <strong>Quero poder &#8220;mostrar a luz&#8221; do sed para outros nerds</strong>.</p>
<p>Já fiz <a href="http://aurelio.net/sed/">vários documentos</a> sobre o sed, inclusive <a href="http://aurelio.net/sed/livro/">um livro inacabado</a>, mas falta a obra definitiva: um texto completo, coeso, que parte do zero e <strong>ensina</strong> como funciona e como usar. E claro, o mais importante: o texto tem que ser leve e divertido, como uma conversa entre amigos. Detesto livros técnicos chatões.</p>
<p>O trabalho começou ontem, mas a escrita de verdade ainda leva um tempo. Esta fase inicial é de ambientação e planejamento. Estou definindo a forma do livro e sua didática: que assuntos vai ter, em que ordem, como será a narrativa, os exemplos, qual será o nível técnico, o público-alvo, essas coisas. <strong>Preciso primeiro &#8220;enxergar&#8221; o livro todo</strong>, do início ao fim, e quando essa massa imaginária de ideias toma forma e fica consistente, formando um ensinamento coeso de complexidade crescente, então estarei pronto para começar a escrever. Considero esta parte inicial a mais importante e difícil. Escrever o texto é a parte fácil.</p>
<p>Então, agora, mais do que em qualquer outra parte o processo, <strong>é a hora certa para você ajudar</strong>. Como a forma final ainda não foi definida, esta é a fase em que estou mais influenciável :) Por favor, use a caixa de comentários para dar sua opinião e suas ideias:</p>
<ul>
<li>O que você gostaria de aprender sobre o sed?</li>
<li>Quais suas dificuldades?</li>
<li>Quais tarefas você gostaria de usar o sed mas não sabe como?</li>
<li>O que te impede de aproveitar melhor o sed?</li>
<li>Como é seu uso atual do sed? Usa para quais tarefas?</li>
<li>Fora o s///, usa outros comandos?</li>
<li>Em qual sistema você usa(ria) o sed: Linux, Mac, Windows, Unix, outro?</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2011/06/24/vi-livro-sed-txt/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Em regex, nem sempre menos é mais</title>
		<link>http://aurelio.net/blog/2011/02/10/em-regex-nem-sempre-menos-e-mais/</link>
		<comments>http://aurelio.net/blog/2011/02/10/em-regex-nem-sempre-menos-e-mais/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 15:02:48 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Expressões Regulares]]></category>
		<category><![CDATA[Funções ZZ]]></category>

		<guid isPermaLink="false">http://aurelio.net/blog/?p=1487</guid>
		<description><![CDATA[Uso expressões regulares há tantos anos, que hoje para mim é muito natural, diria até automático, ficar compondo uma regex na cabeça, nas mais diversas (e inúteis) situações. Por exemplo, se estou relaxado lendo um artigo e em seu texto &#8230; <a href="http://aurelio.net/blog/2011/02/10/em-regex-nem-sempre-menos-e-mais/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Uso <a href="http://aurelio.net/er/">expressões regulares</a> há tantos anos, que hoje para mim é muito natural, diria até automático, ficar compondo uma regex na cabeça, nas mais diversas (e inúteis) situações. Por exemplo, se estou relaxado lendo um artigo e em seu texto aparece alguma repetição, pequena variação ou formato numérico, me pego pensando nos metacaracteres que casariam aquilo.</p>
<blockquote><p>Tá, é bizarro, eu sei :)</p></blockquote>
<p>Nos <a href="http://aurelio.net/blog/2011/01/28/salvar-site-como-pdf-no-iphone-ipod-ipad/">artigos</a> <a href="http://aurelio.net/blog/2011/02/04/imprimir-como-pdf-do-iphone-ipod-ipad-para-o-dropbox-via-airprint/">anteriores</a> do blog, falei sobre os equipamentos da Apple e várias vezes precisei citar os três brinquedos pretos: <strong>iPod</strong>, <strong>iPad</strong> e <strong>iPhone</strong>. Ao escrever estes nomes, um alerta apita aqui dentro: <em>Epa! Repetição e variação detectados!</em></p>
<blockquote><p><a href="http://macmagazine.com.br/2010/10/11/theres-an-app-for-that-agora-e-uma-marca-registrada-da-apple/">There&#8217;s a regex for that</a> :)</p></blockquote>
<p>Compor uma expressão regular que case os três nomes não é difícil. Uma primeira alternativa, mais simplista, seria usar o metacaractere <strong>ou</strong> para fazer a lista de palavras permitidas:</p>
<pre>iPod|iPad|iPhone</pre>
<p>A barra vertical indica que esta expressão casa iPod <strong>ou</strong> iPad <strong>ou</strong> iPhone. Simples, não? Fácil de ler e entender. Mas podemos tornar esta expressão menor e mais eficiente.</p>
<p>O segredo para fazer uma boa expressão é saber identificar padrões. Ao olhar com atenção para estas três palavras, percebemos que todas possuem o mesmo prefixo, ou seja, todas iniciam com as letras &#8220;iP&#8221;:</p>
<ul>
<li><strong>iP</strong>od</li>
<li><strong>iP</strong>ad</li>
<li><strong>iP</strong>hone</li>
</ul>
<p>Assim, podemos tornar nossa expressão mais eficiente deixando claro que o padrão começa com &#8220;iP&#8221;, e depois disso, há três alternativas:</p>
<pre>iP(od|ad|hone)</pre>
<p>Essa nova expressão continua casando as três palavras, mas agora ficou menor e mais rápida. Porém, agora ela ficou mais difícil para ler e entender. <strong>Trocamos legibilidade por eficiência.</strong></p>
<p>Aplicando mais uma vez a mesma técnica de identificar padrões e melhorar a expressão, podemos perceber que tanto iPod quanto iPad terminam com a letra &#8220;d&#8221;. Podemos isolar esta letra, trocando o trecho <code>od|ad</code> por <code>[oa]d</code>:</p>
<pre>iP([oa]d|hone)</pre>
<p>Continuamos casando as mesmas palavras, porém agora a legibilidade foi pelo ralo. É preciso interpretar a expressão mentalmente para saber quais são as palavras que ela casa. Será que <strong>fomos longe demais?</strong></p>
<p>Você sempre deve avaliar se esse tipo de melhoria é mesmo uma vantagem.</p>
<ul>
<li>Era necessário otimizar a expressão?</li>
<li>A expressão anterior estava lenta?</li>
<li>Todos que darão manutenção nesta expressão saberão entendê-la?</li>
<li>O que é mais importante: <strong>velocidade</strong> ou <strong>legibilidade</strong>?</li>
</ul>
<p>Acostume-se a <strong>sempre</strong> fazer estas perguntas a si mesm[ao] cada vez que for melhorar alguma expressão regular. Você pode se surpreender com as respostas :)</p>
<p>Às vezes, é possível encontrar um meio termo que não prejudica tanto a legibilidade, mas resulta em um ganho na performance.</p>
<pre>i(Pod|Pad|Phone)</pre>
<p>Nesta expressão, isolei somente a letra &#8220;i&#8221;, que é um prefixo muito conhecido para os produtos da Apple. Deixei o &#8220;P&#8221; repetindo em todas as alternativas para não quebrar as palavras. Assim fica clara a separação entre o prefixo &#8220;i&#8221; e o nome dos produtos: Pod, Pad e Phone.</p>
<pre>i(Phone|Pod|Pad)</pre>
<p>Como última melhoria, movi o trecho &#8220;Phone&#8221; para o início das possibilidades, para deixar mais claro que esta é uma lista de palavras com produtos da Apple. As alternativas Pod e Pad são muito parecidas e podem gerar confusão. Deixando o &#8220;Phone&#8221; no início, ali bem pertinho do &#8220;i&#8221;, fica mais fácil do leitor enxergar &#8220;iPhone&#8221; e deduzir o iPod e iPad com mais facilidade.</p>
<p>Agora, comparemos as duas expressões:</p>
<pre>iP([oa]d|hone)

i(Phone|Pod|Pad)</pre>
<p>A primeira seguiu somente o caminho da eficiência, enquanto a segunda fez um balanço entre eficiência e legibilidade.</p>
<p>Nos meus primeiros anos de expressões regulares, eu faria sempre a primeira, pois é a <strong>menor</strong> e mais <strong>eficiente</strong>. Hoje, depois de já ter sofrido muito dando <strong>manutenção</strong> para minhas próprias expressões enigmáticas do passado, valorizo mais uma expressão <strong>legível</strong>, melhorando a velocidade somente quando <a href="http://www.c2.com/cgi/wiki?PrematureOptimization">estritamente necessário</a>.</p>
<blockquote><p>Quem já usa as <a href="http://funcoeszz.net/">Funções ZZ</a> há tempos, sabe que <a href="http://funcoeszz.net/passado/funcoeszz-0.0915">seu código era afetado</a> por essa mentalidade do &#8220;menor é melhor&#8221;. Ainda bem que <a href="http://code.google.com/p/funcoeszz/source/browse/trunk/zz/zzcores">evoluí</a> :)</p></blockquote>
<p>Aprenda mais sobre os tópicos deste texto:</p>
<ul>
<li><a href="http://guia-er.sourceforge.net/ou.html">http://guia-er.sourceforge.net/ou.html</a></li>
<li><a href="http://guia-er.sourceforge.net/grupo.html">http://guia-er.sourceforge.net/grupo.html</a></li>
<li><a href="http://guia-er.sourceforge.net/lista.html">http://guia-er.sourceforge.net/lista.html</a></li>
<li><a href="http://guia-er.sourceforge.net/nao-complique.html">http://guia-er.sourceforge.net/nao-complique.html</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2011/02/10/em-regex-nem-sempre-menos-e-mais/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Versão nova das Funções ZZ (10.12)</title>
		<link>http://aurelio.net/blog/2010/12/23/versao-nova-das-funcoes-zz-10-12/</link>
		<comments>http://aurelio.net/blog/2010/12/23/versao-nova-das-funcoes-zz-10-12/#comments</comments>
		<pubDate>Thu, 23 Dec 2010 09:05:09 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Funções ZZ]]></category>
		<category><![CDATA[Shell Script]]></category>

		<guid isPermaLink="false">http://aurelio.net/blog/?p=1383</guid>
		<description><![CDATA[Funções ZZ é uma coletânea com mais de 100 miniaplicativos de utilidades diversas, prontos para serem usados na linha de comando do Linux, BSD, Mac e Cygwin. Software livre 100% nacional e maduro, que já completou 10 anos de existência. &#8230; <a href="http://aurelio.net/blog/2010/12/23/versao-nova-das-funcoes-zz-10-12/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://funcoeszz.net"><img class="aligncenter" title="Logo ZZ" src="http://funcoeszz.net/img/logo/zzlogo-cygwin.png" alt="" width="205" height="205" /></a></p>
<p><a href="http://funcoeszz.net">Funções ZZ</a> é uma coletânea com mais de 100 miniaplicativos de utilidades diversas, prontos para serem usados na linha de comando do Linux, BSD, Mac e Cygwin. Software livre 100% nacional e maduro, que já completou 10 anos de existência.</p>
<p>Neste finalzinho de 2010 foi lançada a versão de Natal das Funções ZZ, com a impressionante marca de <strong>37 miniaplicativos novos</strong>. É um trenó cheio de presentes para os usuários do shell, com novidades para todos os gostos:</p>
<ul>
<li>Vai encurtar uma URL no <a href="http://migre.me">migre.me</a>? <a href="http://funcoeszz.net/zzajuda.html#zzminiurl">zzminiurl</a>.</li>
<li>Não sabe o que pedir no <a href="http://www.subway.com.br/">Subway</a>? <a href="http://funcoeszz.net/zzajuda.html#zzsubway">zzsubway</a>.</li>
<li>O que vai passar na TV nas próximas horas? <a href="http://funcoeszz.net/zzajuda.html#zzglobo">zzglobo</a>.</li>
<li>Quer o <a href="http://translate.google.com.br">Google Tradutor</a> ao alcance de um Enter na shell? <a href="http://funcoeszz.net/zzajuda.html#zztradutor">zztradutor</a>.</li>
<li>Cálculos complicados com porcentagens? <a href="http://funcoeszz.net/zzajuda.html#zzporcento">zzporcento</a>.</li>
<li>Que tal uma piada? <a href="http://funcoeszz.net/zzajuda.html#zzpiada">zzpiada</a>.</li>
<li>E aquela sua encomenda do <a href="http://www.dealextreme.com/">DX</a> que não chega nunca? <a href="http://funcoeszz.net/zzajuda.html#zzrastreamento">zzrastreamento</a>.</li>
</ul>
<p>Tudo muito prático, basta digitar o comando e ver o resultado. Sem perda de tempo com navegadores, janelas, botões&#8230; Por falar em praticidade, saiba que o programa todo está em um único arquivo de texto, é só baixar e usar: <a href="http://funcoeszz.net/funcoeszz">http://funcoeszz.net/funcoeszz</a>.</p>
<p>Saiba mais sobre as funções no site <a href="http://funcoeszz.net">http://funcoeszz.net</a>.<br />
Divirta-se!</p>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2010/12/23/versao-nova-das-funcoes-zz-10-12/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Coisinhas novas: Subwaytor, Tabuada e Relógio</title>
		<link>http://aurelio.net/blog/2009/03/31/coisinhas-novas-subwaytor-tabuada-e-relogio/</link>
		<comments>http://aurelio.net/blog/2009/03/31/coisinhas-novas-subwaytor-tabuada-e-relogio/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 02:37:01 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[AdSense]]></category>
		<category><![CDATA[Coisinha]]></category>
		<category><![CDATA[Funções ZZ]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Relógio]]></category>
		<category><![CDATA[Subwaytor]]></category>
		<category><![CDATA[Tabuada]]></category>
		<category><![CDATA[Webstandards]]></category>

		<guid isPermaLink="false">http://aurelio.wordpress.com/?p=768</guid>
		<description><![CDATA[Oi pessoal, Após um longo período intocado, o site www.COISINHA.com.br ganhou uma atualização merecida. O quê, você nem se lembra mais que site é esse? Tá, eu refresco tua memória: é a casa do MiGuXeiToR, do Engripeitor e do Embriagueitor. &#8230; <a href="http://aurelio.net/blog/2009/03/31/coisinhas-novas-subwaytor-tabuada-e-relogio/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Oi pessoal,</p>
<p>Após um longo período intocado, o site <a href="http://www.coisinha.com.br/">www.COISINHA.com.br</a> ganhou uma atualização merecida.</p>
<blockquote>
<p style="text-align: left;">O quê, você nem se lembra mais que site é esse? Tá, eu refresco tua memória: é a casa do <a href="http://www.coisinha.com.br/miguxeitor/">MiGuXeiToR</a>, do <a href="http://www.coisinha.com.br/engripeitor/">Engripeitor</a> e do <a href="http://www.coisinha.com.br/embriagueitor/">Embriagueitor</a>. Refrescou? :)</p>
<p style="text-align: center;"><a href="http://www.coisinha.com.br/miguxeitor/"><img class="alignnone" src="http://www.coisinha.com.br/img/icon/miguxeitor.jpg" alt="" width="64" height="64" /></a> <a href="http://www.coisinha.com.br/engripeitor/"><img class="alignnone" src="http://www.coisinha.com.br/img/icon/engripeitor.png" alt="" width="64" height="64" /></a><a href="http://www.coisinha.com.br/embriagueitor/"><img class="alignnone" src="http://www.coisinha.com.br/img/icon/embriagueitor.gif" alt="" width="64" height="64" /></a></p>
</blockquote>
<p>Eu fiz esse site para abrigar alguns brinquedos que eu faço em <a href="http://pt.wikipedia.org/wiki/JavaScript">JavaScript</a> (e poder ganhar uns trocos com o <a href="http://aurelio.net/adsense/">AdSense</a>, claro). Mas como apareceram <a href="http://www.shellscript.com.br/">outras</a> <a href="http://www.piazinho.com.br/">coisinhas</a> <a href="http://umportugues.com/">mais</a> <a href="http://code.google.com/u/aureliojargas/updates">importantes</a> para fazer neste meio de tempo, sabe como é&#8230;</p>
<p>Mas tá, lamentações à parte, o que importa é que temos três brinquedos novos* no parquinho.</p>
<blockquote><p>* Seminovos na verdade, pois eu fiz todos eles em 2007/2008 e os coitadinhos ficaram na fila esperando a sua vez de serem apresentados ao mundo :)</p></blockquote>
<p style="text-align: center;"><a href="http://www.coisinha.com.br/subwaytor/"><img class="aligncenter" src="http://www.coisinha.com.br/img/icon/subwaytor.png" alt="" /></a></p>
<p style="text-align: center;"><a href="http://www.coisinha.com.br/subwaytor/"><strong>SUBWAYTOR</strong></a></p>
<p>Esse os leitores antigos do blog já conhecem! Quer dizer, pelo menos a versão inicial dele.</p>
<p>Lembra <a href="http://aurelio.net/blog/2008/05/19/nao-sei-fazer-barquinho-de-papel/">daquele texto que contei que fui com a Mog no Subway</a>, e de como é complicado escolher seu sanduíche? Com o bate-papo nos comentários surgiu a ideia de fazer um programinha que montasse o sanduíche automaticamente, escolhendo os ingredientes ao acaso. Surgiu então a <a href="http://funcoeszz.net/zzsubway/">zzsubway</a>.</p>
<p>A evolução do programa é o <a href="http://www.coisinha.com.br/subwaytor/">Subwaytor</a>, que também mostra fotinhos de sanduíches apetitosos :)</p>
<p>Além disso o programa possui uma inteligência artificial avançada, que com o mero contato de seu dedo na tela do computador, consegue analisar suas características biológicas e escolhe a melhor combinação de ingredientes para manter a sua saúde em dia.</p>
<p>Mais informações lá no <a href="http://www.coisinha.com.br/subwaytor/">site do Subwaytor</a>. Ah, e leia o rodapé ;)</p>
<p style="text-align: center;"><a href="http://www.coisinha.com.br/tabuada/"><img class="aligncenter" src="http://www.coisinha.com.br/img/icon/tabuada.jpg" alt="" width="128" height="128" /></a><a href="http://www.coisinha.com.br/tabuada/"><strong></strong></a></p>
<p style="text-align: center;"><a href="http://www.coisinha.com.br/tabuada/"><strong>TABUADA</strong></a></p>
<p>Uma tabelinha interativa que mostra a tabuada dos números de 1 a 10.</p>
<p>Não consigo me lembrar porque fiz esse programa, se foi uma ideia que tive ao acordar (dessas ideias tolas que na hora do almoço já foram embora) ou eu estava testando alguma coisa com CSS+JavaScript.</p>
<p>O fato é que eu achei legal destacar linhas e colunas com o movimento do mouse, então a tabuada veio de lambuja :)</p>
<p>De qualquer forma, talvez possa servir para crianças como uma alternativa aos livros chatos. Talvez não. Sei lá. Enfim. Se você achar um uso pra isso me avise :)</p>
<p style="text-align: center;"><strong><a href="http://www.coisinha.com.br/relogio/"><img class="aligncenter" src="http://www.coisinha.com.br/img/icon/relogio.gif" alt="" width="128" height="128" /></a></strong></p>
<p style="text-align: center;"><strong><a href="http://www.coisinha.com.br/relogio/"></a><a href="http://www.coisinha.com.br/relogio/">RELÓGIO</a></strong></p>
<p>Esse eu fiz em <a href="http://aurelio.net/blog/2007/11/">novembro de 2007</a> (!!), o coitado ficou mais de um ano esquecido na geladeira. Mas é meu brinquedo preferido.</p>
<p>A ideia não é minha, eu lembro de ter visto algo parecido em algum blog ou site ou&#8230; <del datetime="2009-04-17T14:45:36+00:00">Nunca vou saber.</del> (<a href="http://aurelio.net/blog/2009/03/31/coisinhas-novas-subwaytor-tabuada-e-relogio/#comment-45840">o Diogo achou</a>, era um <a href="http://www.simonheys.com/wordclock/">screensaver joiado</a>!) Mas como todo bom programador, ao ver o brinquedo a primeira coisa que pensei foi: como eu faço um desses? :)</p>
<p>O mais complicado foi aprender como definir um timer em JavaScript (<a href="http://www.google.com/search?q=simple+javascript+clock">obrigado Google</a>), pois o código mesmo acabou saindo em poucos minutos. Nada de mais: colocar e apagar classes nas palavras, cores no CSS e tá feito. Veja o fonte da página se ficou curioso(a).</p>
<p>Mas é incrível como essas coisinhas (taí o porquê do nome do site!) são prazerosas de fazer. É um desafio que aparece do nada no seu dia, cai no seu colo e você simplesmente não consegue dizer não. Parei tudo o que estava fazendo para poder programar o brinquedinho. Isso é tãaaaao legal :)</p>
<p>Veja lá o resultado: <a href="http://www.coisinha.com.br/relogio/">relógio com palavras</a>.</p>
<p><a href="http://www.coisinha.com.br/relogio/"><img class="aligncenter size-full wp-image-771" title="relogio-200" src="http://aurelio.net/wp/wp-content/uploads/2009/03/relogio-200.png" alt="relogio-200" width="200" height="200" /></a></p>
<p>Eu gostei, achei bonito e chique.<br />
E nerd, claro :)</p>
<p>Bem era isso.</p>
<p>Aceito sugestões de melhorias, e de coisinhas novas também!</p>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2009/03/31/coisinhas-novas-subwaytor-tabuada-e-relogio/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>Garoto de programa</title>
		<link>http://aurelio.net/blog/2009/03/11/garoto-de-programa/</link>
		<comments>http://aurelio.net/blog/2009/03/11/garoto-de-programa/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 02:59:13 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[AdiumBook]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[DMG]]></category>
		<category><![CDATA[Funções ZZ]]></category>
		<category><![CDATA[Mac OS X]]></category>
		<category><![CDATA[Mog]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Sparkle]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[txt2tags]]></category>
		<category><![CDATA[Xcode]]></category>
		<category><![CDATA[ZIP]]></category>

		<guid isPermaLink="false">http://aurelio.wordpress.com/?p=739</guid>
		<description><![CDATA[Nossa, o blog está agitado nos últimos dias. O texto anterior feito pela Mog gerou uma avalanche de comentários! E legal que são vários assuntos acontecendo ao mesmo tempo, graças à novidade de poder responder a um comentário específico (basta &#8230; <a href="http://aurelio.net/blog/2009/03/11/garoto-de-programa/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Nossa, o blog está agitado nos últimos dias.</p>
<p>O <a href="http://aurelio.net/blog/2009/03/05/o-que-ta-acontecendo-com-o-aurelio/">texto anterior feito pela Mog</a> gerou uma avalanche de comentários! E legal que são vários assuntos acontecendo ao mesmo tempo, graças à novidade de poder responder a um comentário específico (basta clicar em &#8220;Responder&#8221;, ao lado da data). Como a resposta aparece logo após o comentário e não lá no final, fica fácil de acompanhar o bate-papo. Quer participar também? <a href="http://aurelio.net/blog/2009/03/05/o-que-ta-acontecendo-com-o-aurelio/#comments">Vai lá agora</a> e também <a href="http://feeds.feedburner.com/AurelioJargasComentarios">assine o feed de comentários</a>!</p>
<p>O que mais gostei foi da sinceridade e conteúdo de muitos dos comentários. <a href="http://aurelio.net/blog/2009/03/05/o-que-ta-acontecendo-com-o-aurelio/#comment-45658">Tomei um puxão de orelha</a> (aliás, vários) que estava precisando, afinal, o blog acabou ficando meio de lado nos últimos meses.</p>
<p>Mas em vez de desculpas e lamentações, prefiro acatar a vontade popular e&#8230; escrever. <strong>Você pediu, agora aguenta!</strong> :)</p>
<p>Então, vamos falar de nerdices. Hoje lancei <a href="http://aureliosoft.wordpress.com/2009/03/11/adiumbook-version-15/">uma versão nova</a> do programinha <a href="http://aurelio.net/soft/adiumbook/">AdiumBook</a>, que serve para organizar seus contatos no <a href="http://aurelio.net/mac/">Mac</a>. Mas esqueça o programa, ele não é importante agora. O que quero é falar sobre desenvolvimento de software. Olha só:</p>
<div id="attachment_747" class="wp-caption aligncenter" style="width: 310px"><a href="http://aurelio.net/wp/wp-content/uploads/2009/03/billable-adiumbook.jpg"><img class="size-medium wp-image-747" title="billable-adiumbook" src="http://aurelio.net/wp/wp-content/uploads/2009/03/billable-adiumbook.jpg?w=300" alt="billable-adiumbook" width="300" height="266" /></a><p class="wp-caption-text">Clique na foto para aumentar</p></div>
<blockquote><p>Dica: Faz o seguinte, abra essa imagem em uma nova janela e deixe à vista, pois todo o texto falará sobre ela. Assim vai ficar mais fácil de entender.</p></blockquote>
<p>Agora vem uns quatro parágrafos bem chatos, mas aguente firme que é necessário para acompanhar o resto do texto. Eu prometo que depois melhora, tá?</p>
<p>Esta é uma foto do programa <a href="http://clickablebliss.com/billable/">Billable</a>, que uso para contabilizar as horas que gasto em cada tarefa durante o trabalho. Ele tem um relojinho que eu disparo quando começo e depois paro no final. No lado esquerdo estão os projetos e na tabelinha estão as tarefas. As linhas em azul estão selecionadas. Então o que estamos vendo são as tarefas do projeto AdiumBook.</p>
<p>Dentro da tabela, selecionei apenas as tarefas mais recentes deste projeto, que mostram todo o trabalho feito nesta versão nova lançada hoje.</p>
<p>Aquele total em reais no canto direito da tabela indica o valor de cada tarefa. Mas eu coloquei o valor/hora como R$ 1,00 para ficar fácil ver a quantidade de horas de cada tarefa. Então um valor de R$ 2,50 na verdade indica que a tarefa demorou duas horas e meia para ficar pronta.</p>
<p>Eu também sempre arredondo o tempo de cada tarefa, usando intervalos de no mínimo 15 minutos. Assim fica melhor de ter uma visão geral das coisas, valores muito picadinhos apenas confundem.</p>
<p>Bem, mas então tá. Agora você já sabe achar as informações ali :)</p>
<p>Eu gosto de sempre analisar os dados sobre as coisas que faço, para avaliar se tudo correu bem e para poder tomar decisões para o futuro. Dessa vez quero fazer a análise junto com vocês, para mostrar um pouco como é essa <strong>rotina de ser programador e lançar programas</strong>.</p>
<p>Primeiro vamos às datas. A versão anterior do AdiumBook (1.4) foi lançada em 29 de julho de 2008. Tá lá, na primeira linha da tabela, que não está selecionada. Esse lançamento tomou quase oito horas para ficar pronto! Vejamos quais tarefas foram feitas neste dia:</p>
<ul>
<li>Testes no iBook (Tiger)</li>
<li>Atualização SVN</li>
<li>DMG feito</li>
<li>site atualizado</li>
<li>anúncio nos sites (Xtras, Apple, ScriptBuilders)</li>
<li>anúncio no blog do aurélio</li>
<li>anúncio no blog aureliosoft</li>
</ul>
<p>Nada de substancial, certo? Eu nunca diria que essas tarefinhas iriam levar oito horas&#8230; Mas cada uma tem vários passos a seguir e os famosos &#8220;5 minutinhos&#8221; acabam virando horas.</p>
<blockquote><p>A Mog, depois de um tempo comigo, instituiu a regra do &#8220;<strong>vezes dois</strong>&#8221; para os meus prazos. Cada vez que eu digo algo como &#8220;só vou levar mais meia hora para terminar esse texto do blog&#8221;, ela responde: &#8220;vezes dois&#8221;. E não dá outra: acabo levando pelo menos mais uma hora para terminar. Sabe o que é? Ou eu sou otimista demais nos meus prazos, ou o universo conspira para sempre dar alguma coisa errada no meio do caminho ;)</p></blockquote>
<p>O lançamento de hoje foi mais rápido, demorou apenas quatro horas. Já estou mais familiarizado com o <a href="http://code.google.com/p/adiumbook/source/checkout">SVN</a>, por preguiça não fiz os testes no <a href="http://www.apple.com/support/tiger/">Tiger</a> (sistema anterior, já antiquado) e o anúncio no blog é este texto que estou escrevendo agora, mas dessa vez contabilizando no projeto &#8220;Blog&#8221;. Vejamos, já deu uma hora e oito minutos até aqui. Será que conseguirei terminar em menos de três horas? Duvido :)</p>
<p><strong>Primeira lição</strong> que os dados nos ensinam: leva tempo!</p>
<p>O lançamento de uma versão nova de um programa não é feito em 15 minutos, nem em uma hora. É um processo trabalhoso e desgastante, onde você deve ter atenção máxima para não errar. Concentração é tudo.</p>
<blockquote><p>E cansa mesmo, mental e fisicamente. Hoje, logo que terminei o lançamento do AdiumBook fui tomar um banho para relaxar, pois estava acabado. O bom é que no banho tive a ideia de um <a href="http://aurelio.net/livro/">livro</a> sobre desenvolvimento de software, mas isso eu deixo para falar outro dia&#8230; :)</p></blockquote>
<p>Voltando à fotinho e à tabela, a segunda linha mostra que no dia seguinte ao lançamento da versão anterior, gastei somente uma hora e pouco fazendo faxina (todos = &#8220;to do&#8221;s, do inglês, a fazer) e cadastrando o programa no site <a href="http://freshmeat.net/projects/adiumbook">Freshmeat</a>. Nada glorioso, trabalho de peão.</p>
<p>Só fui mexer no programa novamente um mês depois, em agosto, que levei uma hora para arrumar alguns probleminhas que apareceram ao instalar a versão nova do <a href="http://adium.im/">Adium</a> (1.3).</p>
<p>Em setembro mexi mais uma única vez para resolver outro problema que os usuários relataram, que deu muito trabalho levando mais de cinco horas para resolver. E depois mais nada, esqueci do programa por vários meses.</p>
<blockquote><p>Eu gosto assim. Passar um bom tempo sem mexer no programa, que quando eu volto, a disposição é grande. Se mexer todo dia um pouquinho enche o saco rapidinho.</p></blockquote>
<p><strong>Segunda lição:<br />
</strong>Relaxe! Só mexa no programa quando tiver tempo e disposição.</p>
<p>Vieram as festas de fim de ano, a praia, o Carnaval, e nada de vontade de mexer no programa. Porém, os e-mails de usuários começaram a acumular e comecei a ficar incomodado. Geralmente é neste momento que decido que é &#8220;hora de fazer alguma coisa&#8221;.</p>
<blockquote><p>Ei, <a href="http://txt2tags.org/pt/">txt2tags</a>, estou olhando pra você.</p></blockquote>
<p>Depois que terminei as tarefas mais importantes do <a href="http://umportugues.com">UmPortugues</a>, me programei para &#8220;dar um jeito&#8221; no AdiumBook. Eu sabia que essa pegada iria resultar em uma versão nova, pois haviam muitas pendências a serem resolvidas. Então era preciso de bastante tempo reservado para poder mergulhar no código.</p>
<p>Aí começou o trabalho de verdade, no dia sete deste mês, sábado passado, num final de semana que excepcionalmente eu não iria ver a <a href="http://aurelio.net/blog/tag/mog/">Mog</a>. Veja na foto as cinco últimas linhas selecionadas na tabela, que mostram cinco dias seguidos de trabalho no programa, de sábado até hoje.</p>
<p>Eu preciso dessa imersão quando tenho algo maior a fazer. Trabalhar meia hora por dia em uma coisa não dá certo. Eu levo esse tempo somente para me concentrar 100% e &#8220;mergulhar&#8221; no código. Sabe aquele estado de atenção em que você não sente fome nem vontade de ir ao banheiro? É isso :)</p>
<p><strong>Terceira lição:<br />
</strong> Prepare-se para trabalhar pesado quando for finalizar um programa para lançamento de versão nova.</p>
<p>Mas tive alguns problemas não planejados.</p>
<p>Dias atrás instalei o <a href="http://www.apple.com/safari/">Safari 4 Beta</a> e gostei que ele está mais rápido e consome menos memória (nem preciso mais encerrá-lo diariamente!). Porém, ele <a href="http://compgroups.net/comp.sys.mac.apps/Safari-4-kills-Xcode">quebrou</a> o <a href="http://en.wikipedia.org/wiki/Xcode">Xcode</a>, que é o programa que uso para mexer no AdiumBook. Tive que atualizá-lo. Foram horas até os seus malditos 900 e poucos megas serem baixados pela minha conexão barata. Uma baita água fria em quem achava que já ia colocar a mão no código naquele momento.</p>
<p>Com o Xcode atualizado, o próximo que me deu dores de cabeça foi o <a href="http://sparkle.andymatuschak.org/">Sparkle</a>. Ele é um carinha muito bacana que você enfia no teu programa e ele faz a mágica da atualização automática. Funciona assim: a próxima vez que eu lançar uma versão nova do AdiumBook, vai aparecer automaticamente uma janelinha para o usuário, dizendo: &#8220;tem uma versão nova desse programa, quer baixar e instalar?&#8221; e então ele faz tudo sozinho. É lindo de ver. Mas&#8230; Levei horas para fazer ele funcionar. E nem posso xingar o carinha, pois o erro foi meu. A maneira que eu informava a versão do AdiumBook no Xcode estava errada. Arrumei isso e o Sparkle começou a funcionar. Coisas da vida&#8230;</p>
<div id="attachment_748" class="wp-caption aligncenter" style="width: 310px"><a href="http://aurelio.net/wp/wp-content/uploads/2009/03/sparkle-window.jpg"><img class="size-medium wp-image-748" title="sparkle-window" src="http://aurelio.net/wp/wp-content/uploads/2009/03/sparkle-window.jpg?w=300" alt="sparkle-window" width="300" height="200" /></a><p class="wp-caption-text">Janelinha do Sparkle atualizando o AdiumBook</p></div>
<blockquote><p>Estou há duas horas escrevendo esse texto já. Isso que nem revisei nada ainda. É, vai demorar&#8230;</p></blockquote>
<p>Já que fui forçado (para o bem) a mudar meu esquema de versões, resolvi por o número de revisão do SVN ali também, para ficar igual software de gente grande. A versão de lançamento ficou &#8220;1.5 (50)&#8221;, ou seja, <a href="http://code.google.com/p/adiumbook/source/browse/#svn/tags/1.5">versão 1.5</a>, <a href="http://code.google.com/p/adiumbook/source/detail?r=50#">revisão 50 do SVN</a>. Mas como eu não ia ficar mudando a revisão do SVN &#8220;na mão&#8221; a cada alteração, procurei uma maneira de fazer isso automaticamente. Achei <a href="http://blog.shinyfrog.net/2008/05/19/sync-svn-version-and-cfbundleversion-xcode/">um script em Python</a> que deu erro aqui mas consegui arrumar. No fim, todo esse problema acabou deixando o programa mais profissional e ainda pude automatizar a geração do ZIP para lançamento.</p>
<p>Ah é, o <a href="http://en.wikipedia.org/wiki/ZIP_(file_format)">ZIP</a>. Antes eu usava o formato <a href="http://en.wikipedia.org/wiki/Apple_Disk_Image">DMG</a> (Disk Image) para &#8220;empacotar&#8221; e distribuir o AdiumBook. Esse tal DMG é um treco que só tem no Mac. É bacana, imagine um arquivo ZIP que quando você abre aparece uma janelinha bonitinha, com desenhos, cores, tudo bem personalizado para o seu programa. Só que o Sparkle tem <a href="https://github.com/andymatuschak/Sparkle/wiki/Publishing-An-Update">algumas pegadinhas</a> para usar com o DMG. Então para simplificar as coisas para mim, mudei para o ZIP, que é mais padrão.</p>
<div id="attachment_746" class="wp-caption aligncenter" style="width: 310px"><a href="http://aurelio.net/wp/wp-content/uploads/2009/03/adium-dmg.jpg"><img class="size-medium wp-image-746" title="adium-dmg" src="http://aurelio.net/wp/wp-content/uploads/2009/03/adium-dmg.jpg?w=300" alt="adium-dmg" width="300" height="226" /></a><p class="wp-caption-text">O DMG do Adium é tãaaao bonitinho</p></div>
<p>Percebeu o tamanho das encrencas não-planejadas que aparecem quando você só quer mexer sossegado no seu programa e nada mais? Recapitulando: baixar e instalar o Xcode, Sparkle com problemas, mudar o esquema de versionamento, script para versão automática, mudar de DMG para ZIP. Por isso ocorre o &#8220;vezes dois&#8221;, que nesse caso foi um &#8220;vezes quatro&#8221; pelo menos :)</p>
<p><strong>Quarta lição:<br />
</strong> Prepare-se para enfrentar problemas inesperados. O ato de &#8220;programar&#8221; envolve muito mais do que sentar numa cadeira e digitar códigos. Ah, se não fosse o Google&#8230;</p>
<p>Bem, resolvidos estes contratempos, pude finalmente fazer aquilo que gosto: <a href="http://code.google.com/p/adiumbook/source/list">criar códigos</a>. E assim foram corrigidos os bugs e implementadas as funcionalidades novas.</p>
<blockquote><p>Se você quiser acompanhar &#8220;ao vivo&#8221; a evolução de um software, assine <a href="http://code.google.com/feeds/u/aureliojargas/updates/user/basic">meu feed no Google Code</a>. Assim você fica sabendo na hora sobre as mudanças mais recentes no AdiumBook, no txt2tags e nas <a href="http://funcoeszz.net">Funções ZZ</a>.</p></blockquote>
<p>Com tudo pronto, hoje atualizei <a href="http://code.google.com/p/adiumbook/source/browse/trunk/AdiumBook%20Help/index.html">o texto de ajuda</a> (Help), rodei o programa e testei todos os botões e itens de menu, fiz o <a href="http://adiumbook.googlecode.com/files/AdiumBook-1.5.zip">ZIP final</a> e mandei para o <a href="http://code.google.com/p/adiumbook/downloads/list">servidor</a>. Contemplei por alguns segundos o arquivo na tela, mostrando zero downloads. É o nascimento.</p>
<blockquote><p>Dá uma emoção ao enviar o arquivo, sabia? Uma vez no servidor, seu &#8220;filho&#8221; vai para o mundo. Ali é o ponto sem retorno, onde você declarou publicamente que fez o seu melhor. Encontrar uma falha logo após enviar o arquivo é motivo de vergonha para três gerações futuras de sua família.</p></blockquote>
<p>Depois foi aquela novela de atualizar o <a href="http://aurelio.net/soft/adiumbook/">site do programa</a>, atualizar o <a href="http://aurelio.net/soft/padfiles/adiumbook-pad.xml">arquivo PAD</a> e anunciar a versão nova para os principais sites de download. Vou colar aqui um pedaço do meu arquivo release-checklist.txt, que lista todas as tarefas obrigatórias de cada lançamento (em ordem de execução):</p>
<blockquote><p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-8&lt;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
upload ZIP pro Google Code<br />
baixar ZIP e testar<br />
deprecate release anterior no Google Code<br />
atualizar Changelog no Google Code (wiki)<br />
atualizar issues (&#8220;closes issue #12&#8243; no Changelog)<br />
fazer Changelog mini (&lt;300) para PAD e sites<br />
screenshot novidades<br />
atualizar site<br />
atualizar appcast.xml (e changelog: 1.5.html)<br />
atualizar PAD file (editar, upload, validate, enviar repositório)<br />
atualizar no Adium Xtras http://www.adiumxtras.com/?a=xtras&amp;xtra_id=2069<br />
atualizar no ScriptBuilders (Upload your Scripts! &gt; Update Existing)<br />
atualizar no VersionTracker (MacUpdate segue, acho)<br />
atualizar no Freshmeat http://freshmeat.net/projects/adiumbook/<br />
atualizar no site da Apple https://adcweb.apple.com/downloads/<br />
atualizar no i use this (textile: listas com * e **)<br />
post blog aureliosoft<br />
post blog aurelio<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&gt;8&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p></blockquote>
<p>Ufa! Pensou que era fácil lançar um programa? :)</p>
<p><strong>Quinta lição:<br />
</strong>Codificar é divertido, lançar é estressante. Por isso não compensa fazer muitos lançamentos em um curto período.</p>
<p>De volta à foto, veja que logo abaixo das linhas azuis da tabela, há uma linha mostrando os números totais. Ali no meio é possível ver no item &#8220;Time-based&#8221; qual foi o tempo total que eu levei para fazer todas as tarefas dessa versão nova do programa: mais de 30 horas.</p>
<p>Pena que faz pouco tempo que eu comecei a contabilizar as horas do AdiumBook, mas como eu apanhei muito lá no início (em 2005) por não saber AppleScript direito, acredito que o total já investido nesse programa passa das 200 horas de trabalho.</p>
<p>Lembrando: o AdiumBook é um programa gratuito.</p>
<p>Se você me perguntar &#8220;<strong>por quê?</strong>&#8220;,<br />
eu respondo &#8220;<strong>porque vale a pena!</strong>&#8220;.</p>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2009/03/11/garoto-de-programa/feed/</wfw:commentRss>
		<slash:comments>35</slash:comments>
		</item>
		<item>
		<title>É nóis no Tchelinux 2008</title>
		<link>http://aurelio.net/blog/2008/11/14/e-nois-no-tchelinux-2008/</link>
		<comments>http://aurelio.net/blog/2008/11/14/e-nois-no-tchelinux-2008/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 19:05:24 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Meu querido diário]]></category>
		<category><![CDATA[AdSense]]></category>
		<category><![CDATA[apostila]]></category>
		<category><![CDATA[Curitiba]]></category>
		<category><![CDATA[Funções ZZ]]></category>
		<category><![CDATA[Joinville]]></category>
		<category><![CDATA[Livro]]></category>
		<category><![CDATA[Matrix]]></category>
		<category><![CDATA[Mog]]></category>
		<category><![CDATA[palestra]]></category>
		<category><![CDATA[Porto Alegre]]></category>
		<category><![CDATA[txt2tags]]></category>
		<category><![CDATA[viagem]]></category>
		<category><![CDATA[Vídeo]]></category>

		<guid isPermaLink="false">http://aurelio.wordpress.com/?p=635</guid>
		<description><![CDATA[Já falei que não gosto da rotina de palestrante, mas o meu amigo Leo me convidou para palestrar em seu evento Tchelinux e achou um jeito de me convencer a sair da toca: levar a Mog junto :) É uma &#8230; <a href="http://aurelio.net/blog/2008/11/14/e-nois-no-tchelinux-2008/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://aurelio.net/blog/2007/08/21/minha-palestra-na-pyconbrasil/">Já falei que não gosto da rotina de palestrante</a>, mas o meu amigo Leo me convidou para palestrar em seu evento <a href="http://tchelinux.org">Tchelinux</a> e achou um jeito de me convencer a sair da toca: levar a Mog junto :)</p>
<p>É uma ótima idéia, pois além de ela me ajudar com tudo lá no evento, no tempo que sobra podemos passear juntos pela cidade, com calma, aproveitando de verdade a viagem, que fica sendo meio trabalho e meio passeio.</p>
<p>E foi exatamente isso o que fizemos neste final de semana: fomos à Porto Alegre para passear e participar do Tchelinux 2008.</p>
<p style="text-align:center;"><a href="https://picasaweb.google.com/109483631753960149638/TchelinuxPortoAlegre2008#5267202464036171586"><img class="aligncenter" title="Tchelinux" src="http://lh4.ggpht.com/_unFTYA8V_sE/SRjcu_TwL0I/AAAAAAAAARo/kH1vGfUF7Vo/s640/web-DSC01790.JPG" alt="" width="202" height="269" /></a></p>
<p>Nosso avião era sábado às 7h30 da madrugada, e como o aeroporto de Curitiba é BEM longe do centro da cidade, tivemos que acordar às 5h30. Como se esse horário já não fosse desumano o bastante, tínhamos ido dormir à 1h30, totalizando incríveis <strong>quatro horas de sono</strong>. Isso explica as caras de sono na maioria das fotos :)</p>
<blockquote><p>Não teve jeito de ir dormir antes, pois a Mog veio lá de Joinville, acabou pegando a rodoviária lotada e o ônibus atrasou um monte.</p></blockquote>
<p>Já no avião, voando acima das nuvens e admirando aquela incrível paisagem de sonho, de um mar de algodão-doce que ia até onde os olhos não alcançavam mais, colocamos nossas <strong>alianças</strong> pela primeira vez. <a href="http://aurelio.net/blog/2008/07/18/a-lua-a-pedra-e-o-amor/">O noivado aconteceu em junho</a>, com um anel provisório, porém agora tínhamos nos dedos nossas alianças de verdade. Viva! \o/</p>
<div id="attachment_657" class="wp-caption aligncenter" style="width: 410px"><img class="size-full wp-image-657" title="aviao-aliancas" src="http://aurelio.net/wp/wp-content/uploads/2008/11/aviao-aliancas1.jpg" alt="aviao-aliancas" width="400" height="300" /><p class="wp-caption-text">Aliança nas nuvens</p></div>
<p>O evento foi na PUC, mesmo lugar do <a href="http://aurelio.net/blog/2008/04/22/a-mog-foi-no-fisl/">FISL</a>. Chegando lá, a grata surpresa de ver vários <strong>amigos</strong> que há tempos não conversava. Amigos da Conectiva, da Internet, de outros eventos e até alguns leitores aqui do blog.</p>
<p>Depois do almoço eu e a Mog demos uma descansada na <strong>grama</strong>, pois a noite curta de sono ainda estava pesando muito as pálpebras. Aproveitei também para dar uma última olhada nos <a href="http://www.tchelinux.org/2008/portoalegre/slides/aurelio-sl-fonte-de-renda.pdf">slides da palestra</a>, pois eu ainda não sabia direito o que iria falar nas duas horas com o microfone na mão :)</p>
<div class="wp-caption aligncenter" style="width: 410px"><a href="http://picasaweb.google.com/fbohnees/TchelinuxPortoAlegre2008#5267314727220769010"><img title="Pensando na grama" src="http://lh5.ggpht.com/_unFTYA8V_sE/SRlC1kQtcPI/AAAAAAAAAac/pbEjOAeHMGY/s720/web-DSC01810.JPG" alt="" width="400" height="300" /></a><p class="wp-caption-text">Que que eu vou falar lá...</p></div>
<blockquote><p><strong>Sobre a palestra</strong></p>
<p>O nome da palestra é &#8220;<em>$oftware Livre como fonte de renda</em>&#8220;, onde explico o que eu fiz para <a href="http://aurelio.net/blog/2007/03/29/vamos-falar-de-grana/">ganhar dinheiro como autônomo</a>, desde que <a href="http://aurelio.net/blog/2005/09/23/free-as-in-bird/">saí da Conectiva</a>, no ano de 2005.</p>
<p><a href="http://aurelio.net/curso/material/aurelio-sl-fonte-de-renda.pdf"><img class="aligncenter size-full wp-image-653" title="sl-como-fonte-de-renda" src="http://aurelio.net/wp/wp-content/uploads/2008/11/sl-como-fonte-de-renda.jpg" alt="sl-como-fonte-de-renda" width="311" height="233" /></a></p>
<p>Pode ser encarada como a continuação da palestra &#8220;<a href="http://aurelio.net/curso/linuxchix/">Como ser um desenvolvedor de Software Livre</a>&#8220;, que eu fazia em 2004. Mas naquela época eu era empregado e tinha um salário, então o dinheiro não era uma preocupação. Hoje minha realidade é outra, e essa palestra nova reflete essa mudança.</p>
<p>Passei dois dias inteiros preparando <a href="http://aurelio.net/curso/material/aurelio-sl-fonte-de-renda.pdf">os slides</a>, deu um trabalhão. Mas valeu, foi revelador, pois primeiro precisei fazer todo um levantamento do que aconteceu nos últimos anos. Quanto gastei? Quanto vendi? Quanto ganhei? Em quanto tempo? De onde veio? Para onde foi? Fiz planilhas, gerei gráficos, comparei dados. Números, números, números.</p>
<p>Resumindo o assunto em uma palavra: $$$ GRANA $$$ :)</p>
<p style="text-align:center;"><a href="http://picasaweb.google.com/fbohnees/TchelinuxPortoAlegre2008#5267316422188213122"><img class="size-full wp-image-659 aligncenter" title="mr-burns" src="http://aurelio.net/wp/wp-content/uploads/2008/11/mr-burns.jpg" alt="mr-burns" width="266" height="251" /></a></p>
</blockquote>
<p>Nos slides eu tinha todos os dados. Exatos, porém frios. O calor e o humor viriam da minha história pessoal. Mas ainda faltava algo&#8230; Uma mensagem, um objetivo&#8230; A resposta veio rápido: a Mog e o Leo sugeriram que aquele público (jovens, estudantes) precisava mesmo era de <strong>motivação</strong>. Isso! Essa era a peça que faltava.</p>
<p>Como eu já não tinha mais tempo de preparar nada, foi tudo &#8220;ao vivo&#8221;, sem ensaio. Com o microfone na mão e slides no projetor, diante de 200 pessoas, <strong>a palestra nasceu</strong>.</p>
<p>À medida que eu ia contando as histórias e mostrava os dados dos slides, lembrava daquela época de dúvidas, e de como o futuro era incerto. Eu fazia as coisas sem saber onde iam dar. Hoje é fácil entender o processo, mas lá atrás tudo o que eu sabia era que eu precisava <strong>fazer</strong>. O resultado era uma incógnita.</p>
<blockquote><p>E esse foi o grande recado: <strong>faça</strong>.</p>
<p>Não importa se não der em nada.<br />
Não importa se não tem objetivo.<br />
Não importa se ninguém te apóia.<br />
Faça.<br />
Simplesmente faça.<br />
Pode demorar vários anos, mas o resultado vem.</p>
<p>Eu fiz, e <strong>o resultado veio</strong>.</p></blockquote>
<p>E assim foram duas horas que passaram em instantes. Falei da <a href="http://funcoeszz.net/camiseta.html">camiseta das Funções ZZ</a>, da <a href="http://aurelio.net/shell/apostila/">apostila de shell</a>, das doações via PayPal, dos <a href="http://aurelio.net/adsense/">anúncios do  Google (AdSense)</a> e dos <a href="http://aurelio.net/livro/">livros que escrevi</a>. Quer assistir?</p>
<p>Aqui tem a primeira metade:</p>
<p><embed type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docid=-2132264072983568211&amp;hl=en&amp;fs=true" style="width:640px;height:518px" allowFullScreen="true" allowScriptAccess="always" /></p>
<p>E aqui tem a segunda metade (valeu <a href="http://blog.griebeler.com">Bruna</a>!):</p>
<p><embed type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docid=2963572980768934059&amp;hl=en&amp;fs=true" style="width:640px;height:518px" allowFullScreen="true" allowScriptAccess="always" /></p>
<p>No final, um palestrante emocionado por perceber que hoje está vivendo o seu sonho de ontem e um público satisfeito que aplaudiu com vigor.</p>
<p>Missão cumprida.</p>
<blockquote><p><strong>O e-mendigo recebe doações :)</strong></p>
<p>No meio da palestra o Leo me perguntou qual era o meu e-mail do PayPal. &#8220;<em>É verde arroba aurelio ponto net</em>&#8221; e voltei a palestrar. &#8220;<em>Acho que ele vai por isso no site do Tchelinux</em>&#8220;, pensei. Instantes depois, com um sorrisinho maroto no rosto, ele mostra a tela do notebook e diz que tinha acabado de me fazer uma doação. E mais, que também tinha <strong>quebrado o recorde</strong> de 100 dólares como a maior doação que eu já tinha recebido. UAU! Como assim? Massa!</p>
<p>No fim da palestra, recebi uma lista de nomes e um bolo de notas e moedas. &#8220;<em>Que isso?</em>&#8220;, perguntei. Eu não tinha percebido, mas por iniciativa do Leo e do Evaldo (UdontKnow), durante o &#8220;culto&#8221; eles <strong>passaram a &#8220;sacolinha&#8221;</strong> e colheram &#8220;ofertas&#8221; para este &#8220;pastor&#8221; que vos escreve :)</p>
<p>Pô, isso <strong>tocou fundo</strong> (no bom sentido, claro). Nos slides eu mostrei que os brasileiros contribuem muito pouco, apesar de serem os maiores usuários de meus programas livres. Mas ali, durante a palestra, o pessoal resolveu mudar essa realidade.</p>
<p>MUITO OBRIGADO MESMO!</p>
<div id="attachment_650" class="wp-caption alignnone" style="width: 310px"><a href="http://aurelio.net/wp/wp-content/uploads/2008/11/lista-doadores.jpg"><img class="size-medium wp-image-650" title="lista-doadores" src="http://aurelio.net/wp/wp-content/uploads/2008/11/lista-doadores.jpg?w=300" alt="46 pessoas doaram R$160,75 durante a palestra \o/" width="300" height="183" /></a><p class="wp-caption-text">46 pessoas doaram...</p></div>
<div id="attachment_655" class="wp-caption alignnone" style="width: 310px"><a href="http://aurelio.net/wp/wp-content/uploads/2008/11/dinheiro-doacoes1.jpg"><img class="size-medium wp-image-655" title="dinheiro-doacoes" src="http://aurelio.net/wp/wp-content/uploads/2008/11/dinheiro-doacoes1.jpg?w=300" alt="foo" width="300" height="185" /></a><p class="wp-caption-text">... R$160,75 durante a palestra...</p></div>
<div id="attachment_651" class="wp-caption alignnone" style="width: 310px"><a href="http://aurelio.net/wp/wp-content/uploads/2008/11/paises-doadores-nq8.png"><img class="size-medium wp-image-651" title="paises-doadores-nq8" src="http://aurelio.net/wp/wp-content/uploads/2008/11/paises-doadores-nq8.png?w=300" alt="paises-doadores-nq8" width="300" height="138" /></a><p class="wp-caption-text">... e o Brasil é campeão Galvão! \o/</p></div></blockquote>
<p>Logo depois da palestra fizemos um <strong>painel</strong> (ou mesa, ou algo parecido&#8230;), onde o tema era carreira profissional no software livre, com apresentação do Carlos Santos (casantos), em que eu, o <a href="http://acmel.wordpress.com/">Arnaldo</a> (acme) e o <a href="http://fabioolive.blogspot.com/">Fábio Olivé</a> (leitinho) respondíamos perguntas. Eu não tenho carreira, então não tinha muito a falar :)</p>
<p>Depois veio o <strong>encerramento</strong>, com a mensagem final do Leo, sorteio de brindes e arremessos de bottoms assassinos do Firefox, mas felizmente todos sobreviveram :) Aproveitei para vender os livros que eu tinha levado, e felizmente eles sumiram rapidinho!</p>
<p>De noite teve um <strong>mega churrasco nerd</strong>, num lugar bacana onde cada mesa tinha uma churrasqueira &#8220;pessoal&#8221; na ponta, para o grupo assar sua própria carne. Ao redor várias quadras de futebol onde jogavam times femininos, todas uniformizadas, com &#8220;uns coxão&#8221; como disse a Mog. Eu já estava entorpecido de tanto cansaço e sono, mas acabamos ficando lá até perto da meia-noite.</p>
<p style="text-align:center;"><a href="https://picasaweb.google.com/103827113319064343034/TcheLinux2008#5266669200954389378"><img class="aligncenter" title="Churrascada Nerd" src="http://lh6.ggpht.com/_OjastaZGyRk/SRb3u_hgc4I/AAAAAAAAAMY/G69FpGX8yDk/s720/dsc00404.jpg" alt="" width="400" height="300" /></a></p>
<p>Dia seguinte acordamos tarde, tomamos aquele café reforçado no hotel e fomos torrar todo o dinheiro que ganhamos no evento :D Passamos o <strong>domingo</strong> no <a href="http://www.briquedaredencao.com.br/">Brique da Redenção</a>, e lá compramos alguns apetrechos (e até um quadro!) para decorar nosso futuro apartamento em Joinville. Assim toda vez que olharmos para o quadro, lembraremos dessa viagem, do evento, dos amigos e daqueles que fizeram parte dessa história.</p>
<blockquote><p>Ah, eu ainda não contei sobre Joinville? Tá, um dia eu conto então ;)</p></blockquote>
<p>Para terminar, gostaria de fazer um <strong>agradecimento especial ao Leo</strong>, que é um cara mais do que especial, que fez tudo isso acontecer. O <a href="http://tchelinux.org">Tchelinux</a> foi um evento que eu tive prazer em participar, feitos por nerds, para nerds, sem politicagem. Altamente recomendado! Irmão, muito obrigado pela experiência, eu e a Mog ficamos MUITO satisfeitos com a viagem!</p>
<div class="wp-caption aligncenter" style="width: 410px"><a href="https://picasaweb.google.com/109483631753960149638/TchelinuxPortoAlegre2008#5267317324509989906"><img class=" " title="Leo" src="http://lh5.ggpht.com/_unFTYA8V_sE/SRlFMv6tzBI/AAAAAAAAAd4/y4r626x-HQc/s720/web-DSC01912.JPG" alt="Leo é o cara" width="400" height="300" /></a><p class="wp-caption-text">Leo é o cara</p></div>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2008/11/14/e-nois-no-tchelinux-2008/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>A Saga do Horário de Verão (Funções ZZ versão 8.10)</title>
		<link>http://aurelio.net/blog/2008/10/31/funcoes-zz-versao-810/</link>
		<comments>http://aurelio.net/blog/2008/10/31/funcoes-zz-versao-810/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 13:13:33 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Funções ZZ]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Shell Script]]></category>

		<guid isPermaLink="false">http://aurelio.wordpress.com/?p=613</guid>
		<description><![CDATA[— Olha&#8230; Eu juro que eu só queria fazer a zzhorariodeverao. — Ahn? — É que agora temos uma regra fixa para as datas de início e fim do horário de verão: 3º domingo de outubro e fevereiro. — Ah, &#8230; <a href="http://aurelio.net/blog/2008/10/31/funcoes-zz-versao-810/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>— Olha&#8230; Eu juro que eu só queria fazer a <strong>zzhorariodeverao</strong>.<br />
— Ahn?<br />
— É que agora temos uma regra fixa para as datas de início e fim do horário de verão: 3º domingo de outubro e fevereiro.<br />
— Ah, que fácil!<br />
— É, mas tem uma pegadinha: quando o 3º domingo de fevereiro for Carnaval, então o término do horário de verão é adiado para o próximo domingo.<br />
— Que mané.<br />
— Pois é.<br />
— Mas daí você fez a zzhorariodeverao então?<br />
— Fiz.<br />
— Foi fácil?<br />
— Foi.<br />
— Legal.<br />
— Difícil foi fazer as outras três&#8230;<br />
— Mas hein?<br />
— É que pra saber em que data cai o 3º domingo de um mês qualquer, primeiro foi preciso fazer a <strong>zzdiadasemana</strong>.<br />
— Você dá a data e ela te retorna em qual dia da semana vai cair?<br />
— Isso.<br />
— Bacana, precisei disso um dia&#8230;<br />
— Eu também, bobeira não ter feito antes.<br />
— E o lance do Carnaval?<br />
— É, aí que complicou&#8230;<br />
— Dá pra saber quando vai cair o Carnaval de qualquer ano?<br />
— Dá. É só você saber quando vai ser a Páscoa. O Carnaval é exatamente 47 dias antes.<br />
— Ah, que fácil! Aí é só usar a zzdata para fazer: zzdata $pascoa &#8211; 47<br />
— Ahan&#8230; (espera pela pergunta inevitável)<br />
— Ei! E como saber a data da Páscoa se ela também muda todo ano???<br />
— Pois é, aí que complicou&#8230;<br />
— Tem que consultar o site do Vaticano? :)<br />
— Não :)<br />
— Ufa!<br />
— Descobri que dá pra calcular a data, usando uma fórmula maluca cheia de letrinhas.<br />
— Então foi preciso fazer a <strong>zzpascoa</strong> para poder ter a <strong>zzcarnaval</strong>, é isso?<br />
— Siiiiiiiiiiiim<br />
— E a zzcarnaval você só fez por causa da exceção da regra do horário de verão?<br />
— Siiiiiiiiiiiim<br />
— Malditas exceções!<br />
— Malditas exceções!</p>
<p style="text-align:center;"><em><span style="color:#999999;">— zZZzzzZzzZZzZzZZzZzzzZZz —</span></em></p>
<p>Exemplos para este ano:</p>
<pre>$ <strong>zzcarnaval</strong>
05/02/2008
$ <strong>zzpascoa</strong>
23/03/2008
$ <strong>zzhorariodeverao</strong>
19/10/2008
15/02/2009
$</pre>
<p>Exemplos para o ano que vem:</p>
<pre>$ <strong>zzcarnaval 2009</strong>
24/02/2009
$ <strong>zzpascoa 2009</strong>
12/04/2009
$ <strong>zzhorariodeverao 2009</strong>
18/10/2009
21/02/2010
$</pre>
<p>Que dia da semana é hoje?</p>
<pre>$ <strong>zzdiadasemana</strong>
sexta-feira</pre>
<p>Que dia da semana que eu nasci?</p>
<pre>$ <strong>zzdiadasemana 07/10/1977</strong>
sexta-feira</pre>
<p>Que dia da semana vai ser daqui 30 dias?</p>
<pre>$ <strong>zzdiadasemana $(zzdata hoje + 30)</strong>
domingo</pre>
<p style="text-align:center;"><em><span style="color:#999999;">— zZZzzzZzzZZzZzZZzZzzzZZz —</span></em></p>
<p> A zzajuda ganhou uma opção nova para listar todas as funções, com suas descrições. Agora ficou mais fácil encontrar o que você procura!</p>
<pre> $ <strong>zzajuda --lista</strong>
zzajuda         Mostra uma tela de ajuda com explicação e sintaxe de todas as funções
zzalfabeto      Central de alfabetos (romano, militar, radiotelefônico, OTAN, RAF, etc)
zzansi2html     Converte para HTML o texto colorido do terminal (códigos ANSI)
zzarrumanome    Renomeia arquivos do diretório atual, arrumando nomes estranhos
zzascii         Mostra a tabela ASCII com todos os caracteres imprimíveis (32-126,161-255)
zzbeep          Aguarda N minutos e dispara uma sirene usando o 'speaker'
...</pre>
<p>Esqueceu-se como usa aquela função, ou quer aprender a usar várias de uma só vez? Então a zzajuda tem mais uma opção nova para o seu deleite visual:</p>
<pre>$ <strong>zzajuda --uso</strong>
zzajuda [--lista|--uso]
zzalfabeto [--TIPO] [palavra]
zzansi2html [arquivo]
zzarrumanome [-n] [-d] [-r] arquivo(s)
zzascii [colunas] [largura]
zzbeep [números]
...</pre>
<p style="text-align:center;"><em><span style="color:#999999;">— zZZzzzZzzZZzZzZZzZzzzZZz —</span></em></p>
<p>Tem coisas que só as <a href="http://funcoeszz.net">Funções ZZ</a> fazem para você :)</p>
<p>Tá esperando o que?<br />
<a href="http://funcoeszz.net/download.html"> Vai lá baixar a versão nova agora!</a></p>
<blockquote><p>Também tem uma GRANDE novidade que é o diretório especial para funções extras, o $ZZEXTRADIR, mas sobre isso eu comento em um texto futuro. É importante demais para ser apenas uma nota de rodapé :)</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2008/10/31/funcoes-zz-versao-810/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Programador Cego</title>
		<link>http://aurelio.net/blog/2008/10/17/programador-cego/</link>
		<comments>http://aurelio.net/blog/2008/10/17/programador-cego/#comments</comments>
		<pubDate>Fri, 17 Oct 2008 14:51:26 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Funções ZZ]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[piazinho]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Vídeo]]></category>

		<guid isPermaLink="false">http://aurelio.wordpress.com/?p=586</guid>
		<description><![CDATA[O Ângelo Beck tem 27 anos e é um exemplo inspirador de superação: ele é um programador cego. Pare para pensar no que estas duas palavras juntas significam: programador cego. O programador passa horas de seu dia em frente ao &#8230; <a href="http://aurelio.net/blog/2008/10/17/programador-cego/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>O Ângelo Beck tem 27 anos e é um exemplo inspirador de superação: ele é um programador cego. Pare para pensar no que estas duas palavras juntas significam: programador cego.</p>
<ul>
<li>O <strong>programador</strong> passa horas de seu dia em frente ao computador, lendo, digitando e testando códigos. Os códigos começam simples mas rapidamente ficam complexos à medida que o programa cresce. É fácil se perder em meio ao código, é preciso constantemente reler algum trecho ou pular rapidamente para a definição de uma função, ver quais são seus argumentos, analisar seus algoritmos. O programador consegue reter em sua cabeça parte do funcionamento de um programa, mas os detalhes só são conhecidos com a leitura e análise do código.</li>
<li>O <strong>cego</strong> não enxerga.</li>
</ul>
<p>E como alguém que não enxerga pode programar códigos?</p>
<p>Para usar o computador, um cego precisa de um <a href="http://pt.wikipedia.org/wiki/Leitor_de_tela">leitor de tela</a>. Este leitor é um programa que dita, usando uma voz robótica, tudo o que está escrito na tela. É como se tivesse alguém ao seu lado lendo em voz alta tudo o que aparece no monitor.</p>
<blockquote><p>Um dia, por curiosidade, instalei um destes leitores para ter uma idéia de como era usar o computador sem enxergar. Fechei os olhos e tentei escrever um texto e ler alguns e-mails. Eu fiquei deprimido. Demorava MUITO tempo para conseguir fazer coisas muito simples, e a voz digital rapidamente se tornou cansativa por sempre usar o mesmo tom. Um monólogo no escuro. Deu <a href="http://www.youtube.com/watch?v=l_9rS1xovTI">medo</a>.</p></blockquote>
<p>Um programador cego tem que esperar que o leitor dite a linha atual (cheia de pontuação como $ @ ; ! =) para saber onde está o cursor. Se quiser saber o que tem na linha anterior, ele move o cursor para cima e espera que a linha seja ditada. E assim, uma linha de cada vez, ele vai se achando em que parte do código ele está.</p>
<blockquote><p>Quem já brincou com o editor de textos do UNIX (<a href="http://en.wikipedia.org/wiki/Ed_(text_editor)">ed</a>), sabe como é tenebroso enxergar somente uma linha por vez. A falta de contexto te deixa completamente perdido.</p></blockquote>
<p>Quer sentir o quão difícil é saber em que parte do código você está, sem ter contexto?</p>
<ul>
<li>Abra o código de um programa seu, que você conheça bem.</li>
<li>Peça para alguém ao seu lado te ajudar, essa pessoa será seu leitor de tela.</li>
<li>Feche os olhos e NÃO ABRA MAIS.</li>
<li>Peça para essa pessoa escolher uma linha qualquer, dentro de uma função/método qualquer.</li>
<li>Agora a pessoa vai te ditar esta linha. Somente ditar, ela não pode dar nenhuma outra dica.</li>
<li>Responda: Qual o nome da função/método?</li>
<li>Não tem como saber? Então peça para a pessoa ditar a linha anterior.</li>
<li>Ou quem sabe a próxima linha.</li>
<li>Mas qual era mesmo a primeira linha que foi ditada? Poderia repetir?</li>
</ul>
<p>E aí você percebe como é difícil ler um código sem contexto. Imagine analisar, editar, testar, depurar&#8230;</p>
<blockquote><p>Por falar nisso, há algum cego que lê o blog? Deixe um comentário contando suas experiências! As <a href="http://funcoeszz.net/recompensa.html">Funções ZZ já são usadas por cegos há algum tempo</a>.</p>
<p>Por curiosidade acabei de acessar o blog no <a href="http://en.wikipedia.org/wiki/Lynx_web_browser">lynx</a> e os caras do WordPress estão de parabéns, pois o blog é muito acessível, com o texto do artigo já no início, sem poluição.</p></blockquote>
<p>Por favor, leia os dois e-mails seguintes com muita atenção. O Ângelo conta um pouco de sua história e explica como ele faz para tornar menos impossível a tarefa de programar sem enxergar. O primeiro e-mail tem alguns trechos que cortei, o segundo está na íntegra (e muito bem escrito).</p>
<blockquote><p><strong>Atualização em 18 de outubro de 2008:</strong> O Ângelo conta que também dá aulas de PHP. Que tal convidá-lo para falar sobre programação em sua empresa? Tenho certeza que os funcionários ficarão bem motivados ao ver do que esse cara é capaz. Se quiser entrar em contato com ele, escreva para <strong>angelobeck (a) floripa com br</strong>.</p></blockquote>
<p>_________________________________________________________________________</p>
<p><em><span style="color:#3366ff;"> De: Ângelo Beck<br />
Para: Aurélio Marinho Jargas<br />
Data: 11 de setembro de 2008 </span></em></p>
<p>Olá Aurélio,</p>
<p>Ainda não fazem dois anos que eu comecei a trabalhar com php. Estou construindo um gerenciador de conteúdos e é claro que eu preciso de um conversor de textos para html.</p>
<p>[...]</p>
<p>Estou com 27 anos. <strong>Fazem uns três anos que eu me tornei completamente cego</strong> e por isto decidi me voltar para a programação. Estou tendo que aprender tudo sozinho mesmo. E o mais chato é que <strong>não é fácil editar códigos</strong>. Eu inventei alguns truques para facilitar a minha vida, mas aproveitar o código dos outros nem sempre é possível e por isto acabei fazendo tudo a partir do zero.</p>
<p>[...]</p>
<p>Li teu livro sobre as expressões regulares e lhe dou os parabéns. Muito bom mesmo. E só não vou adquiri-lo pois não enxergo material impresso&#8230; então fico com <a href="http://guia-er.sourceforge.net">o que está publicado na web</a>.</p>
<p>[...]</p>
<p>Bem&#8230; obrigado pela atenção,</p>
<p>Ângelo Beck</p>
<p>_________________________________________________________________________</p>
<p><em><span style="color:#3366ff;"> De: Ângelo Beck<br />
Para: Aurélio Marinho Jargas<br />
Data: 12 de setembro de 2008 </span></em></p>
<p>Olá Aurélio,</p>
<h4 style="text-align:right;">Indentação atrapalha, comentários ajudam</h4>
<p>A respeito dos truques de programação, o principal deles é a forma de formatar e comentar os blocos de comandos.</p>
<p>Indentar o texto, colocando espaços ou tabulações no início da linha gera um efeito visual interessante, mas completamente inútil quando não enxergamos. Além do mais, quando não utilizamos mouse, estes espaços e tabulações apenas atrapalham a movimentação, que deve ser feita pelo teclado.</p>
<p>Então, para que eu não me perca entre inúmeros blocos de comandos, que devem ser abertos e fechados, utilizo o seguinte método:</p>
<p>Primeiro, um bloco &#8216;{&#8216; sempre se inicia em uma nova linha, e após o início do bloco vem um comentário que descreve o conteúdo do bloco.</p>
<p>Ao final do bloco, seu fechamento &#8216;}&#8217; é feito também em uma nova linha seguido do mesmo comentário da abertura.</p>
<p>Fica mais ou menos assim:</p>
<pre>  if ($carro)
  { // possui carro
  print $carro
  } // possui carro
  else
  { // não possui carro
  print 'O carro sumiu!';
  } // não possui carro</pre>
<p>Parece besta, mas em alguns trechos do código acabam por haver inúmeros blocos aninhados, e esta forma de comentá-los se torna extremamente eficiente:</p>
<p>Aqui vai um pequeno script como exemplo e logo abaixo seu código</p>
<blockquote><p>array_sub_search</p>
<p>Retorna a chave primária de um array cuja chave secundária previamente conhecida contenha o valor pesquisado.</p>
<p>$key = array_sub_search ($find-me, $array, $secundary_key);</p></blockquote>
<p>Exemplo:</p>
<pre>&lt;?php
$array[1]['fruta'] = 'banana';
$array[1]['salada'] = 'manga';
$array[2]['fruta'] = 'manga';
$array[2]['salada'] = 'alface';
$key = array_sub_search ('manga', $array, 'fruta');

// retorna 2, pois em 1 manga não é fruta
?&gt;</pre>
<p>Código de array_sub_search():</p>
<pre>&lt;?php
// *** Ecolabore Engine - Copyright 2008 Angelo Beck ***

function array_sub_search ($value, $array, $sub)
{ // array_sub_search
if (is_array ($array))
{ // is array
foreach ($array as $key =&gt; $item)
{ // find loop
if ($item[$sub] == $value)
{ // key found
$found = $key;
break;
} // key found
} // find loop
} // is array
return ($found);
} // array sub search
?&gt;</pre>
<p>Com tantos blocos aninhados seria muito fácil de se perder. Desta forma, ao correr para um trecho qualquer do código e ouvir o comentário dos blocos, podemos saber exatamente onde estamos. Como a leitura é feita linha por linha, imagine reduzir a sua janela para apenas uma linha de altura! Será impossível de reconhecer em que lugar do código estamos, não é? Por isto que colocar comentários e suprimir a indentação é tão útil!</p>
<p>Bem&#8230; é claro que eu não documentei tão detalhadamente todo o meu sistema. Mas pelo menos as funções eu fiz questão de documentar para poder utilizá-las adequadamente no futuro.</p>
<h4 style="text-align:right;">Dar nomes úteis para os caracteres</h4>
<p>Outro truque é exigir que o leitor de telas, o sintetizador de voz que &#8220;fala&#8221; o que está escrito, pronuncie algumas palavras especiais ao encontrar certos caracteres ou strings.</p>
<p>Por exemplo, { e } devem ser ditos como &#8220;início do bloco&#8221; e &#8220;fim do bloco&#8221;, já que normalmente são utilizados para delimitar blocos de comandos.</p>
<ul>
<li><strong>// = &#8220;nota&#8221;</strong>. Poderia dizer &#8220;comentário, porém, &#8220;nota&#8221; é mais curto para se pronunciar!</li>
<li><strong>&#8216; = &#8220;As&#8221;</strong>, também por ser mais curto do que &#8220;apóstrofo&#8221;.</li>
<li><strong>&#8221; = &#8216;nulo&#8221;</strong>, já que normalmente representa uma string vazia.</li>
<li><strong>$ = &#8220;var&#8221;</strong>, já que é utilizado para indicar uma variável.</li>
<li><strong>; = &#8220;fim&#8221;</strong>, para indicar um fim de instrução (exigido pelo php)</li>
<li><strong>! = &#8220;not&#8221;</strong>, já que é utilizado como negação &#8211; exemplo != ou if(!$carro)</li>
</ul>
<p>Para ficar mais confortável de se ouvir, também fiz as seguintes exigências:</p>
<ul>
<li>elseif = elz if</li>
<li>else = elz</li>
<li>[ = colchete</li>
<li>] = fecha colchete</li>
<li>( = parêntese</li>
<li>) = fecha parêntese</li>
</ul>
<p>A seguinte linha:</p>
<pre>elseif ($carro != '')
{ // presente
print $carro;
} // presente</pre>
<p>normalmente seria pronunciado assim:</p>
<blockquote><p>elssêif abrir parênteses cifrão carro exclamação igual apóstrofo apóstrofo fechar parênteses<br />
abrir chavetas barra barra presente<br />
print cifrão carro ponto e vírgula<br />
fechar chavetas barra barra presente</p></blockquote>
<p>agora é pronunciado assim:</p>
<blockquote><p>elz if parêntese var carro not igual nulo fecha parêntese<br />
início do bloco nota presente<br />
print var carro fim<br />
fim do bloco nota presente</p></blockquote>
<p>É meio esquisito &#8220;ler&#8221; o que se vê, mas com o tempo a gente se acostuma e, de tanto ouvir, var carro fim é o mesmo que $carro;</p>
<p>No fim não deixa de ser organizado e elegante também.</p>
<h4 style="text-align:right;">Blocos sempre iniciam em uma nova linha</h4>
<p>Quando passamos o cursor de uma linha para a outra, o sintetizador passa a ler a nova linha. Nem sempre temos tempo de ouvir uma linha inteira para saber que no final haverá um início de bloco &#8216;{&#8216;. Por isto a decisão de que qualquer bloco deve ser iniciado em uma nova linha.</p>
<p>Agora imagina o saco que é ler um código escrito por quem enxerga, onde blocos são abertos e fechados no fim das linhas&#8230; Ou pior:</p>
<pre>  { else }</pre>
<p>Mas isto é o fim!</p>
<h4 style="text-align:right;">Código HTML: Organização das tags</h4>
<p>Também no html eu utilizo a mesma regra: tags que iniciam em uma nova linha, são fechadas em uma nova linha. Também podem ser abertas e fechadas na mesma linha.</p>
<p>Desta forma,</p>
<pre>&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Olá&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;center&gt;
&lt;h1&gt;Bem vindo&lt;/h1&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;Obrigado por ter nos visitado&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/center&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>Isto aí é válido.</p>
<p>Mas isto não:</p>
<pre>&lt;html&gt;&lt;head&gt;
&lt;title&gt;
olá
&lt;/title&gt;&lt;/head&gt;
&lt;body&gt;&lt;center&gt;
&lt;h1&gt;Bem vindo
&lt;/h1&gt;&lt;/center&gt;&lt;/body&gt;&lt;/html&gt;</pre>
<h4 style="text-align:right;">HTML: Dicas de pronúncia</h4>
<p>Um truque também para o html é exigir a seguinte pronúncia:</p>
<ul>
<li>&lt; = &#8220;menor&#8221; (ao invés de &#8220;menor que&#8221;)</li>
<li>&gt; = &#8220;maior&#8221; (ao invés de &#8220;maior que&#8221;)</li>
<li>&lt;/ = &#8220;fecha&#8221;</li>
<li>&lt;!&#8211; = &#8220;comentário&#8221;</li>
<li>&#8211;&gt; = &#8220;fim do comentário&#8221;</li>
</ul>
<h4 style="text-align:right;">CSS: Pode usar a mesma pronúncia do PHP</h4>
<p>Com folhas de estilo css eu nem me incomodo, pois utilizo as mesmas regras de pronúncia do php:</p>
<pre>h1.principal {
color:#880000;
}</pre>
<p>é dito como:</p>
<blockquote><p>hagá um ponto principal início do bloco<br />
color dois pontos cardinal oitocentos e oitenta mil fim<br />
fim do bloco</p></blockquote>
<h4 style="text-align:right;">Curiosidades</h4>
<p>Bem&#8230; acho que é isto.</p>
<p>Espero ter alguma coisa mais concreta para mostrar em breve.</p>
<p>Por curiosidade,</p>
<ul>
<li>:-) = &#8220;risos&#8221;</li>
<li>;-) = &#8220;piscadela&#8221;</li>
<li>vc = você</li>
<li>Angelo = Ângelo (e não Angêlo)</li>
<li>microsoft = maicrossóft (e não microzôft)</li>
<li>Rudolf Steiner = Rúdolf Stáiner (e não Rudôlf Steinêr)</li>
<li>Google = Gúgol (e não gô-ôgle)</li>
<li>skype = Scáipe (e não skipe)</li>
</ul>
<p>e mais umas correçõezinhas assim.</p>
<h4 style="text-align:right;">Diferenças ao escrever um texto e um programa</h4>
<p>Quando leio ou escrevo um texto (não um script) desativo a pronuncia da pontuação, parênteses, colchetes, etc. e também desativo o &#8220;eco&#8221; do teclado. De forma que eu não ouço o que eu digito. Apenas após a escrita eu repasso o texto para &#8220;ouvir&#8221; se algo está errado. Também, quando alguém coloca algo entre parênteses, na maioria das vezes eu não sei que eles existem.</p>
<p>Já quando estou programando, ativo o eco do teclado para ter certeza de que não vai faltar nem um colchete&#8230; e mesmo assim normalmente fica faltando uma aspa não fechada ou coisas deste tipo! Também ativo a leitura da pontuação, já que $cidade .= $país; não são duas frases mal escritas.</p>
<p>Até,</p>
<p>Ângelo Beck</p>
<blockquote><p>E você leitor(a), qual era mesmo aquela sua desculpa para não programar?<br />
:)</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2008/10/17/programador-cego/feed/</wfw:commentRss>
		<slash:comments>64</slash:comments>
		</item>
		<item>
		<title>Recados da Paróquia ZZ</title>
		<link>http://aurelio.net/blog/2008/10/02/recados-da-paroquia-zz/</link>
		<comments>http://aurelio.net/blog/2008/10/02/recados-da-paroquia-zz/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 18:58:20 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Funções ZZ]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://aurelio.wordpress.com/?p=571</guid>
		<description><![CDATA[Irmãos da comunidade ZZ, venho ao seu encontro para espalhar as boas novas que correram os sagrados campos da tela preta nos últimos tempos. Reforma: O primeiro passo você já sabe: o código das Funções ZZ passou por uma reforma &#8230; <a href="http://aurelio.net/blog/2008/10/02/recados-da-paroquia-zz/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Irmãos da comunidade ZZ, venho ao seu encontro para espalhar as boas novas que correram os sagrados campos da tela preta nos últimos tempos.</p>
<ul>
<li><strong>Reforma:</strong> O primeiro passo você já sabe: <a href="http://aurelio.net/blog/2008/03/05/a-nova-geracao-das-funcoes-zz/">o código das Funções ZZ passou por uma reforma geral</a> e hoje é limpo, alinhado e recheado de comentários explicativos. <a href="http://code.google.com/p/funcoeszz/source/browse/trunk/funcoeszz">Leia-o</a> para aprender mais sobre shell script (Bash)!<br />
 </li>
<li><strong>Google Code:</strong> O código agora está hospedado no excelente <a href="http://code.google.com">Google Code</a> (programadores, recomendo!). Com isso ganhamos algumas coisinhas bacanas, que veremos à seguir.<br />
 </li>
<li><strong>SVN:</strong> O código foi colocado no <a href="http://code.google.com/p/funcoeszz/source/checkout">SVN do Google Code</a>, assim o desenvolvimento das ZZ migrou do <a href="http://www.codinghorror.com/blog/2008/06/dont-go-dark.html">modelo caverninha-my-precious</a> para a exposição total. Agora <a href="http://code.google.com/p/funcoeszz/source/list">cada mudança</a> é imediatamente disponibilizada à comunidade de usuários durante as entressafras das versões oficiais.<br />
 </li>
<li><strong>Feed SVN:</strong> Você pode assinar o <a href="http://code.google.com/feeds/p/funcoeszz/svnchanges/basic">Feed do SVN das ZZ</a> (que sopa de letrinhas!) e acompanhar em tempo real todas as mudanças. Tem curiosidade para saber como é o desenvolvimento de um programa? Quer aprender mais sobre shell? Acompanhe o <a href="http://code.google.com/feeds/p/funcoeszz/svnchanges/basic">feed</a>!<br />
 </li>
<li><strong>Feed de notícias:</strong> Se você só quer acompanhar os lançamentos de versões novas e novidades do projeto, assine o <a href="http://feeds.feedburner.com/FuncoesZZ">Feed das Funções ZZ</a>. Se você já assina o <a href="http://feeds.feedburner.com/AurelioJargas">feed daqui do blog</a>, já está garantido(a).<br />
 </li>
<li><strong>Downloads:</strong> Outra vantagem do Google Code é o <a href="http://code.google.com/p/funcoeszz/downloads/list?can=1">contador de downloads</a>. Agora é possível ter uma idéia de quantas pessoas baixam as funções. Estes números também são importantes para saber quantos usuários ainda dependem da versão ISO-8859-1 em vez da padrão UTF-8.<br />
 </li>
<li><strong>Debian:</strong> O colaborador <a href="http://techbits.edermarques.net/debian/meu-primeiro-pacote-debian-oficial-funcoeszz-via-aptitude/">Eder Marques</a> fez um <a href="http://packages.debian.org/funcoeszz">pacote Debian para as funções</a>. Se você não sabe o que isso significa, é porque você não precisa desse pacote, então fique sossegado(a).<br />
 </li>
<li><strong>Zsh:</strong> O colaborador <a href="http://www.gallois.com.br">gallois</a> fez um <a href="http://gallois.com.br/inutilidades/zz_zsh.sh">script para instalar as Funções ZZ no shell Zsh.</a> Se você usa o Zsh em vez do Bash, aproveite! Novamente, se você não sabe o que Zsh significa, fique tranqüilo(a) que você não precisa deste script.</li>
</ul>
<p>EOF</p>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2008/10/02/recados-da-paroquia-zz/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Funções ZZ versão 8.9</title>
		<link>http://aurelio.net/blog/2008/09/30/funcoes-zz-versao-89/</link>
		<comments>http://aurelio.net/blog/2008/09/30/funcoes-zz-versao-89/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 02:55:18 +0000</pubDate>
		<dc:creator>Aurelio Jargas</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Funções ZZ]]></category>
		<category><![CDATA[Livro]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[Shell Script]]></category>

		<guid isPermaLink="false">http://aurelio.wordpress.com/?p=557</guid>
		<description><![CDATA[Último dia do mês, hoje é um dia bom para&#8230; &#8230;lançar uma versão nova das Funções ZZ, claro! Esta é a versão 8.9, mas bem poderia ser chamada de &#8220;versão colorida&#8221;, pois traz duas funções novas que lidam com cores. &#8230; <a href="http://aurelio.net/blog/2008/09/30/funcoes-zz-versao-89/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Último dia do mês, hoje é um dia bom para&#8230;<br />
&#8230;lançar uma versão nova das <a href="http://funcoeszz.net">Funções ZZ</a>, claro!</p>
<p>Esta é a versão 8.9, mas bem poderia ser chamada de &#8220;versão colorida&#8221;, pois traz duas funções novas que lidam com cores.</p>
<p>A primeira é a <strong>zzecho</strong>, que assim como o comando echo, mostra uma mensagem na tela. Mas não é aquela mensagem cinza sem graça, pois a zzecho pode mostrar texto coloridos, em negrito, com sublinhado e piscando!</p>
<p>Útil para usar em scripts, quando você quiser chamar a atenção do usuário para uma mensagem importante:</p>
<pre>zzecho --pisca --fundo vermelho ATENÇÃO, vou apagar tudo</pre>
<p>Ou a versão econômica:</p>
<pre>zzecho -p -f vermelho ATENÇÃO, vou apagar tudo</pre>
<p>Mas o legal mesmo é ver a função em ação:</p>
<div id="attachment_561" class="wp-caption alignnone" style="width: 473px"><a href="http://funcoeszz.net/zzansi2html/zzecho.html"><img class="size-full wp-image-561 " title="zzecho" src="http://aurelio.net/wp/wp-content/uploads/2008/09/zzecho.png" alt="" width="463" height="283" /></a><p class="wp-caption-text">Clique na imagem para ver a versão em texto, gerada pela zzansi2html.</p></div>
<p> </p>
<p>A segunda função nova á <strong>zzansi2html</strong>. Nome estranho, não? Ela converte textos com códigos ANSI para HTML.</p>
<blockquote><p>Não sabe o que são <a href="http://en.wikipedia.org/wiki/ANSI_escape_code">códigos ANSI</a>? São os bichinhos que fazem o texto ficar colorido, são eles que fazem a mágica na zzecho que acabamos de ver. São como micróbios, você não consegue enxergá-los, mas eles existem :)</p></blockquote>
<p>Com essa função você pode colocar em seu site ou blog a saída completa do terminal, incluindo as cores e atributos (sublinhado, negrito, pisca-pisca). Alguns exemplos bacanas são a saída da zzecho, da zzcores e do comando <code>ls --color</code>.</p>
<pre>zzcores | zzansi2html &gt; <a href="http://funcoeszz.net/zzansi2html/zzcores.html">zzcores.html</a></pre>
<p>Clique no link do exemplo para ver o resultado. Note que isso não é uma imagem, mas sim um texto formatado, que você pode copiar/colar.</p>
<p>Se quiser gravar a saída de vários comandos seguidos, preservando todas as cores, seu prompt joiado e tudo mais, use o comando script:</p>
<pre># Chame o comando 'script' e informe o arquivo
# onde ele deve guardar a saída: ls.ansi.

<strong>script ls.ansi
</strong>
# Agora você está "dentro" do comando script,
# tudo o que você fizer será gravado.

<strong>ls /etc
</strong>
# Para sair e terminar a gravação, use o comando exit

<strong>exit</strong>

# Já "fora" do comando script, converta para HTML

<strong>zzansi2html <a href="http://funcoeszz.net/zzansi2html/ls.ansi">ls.ansi</a></strong><strong> &gt; </strong><strong><a href="http://funcoeszz.net/zzansi2html/ls.html">ls.html</a></strong></pre>
<p>Novamente clique nos links para ver os resultados. Massa né? :)</p>
<blockquote><p>Detalhe nerd: <a href="http://aurelio.net/blog/2008/09/16/moedinhas-shell-script-e-emprego/#comment-44649">Estávamos aqui no blog estes dias</a> comentando sobre um futuro livro de <a href="http://aurelio.net/sed/">sed</a>&#8230; Sabe o que é mais legal? <a href="http://code.google.com/p/funcoeszz/source/browse/trunk/funcoeszz#992"><strong>A zzansi2html foi feita com um único comando sed</strong></a>. Claro, é um sed macho com trocentos comandos dentro, mas é um sed. Bom para ver que é possível fazer <a href="http://aurelio.net/sed/sokoban/sokoban.sed.html">coisas complicadas</a> com o sedinho :)</p></blockquote>
<p>Tá esperando o quê? Veja <a href="http://funcoeszz.net/changelog.html">a lista completa das novidades</a> e faça o <a href="http://funcoeszz.net/download.html">download da versão 8.9</a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://aurelio.net/blog/2008/09/30/funcoes-zz-versao-89/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 0.994 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-02-08 14:11:37 --><!-- Compression = gzip -->

