<?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" version="2.0">

<channel>
	<title>Caio Moritz Ronchi</title>
	
	<link>http://www.caiomoritz.com</link>
	<description>Idéias tratando de desenvolvimento de software.</description>
	<pubDate>Fri, 03 Jul 2009 08:19:14 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.2</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/caiomoritz" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>O blog vai voltar</title>
		<link>http://www.caiomoritz.com/2009/07/03/o-blog-vai-voltar/</link>
		<comments>http://www.caiomoritz.com/2009/07/03/o-blog-vai-voltar/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 08:19:14 +0000</pubDate>
		<dc:creator>Caio Moritz Ronchi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.caiomoritz.com/?p=245</guid>
		<description><![CDATA[Para os poucos que assinam o feed do blog, aqui vão algumas novidades do que está acontecendo&#8230;

Desde maio estou na Austrália, por isso parei de escrever aqui. Tenho liberado os comentários, mas não tive tempo e nem assunto para escrever sobre programação. Não estou na Austrália a trabalho, estou aqui como turista, portanto estou desempregado [...]]]></description>
			<content:encoded><![CDATA[<p>Para os poucos que assinam o feed do blog, aqui vão algumas novidades do que está acontecendo&#8230;</p>

<p>Desde maio estou na Austrália, por isso parei de escrever aqui. Tenho liberado os comentários, mas não tive tempo e nem assunto para escrever sobre programação. Não estou na Austrália a trabalho, estou aqui como turista, portanto estou desempregado desde o fim de abril. Semana que vem estarei de volta ao Brasil e à minha cidade (Florianópolis, para quem ainda não sabe), e espero voltar ao mercado de trabalho até o fim do mês. Vamos ver o que acontece, escreverei sobre as novidades aqui.</p>

<p>Claro que não fiquei completamente longe de tecnologia durante meu tempo fora do país. Em maio comprei um Asus Eee PC 1000H, e fiquei bastante satisfeito com a compra. Só fui sentir a primeira incomodação quando instalei Linux nele e tentei programar. O layout de teclado não estava funcionando como eu queria&#8230; mais sobre isso semana que vem, no momento não há nada que eu possa fazer.</p>

<p>Acabei adquirindo também um iPod Touch 2G (Segunda Geração), para poder navegar pela web com uma computador ainda mais portátil que o Eee PC. Posso dizer que o dinheiro investido valeu muito a pena, e hoje estou usando ele para coisas que nem pensava que poderia quando comprei. Devo falar sobre iPod regularmente nos próximos meses, enquanto vou testando algumas aplicações da App Store e aprendo alguns truques.</p>

<p>Passei a tuitar regularmente também (@caiomoritz), e minha promessa de campanha, uma vez em Florianópolis, é revitalizar (palavra de político, hein) a cara do blog, <del datetime="2009-07-03T08:04:39+00:00">construindo mais parques</del> utilizando um tema padrão do Wordpress com suporte a iPhone (pretendo postar coisas do meu iPod, então essa novidade visa meu próprio benefício, hehe), e integrar minha conta do Twitter à página inicial. </p>

<p>Sobre os demais temas do blog, ainda não sei quais serão. Provavelmente coisas que eu estiver fazendo no meu novo emprego. Como devem ter notado, a linguagem de programação na qual sou mais fluente é PHP, portanto meu próximo emprego deve envolver bastante Programação Orientada a Cifrões. Falando em PHP, não me interessei muito pela versão 5.3 que saiu esta semana. Ainda preciso ver melhor, mas pelo que me lembro a sintaxe para closures era tão bizarra que competia em mau gosto com as barras inversas da implementação de namespaces. Infelizmente o mau gosto no PHP parece ser diretamente proporcional à popularidade da linguagem.</p>

<p>Vejo vocês semana que vem, até lá</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caiomoritz.com/2009/07/03/o-blog-vai-voltar/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Procurando arquivos com conflito no CVS</title>
		<link>http://www.caiomoritz.com/2009/04/16/procurando-arquivos-com-conflito-no-cvs/</link>
		<comments>http://www.caiomoritz.com/2009/04/16/procurando-arquivos-com-conflito-no-cvs/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 12:31:46 +0000</pubDate>
		<dc:creator>Caio Moritz Ronchi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[CVS]]></category>

		<guid isPermaLink="false">http://www.caiomoritz.com/?p=242</guid>
		<description><![CDATA[Para localizar arquivos com mudanças conflitantes dentro
de uma cópia local do CVS a melhor forma é varrer toda a árvore
buscando a string &#8220;&#60;&#60;&#60;&#60;&#60;&#60;&#60;&#8221; no início de uma linha. Por exemplo,
dentro da raíz do seu projeto execute:

$ grep '^&#60;&#60;&#60;&#60;&#60;&#60;&#60;' * -R

]]></description>
			<content:encoded><![CDATA[<p>Para localizar arquivos com mudanças conflitantes dentro
de uma cópia local do CVS a melhor forma é varrer toda a árvore
buscando a string &#8220;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&#8221; no início de uma linha. Por exemplo,
dentro da raíz do seu projeto execute:</p>

<pre><code>$ grep '^&lt;&lt;&lt;&lt;&lt;&lt;&lt;' * -R
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.caiomoritz.com/2009/04/16/procurando-arquivos-com-conflito-no-cvs/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ouvindo a rádio CBN Florianópolis no Linux</title>
		<link>http://www.caiomoritz.com/2009/03/26/ouvindo-a-radio-cbn-florianopolis-no-linux/</link>
		<comments>http://www.caiomoritz.com/2009/03/26/ouvindo-a-radio-cbn-florianopolis-no-linux/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 16:28:36 +0000</pubDate>
		<dc:creator>Caio Moritz Ronchi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[Florianópolis]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Mplayer]]></category>

		<category><![CDATA[Rádio]]></category>

		<guid isPermaLink="false">http://www.caiomoritz.com/?p=239</guid>
		<description><![CDATA[A Rádio CBN Florianópolis pode ser ouvida com Internet Explorer, no Windows,
sem maiores problemas através deste link. Já para ouvi-la no Linux, a saída
que encontrei foi tocar a rádio no mplayer. Na linha de comando faça:

$ mplayer -playlist 'http://mediacenter.clicrbs.com.br/templates/GetAsx.aspx?contentID=20415&#38;channelId=115'


Por comodidade você pode definir um atalho para esse comando. No seu .bashrc adicione
a seguinte linha:

alias cbn_floripa='mplayer [...]]]></description>
			<content:encoded><![CDATA[<p>A Rádio CBN Florianópolis pode ser ouvida com Internet Explorer, no Windows,
sem maiores problemas através <a href="http://mediacenter.clicrbs.com.br/templates/player.aspx?uf=1&amp;contentID=20415&amp;channel=115&amp;tipoVivo=1">deste link</a>. Já para ouvi-la no Linux, a saída
que encontrei foi tocar a rádio no <code>mplayer</code>. Na linha de comando faça:</p>

<pre><code>$ mplayer -playlist 'http://mediacenter.clicrbs.com.br/templates/GetAsx.aspx?contentID=20415&amp;channelId=115'
</code></pre>

<p>Por comodidade você pode definir um atalho para esse comando. No seu <code>.bashrc</code> adicione
a seguinte linha:</p>

<pre><code>alias cbn_floripa='mplayer -playlist "http://mediacenter.clicrbs.com.br/templates/GetAsx.aspx?contentID=20415&amp;channelId=115"'
</code></pre>

<p>Salve o arquivo e recarregue-o:</p>

<pre><code>$ source ~/.bashrc
</code></pre>

<p>Agora você pode ouvir a rádio com:</p>

<pre><code>$ cbn_floripa
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.caiomoritz.com/2009/03/26/ouvindo-a-radio-cbn-florianopolis-no-linux/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Simplicidade do awk</title>
		<link>http://www.caiomoritz.com/2009/03/17/simplicidade-do-awk/</link>
		<comments>http://www.caiomoritz.com/2009/03/17/simplicidade-do-awk/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 17:16:00 +0000</pubDate>
		<dc:creator>Caio Moritz Ronchi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[awk]]></category>

		<category><![CDATA[Command Line]]></category>

		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.caiomoritz.com/?p=234</guid>
		<description><![CDATA[Estava elaborando uma apresentação Powerpoint em um arquivo
de texto, dentro do Vim, pra me focar no conteúdo e não na
cara que os slides vão ter quando prontos. O documento tinha
o seguinte formato:

Slide
-----

Um título

* Tópico 1
* Tópico 2
* ...

Slide
-----

Um título

* Tópico 1
* Tópico 2
* ...


Terminado o conteúdo da apresentação, decidi mandar o texto para 
o meu [...]]]></description>
			<content:encoded><![CDATA[<p>Estava elaborando uma apresentação Powerpoint em um arquivo
de texto, dentro do Vim, pra me focar no conteúdo e não na
cara que os slides vão ter quando prontos. O documento tinha
o seguinte formato:</p>

<pre><code>Slide
-----

Um título

* Tópico 1
* Tópico 2
* ...

Slide
-----

Um título

* Tópico 1
* Tópico 2
* ...
</code></pre>

<p>Terminado o conteúdo da apresentação, decidi mandar o texto para 
o meu chefe avaliar. Mas não queria mandar mandar o arquivo sem
a numeração dos slides, e também não queria definir uma numeração
diretamente no arquivo, já que assim ao inserir um novo slide eu
teria que renumerar todos os slides subsequentes.</p>

<p>Problema com formatação de texto? São meus problemas favoritos, então
não perdi a chance e escrevi um programa super simples, claro, que
dado um arquivo nesse meu formato, devolve o mesmo com os slides numerados.</p>

<p>Eis o script awk que faz isso:</p>

<pre><code>#!/bin/awk -f

/^Slide/ { print "Slide " ++nr_slide }
!/^Slide/ { print }
</code></pre>

<p>Se esse script tivesse o nome <code>numera_slides.awk</code>, eu o invocaria
da seguinte forma:</p>

<pre><code>$ ./numera_slides.awk &lt; slides.txt &gt; slides_numerados.txt
</code></pre>

<p>O conteúdo de <code>slides_numerados.txt</code> seria:</p>

<pre><code>Slide 1
-----

Um título

* Tópico 1
* Tópico 2
* ...

Slide 2
-----

Um título

* Tópico 1
* Tópico 2
* ...
</code></pre>

<p>Algumas particularidades do awk que ficam evidentes nesse programa:</p>

<ul>
<li>Variáveis não precisam ser inicializadas. Quando a instrução <code>++nr_slide</code>
é executada pela primeira vez, a variável não existe. O awk a inicializa com
o valor zero e então a incrementa, atualizando seu valor para 1.</li>
<li>Se o comando <code>print</code> é invocado sem parâmetros ele imprime o conteúdo da
variável <code>$0</code>, que em awk corresponde à linha atual sendo processada.</li>
<li><code>!</code> na frente de uma expressão regular nega essa expressão, ou seja, verifica
se <code>$0</code> não casa com a expressão.</li>
<li>Concatenação em awk é feita com espaços em branco.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.caiomoritz.com/2009/03/17/simplicidade-do-awk/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Converter mês de string curta para número em Ruby</title>
		<link>http://www.caiomoritz.com/2009/03/09/converter-mes-de-string-curta-para-numero-em-ruby/</link>
		<comments>http://www.caiomoritz.com/2009/03/09/converter-mes-de-string-curta-para-numero-em-ruby/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 18:40:48 +0000</pubDate>
		<dc:creator>Caio Moritz Ronchi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[Date]]></category>

		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.caiomoritz.com/?p=230</guid>
		<description><![CDATA[O problema: você tem uma string correspondendo a um mês do ano, em inglês,
como &#8220;Jan&#8221; para janeiro, e quer convertê-la para um número (&#8221;Jan&#8221; é 1, &#8220;Feb&#8221;
é &#8220;2&#8243; e assim por diante).

A solução está no módulo Date:

$ irb
&#62; require 'date'
=&#62; true
&#62; mes = 'Mar'
=&#62; "Mar"
&#62; Date::ABBR_MONTHNAMES.index(mes)
=&#62; 3


Caso queira que esse número tenha um zero na [...]]]></description>
			<content:encoded><![CDATA[<p>O problema: você tem uma string correspondendo a um mês do ano, em inglês,
como &#8220;Jan&#8221; para janeiro, e quer convertê-la para um número (&#8221;Jan&#8221; é 1, &#8220;Feb&#8221;
é &#8220;2&#8243; e assim por diante).</p>

<p>A solução está no módulo <code>Date</code>:</p>

<pre><code>$ irb
&gt; require 'date'
=&gt; true
&gt; mes = 'Mar'
=&gt; "Mar"
&gt; Date::ABBR_MONTHNAMES.index(mes)
=&gt; 3
</code></pre>

<p>Caso queira que esse número tenha um zero na frente quando menor que 10,
então faça:</p>

<pre><code>&gt; "%02d" % Date::ABBR_MONTHNAMES.index(mes)
=&gt; "03"
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.caiomoritz.com/2009/03/09/converter-mes-de-string-curta-para-numero-em-ruby/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dicionários multilíngues no Linux</title>
		<link>http://www.caiomoritz.com/2009/03/05/dicionarios-multilingues-no-linux/</link>
		<comments>http://www.caiomoritz.com/2009/03/05/dicionarios-multilingues-no-linux/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 23:28:10 +0000</pubDate>
		<dc:creator>Caio Moritz Ronchi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[Linux dict Dicionários]]></category>

		<guid isPermaLink="false">http://www.caiomoritz.com/?p=226</guid>
		<description><![CDATA[Para quem quer aprender uma nova língua ou simplesmente ter um
dicionário por perto para ler textos em Inglês, Espanhol, Alemão
etc., um dicionário multilíngue é a melhor opção: dada uma palavra
na língua 1, você ganha a tradução na língua 2. De preferência,
lingua 2 é a sua língua pátria, mas como vou mostrar neste post,
nem sempre.

Neste post [...]]]></description>
			<content:encoded><![CDATA[<p>Para quem quer aprender uma nova língua ou simplesmente ter um
dicionário por perto para ler textos em Inglês, Espanhol, Alemão
etc., um dicionário multilíngue é a melhor opção: dada uma palavra
na língua 1, você ganha a tradução na língua 2. De preferência,
lingua 2 é a sua língua pátria, mas como vou mostrar neste post,
nem sempre.</p>

<p>Neste post vou tratar do <code>dict</code>, um programa tradutor de palavras
que funciona na linha de comando.</p>

<h2>O que é o dict</h2>

<p>De acordo com o manual do programa <code>dict</code> (tradução livre):</p>

<blockquote>
  <p>dict é um cliente para o Protocolo de Servidor de Dicionário
  (DICT), um protocolo de consulta/resposta baseado em transações
  TCP que provê acesso a definições de dicionário de um conjunto
  de bases de dados de dicionários de linguagem natural.</p>
</blockquote>

<p>Em poucas palavras, o <code>dict</code> é um programa cliente para o protocolo DICT.</p>

<p>O manual do programa não vai além disso, se o que você procura
é uma explicação para esse tal protocolo DICT. Mas é realmente
necessário entendê-lo para conseguir utilizar o
cliente <code>dict</code>? Acho que não. Neste post meu foco
será a utilização do <code>dict</code> como um programa que acessa uma base de dados
de dicionários disponíveis localmente, devolvendo a definição de uma palavra
sem precisar acessar a internet.</p>

<h2>Instalação básica</h2>

<p>Para continuar acompanhando o texto é melhor instalar o <code>dict</code>.
No Ubuntu é simples:</p>

<pre><code>sudo apt-get install dict
</code></pre>

<p>Após a instalação o Linux irá definir
um novo serviço, o <code>dictd</code>. Se você desabilitá-lo
então o <code>dict</code> passará a buscar todas as definições das palavras
em servidores da internet, e não localmente. Veremos a seguir
como isso funciona.</p>

<h2>Funcionamento do programa</h2>

<p>A instalação básica do programa conta com apenas 1 dicionário,
chamado &#8220;jargon&#8221; (pacote <code>dict-jargon</code>). Para definir um termo utilizando
essa base de dados basta invocar <code>dict</code> passando como único
parâmetro a palavra a traduzir. Vamos tentar traduzir a palavra
&#8220;cat&#8221;:</p>

<pre><code>$ dict cat
1 definition found

From Jargon File (4.4.4, 14 Aug 2003) [jargon]:

  cat
   vt.

     [from catenate via {Unix} cat(1)]

     1. [techspeak] To spew an entire file to the screen or some other
     output sink without pause (syn. {blast}).
...
</code></pre>

<p>Como você pode notar, &#8220;cat&#8221; não foi traduzido como &#8220;gato&#8221;, pois estamos
utilizando o dicionário &#8220;jargon&#8221;. Vamos entender como o programa buscou
essa tradução.</p>

<p>Como não passamos nenhum parâmetro especial ao programa, o <code>dict</code> assume
que queremos utilizar todos os dicionários disponíveis (no momento temos apenas 
&#8220;jargon&#8221;).</p>

<p>Para consultar as bases de dados disponíveis (já instaladas) devemos utilizar o seguinte comando:</p>

<pre><code>$ dict -D
Databases available:
 jargon     Jargon File (4.4.4, 14 Aug 2003)
</code></pre>

<p>O <code>dict</code> também é capaz de acessar um servidor externo, via internet, para
tentar encontrar a definição de uma palavra, caso você não deseje instalar
os dicionários no seu computador. Para entender melhor essa funcionalidade
vamos analisar o conteúdo do arquivo <code>/etc/dictd/dict.conf</code>, que guarda
a listagem de servidores que o cliente tentará localizar.</p>

<pre><code>server localhost 
server dict.org
server dict0.us.dict.org
server alt0.dict.org
</code></pre>

<p>Essas diretivas <code>server</code> indicam, da maior para a menor prioridade, que
o programa deve procurar por um servidor que implemente o protocolo
DICT primeiro na máquina local (localhost). Caso não encontre (pois você
desligou o serviço <code>dictd</code>, por exemplo), o <code>dict</code> tentará acessar o endereço
seguinte, neste caso
dict.org (que implementa o protocolo DICT), e então fará uma requisição de
tradução. A resposta que esse servidor der será impressa no console (saída padrão).
Caso esse servidor DICT esteja também indisponível, o programa tentará acessar
o terceiro servidor da lista, e assim por diante.</p>

<p>Portanto, enquanto você mantiver o serviço <code>dictd</code> rodando, o cliente <code>dict</code> não
tentará acessar a internet <em>mesmo</em> que não encontre a definição de uma
palavra nos seus dicionários locais.</p>

<h2>Instalação de dicionários</h2>

<p>Vamos à parte que realmente interessa: instalar dicionários multilíngues.
Para listar todos os dicionários multilíngues disponíveis nos repositórios
do Ubuntu faça:</p>

<pre><code>apt-cache search dict | grep '^dict-'
</code></pre>

<p>Será apresentada uma lista de mais de 70 dicionários. Tomemos como exemplo
o dicionário de Espanhol para Inglês. O nome desse pacote é:</p>

<pre><code>dict-freedict-spa-eng
</code></pre>

<p>Vamos realizar a instalação:</p>

<pre><code>sudo apt-get install dict-freedict-spa-eng
</code></pre>

<p>Lembre-se de que esse dicionário traduz verbetes de Espanhol para Inglês,
mas não o contrário. Se quiser traduzir de Inglês para Espanhol, por exemplo,
você precisa instalar outro pacote:</p>

<pre><code>sudo apt-get install dict-freedict-eng-spa
</code></pre>

<p>Vamos seguir considerando que apenas o pacote <code>spa-eng</code> foi instalado.</p>

<p>Após a instalação do pacote, reinicie o serviço <code>dictd</code></p>

<pre><code>sudo /etc/init.d/dictd reload
</code></pre>

<p>para que a lista de dicionários seja atualizada. Agora confira a nova
lista de dicionários:</p>

<pre><code>$ dict -D
Databases available:
 jargon     Jargon File (4.4.4, 14 Aug 2003)
 fd-spa-eng Spanish-English Freedict dictionary
</code></pre>

<h2>Utilizando o novo dicionário</h2>

<p>Vamos ver o dicionário Espanhol/Inglês em ação. Tente traduzir
a palavra &#8220;hacer&#8221;:</p>

<pre><code>$ dict hacer
1 definition found

From Spanish-English Freedict dictionary [fd-spa-eng]:

  hacer
     achieve; act; do; make; perform
     accomplish; achieve; keep; observe; perform
</code></pre>

<p>Funcionou!</p>

<p>Um ponto importante (além da tradução, claro) é a segunda linha da resposta:</p>

<pre><code>From Spanish-English Freedict dictionary [fd-spa-eng]:
</code></pre>

<p>Essa linha indica que a palavra foi encontrada no dicionário <code>fd-spa-eng</code>.</p>

<p>Vamos ver agora como o programa se comporta quando uma mesma
palavra é encontrada em diferentes dicionários.</p>

<h2>Uma mesma palavra em vários dicionários</h2>

<p>Comece instalando o pacote Português/Inglês:</p>

<pre><code>sudo apt-get install dict-freedict-por-eng
sudo /etc/init.d/dictd reload
</code></pre>

<p>Agora vamos tentar definir a palavra &#8220;uva&#8221;:</p>

<pre><code>$ dict uva
2 definitions found

From Spanish-English Freedict dictionary [fd-spa-eng]:

  uva
     grape


From Portuguese-English Freedict dictionary [fd-por-eng]:

  uva
     grape
</code></pre>

<p>Ela apareceu em 2 dicionários. Para
restringir a busca a apenas 1 dicionário basta
utilizar o parâmetro <code>-d</code> acompanhado da base de
dados (dicionário) a utilizar. Por
exemplo, vamos ver a definição de &#8220;uva&#8221; tendo como
origem o Português:</p>

<pre><code>$ dict -d fd-por-eng uva
1 definition found

From Portuguese-English Freedict dictionary [fd-por-eng]:

  uva
     grape
</code></pre>

<p>Ou, então, para ver as definições de &#8220;cat&#8221; apenas no dicionário
&#8220;jargon&#8221;:</p>

<pre><code>dict -d jargon cat 
</code></pre>

<h2>Nem tudo é perfeito</h2>

<p>O maior problema do <code>dict</code>, na minha opinião, é a falta de dicionários
que façam traduções entre a língua A e a língua B sendo que nem A e nem B
são o inglês. Portanto, não espere a solução mágica de todos os seus problemas.</p>

<h2>Indo além</h2>

<p>O <code>dict</code> aceita diversas opções na linha de comando. Consulte a man page do programa
para conhecê-las:</p>

<pre><code>man dict
</code></pre>

<p>O site oficial do protocolo DICT é o <a href="http://www.dict.org/bin/Dict">dict.org</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caiomoritz.com/2009/03/05/dicionarios-multilingues-no-linux/feed/</wfw:commentRss>
		</item>
		<item>
		<title>beep</title>
		<link>http://www.caiomoritz.com/2009/02/27/beep/</link>
		<comments>http://www.caiomoritz.com/2009/02/27/beep/#comments</comments>
		<pubDate>Sat, 28 Feb 2009 00:59:31 +0000</pubDate>
		<dc:creator>Caio Moritz Ronchi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[beep]]></category>

		<category><![CDATA[Command Line]]></category>

		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.caiomoritz.com/?p=223</guid>
		<description><![CDATA[beep é um programa do Linux que permite a você, usuário, provocar por
livre e espontânea vontade, aquele &#8220;bipe&#8221; extremamente irritante no console.
O tal &#8220;bipe&#8221; é gerado pelo PC Speaker, portanto mesmo quando não há
uma caixa de som ou fone de ouvido disponível você vai ouvir o som. Esse
é o lado bom e o lado ruim [...]]]></description>
			<content:encoded><![CDATA[<p><code>beep</code> é um programa do Linux que permite a você, usuário, provocar por
livre e espontânea vontade, aquele &#8220;bipe&#8221; extremamente irritante no console.
O tal &#8220;bipe&#8221; é gerado pelo <a href="http://en.wikipedia.org/wiki/Pc_speaker">PC Speaker</a>, portanto mesmo quando não há
uma caixa de som ou fone de ouvido disponível você vai ouvir o som. Esse
é o lado bom e o lado ruim da coisa.</p>

<p>O <code>beep</code> pode ser interessante na hora de escrever scripts. Se você quer
ser notificado de qualquer maneira sobre o erro de alguma coisa dentro
do seu código, acione o <code>beep</code>.</p>

<p>Para instalar no Ubuntu é bem simples:</p>

<pre><code>$ sudo apt-get install beep
</code></pre>

<p>Uma vez instalado, execute o programa como um usuário não-root:</p>

<pre><code>$ beep
</code></pre>

<p>Você provavelmente não ouviu nada, pois por padrão apenas o usuário root
é capaz de executar esse programa (a man page do programa tem explicações
mais detalhadas do porquê). Em resumo, para conseguir fazer um beep
como o seu usuário você precisa fazer, primeiro:</p>

<pre><code>$ sudo chmod 4755 /usr/bin/beep
</code></pre>

<p>Agora tente de novo:</p>

<pre><code>$ beep
</code></pre>

<p>Agora você deve ter ouvido 1 beep. Se não ouviu, consulte o manual, há outras
coisas que você pode fazer.</p>

<p>Para um programa com o único intuito de provocar barulho
o beep é até bastante versátil. Veja algumas de suas opções:</p>

<ul>
<li><code>-f</code>: indica a frequência do barulho</li>
<li><code>-l</code>: indica por quantos milisegundos o barulho vai durar</li>
<li><code>-r</code>: indica quantos beeps o programa vai gerar</li>
</ul>

<p>Exemplo: provocar 2 bipes de 2 segundos cada.</p>

<pre><code>$ beep -l 2000 -r 2
</code></pre>

<p>Se alguém estiver inspirado e decidir compor uma música com o beep, favor
deixar o código nos comentários deste post&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caiomoritz.com/2009/02/27/beep/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Manipulando legendas no Linux</title>
		<link>http://www.caiomoritz.com/2009/02/26/manipulando-legendas-no-linux/</link>
		<comments>http://www.caiomoritz.com/2009/02/26/manipulando-legendas-no-linux/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 00:59:55 +0000</pubDate>
		<dc:creator>Caio Moritz Ronchi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.caiomoritz.com/?p=219</guid>
		<description><![CDATA[Há muito tempo eu precisava de um programa capaz de ajustar o delay
de legendas em formato SRT. Quando a legenda começa antes da hora,
você quer ajustar o delay para que ela espere mais um pouco antes de
começar. Quando começa muito tarde, você quer o contrário, que o delay
seja diminuído para que ela comece mais cedo.

Para [...]]]></description>
			<content:encoded><![CDATA[<p>Há muito tempo eu precisava de um programa capaz de ajustar o delay
de legendas em formato SRT. Quando a legenda começa antes da hora,
você quer ajustar o delay para que ela espere mais um pouco antes de
começar. Quando começa muito tarde, você quer o contrário, que o delay
seja diminuído para que ela comece mais cedo.</p>

<p>Para solucionar esse tipo de problema recomendo o uso do programa
<a href="http://ksubtile.sourceforge.net/">ksubtile</a>. No Ubuntu é possível instalar via apt:</p>

<pre><code>sudo apt-get install ksubtile
</code></pre>

<h3>Visão geral do programa</h3>

<p>No ambiente GNOME o programa não fica com a melhor das aparências.
É preciso dar um pop out no editor (área central da janela principal),
clicando no canto superior direito da parte central para que a janela principal
possa então ser maximizada. Feito isso você agora tem 2 janelas, a principal,
que pode ser utilizada para tocar um vídeo, e a auxiliar, que é o editor
de legenda. Você pode carregar um vídeo a partir janela principal. Ele será
tocado, por padrão, junto com a legenda carregada atualmente. Quando você
clica o botão &#8220;play&#8221; uma janela auxiliar do mplayer é aberta. Para minha surpresa
o vídeo ficou estranho, como se estivesse em câmera lenta, e o áudio
acabou não sincronizado com a imagem. Como tocador de vídeo esse programa
me parece um ótimo editor de legendas&#8230;</p>

<h3>Editando o delay de uma legenda</h3>

<p>Para editar o delay de uma legenda utilize
a aba &#8220;Move&#8221; da janela de edição. Se você ainda não abriu a legenda,
vá ao menu da janela principal, em &#8220;File&#8221;, e então em &#8220;Open&#8221;. Localizada
a legenda, vá para a aba &#8220;Move&#8221; da janela de edição. Para fazer com que a legenda atual comece
3 segundos mais tarde, por exemplo, aumente em 3 segundos o campo &#8220;Start
time first sub&#8221;. Em seguida, na janela principal, vá em &#8220;File&#8221; e clique
&#8220;Save&#8221;. E pronto, é só testar (eu testei fora do programa, invocando o mplayer
pela linha de comando, mas você pode tentar usar o player embutido do programa,
como mencionei anteriormente).</p>

<h3>Resumo</h3>

<p>Como podem perceber não utilizei todas as funções do programa ainda, mas
apesar dos pequenos problemas com o player e com o tamanho das janelas,
a facilidade de uso compensa essas falhas, portanto recomendo. Se você estiver
em ambiente KDE acredito que a experiência será melhor ainda.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caiomoritz.com/2009/02/26/manipulando-legendas-no-linux/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Suprimindo quebras de linha sucessivas</title>
		<link>http://www.caiomoritz.com/2009/02/14/suprimindo-quebras-de-linha-sucessivas/</link>
		<comments>http://www.caiomoritz.com/2009/02/14/suprimindo-quebras-de-linha-sucessivas/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 19:23:56 +0000</pubDate>
		<dc:creator>Caio Moritz Ronchi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[cat]]></category>

		<guid isPermaLink="false">http://www.caiomoritz.com/?p=216</guid>
		<description><![CDATA[Imagine um arquivo (linhas.txt) com o seguinte conteúdo:

linha1


linha2


linha3


Você quer que todas as linhas vazias repetidas sejam transformadas
em uma única linha vazia, ou seja, transformar 1 ou mais quebras
de linha em 1 quebra. É só utilizar a opção -s (squeeze blank)
do comando cat:

$ cat -s &#60; linhas.txt


A saída será:

linha1

linha2

linha3

]]></description>
			<content:encoded><![CDATA[<p>Imagine um arquivo (linhas.txt) com o seguinte conteúdo:</p>

<pre><code>linha1


linha2


linha3
</code></pre>

<p>Você quer que todas as linhas vazias repetidas sejam transformadas
em uma única linha vazia, ou seja, transformar 1 ou mais quebras
de linha em 1 quebra. É só utilizar a opção <code>-s</code> (squeeze blank)
do comando <code>cat</code>:</p>

<pre><code>$ cat -s &lt; linhas.txt
</code></pre>

<p>A saída será:</p>

<pre><code>linha1

linha2

linha3
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.caiomoritz.com/2009/02/14/suprimindo-quebras-de-linha-sucessivas/feed/</wfw:commentRss>
		</item>
		<item>
		<title>PHP 5.3 sai este ano?</title>
		<link>http://www.caiomoritz.com/2009/01/23/php-53-sai-este-ano/</link>
		<comments>http://www.caiomoritz.com/2009/01/23/php-53-sai-este-ano/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 11:28:11 +0000</pubDate>
		<dc:creator>Caio Moritz Ronchi</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.caiomoritz.com/?p=213</guid>
		<description><![CDATA[Em dezembro de 2007 publiquei no blog um post que falava
da futura implementação de namespaces no PHP. Essa nova funcionalidade
apareceria na versão 5.3. O que quero ressaltar é o último parágrafo
do artigo, onde eu dizia que o PHP 5.3 era aguardado para o início de 2008.
Bem, estamos no início de 2009 e até agora nada. [...]]]></description>
			<content:encoded><![CDATA[<p>Em dezembro de 2007 <a href="http://www.caiomoritz.com/2007/12/22/versao-53-do-php-tera-namespaces/">publiquei</a> no blog um post que falava
da futura implementação de namespaces no PHP. Essa nova funcionalidade
apareceria na versão 5.3. O que quero ressaltar é o último parágrafo
do artigo, onde eu dizia que o PHP 5.3 era aguardado para o início de 2008.
Bem, estamos no início de 2009 e até agora nada. Eu particularmente
não estou muito interessado nessa nova versão. Mas para quem está,
Lukas Smith <a href="http://pooteeweet.org/blog/0/1411#m1411">anunciou</a> no Planet PHP que dia 29 deste mês sai o beta 1
dessa nova versão. Aparentemente traits não entrarão nesse lançamento.</p>

<p>O PHP 5.3 sai este ano? Façam suas apostas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.caiomoritz.com/2009/01/23/php-53-sai-este-ano/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
