<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Gustavo Dutra</title>
	<atom:link href="http://gustavodutra.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gustavodutra.com</link>
	<description>Um pouco de tudo, nada de pouco</description>
	<lastBuildDate>Mon, 01 Feb 2010 11:20:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Acessando a freenode.org por SSL no Irssi</title>
		<link>http://gustavodutra.com/post/370/acessando-a-freenode-org-por-ssl-no-irssi/</link>
		<comments>http://gustavodutra.com/post/370/acessando-a-freenode-org-por-ssl-no-irssi/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 20:59:15 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[como]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[irc]]></category>
		<category><![CDATA[irssi]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=370</guid>
		<description><![CDATA[Bom, recentemente a FreeNode.org adicionou suporte a conexões SSL. Não que eu faça questão, porém meu irssi perdia a conexão com o server. Fui para o google e decidi postar a dica de como resolvi o problema e habilitei a conexão SSL.

Primeiro, eu baixei um script que a própria FreeNode.org disponibiliza para o irssi, o [...]]]></description>
			<content:encoded><![CDATA[<p>Bom, recentemente a <a rel="nofollow" href="http://freenode.org">FreeNode.org</a> adicionou suporte a conexões SSL. Não que eu faça questão, porém meu <a rel="nofollow" href="http://irssi.org" rel="nofollow">irssi</a> perdia a conexão com o server. Fui para o google e decidi postar a dica de como resolvi o problema e habilitei a conexão SSL.</p>
<p><span id="more-370"></span></p>
<p>Primeiro, eu baixei um script que a própria <a rel="nofollow" href="http://freenode.org">FreeNode.org</a> disponibiliza para o irssi, o instalei e depois algumas dependências.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">cd</span> ~<span style="color: #000000; font-weight: bold;">/</span>.irssi<span style="color: #000000; font-weight: bold;">/</span>scripts<span style="color: #000000; font-weight: bold;">/</span>autorun <span style="color: #666666; font-style: italic;">#Se o diretório não existir, crie-o</span>
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.freenode.net<span style="color: #000000; font-weight: bold;">/</span>sasl<span style="color: #000000; font-weight: bold;">/</span>cap_sasl.pl</pre></div></div>

<p>Como maioria das dependências não estavam nos repositórios oficiais do <a rel="nofollow" href="http://archlinux.org">Arch Linux</a> nem do <a rel="nofollow" href="http://aur.archlinux.org">AUR</a>, eu tive que as instalar separadamente e ai já aproveitei pra fazer um script de instalação com todas as dependências. Esse script funciona em qualquer distro. São necessários os seguintes módulos: <strong>Math::BigInt, Math::BigInt::FastCalc, Math::BigInt::GMP, Math::BigInt::Pari, Crypt::DH e Crypt::OpenSSL::BigNum</strong>.</p>
<p>Abra um novo arquivo e cole as linhas abaixo, será nosso script de instalação.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #007800;">packages</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span>Math-BigInt-<span style="color: #000000;">1.89</span> Math-BigInt-FastCalc-<span style="color: #000000;">0.19</span> Math-BigInt-GMP-<span style="color: #000000;">1.24</span> Math-BigInt-Pari-<span style="color: #000000;">1.13</span> Crypt-DH-<span style="color: #000000;">0.06</span> Crypt-OpenSSL-Bignum-<span style="color: #000000;">0.04</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
&nbsp;
<span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>cpan-comp
<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>cpan-comp
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.cpan.org<span style="color: #000000; font-weight: bold;">/</span>authors<span style="color: #000000; font-weight: bold;">/</span>id<span style="color: #000000; font-weight: bold;">/</span>T<span style="color: #000000; font-weight: bold;">/</span>TE<span style="color: #000000; font-weight: bold;">/</span>TELS<span style="color: #000000; font-weight: bold;">/</span>math<span style="color: #000000; font-weight: bold;">/</span>Math-BigInt-1.89.tar.gz
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.cpan.org<span style="color: #000000; font-weight: bold;">/</span>authors<span style="color: #000000; font-weight: bold;">/</span>id<span style="color: #000000; font-weight: bold;">/</span>T<span style="color: #000000; font-weight: bold;">/</span>TE<span style="color: #000000; font-weight: bold;">/</span>TELS<span style="color: #000000; font-weight: bold;">/</span>math<span style="color: #000000; font-weight: bold;">/</span>Math-BigInt-FastCalc-0.19.tar.gz
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.cpan.org<span style="color: #000000; font-weight: bold;">/</span>authors<span style="color: #000000; font-weight: bold;">/</span>id<span style="color: #000000; font-weight: bold;">/</span>T<span style="color: #000000; font-weight: bold;">/</span>TE<span style="color: #000000; font-weight: bold;">/</span>TELS<span style="color: #000000; font-weight: bold;">/</span>math<span style="color: #000000; font-weight: bold;">/</span>Math-BigInt-GMP-1.24.tar.gz
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.cpan.org<span style="color: #000000; font-weight: bold;">/</span>authors<span style="color: #000000; font-weight: bold;">/</span>id<span style="color: #000000; font-weight: bold;">/</span>T<span style="color: #000000; font-weight: bold;">/</span>TE<span style="color: #000000; font-weight: bold;">/</span>TELS<span style="color: #000000; font-weight: bold;">/</span>math<span style="color: #000000; font-weight: bold;">/</span>Math-BigInt-Pari-1.13.tar.gz
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.cpan.org<span style="color: #000000; font-weight: bold;">/</span>authors<span style="color: #000000; font-weight: bold;">/</span>id<span style="color: #000000; font-weight: bold;">/</span>B<span style="color: #000000; font-weight: bold;">/</span>BT<span style="color: #000000; font-weight: bold;">/</span>BTROTT<span style="color: #000000; font-weight: bold;">/</span>Crypt-DH-0.06.tar.gz
<span style="color: #c20cb9; font-weight: bold;">wget</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.cpan.org<span style="color: #000000; font-weight: bold;">/</span>authors<span style="color: #000000; font-weight: bold;">/</span>id<span style="color: #000000; font-weight: bold;">/</span>I<span style="color: #000000; font-weight: bold;">/</span>IR<span style="color: #000000; font-weight: bold;">/</span>IROBERTS<span style="color: #000000; font-weight: bold;">/</span>Crypt-OpenSSL-Bignum-0.04.tar.gz
&nbsp;
<span style="color: #000000; font-weight: bold;">for</span> pkg <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #007800;">$packages</span>; <span style="color: #000000; font-weight: bold;">do</span>
	<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xzvf</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$pkg</span>.tar.gz&quot;</span> ;
	<span style="color: #7a0874; font-weight: bold;">cd</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$pkg</span>&quot;</span> ;
	<span style="color: #c20cb9; font-weight: bold;">perl</span> Makefile.PL ;
	<span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #7a0874; font-weight: bold;">test</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">install</span> ;
	<span style="color: #7a0874; font-weight: bold;">cd</span> .. ;
<span style="color: #000000; font-weight: bold;">done</span>;</pre></div></div>

<p>OK, o <a rel="nofollow" href="http://garotosopa.wordpress.com/">garotosopa</a> tirou toda a graça do meu script, me alertando uma coisa da qual não sabia, para instalar um módulo do perl, basta digitar:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">cpan <span style="color: #660033;">-i</span> Math::BigInt Math::BigInt::FastCalc Math::BigInt::GMP Math::BigInt::Pari Crypt::DH Crypt::OpenSSL::Bignum</pre></div></div>

<p>Inicie o irssi e digite:</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">/sasl set freenode Seu_nick Sua_Senha BH-BLOWFISH
/sasl save
/save
/quit</pre></div></div>

<p>Agora, é só ajeitar o config do irssi.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">vim</span> ~<span style="color: #000000; font-weight: bold;">/</span>.irssi<span style="color: #000000; font-weight: bold;">/</span>config</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;">servers <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #009900;">&#123;</span>
		address <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;irc.freenode.org&quot;</span><span style="color: #339933;">;</span>
		chatnet <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;freenode&quot;</span><span style="color: #339933;">;</span>
		port <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;7000&quot;</span><span style="color: #339933;">;</span>
		use_ssl <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;yes&quot;</span><span style="color: #339933;">;</span>
		ssl_verify <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;yes&quot;</span><span style="color: #339933;">;</span>
		ssl_capath <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;/etc/ssl/certs&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Entre no irssi novamente e pronto! Só usar o /connect freenode !</p>
<p>E ai, gostou? </p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/370/acessando-a-freenode-org-por-ssl-no-irssi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Como consultar a documentação do PHP direto do Vim</title>
		<link>http://gustavodutra.com/post/365/como-consultar-a-documentacao-do-php-direto-do-vim/</link>
		<comments>http://gustavodutra.com/post/365/como-consultar-a-documentacao-do-php-direto-do-vim/#comments</comments>
		<pubDate>Sun, 10 Jan 2010 20:51:54 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[como]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[gvim]]></category>
		<category><![CDATA[man]]></category>
		<category><![CDATA[pear]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[unix]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[vimrc]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=365</guid>
		<description><![CDATA[Olá! Descobri recentemente que é possível baixar a documentação do PHP no formato do man do UNIX. Isso é muito bom, já que assim, podemos consultar funções com parâmetros, variáveis e exemplos. Melhor, podemos fazer isso direto do Vim.
Eu já tinha lido sobre uma opção do Vim chamada keywordprg, mas nunca havia encontrado uma serventia. [...]]]></description>
			<content:encoded><![CDATA[<p>Olá! Descobri recentemente que é possível baixar a documentação do PHP no formato do man do <strong>UNIX</strong>. Isso é muito bom, já que assim, podemos consultar funções com parâmetros, variáveis e exemplos. Melhor, podemos fazer isso direto do Vim.</p>
<p>Eu já tinha lido sobre uma opção do Vim chamada <a rel="nofollow" href="http://vimdoc.sourceforge.net/htmldoc/options.html#%27keywordprg%27">keywordprg</a>, mas nunca havia encontrado uma serventia. Quando eu li no <a rel="nofollow" href="http://bjori.blogspot.com/2010/01/unix-manual-pages-for-php-functions.html">blog do bjori</a>, realmente me veio à mente como eu poderia utilizá-la.</p>
<p><span id="more-365"></span></p>
<p>Eu instalei a última versão do <strong>pear</strong> aqui, e executei os comandos que ele cita no blog:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pear <span style="color: #c20cb9; font-weight: bold;">install</span> doc.php.net<span style="color: #000000; font-weight: bold;">/</span>pman</pre></div></div>

<p>Eu precisei aumentar a memória do <strong>php.ini</strong> (<em>memory_limit</em>), 32M não foi o suficiente.</p>
<p>O manual será instalado no diretório especificado em &#8220;<em>doc_dir</em>&#8221; da configuração da <strong>pear</strong> e o executável no &#8220;<em>bin_dir</em>&#8220;. Para verificar as configurações atuais:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pear config-show <span style="color: #666666; font-style: italic;"># Mostra todas as configurações atuais</span>
pear config-get bin_dir <span style="color: #666666; font-style: italic;"># Mostra configuração atual da opção bin_dir</span>
pear config-get doc_dir <span style="color: #666666; font-style: italic;"># Mostra configuração atual da opção doc_dir</span>
<span style="color: #666666; font-style: italic;"># Para modificar:</span>
pear config-set bin_dir <span style="color: #000000; font-weight: bold;">/</span>outro<span style="color: #000000; font-weight: bold;">/</span>bin
pear config-set doc_dir <span style="color: #000000; font-weight: bold;">/</span>outro<span style="color: #000000; font-weight: bold;">/</span>docs</pre></div></div>

<p>Depois de instalado, você pode utilizar ele tanto no Vim quanto fora do Vim:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pman array_merge</pre></div></div>

<p>Bom, se lembra que eu havia falado sobre o <em>keywordprg</em> ? Assim como o <em>makeprg</em> é o programa executado ao se executa :<em>make</em> no Vim e o <em>grepprg</em> o comando executado ao se executar :<em>[grep|vimgrep]</em>, o <em>keywordprg</em> é executado quando se preciona <strong>K</strong> (k maiúsculo) sobre alguma palavra chave &#8211; que no nosso caso será uma função php.</p>
<p>O artigo citado ali em cima, indica para colocarmos no <strong>.vimrc</strong>, mas eu acho mais interessante por no <strong>.ftplugin/php.vim</strong> (se o arquivo não existir, crie). Assim, só será carregado caso o tipo do arquivo for php, possibilitando utilizar outros programas para outras linguagens</p>

<div class="wp_syntax"><div class="code"><pre class="vimrc" style="font-family:monospace;">&quot; Programa executado quando pressionado K
set keywordprg=pman</pre></div></div>

<p>Agora faça o teste: abra um arquivo php, coloque o cursor sobre alguma função e pressione <em>K</em>. Para fechar o manual aberto, basta precionar <em>q</em>. Pode-se utilizar a busca com <em>/termo</em> e também navegar nos resultados com <em>n/N</em>. <em>j/k/UP/DOWN</em> movem o arquivo para cima e para baixo, normalmente, como se fosse um manpage.</p>
<p>Eai, este post ajudou em algo?</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/365/como-consultar-a-documentacao-do-php-direto-do-vim/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Lookahead, Lookbehind e Condicionais em Expressões Regulares</title>
		<link>http://gustavodutra.com/post/348/lookahead-lookbehind-e-condicionais-em-expressoes-regulares/</link>
		<comments>http://gustavodutra.com/post/348/lookahead-lookbehind-e-condicionais-em-expressoes-regulares/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 22:28:29 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Regex]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[lookahead]]></category>
		<category><![CDATA[lookbehind]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[re]]></category>
		<category><![CDATA[regular expression]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=348</guid>
		<description><![CDATA[Depois de muito tempo sem postar, me lembrei de algo bem interessante! Vocês podem mandar mensagens na página de contato dando sugestões de temas sobre Vim, Expressões regulares ou outra coisa que vocês gostariam de ver no blog ;p.
Expressões Regulares
Expressão regular é uma ferramenta muito forte para o tratamento de texto. É muito utilizado para [...]]]></description>
			<content:encoded><![CDATA[<p>Depois de muito tempo sem postar, me lembrei de algo bem interessante! Vocês podem mandar mensagens na página de contato dando sugestões de temas sobre <strong>Vim</strong>, <strong>Expressões regulares</strong> ou outra coisa que vocês gostariam de ver no blog ;p.</p>
<h2>Expressões Regulares</h2>
<p><strong>Expressão regular</strong> é uma ferramenta muito forte para o tratamento de texto. É muito utilizado para substituições ou para verificar integridade dos dados, pois, através da <strong>expressão regular</strong>, vulga <strong>regex</strong> ou <strong>re</strong>, pode-se casar padrões de texto. Por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">/^[a-zA-Z0-9]+$/
Para somente caracteres alfanuméricos.
&nbsp;
/^(\d{3}\.){2}\d{3}-\d{2}$/
Validando formato de CPF.</pre></div></div>

<p>Esse tipo de regex é simples, valida praticamente só os caracteres que compõe uma dada string. Porém, as <em>Perl Compatible Regular Expressions</em> (Expressões Regulares Compatíveis com Perl), também conhecidas como <em>pcre</em>, permitem muito mais, inclusive utilizar condicionados (if&#8217;s), porém isso é para outro post! O que vamos falar agora é de <strong>Lookahead</strong> e <strong>Lookbehind</strong>.</p>
<p><span id="more-348"></span></p>
<h2>Lookahead</h2>
<p><strong>Lookahead</strong> é uma forma de casar strings que tenham ou não um determinado final. É utilizado (?⁼&#8230;) para o positivo, ou seja, que terminem com; e (?!&#8230;) para o negativo, ou seja, que não termina com.</p>
<p>Um exemplo simples, seria a busca, primeiramente, de Gustavo seguido por Dutra. Se existisse Gustavo ou Gustavo Outracoisa, ele não casaria. Ao contrário, o segundo exemplo somente casaria o Gustavo ou o Gustavo Outracoisa, porém não casaria o Gustavo Dutra:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">/Gustavo(?= Dutra)/
/Gustavo(?! Dutra)</pre></div></div>

<p>Vamos ver um exemplo mais funcional e complexo em <em>python</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #dc143c;">re</span>.<span style="color: black;">findall</span><span style="color: black;">&#40;</span>r<span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\s</span>?([^;]+);'</span>, <span style="color: #483d8b;">'Vim Editor; GVim Editor; Firefox Browser; Emacs Editor; Thunderbird Email;'</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># output seria:</span>
<span style="color: black;">&#91;</span><span style="color: #483d8b;">'Vim Editor'</span>, <span style="color: #483d8b;">'GVim Editor'</span>, <span style="color: #483d8b;">'Firefox Browser'</span>, <span style="color: #483d8b;">'Emacs Editor'</span>, <span style="color: #483d8b;">'Thunderbird Email'</span><span style="color: black;">&#93;</span></pre></div></div>

<p>Mas e se quisesse somente os editores da lista?</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span>
<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #dc143c;">re</span>.<span style="color: black;">findall</span><span style="color: black;">&#40;</span>r<span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\s</span>?([^;]+ Editor);'</span>, <span style="color: #483d8b;">'Vim Editor; GVim Editor; Firefox Browser; Emacs Editor; Thunderbird Email;'</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># output seria:</span>
<span style="color: black;">&#91;</span><span style="color: #483d8b;">'Vim Editor'</span>, <span style="color: #483d8b;">'GVim Editor'</span>, <span style="color: #483d8b;">'Emacs Editor'</span><span style="color: black;">&#93;</span></pre></div></div>

<p>Mas e se eu quisesse todos MENOS os editores? É ai que entra o <strong>Lookahead</strong>, vamos pegar todos que não terminam com Editor.</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span>
<span style="color: #dc143c;">re</span>.<span style="color: black;">findall</span><span style="color: black;">&#40;</span>r<span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\s</span>?([^;]+ (?!Editor))'</span>, <span style="color: #483d8b;">'Vim Editor; GVim Editor; Firefox Browser; Emacs Editor; Thunderbird Email;'</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># output seria:</span>
<span style="color: black;">&#91;</span><span style="color: #483d8b;">'Firefox '</span>, <span style="color: #483d8b;">'Thunderbird '</span><span style="color: black;">&#93;</span></pre></div></div>

<p>Observem que o que casar com (?!Editor) não entra no resultado, para incluí-lo, seria necessário uma expressão regular um pouco mais complexa utilizando condicionais. Veremos isso depois!</p>
<h2>Lookbehind</h2>
<p><strong>Lookbehind</strong> faz o mesmo que o <strong>lookahead</strong>, porém, como o próprio nome diz, não procura depois, mas sim antes, da string dita. (?&lt;=&#8230;) para o positivo e (?&lt;!&#8230;) para o negativo.</p>
<p>Vamos pegar um RT de um tweet do <a rel="nofollow" href="http://twitter.com">twitter.com</a>. Como gosto de ser eclético, vou usar <em>perl</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;RT <span style="color: #000099; font-weight: bold;">\@</span>gustavotkg Testando ERs.&quot;</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/(?&lt; =@)gustavotkg/</span>
<span style="color: #666666; font-style: italic;"># Output seria:</span>
<span style="color: #cc66cc;">1</span></pre></div></div>

<p>Essa expressão retorna 1 (ou seja, TRUE), caso exista algum gustavotkg precedido por uma @.</p>
<p>OBS: @ são escapadas porque representam variáveis do tipo array em perl.</p>
</pre>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Este é um RT <span style="color: #000099; font-weight: bold;">\@</span>gustavotkg Testando ERs.&quot;</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/(?&lt; !RT )\@gustavotkg/</span>
<span style="color: #666666; font-style: italic;"># Output seria, vazio, pois o @gustavotkg é precedido por um RT</span>
&nbsp;
<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;RT <span style="color: #000099; font-weight: bold;">\@</span>gustavotkg2 também estou testando ERs.&quot;</span> <span style="color: #339933;">=~</span> <span style="color: #009966; font-style: italic;">/(?&lt;!^RT \@gustavotkg\b)(.+)$/</span>
<span style="color: #666666; font-style: italic;"># Output seria:</span>
RT <span style="color: #0000ff;">@gustavotkg2</span> també<span style="color: #000066;">m</span> estou testando ERs<span style="color: #339933;">.</span></pre></div></div>

<p>O <em>\b</em> significa borda de palavra (espaço, ponto final, exclamação, final de linha, etc). Como 2 não é uma borda de palavra, pois a expressão regular diz o seguinte: <em>"Case com tudo que não começar com RT @gustavotkg seguido de uma borda de palavra"</em>.</p>
<h2>Condicionais</h2>
<p>Como se pode notar nos casos acima, os operadores de lookahead e lookbehind não colocam o valor casado junto ao resultado final. Para isso temos que verificar condicionalmente e adicionar manualmente o valor. A sintaxe é esta: <strong>(?(condicao)(caso verdadeiro)|(caso falso)).</strong></p>
<p>Parece complicado, mas é bem simples, vamos começar com algo fácil utilizando php:</p>
</pre>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/(?(?&lt; =@)\w+|\w{2})/&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;@testando&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$r</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$r</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;"># Output seria:
</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=&gt;</span> string<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #0000ff;">&quot;testando&quot;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/(?(?&lt; =@)\w+|\w{2})/&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;testando&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$r</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$r</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;"># Output seria:
</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=&gt;</span> string<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span> <span style="color: #0000ff;">&quot;te&quot;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Notem o condicional: Se começar (<strong>lookbehind</strong>) com @, então quero que case toda a palavra que segue o @, caso contrário, quero apenas os dois primeiros caracteres. Fácil? Vamos complicar!</p>
<p>Lembra do exemplo mais acima do <strong>lookahead</strong>? Vou refrescar a memória:</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">re</span>
<span style="color: #dc143c;">re</span>.<span style="color: black;">findall</span><span style="color: black;">&#40;</span>r<span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\s</span>?([^;]+ (?!Editor))'</span>, <span style="color: #483d8b;">'Vim Editor; GVim Editor; Firefox Browser; Emacs Editor; Thunderbird Email;'</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># output seria:</span>
<span style="color: black;">&#91;</span><span style="color: #483d8b;">'Firefox '</span>, <span style="color: #483d8b;">'Thunderbird '</span><span style="color: black;">&#93;</span></pre></div></div>

<p>Notem que ela não adicionar a categoria do Firefox nem do Thunderbird, pois o (?!) como supracitado, não é colocado junto no resultado final. Para adicioná-los, podemos usar o condicional.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #990000;">preg_match_all</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/(\w+ (?(?!Editor)\w+));/&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;Vim Editor; GVim Editor; Firefox Browser; Emacs Editor; Thunderbird Email;&quot;</span><span style="color: #339933;">,</span><span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">var_dump</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// Output seria:</span>
<span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=&gt;</span>
  <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=&gt;</span>
    string<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">16</span><span style="color: #009900;">&#41;</span> <span style="color: #0000ff;">&quot;Firefox Browser;&quot;</span>
    <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=&gt;</span>
    string<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">18</span><span style="color: #009900;">&#41;</span> <span style="color: #0000ff;">&quot;Thunderbird Email;&quot;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=&gt;</span>
  <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=&gt;</span>
    string<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span> <span style="color: #0000ff;">&quot;Firefox Browser&quot;</span>
    <span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=&gt;</span>
    string<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">17</span><span style="color: #009900;">&#41;</span> <span style="color: #0000ff;">&quot;Thunderbird Email&quot;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Ou seja, no segundo índice do array, que na verdade é o indice 1, consta o resultado pego. Veja que utilizamos o seguinte método: Se \w+ não for seguido de 'Editor' então pega o \w+, senão ignora pois não é para casar. Assim, se for Editor, ele nunca irá casar.</p>
<p><strong>Dúvidas? Sugestões? Deixe um comentário!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/348/lookahead-lookbehind-e-condicionais-em-expressoes-regulares/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>50 Cheat Sheets e Quick Refs para salvar sua pele</title>
		<link>http://gustavodutra.com/post/336/50-cheat-sheets-e-quick-refs-para-salvar-sua-pele/</link>
		<comments>http://gustavodutra.com/post/336/50-cheat-sheets-e-quick-refs-para-salvar-sua-pele/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 17:46:11 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Nerd]]></category>
		<category><![CDATA[awk]]></category>
		<category><![CDATA[bash script]]></category>
		<category><![CDATA[bazaar]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[cheat sheets]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gvim]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[latex]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[regular expression]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=336</guid>
		<description><![CDATA[Estou disponibilizando algumas Cheat Sheets que estavam nos meus favoritos. Sempre são úteis em algum momento!!! Espero que aproveitem pelo menos 1 delas!
Controle de Versão

SVN Cheat Sheet
Git Cheat Sheet
Mercurial Cheat Sheet
Bazaar Cheat Sheet

Frameworks

Prototype Cheat Sheet
MooTools Cheat Sheet
jQuery Cheat Sheet
Ruby On Rails
Django Cheat Sheet
CodeIgniter Cheat Sheet
CakePHP Cheat Sheet
Mais de 12 Symfony Cheat Sheets

Programação

Bash Script Quick Refences
AWK [...]]]></description>
			<content:encoded><![CDATA[<p>Estou disponibilizando algumas Cheat Sheets que estavam nos meus favoritos. Sempre são úteis em algum momento!!! Espero que aproveitem pelo menos 1 delas!</p>
<h2>Controle de Versão</h2>
<ul>
<li><a rel="nofollow" href="http://www.cs.put.poznan.pl/csobaniec/Papers/svn-refcard.pdf">SVN Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://ktown.kde.org/%7Ezrusin/git/git-cheat-sheet-large.png">Git Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://edong.net/2008v1/docs/dongwoo-Hg-PDF.pdf">Mercurial Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://doc.bazaar-vcs.org/latest/en/_static/en/bzr-en-quick-reference.png">Bazaar Cheat Sheet</a></li>
</ul>
<h2>Frameworks</h2>
<ul>
<li><a rel="nofollow" href="http://thinkweb2.com/projects/prototype/downloads/Prototype%20Cheat%20Sheet%201.6.0.2">Prototype Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://mediavrog.net/blog/wp-content/uploads/2008/08/mootools-12-cheat-sheet-pf.pdf">MooTools Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://www.cheat-sheets.org/saved-copy/Jquery-Cheat-Sheet-1.2.pdf">jQuery Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://www.addedbytes.com/cheat-sheets/download/ruby-on-rails-cheat-sheet-v1.pdf">Ruby On Rails</a></li>
<li><a rel="nofollow" href="http://www.mercurytide.co.uk/media/whitepapers/django-cheat-sheet/django10-cheat-sheet.pdf">Django Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://codeigniter-1-7-1-quick-reference-cheatsheet.googlecode.com/files/CodeIgniter_Cheatsheet_DesignFellow_v2.zip">CodeIgniter Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf">CakePHP Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://trac.symfony-project.org/wiki/CheatSheets">Mais de 12 Symfony Cheat Sheets</a></li>
</ul>
<h2>Programação</h2>
<ul>
<li><a rel="nofollow" href="http://www.cheat-sheets.org/saved-copy/bash_ref.pdf">Bash Script Quick Refences</a></li>
<li><a rel="nofollow" href="http://www.cheat-sheets.org/image/saved.copy.gif">AWK Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://www.cheat-sheets.org/saved-copy/HTML5_Canvas_Cheat_Sheet.png">HTML5 Canvas Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://www.cheat-sheets.org/saved-copy/php_cheat_sheet.png">PHP Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://www.zenspider.com/Languages/Ruby/QuickRef.html">Ruby Quick Refence</a></li>
<li><a rel="nofollow" href="http://www.scottklarr.com/topic/106/perl-cheat-sheets/">9 Perl Cheat Sheets</a></li>
<li><a rel="nofollow" href="http://rgruet.free.fr/PQR24/PQR2.4.html">Python Quick Refence</a></li>
<li><a rel="nofollow" href="http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/">Regular Expression Cheat Sheet</a></li>
</ul>
<h2>Web Design</h2>
<ul>
<li><a rel="nofollow" href="http://www.reeddesign.co.uk/test/points-pixels.html">Font Size Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://www.blooberry.com/indexdot/css/propindex/all.htm">Propriedades CSS</a></li>
<li><a rel="nofollow" href="http://www.addedbytes.com/cheat-sheets/html-character-entities-cheat-sheet/">HTML Char Entities Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://www.scottklarr.com/topic/114/designers-color-chart-cheat-sheets/">6 Design Colors Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://www.seomoz.org/user_files/SEO_Web_Developer_Cheat_Sheet.pdf">SEO Web Developer Cheat Sheet</a></li>
</ul>
<h2>Bancos de Dados</h2>
<ul>
<li><a rel="nofollow" href="http://www.xml.dvint.com/docs/SchemaStructuresQR-2.pdf">XML Schema Structure Quick Refence</a></li>
<li><a rel="nofollow" href="http://www.cheat-sheets.org/saved-copy/MySQL_QuickRef.pdf">MySQL Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://www.alberton.info/downloads/postgresql-cheat-sheet.png">PostgreSQL Cheat Sheet</a></li>
</ul>
<h2>Ferramentas</h2>
<ul>
<li><a rel="nofollow" href="http://www.google.com/help/cheatsheet.html">Google Search Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://duvet-dayz.com/firebug-cheatsheet/">Firebug Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://www.cheat-sheets.org/saved-copy/dhffkc6q_97fsjrgmd7.gif">Vimperator Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://www.cheat-sheets.org/saved-copy/latexsheet-0.png">LaTeX Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://www.cheat-sheets.org/saved-copy/vim-cheatsheet.png">Vim Cheat Sheet</a></li>
<li><a rel="nofollow" href="http://www.cheat-sheets.org/saved-copy/vimqrc.html">Vim Quick Refence</a></li>
<li><a rel="nofollow" href="http://www.addedbytes.com/cheat-sheets/mod_rewrite-cheat-sheet/">mod_rewirte Cheat Sheet</a></li>
</ul>
<p>Alguma que eu tenha esquecido? Posta ae nos comentários!</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/336/50-cheat-sheets-e-quick-refs-para-salvar-sua-pele/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Galeria de fotos com efeitos somente com CSS3</title>
		<link>http://gustavodutra.com/post/331/galeria-de-fotos-com-efeitos-somente-com-css3/</link>
		<comments>http://gustavodutra.com/post/331/galeria-de-fotos-com-efeitos-somente-com-css3/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 21:06:17 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Humor]]></category>
		<category><![CDATA[Nerd]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=331</guid>
		<description><![CDATA[Eu estava navegando pelo meus feeds e vi no Ajaxian um post falando sobre uma galeria de fotos somente utilizando css3. Nada de jQuery, mootools, enfim, javascript. Somente CSS3.
Veja a Galeria Demo E o arquivo css comentado.
Ai me lembrei do vídeo Hitler falando sobre o Internet Explorer 6:

Como indagou o filme, será que um dia [...]]]></description>
			<content:encoded><![CDATA[<p>Eu estava navegando pelo meus feeds e vi no <a rel="nofollow" href="ajaxian.com">Ajaxian</a> um post falando sobre uma galeria de fotos somente utilizando <strong>css3</strong>. Nada de <em>jQuery</em>, <em>mootools</em>, enfim, <em>javascript</em>. Somente <strong>CSS3</strong>.</p>
<p>Veja a <a rel="nofollow" href="http://www.3site.eu/examples/gallery/">Galeria Demo</a> E o <a rel="nofollow" href="http://www.3site.eu/examples/gallery/css/gallery.css">arquivo css comentado</a>.</p>
<p>Ai me lembrei do vídeo <strong>Hitler falando sobre o Internet Explorer 6</strong>:</p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/SGD6r4ebmEY&#038;hl=en_US&#038;fs=1&#038;color1=0x5d1719&#038;color2=0xcd311b"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/SGD6r4ebmEY&#038;hl=en_US&#038;fs=1&#038;color1=0x5d1719&#038;color2=0xcd311b" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
<p>Como indagou o filme, será que um dia poderemos utilizar todo o potencial do CSS3?</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/331/galeria-de-fotos-com-efeitos-somente-com-css3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solucionando problema com mmkeys.so no exaile do archlinux</title>
		<link>http://gustavodutra.com/post/327/solucionando-problema-com-mmkeys-so-no-exaile-do-archlinux/</link>
		<comments>http://gustavodutra.com/post/327/solucionando-problema-com-mmkeys-so-no-exaile-do-archlinux/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 00:23:52 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[arch linux]]></category>
		<category><![CDATA[archlinux]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[exaile]]></category>
		<category><![CDATA[hotkeys]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mmkeys.so]]></category>
		<category><![CDATA[xev]]></category>
		<category><![CDATA[xkeys]]></category>
		<category><![CDATA[xmodmap]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=327</guid>
		<description><![CDATA[As hotkeys, ou teclas de atalho, sempre são úteis para quando você está escutando uma música e alguém lhe pergunta algo, ou precisa ir no banheiro ou precisa passar a música porque a atual é ruim. O exaile sempre foi meu player preferido. Simpatizo muito com ele. Para as teclas de atalho sempre utilizei o [...]]]></description>
			<content:encoded><![CDATA[<p>As <strong>hotkeys</strong>, ou teclas de atalho, sempre são úteis para quando você está escutando uma música e alguém lhe pergunta algo, ou precisa ir no banheiro ou precisa passar a música porque a atual é ruim. O <em>exaile</em> sempre foi meu player preferido. Simpatizo muito com ele. Para as teclas de atalho sempre utilizei o plugin <strong>Xkeys</strong>.</p>
<p>Depois de atualizado o pacote exaile do <strong>ArchLinux</strong>, o plugin <strong>XKeys</strong> parou de funcionar e não aceitava mais minhas teclas de atalho do teclado para manipular áudio, como forward, backward, stop, play, etc.</p>
<p>Esse problema era antigo, ele acusava que era necessário a lib <strong>mmkeys.so</strong> e que não estava presente. Nunca tinha tempo pra verificar o problema, até que eu decidi ir atrás.</p>
<p><span id="more-327"></span></p>
<h2>Configurando as teclas</h2>
<p>O objetivo do post é solucionar o problema, mas para não ficar descontextualizado, vou mostrar como mapear as teclas. É fácil e biodegradável, não polui o meio ambiente.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">xev <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> keycode</pre></div></div>

<p>Vão vir linhas confusas a cada tecla pressionada. O importante é o número junto o &#8220;<strong>keycode</strong>&#8220;. Pegue o número da respectiva tecla e escreva em ~/.<strong>Xmodmap</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">keycode NUMERO = XF86AudioLowerVolume
keycode NUMERO = XF86AudioMedia
keycode NUMERO = XF86AudioMute
keycode NUMERO = XF86AudioNext
keycode NUMERO = XF86AudioPlay
keycode NUMERO = XF86AudioPrev</pre></div></div>

<p>Substitua o NUMERO pelo número do keycode que você detectou com o xev, acho que está claro o que cada um representa, né? Abra o arquivo ~/.<strong>xinitrc</strong> e adicione</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">xmodmap</span> ~<span style="color: #000000; font-weight: bold;">/</span>.Xmodmap</pre></div></div>

<p>Se você tiver preguiça de reiniciar a interface gráfica, pode digitar o comando acima para fazer as teclas funcionarem. Ai é só habilitar no exaile!!!</p>
<h2>Ajustando o Exaile</h2>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pacman <span style="color: #660033;">-Ql</span> exaile <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> mmkeys</pre></div></div>

<p>Identifiquei que a mmkeys.so realmente não constava nos arquivos de instalação do <em>exaile</em>. Como o <em>pacman</em> guarda um cache das versões dos programas que eu instalei e atualizei, fui verificando os arquivos de cada uma delas atrás dessa lib, pois um dia isso havia funcionado.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">pacman <span style="color: #660033;">-Qpl</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>cache<span style="color: #000000; font-weight: bold;">/</span>pacman<span style="color: #000000; font-weight: bold;">/</span>pkg<span style="color: #000000; font-weight: bold;">/</span>exaile-0.2.14-2.pkg.tar.gz <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> mmkeys</pre></div></div>

<p>Esta foi a última versão que tem a dita lib (exaile /usr/lib/exaile/<strong>mmkeys.so</strong>) &#8211; aparentemente o problema veio da versão 3 em diante -, então bastou eu jogá-la para /usr/lib/exaile.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">mkdir</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>exaile-src
<span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xzvf</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>cache<span style="color: #000000; font-weight: bold;">/</span>pacman<span style="color: #000000; font-weight: bold;">/</span>pkg<span style="color: #000000; font-weight: bold;">/</span>exaile-0.2.14-2.pkg.tar.gz <span style="color: #660033;">-C</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>exaile-src
<span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">mv</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>exaile-src<span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>exaile<span style="color: #000000; font-weight: bold;">/</span>mmkeys.so <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>lib<span style="color: #000000; font-weight: bold;">/</span>exaile<span style="color: #000000; font-weight: bold;">/</span>mmkeys.so
<span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-r</span> <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>exaile-src</pre></div></div>

<p>Pronto! Não precisa nem reiniciar o exaile, apenas habilitar o plugin <strong>XKeys</strong> que ele irá reconhecer automaticamente as suas teclas de atalhos.</p>
<p>Não fui atrás para saber se é problema no empacotamento ou o quê, mas deve funcionar isto até sair uma outra solução.</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/327/solucionando-problema-com-mmkeys-so-no-exaile-do-archlinux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tchelinux 2009 &#8211; Porto Alegre</title>
		<link>http://gustavodutra.com/post/309/tchelinux-2009-porto-alegre/</link>
		<comments>http://gustavodutra.com/post/309/tchelinux-2009-porto-alegre/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 15:28:29 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[aumentar produtivade]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[palestra]]></category>
		<category><![CDATA[porque]]></category>
		<category><![CDATA[produtividade]]></category>
		<category><![CDATA[tchelinux]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=309</guid>
		<description><![CDATA[Para quem é do Sul, estarei em Porto Alegre no dia 14/11/2009 ministrando duas palestras no evento Tchelinux. A programação tem mais de 60 palestras sobre diversos temas e a entrada é apenas 2kg de alimentos não perecíveis. Aqueles que participarem recebem um atestado de 10h para usar como atividade complementar.
Para mais informações http://www.tchelinux.org/2009. As [...]]]></description>
			<content:encoded><![CDATA[<p>Para quem é do Sul, estarei em Porto Alegre no dia 14/11/2009 ministrando duas palestras no evento <a rel="nofollow" href="http://www.tchelinux.org">Tchelinux</a>. A programação tem mais de 60 palestras sobre diversos temas e a entrada é apenas 2kg de alimentos não perecíveis. Aqueles que participarem recebem um atestado de 10h para usar como atividade complementar.</p>
<p>Para mais informações <a rel="nofollow" href="http://www.tchelinux.org/2009">http://www.tchelinux.org/2009</a>. As palestras serão:</p>
<h3>VIM-de a mim, produtividade</h3>
<p>Uma palestra que mostra maneiras para um edição de texto efetiva e rápida usando o vim.</p>
<h3>jQuery &#8211; Introdução</h3>
<p>Apresenta o porquê do jQuery ser um excelente framework para desenvolvimento rápido com javascript.</p>
<p>Se alguém tiver assistido a alguma palestra, favor dar um feedback!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/309/tchelinux-2009-porto-alegre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Buscas eficientes no Vim com vimgrep</title>
		<link>http://gustavodutra.com/post/296/buscas-eficientes-no-vim-com-vimgrep/</link>
		<comments>http://gustavodutra.com/post/296/buscas-eficientes-no-vim-com-vimgrep/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 20:23:37 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[aumentar produtivade]]></category>
		<category><![CDATA[busca]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[gvim]]></category>
		<category><![CDATA[produtividade]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[vimgrep]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=296</guid>
		<description><![CDATA[A busca efetiva pode ajudar muito, caso bem usada, tanto no ganho de tempo como na efeciência de substituições ou refactories. Seguem alguns outros exemplos de finalidades para a busca utilizando o Vim:

Certeza de encontrar todas as incidências
Ficam visualmente destacadas (com :set hlsearch)
Testar substituições
Verificar a ortografia atrás de erros de digitação
Encontrar variáveis ou funções não [...]]]></description>
			<content:encoded><![CDATA[<p>A busca efetiva pode ajudar muito, caso bem usada, tanto no ganho de tempo como na efeciência de substituições ou refactories. Seguem alguns outros exemplos de finalidades para a busca utilizando o Vim:</p>
<ul>
<li>Certeza de encontrar todas as incidências</li>
<li>Ficam visualmente destacadas (com :set hlsearch)</li>
<li>Testar substituições</li>
<li>Verificar a ortografia atrás de erros de digitação</li>
<li>Encontrar variáveis ou funções não utilizadas, só declaradas</li>
<li>Encontrar rapidamente algum termo</li>
<li>Verificar a existência de algum termo</li>
</ul>
<p>Além da conhecida / (barra) para buscar, existe o :vimgrep. É dele que quero falar.</p>
<p><span id="more-296"></span></p>
<h2>Vimgrep</h2>
<h3>Comando</h3>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #000000;">:</span>vim<span style="color: #000000;">&#91;</span>grep<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">!</span><span style="color: #000000;">&#93;</span> <span style="color: #000000;">/</span><span style="color: #000000;">&#123;</span>pattern<span style="color: #000000;">&#125;</span><span style="color: #000000;">/</span><span style="color: #000000;">&#91;</span>g<span style="color: #000000;">&#93;</span><span style="color: #000000;">&#91;</span>j<span style="color: #000000;">&#93;</span> <span style="color: #000000;">&#123;</span>files<span style="color: #000000;">&#125;</span></pre></div></div>

<ul>
<li>Busca inscidências de <em>pattern</em> nos <em>files</em> listados.</li>
<li><em>pattern</em> pode ser uma expressão regular ou não</li>
<li>A exclamação (<em>!</em>) ignora as alterações já feita no arquivo atual</li>
<li><em>g</em> procura por todas as inscidências, não só a primeira, em cada arquivo</li>
<li><em>j</em> pula para o primeiro resultado ao executar o comando</li>
<li><em>files</em> podem conter <em>wildcards</em>, como *, ? e **</li>
<li>Os resultados são abertos na <strong>quickfix list</strong></li>
</ul>
<h3>Exemplos</h3>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #000000;">:</span>vimgrep<span style="color: #000000;">!</span> <span style="color: #000000;">/$</span>var<span style="color: #000000;">/</span> arquivo<span style="color: #000000;">.</span>pl</pre></div></div>

<p>Pesquisa pela primeira inscidência de $var no arquivo.pl</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #000000;">:</span>vimgrep <span style="color: #000000;">/</span>texto<span style="color: #000000;">/</span> <span style="color: #000000;">*.</span>rb</pre></div></div>

<p>Busca por <em>texto</em> em todos os arquivos com a extensão .rb do diretório atual (para descobrir qual o diretório atual, use :pwd. Para mudar :cd <em>dir</em>)</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #000000;">:</span>vimgrep <span style="color: #000000;">/</span>TeXtO<span style="color: #000000;">/</span> <span style="color: #000000;">*.</span>py dir<span style="color: #000000;">/*.</span>py</pre></div></div>

<p>Busca com case-sensitive em todos os arquivos .py do diretório atual e dos dentro do diretório dir/.</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #000000;">:</span>vimgrep <span style="color: #000000;">/</span>minhaFuncao<span style="color: #000000;">/</span>g <span style="color: #000000;">**/*.</span>c</pre></div></div>

<p>Busca recursiva dentro da árvore de diretórios do diretório atual cuja extensão seja .c</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #000000;">:</span>vimgrep <span style="color: #000000;">/&lt;</span> \<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">^</span> <span style="color: #000000;">&#93;</span>\<span style="color: #000000;">+</span>\<span style="color: #000000;">&#41;</span><span style="color: #000000;">&#91;</span><span style="color: #000000;">^&gt;</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">*&gt;.</span>\<span style="color: #000000;">+&lt;</span> \<span style="color: #000000;">/</span>\<span style="color: #000000; font-weight:bold;">1</span><span style="color: #000000;">&gt;/</span> <span style="color: #25BB4D;">index</span><span style="color: #000000;">.</span>html</pre></div></div>

<p>Busca usando expressões regulares também são permitidas!</p>
<h2>Navegando na QuickFix List</h2>
<ul>
<li>:copen</li>
<li>:cfirst</li>
<li>:cprevious</li>
<li>:cnext</li>
<li>:clast</li>
<li>:cclose</li>
</ul>
<p>Como nosso foco é a eficiência, podemos criar mapeamentos para andar pela quickfix list!</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #25BB4D;">map</span> <span style="color: #000000;">&lt;</span>F9<span style="color: #000000;">&gt;</span> <span style="color: #000000;">:</span>copen<span style="color: #000000;">&lt;</span>CR<span style="color: #000000;">&gt;</span>
<span style="color: #25BB4D;">map</span> <span style="color: #000000;">&lt;</span>F10<span style="color: #000000;">&gt;</span> <span style="color: #000000;">:</span>cclose<span style="color: #000000;">&lt;</span>CR<span style="color: #000000;">&gt;</span>
<span style="color: #25BB4D;">map</span> <span style="color: #000000;">&lt;</span>A<span style="color: #000000;">-</span>j<span style="color: #000000;">&gt;</span> <span style="color: #000000;">:</span>cnext<span style="color: #000000;">&lt;</span>CR<span style="color: #000000;">&gt;</span>
<span style="color: #25BB4D;">map</span> <span style="color: #000000;">&lt;</span>A<span style="color: #000000;">-</span>k<span style="color: #000000;">&gt;</span> <span style="color: #000000;">:</span>cprevious<span style="color: #000000;">&lt;</span>CR<span style="color: #000000;">&gt;</span></pre></div></div>

<div id="attachment_305" class="wp-caption aligncenter" style="width: 546px"><a href="http://gustavodutra.com/wp-content/uploads/2009/11/vimgrep1.jpg"><img src="http://gustavodutra.com/wp-content/uploads/2009/11/vimgrep1.jpg" alt="Exemplo de uso do vimgrep" title="Exemplo de uso do vimgrep" width="536" height="875" class="size-full wp-image-305" /></a><p class="wp-caption-text">Exemplo de uso do vimgrep</p></div>
<h2>Conclusão</h2>
<p>Esse recurso não parece ser muito abordado por ai, mas é extremamente importante. Seja criativo e descubra onde melhor usar o :vimgrep! Tenho certeza de que vai lhe ajudar! E quando encontrar, comente ai!</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/296/buscas-eficientes-no-vim-com-vimgrep/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Facade Pattern com perl orientado a objetos</title>
		<link>http://gustavodutra.com/post/288/facade-pattern-com-perl-orientado-a-objetos/</link>
		<comments>http://gustavodutra.com/post/288/facade-pattern-com-perl-orientado-a-objetos/#comments</comments>
		<pubDate>Sat, 17 Oct 2009 19:07:07 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Nerd]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[facade pattern]]></category>
		<category><![CDATA[felixibilidade]]></category>
		<category><![CDATA[oo]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[orientacao a objeto]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=288</guid>
		<description><![CDATA[Olá! Faz um tempo que não mexo com perl. Encontrei perdido um arquivo com esse exemplo que fiz em 2008, segundo a data de última modificação. Então, decidi dar continuidade aos posts de design patterns. Esse padrão é bem interessante, poderia ser traduzido para Fachada.
Eu gosto dessa tradução, porque traduz bem direitinho o que ele [...]]]></description>
			<content:encoded><![CDATA[<p>Olá! Faz um tempo que não mexo com <em>perl</em>. Encontrei perdido um arquivo com esse exemplo que fiz em 2008, segundo a data de última modificação. Então, decidi dar continuidade aos posts de <strong>design patterns</strong>. Esse padrão é bem interessante, poderia ser traduzido para <strong>Fachada</strong>.</p>
<p>Eu gosto dessa tradução, porque traduz bem direitinho o que ele representa, é uma fachada para &#8220;esconder&#8221; chamadas de vários métodos de objetos diferentes atrás de um mesmo método. Pense assim:</p>
<p>Toda vez que eu aperto o botão de uma máquina de café e pedir um mocacchino, acontece a mesma coisa:</p>
<ul>
<li>Moe-se o café</li>
<li>Pega-se um copo</li>
<li>Esquenta-se a água</li>
<li>Passa-se o café</li>
<li>Coloca-se o café passado no copo</li>
<li>Coloca-se o chocolate</li>
<li>Coloca-se o leite</li>
<li>Apita pra dizer que está pronto</li>
</ul>
<p>Se olharmos isso com a visão de um <em>pojetista</em>, vemos que temos várias responsabilidades e que não podemos deixar tudo numa mesma classe, como por exemplo:</p>
<ul>
<li>Responsável por moer o café</li>
<li>Responsável por colocar algo no copo</li>
<li>Responsável por pegar 1 copo novo</li>
<li>Responsabilidade de saber quanto de cada ingrediente por no copo</li>
<li>Responsabilidade de apitar e escrever nos leds</li>
</ul>
<p>Enfim, para que o código seja organizado, precisamos distribuir as responsabilidades de acordo com as necessidades e obrigações de cada classe. Porém, cada vez que o botão for pressionado, seria muito cruel ter que chamar várias classes e executar esses métodos que selecionam o copo, moem o grão, etc.</p>
<p>Para esses casos foi pensando o <strong>Facade Pattern,</strong> ou seja, a <strong>Fachada</strong>. Todo aquele algoritmo descrito na primeira lista acima, é encapsulado dentro de uma classe específica para a máquina de café, dentro do método <em>pressionaBotao</em>, por exemplo. Chamando o método, ele se encarrega de interagir com os objetos de seleção do copo, do cálculo da quantidade de ingredientes, etc.<br />
<span id="more-288"></span><br />
Fiz um exemplo em <em>perl</em>, pensando num cinema. Acredito que fique fácil entender a partir dele. Seguem as classes utilizadas:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/usr/bin/perl -w</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;"># Classe representando o amplificador</span>
	<span style="color: #000066;">package</span> Amplifier<span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;"># construtor</span>
	<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$class</span> <span style="color: #339933;">=</span> <span style="color: #000066;">ref</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$class</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">bless</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">return</span> <span style="color: #0000ff;">$this</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># liga o amplificador</span>
	<span style="color: #000000; font-weight: bold;">sub</span> on <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Turning the Amplifier [ON]<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># desliga o amplificador</span>
	<span style="color: #000000; font-weight: bold;">sub</span> off <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Turning the Amplifier [OFF]<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># Muda o volume</span>
	<span style="color: #000000; font-weight: bold;">sub</span> setVolume <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$volume</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">print</span> <span style="color: #000066;">printf</span> <span style="color: #ff0000;">&quot;Turning the Amplifiers volume to %d%%<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$volume</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># coloca no mudo</span>
	<span style="color: #000000; font-weight: bold;">sub</span> mute <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setVolume</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;"># Classe representado o aparelho de DVD</span>
	<span style="color: #000066;">package</span> Dvd<span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;"># construtor</span>
	<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$class</span> <span style="color: #339933;">=</span> <span style="color: #000066;">ref</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$class</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'stop'</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>movie<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">undef</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">bless</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">return</span> <span style="color: #0000ff;">$this</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># liga o dvd</span>
	<span style="color: #000000; font-weight: bold;">sub</span> on <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Turning the DVD Player [ON]<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># desliga o dvd</span>
	<span style="color: #000000; font-weight: bold;">sub</span> off <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Turning the DVD Player [OFF]<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># da play no filme</span>
	<span style="color: #000000; font-weight: bold;">sub</span> play <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$movie</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'play'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>stop<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>play<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$movie</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>movie<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$movie</span><span style="color: #339933;">;</span>
			<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'play'</span><span style="color: #339933;">;</span>
			<span style="color: #000066;">print</span> <span style="color: #000066;">printf</span> <span style="color: #ff0000;">&quot;Playing the movie %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$movie</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># da stop no filme</span>
	<span style="color: #000000; font-weight: bold;">sub</span> stop <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'play'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'stop'</span><span style="color: #339933;">;</span>
			<span style="color: #000066;">print</span> <span style="color: #000066;">printf</span> <span style="color: #ff0000;">&quot;Stoping the movie %s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>movie<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
			<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>movie<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">undef</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># ejeta a bandeja pra por no dvd</span>
	<span style="color: #000000; font-weight: bold;">sub</span> eject <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'play'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>stop<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Ejecting the DVD<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;"># classe representando o projetor</span>
	<span style="color: #000066;">package</span> Projector<span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;"># construtor</span>
	<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$class</span> <span style="color: #339933;">=</span> <span style="color: #000066;">ref</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$class</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">bless</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">return</span> <span style="color: #0000ff;">$this</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># ajusta o canal de vídeo</span>
	<span style="color: #000000; font-weight: bold;">sub</span> videoChannel <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Setting Video Channel<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># liga o projetor</span>
	<span style="color: #000000; font-weight: bold;">sub</span> on <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Turning the Project [ON]<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># desliga o projetor</span>
	<span style="color: #000000; font-weight: bold;">sub</span> off <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Turning the Project [OFF]<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;"># Classe representando as luzes do cinema</span>
	<span style="color: #000066;">package</span> Lights<span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;"># construtor</span>
	<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$class</span> <span style="color: #339933;">=</span> <span style="color: #000066;">ref</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$class</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'off'</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">bless</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">return</span> <span style="color: #0000ff;">$this</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># liga as lâmpadas</span>
	<span style="color: #000000; font-weight: bold;">sub</span> on <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'off'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Turning the Lights [ON]<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
			<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'on'</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># desliga as lâmpadas</span>
	<span style="color: #000000; font-weight: bold;">sub</span> off <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'on'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'off'</span><span style="color: #339933;">;</span>
			<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Turning the Lights [OFF]<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;"># classe representando uma máquina de pipoca</span>
	<span style="color: #000066;">package</span> PopcornMachine<span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;"># construtor</span>
	<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$class</span> <span style="color: #339933;">=</span> <span style="color: #000066;">ref</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$class</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'off'</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">bless</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">return</span> <span style="color: #0000ff;">$this</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># liga a máquina</span>
	<span style="color: #000000; font-weight: bold;">sub</span> on <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'off'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'on'</span><span style="color: #339933;">;</span>
			<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Turning the Popcorn Machine [ON]<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># estoura as pipocas</span>
	<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000066;">pop</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'on'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Poping the corns ;P<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># desliga a máquina</span>
	<span style="color: #000000; font-weight: bold;">sub</span> off <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">eq</span> <span style="color: #ff0000;">'on'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>state<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'off'</span><span style="color: #339933;">;</span>
			<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Turning the Popcorn Machine [OFF]<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>A <strong>orientação a objetos</strong> no <em>perl</em> é meio sinistra. Existem diversas formas de se programar orientado a objetos no perl, eu escolhi esta pois parece mais simples e fácil. Bom, essas são as classes utilizadas:</p>
<ul>
<li>Amplifier</li>
<li>DVD</li>
<li>Projector</li>
<li>Lights</li>
<li>PopcornMachine</li>
</ul>
<p>Bom, cada vez que um filme inicia ou termina no cinema, várias operações são repetidas sempre. Alguém já viu cinema com as luzes acesas? Bem, sempre se desliga as luzes. Então observe a classe abaixo que representa o <strong>Facade</strong>.</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;"># classe representando o cinema</span>
	<span style="color: #000066;">package</span> CineFacade<span style="color: #339933;">;</span>
	<span style="color: #666666; font-style: italic;"># construtor</span>
	<span style="color: #000000; font-weight: bold;">sub</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$class</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$class</span> <span style="color: #339933;">=</span> <span style="color: #000066;">ref</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$class</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #0000ff;">$class</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>amplifier<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span> <span style="color: #339933;">||</span> <span style="color: #000066;">undef</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>dvd<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span> <span style="color: #339933;">||</span> <span style="color: #000066;">undef</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>projector<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span> <span style="color: #339933;">||</span> <span style="color: #000066;">undef</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>lights<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span> <span style="color: #339933;">||</span> <span style="color: #000066;">undef</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>popcornMachine<span style="color: #009900;">&#125;</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span> <span style="color: #339933;">||</span> <span style="color: #000066;">undef</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">bless</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$this</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000066;">return</span> <span style="color: #0000ff;">$this</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># começa a ver o filme</span>
	<span style="color: #000000; font-weight: bold;">sub</span> watchMovie <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$movie</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;"># Popcorn machine</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>popcornMachine<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">on</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>popcornMachine<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">pop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;"># Home lights</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>lights<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">off</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;"># Projector</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>projector<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">on</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>projector<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">videoChannel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;"># Amplifier</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>amplifier<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">on</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>amplifier<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">setVolume</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #666666; font-style: italic;"># DVD</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>dvd<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">on</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>dvd<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">play</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$movie</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #666666; font-style: italic;"># termina de ver o filme</span>
	<span style="color: #000000; font-weight: bold;">sub</span> endMovie <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">my</span> <span style="color: #0000ff;">$this</span> <span style="color: #339933;">=</span> <span style="color: #000066;">shift</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>popcornMachine<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">off</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>lights<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">on</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>projector<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">off</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>amplifier<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">off</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>dvd<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">stop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>dvd<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">eject</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #009900;">&#123;</span>dvd<span style="color: #009900;">&#125;</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">off</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Observem o método <em>watchMovie</em> e <em>endMovie</em>. Eles chamam operações comum a todas as seções do cinema.<br />
Aqui vai  o exemplo de uso do facade no meio da aplicação:</p>

<div class="wp_syntax"><div class="code"><pre class="perl" style="font-family:monospace;"><span style="color: #009900;">&#123;</span>
	<span style="color: #666666; font-style: italic;"># Exemplo de uso</span>
	<span style="color: #0000ff;">$cine</span> <span style="color: #339933;">=</span> CineFacade<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span>
			Amplifier<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
			Dvd<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
			Projector<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
			Lights<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
			PopcornMachine<span style="color: #339933;">-&gt;</span><span style="color: #006600;">new</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Movie Session started: <span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #0000ff;">$cine</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">watchMovie</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'Titanic'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066;">print</span> <span style="color: #ff0000;">&quot;Movie Session ended: <span style="color: #000099; font-weight: bold;">\n</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #0000ff;">$cine</span><span style="color: #339933;">-&gt;</span><span style="color: #006600;">endMovie</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>O <em>output</em> é mais ou menos assim:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Movie Session started: 
&nbsp;
Turning the Popcorn Machine [ON]
Poping the corns ;P
Turning the Project [ON]
Setting Video Channel
Turning the Amplifier [ON]
Turning the Amplifiers volume to 100%
Turning the DVD Player [ON]
Playing the movie Titanic
&nbsp;
Movie Session ended: 
&nbsp;
Turning the Popcorn Machine [OFF]
Turning the Lights [ON]
Turning the Project [OFF]
Turning the Amplifier [OFF]
Stoping the movie Titanic
Ejecting the DVD</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/288/facade-pattern-com-perl-orientado-a-objetos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usando Screen e Vim para Pair Programming remoto</title>
		<link>http://gustavodutra.com/post/276/usando-screen-e-vim-para-pair-programming-remoto/</link>
		<comments>http://gustavodutra.com/post/276/usando-screen-e-vim-para-pair-programming-remoto/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 22:09:59 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[engenharia de software]]></category>
		<category><![CDATA[extreme programming]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[open-source]]></category>
		<category><![CDATA[pair programming]]></category>
		<category><![CDATA[screen]]></category>
		<category><![CDATA[skype]]></category>
		<category><![CDATA[ssh]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[xp]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=276</guid>
		<description><![CDATA[Bem, é notável o crescimento das metodologias ágeis de desenvolvimento de software. Uma das práticas que me agrada muito, é a programação em pares (pair programming). É bem perceptível, a um longo prazo, a diferença que faz essa prática. Navegando pela internet, como um marujo sem rumo, encontrei um post falando sobre Remote Pair Programming. [...]]]></description>
			<content:encoded><![CDATA[<p>Bem, é notável o crescimento das <strong>metodologias ágeis de desenvolvimento de software</strong>. Uma das práticas que me agrada muito, é a programação em pares (<em>pair programming</em>). É bem perceptível, a um longo prazo, a diferença que faz essa prática. Navegando pela internet, como um marujo sem rumo, encontrei um post falando sobre <em>Remote Pair Programming</em>. Parece meio estranho, porque o XP (<a rel="nofollow" href="http://www.extremeprogramming.org/">eXtreme Programming</a>) faz alusão a uma dupla programar em um único computador, com um único teclado e um único mouse.<br />
<span id="more-276"></span><br />
Então, vamos tentar simular este ambiente utilizando 4 ferramentas simples:</p>
<ul>
<li>screen</li>
<li>ssh</li>
<li>vim</li>
<li>skype</li>
</ul>
<p>Destas, só o <em>skype</em> não é <em>open-source</em>. Mas é interessante manter uma conversa verbal, pois conversas escritas podem desviar o foco da programação, que é bem mais rápida e precisa do que a escrita, que pode deixar brechas para má interpretações. A conversa verbal consegue interromper o programador ao mesmo tempo em que escreve, corrigindo-o ou questionando-o.</p>
<p>Conectados no skype, basta decidir em qual máquina será o desenvolvimento. Esta, por sua vez, terá que ter um servidor <strong>ssh</strong>. Ela será o <em>host</em> da programação. Será necessário, também, nesta máquina, ter instalado o <em>screen</em>, que é um programa que possibilita criar &#8217;sessões&#8217; no terminal.</p>
<h2>Host</h2>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">screen</span> <span style="color: #660033;">-S</span> PairProgramming</pre></div></div>

<p>Parece que nada mudou, mas você está numa sessão do <strong>screen</strong> chamada <em>PairProgramming</em>.</p>
<p>Precione CTRL+a e digite:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">:multiuser on</pre></div></div>

<p>Pressione CTRL+a novamente e digite:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">:acladd usuarioclient</pre></div></div>

<p>Tudo que você ver nesta sessão, será visto pelo outro usuário (<em>usuarioclient</em>) que se conectará nela.</p>
<p>Então, abra o <strong>vim</strong>, pois será necessário um edito de textos de verdade <img src='http://gustavodutra.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> , e se divirta:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">vim</span> <span style="color: #000000; font-weight: bold;">/</span>caminho<span style="color: #000000; font-weight: bold;">/</span>arquivo</pre></div></div>

<h2>Client</h2>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> usuarioclient<span style="color: #000000; font-weight: bold;">@</span>host
<span style="color: #c20cb9; font-weight: bold;">screen</span> <span style="color: #660033;">-x</span> usuariohost<span style="color: #000000; font-weight: bold;">/</span>PairProgramming</pre></div></div>

<p>Pronto! Agora você está acessando a mesma seção! Tudo que o <em>usuáriohost</em> fizer, o <em>usuárioclient</em> enxergará e <strong>vice-versa</strong>.</p>
<p>Agora, basta descutir a tarefa via Skype e programar. As atualizações são em tempo real, ou seja, aparecem ao mesmo tempo que são escritos, digo&#8230; depende da conexão, mas não é um grande problema.</p>
<p>Caso seja necessário que o usuarioclient não possa modificar o código, apenas assitir e dar pitacos, o usuáriohost deve pressionar CTRL+A e digitar:</p>
<pre>:aclchg usuarioclient -w #</pre>
<p>Eu ainda vou programar assim, depois digo a experiência.</p>
<h2>Referências</h2>
<ul>
<li><a rel="nofollow" href="http://www.linux.com/archive/feature/56443">Linux.com</a></li>
<li><a rel="nofollow" href="http://haruska.com/2009/09/29/remote-pair-programming/">Jason Haruska</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/276/usando-screen-e-vim-para-pair-programming-remoto/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
