<?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>Eliezer Rodrigues &#187; Linguagens</title>
	<atom:link href="http://www.eliezer.com.br/post/category/linguagens/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.eliezer.com.br</link>
	<description>Desenvolvimento de software, linguagens de programação, artigos, utils, scrum, testes, linux e tecnologia de um modo geral</description>
	<lastBuildDate>Tue, 06 Dec 2011 02:12:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Busca de CEP no seu form apenas com Javascript</title>
		<link>http://www.eliezer.com.br/post/busca-de-cep-no-seu-form-apenas-com-javascript/</link>
		<comments>http://www.eliezer.com.br/post/busca-de-cep-no-seu-form-apenas-com-javascript/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 02:12:35 +0000</pubDate>
		<dc:creator>eliezer</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[cep]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.eliezer.com.br/?p=228</guid>
		<description><![CDATA[Busca de CEP, sempre foi um grande problema em grandes empresas, mas para pequenos projetos nem se fala. O objetivo não é ter 100% de certeza para busca de cep, mas sim uma alternativa via internet sem grandes complicações. Vantagens É melhor ter uma busca de 90% dos casos do que nada Sem custo com [...]]]></description>
			<content:encoded><![CDATA[<p>Busca de CEP, sempre foi um grande problema em grandes empresas, mas para pequenos projetos nem se fala. O objetivo não é ter 100% de certeza para busca de cep, mas sim uma alternativa via internet sem grandes complicações.</p>
<p>Vantagens</p>
<ul>
<li>É melhor ter uma busca de 90% dos casos do que nada</li>
<li>Sem custo com base dos correios</li>
<li>Sem custo de infraestrutura</li>
<li>Muito, mas muito simples utilizar o código</li>
</ul>
<p>Desvantagens:</p>
<ul>
<li>Busca de cep depende de internet</li>
<li>Depende do site <a href="http://www.republicavirtual.com.br">www.republicavirtual.com.br</a></li>
<li>Atualização depende do site</li>
</ul>
<div>Ao que interessa, como fazer.</div>
<div>Uma mistura de jquery, plugin de mascara, html é possível ter uma busca de CEP no seu formulário. A magia está na unica possibilidade de se fazer um cross-request em um browser com dominios diferentes, getScript do jquery. Ele vai fazer uma requisição do tipo GET em um script. Pensando nisso e utilizando o próprio exemplo do <a href="http://http://www.republicavirtual.com.br/cep/exemplos.php">site</a> republica virtual, é possível fazer a busca online de CEP.</div>
<div>O Script:</div>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> findCEP<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>$.<span style="color: #660066;">trim</span><span style="color: #009900;">&#40;</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#zipcode&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        $.<span style="color: #660066;">getScript</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;http://cep.republicavirtual.com.br/web_cep.php?formato=javascript&amp;amp;cep=&quot;</span><span style="color: #339933;">+</span>$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#zipcode&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>resultadoCEP<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;resultado&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#street&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>unescape<span style="color: #009900;">&#40;</span>resultadoCEP<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;tipo_logradouro&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #3366CC;">&quot; &quot;</span><span style="color: #339933;">+</span>unescape<span style="color: #009900;">&#40;</span>resultadoCEP<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;logradouro&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#district&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>unescape<span style="color: #009900;">&#40;</span>resultadoCEP<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;bairro&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#city&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>unescape<span style="color: #009900;">&#40;</span>resultadoCEP<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;cidade&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#state&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">val</span><span style="color: #009900;">&#40;</span>unescape<span style="color: #009900;">&#40;</span>resultadoCEP<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;uf&quot;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#number&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #000066;">focus</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; font-weight: bold;">else</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Endereço não encontrado para o cep &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</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>

<div>Teste a busca:</div>
<div><iframe src="http://eliezer.com.br/demo/cep-javascript/index.html" frameborder="0" scrolling="no" width="100%" height="300px"></iframe></div>
<p>Download dos fontes: <a href="http://eliezer.com.br/files/cep-javascript.zip" target="_blank">http://eliezer.com.br/files/cep-javascript.zip</a></p>
<p>Saiba mais sobre a base, exemplos no site: <a href="http://www.republicavirtual.com.br/cep/">http://www.republicavirtual.com.br/cep/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.eliezer.com.br/post/busca-de-cep-no-seu-form-apenas-com-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilitário de acesso a maquinas remotas com ssh &#8211; fast-remote</title>
		<link>http://www.eliezer.com.br/post/utilitario-acesso-a-maquinas-remotas-com-ssh-fast-remote/</link>
		<comments>http://www.eliezer.com.br/post/utilitario-acesso-a-maquinas-remotas-com-ssh-fast-remote/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 04:59:26 +0000</pubDate>
		<dc:creator>eliezer</dc:creator>
				<category><![CDATA[Shell Script]]></category>
		<category><![CDATA[fast-remote]]></category>

		<guid isPermaLink="false">http://www.eliezer.com.br/?p=170</guid>
		<description><![CDATA[Bom, quem nunca esqueceu o IP da maquina que tem o servidor de desenvolvimento da sua aplicação? você até lembra que nome dela era &#8216;dev&#8217; alguma coisa&#8230;.. e que o ip começava com 192.168.4. mas não tem certeza. Essa história passa a ser muito comum quando: Quantidade de projetos que você trabalha vai aumentando Complexidade [...]]]></description>
			<content:encoded><![CDATA[<p>Bom, quem nunca esqueceu o IP da maquina que tem o servidor de desenvolvimento da sua aplicação? você até lembra que nome dela era &#8216;dev&#8217; alguma coisa&#8230;.. e que o ip começava com 192.168.4. mas não tem certeza.</p>
<p>Essa história passa a ser muito comum quando:</p>
<ul>
<li>Quantidade de projetos que você trabalha vai aumentando</li>
<li>Complexidade de serviços utilizados pela sua aplicação aumenta</li>
<li>Quantidade de ambientes aumenta (desenvolvimento, teste, homologação, produção)</li>
</ul>
<p>Como sou desenvolvedor, tenho que lembrar de um monte de coisas, não vou me dar ao trabalho de lembrar mais 30 IPs diferentes para trabalhar. Surgindo assim o &#8216;fast-remote&#8217;. Um simples script shell criado para te &#8216;lembrar&#8217; dos nomes e ips das suas maquinas.</p>
<p>Ele está hospedado no github em: <a href="https://github.com/eliezer/fast-remote">https://github.com/eliezer/fast-remote</a></p>
<p>Como instalar?</p>
<p>Faça um clone do repositório no local que preferir instalar.</p>
<pre>[eliezer@vader ~]$ <strong>cd /opt/</strong>
[eliezer@vader opt]$ <strong>git clone git://github.com/eliezer/fast-remote.git</strong>
Cloning into fast-remote...
remote: Counting objects: 15, done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 15 (delta 3), reused 0 (delta 0)
Receiving objects: 100% (15/15), done.
Resolving deltas: 100% (3/3), done.
</pre>
<p>Execute o instalador</p>
<pre>[eliezer@vader opt]$ <strong>cd fast-remote/</strong>
[eliezer@vader fast-remote]$ <strong>./fast-remote install</strong>
Installation successfully
Run command: 'source /home/eliezer/.bashrc' or logout/login
usage: fast-remote --help
</pre>
<p>Recarregue o bashrc (linux) ou bash_profile (mac)</p>
<p>Ajuda:</p>
<pre>[eliezer@vader opt]$<strong> fast-remote --help</strong>
Usage:

'fast-remote install' to install
'fast-remote set_user' to define default user connect
'fast-remote' to connect ssh (ssh SERVER)
'fast-remote /home/user/file.tar' to transfer file scp (scp file SERVER:/HOME_DIR)
</pre>
<p>Além do acesso ssh o fast-remote também faz transferência de arquivos utilizando scp.</p>
<p>Executando:</p>
<pre>[eliezer@vader ~]$<strong> fast-remote</strong>
</pre>
<p><a href="http://www.eliezer.com.br/wp-content/uploads/2011/01/fast-remote.jpg"><img class="alignnone size-full wp-image-188" title="fast-remote" src="http://www.eliezer.com.br/wp-content/uploads/2011/01/fast-remote.jpg" alt="" width="495" height="94" /></a></p>
<p>Agora é só configurar seu servidores favoritos no arquivo server.properties e utilizar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eliezer.com.br/post/utilitario-acesso-a-maquinas-remotas-com-ssh-fast-remote/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Nova versão 0.5 do Inotes Contacts para Gmail</title>
		<link>http://www.eliezer.com.br/post/nova-versao-0-5-do-inotes-contacts-para-gmail/</link>
		<comments>http://www.eliezer.com.br/post/nova-versao-0-5-do-inotes-contacts-para-gmail/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 07:32:05 +0000</pubDate>
		<dc:creator>eliezer</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[inotes]]></category>

		<guid isPermaLink="false">http://www.eliezer.com.br/?p=133</guid>
		<description><![CDATA[Nova versão do Inotes Contacts disponível aqui. Essa versão corrige o bug da API gmail-greasemonkey. Detalhes sobre o problema em: http://code.google.com/p/gmail-greasemonkey/issues/detail?id=39 A solução foi implementar um listener que monitora a pagina no gmail e inclui o botão do Inotes. Para que não conhece tem um post explicando o script.]]></description>
			<content:encoded><![CDATA[<p>Nova versão do Inotes Contacts disponível <a href="http://userscripts.org/scripts/show/59897">aqui</a>. Essa versão corrige o bug da API gmail-greasemonkey. Detalhes sobre o problema em: <a href="http://code.google.com/p/gmail-greasemonkey/issues/detail?id=39">http://code.google.com/p/gmail-greasemonkey/issues/detail?id=39</a></p>
<p>A solução foi implementar um listener que monitora a pagina no gmail e inclui o botão do Inotes.</p>
<p>Para que não conhece tem um <a href="http://www.eliezer.com.br/post/ibm-contatos-inotes-no-gmail/">post</a> explicando o script. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.eliezer.com.br/post/nova-versao-0-5-do-inotes-contacts-para-gmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integração de contatos IBM Inotes no gmail</title>
		<link>http://www.eliezer.com.br/post/ibm-contatos-inotes-no-gmail/</link>
		<comments>http://www.eliezer.com.br/post/ibm-contatos-inotes-no-gmail/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 23:49:42 +0000</pubDate>
		<dc:creator>eliezer</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[greasemonkey]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[inotes]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xpath]]></category>

		<guid isPermaLink="false">http://www.eliezer.com.br/?p=98</guid>
		<description><![CDATA[Não estou querendo que todos abandonem o Inotes da IBM, pois se trata de uma ferramenta de e-mail muito boa. Mas como todo software tem limitações, e a principal delas que me atrapalha muito é o espaço. Tem outro fator que ajuda, centralizar todos os seus e-mails em um único lugar. Então uma alternativa é [...]]]></description>
			<content:encoded><![CDATA[<p>Não estou querendo que todos abandonem o Inotes da IBM, pois se trata de uma ferramenta de e-mail muito boa. Mas como todo software tem limitações, e a principal delas que me atrapalha muito é o espaço. Tem outro fator que ajuda, centralizar todos os seus e-mails em um único lugar. </p>
<p>Então uma alternativa é colocar a sua conta do gmail para baixar os e-mails do inotes via pop3. Mas essa solução traz outro problema, os contatos do seu domínio do inotes não ficam mais acessíveis.</p>
<p>Para corrigir isso trabalhei em um script Greasemonkey que resolve meu problema. <img src='http://www.eliezer.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Espero que seja útil para mais pessoas também.</p>
<p><strong>Como funciona:</strong></p>
<p>Uma combinação de tecnologia deu origem ao script.</p>
<p>Firefox 3.5 + gmail + inotes + Greasymonkey + javascript + gmonkeyAPI + GM_xmlhttpRequest + xpath + dedicação = &#8220;IBM Inotes Contacts in Gmail&#8221;</p>
<p>O Script está hospedado no <a href="http://userscripts.org/">userscripts.org</a> o maior repositório de scripts existente.</p>
<p><strong>Instalação:</strong></p>
<ul>
<li>Navegador: <a href="http://pt-br.www.mozilla.com/pt-BR/firefox/">Firefox3.5</a></li>
<li>Complemento: <a href="https://addons.mozilla.org/pt-BR/firefox/addon/748">Greasemonkey</a></li>
<li>Script: <a href="http://userscripts.org/scripts/show/59897">IBM Inotes Contacts in Gmail</a></li>
</ul>
<p>Depois de intalado, defina as configurações da sua conta no script:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">InotesContacts.<span style="color: #660066;">config</span>.<span style="color: #660066;">domain</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//Define your domain here (ex.: inotes.yourdomain.com)</span>
InotesContacts.<span style="color: #660066;">config</span>.<span style="color: #660066;">user</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">;</span>   <span style="color: #006600; font-style: italic;">// Set your username</span>
InotesContacts.<span style="color: #660066;">config</span>.<span style="color: #660066;">password</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//Set your password</span></pre></td></tr></table></div>

<p>Veja o screeanshot:</p>
<p><img src="http://www.eliezer.com.br/wp-content/uploads/2009/10/inotes_contacts.png" alt="inotes_contacts" title="inotes_contacts" width="617" height="155" class="alignnone size-full wp-image-109" /></p>
<p>Qualquer problema, sugestão, melhoria, agradecimento acesse a pagina do script <a href="http://userscripts.org/scripts/show/59897">aqui</a></p>
<p>Para que gosta do código, o fonte está <a href="http://userscripts.org/scripts/review/59897">aqui.</a> <img src='http://www.eliezer.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://www.eliezer.com.br/post/ibm-contatos-inotes-no-gmail/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Parse de XML string com xpath em Javascript</title>
		<link>http://www.eliezer.com.br/post/parse-de-xml-string-com-xpath-em-javascript/</link>
		<comments>http://www.eliezer.com.br/post/parse-de-xml-string-com-xpath-em-javascript/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 16:58:27 +0000</pubDate>
		<dc:creator>eliezer</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xpath]]></category>

		<guid isPermaLink="false">http://www.eliezer.com.br/?p=93</guid>
		<description><![CDATA[XML simples de clientes com tipo de pessoa. Nesse exemplo vou usar xpath para pegar apenas os clientes do tipo &#8216;F&#8217; 1 2 3 4 5 6 7 8 9 10 11 12 13 &#60;xml&#62; &#60;clientes&#62; &#60;cliente id=&#34;1&#34; tipoPessoa=&#34;F&#34;&#62; &#60;nome&#62;Eliezer Rodrigues&#60;/nome&#62; &#60;/cliente&#62; &#60;cliente id=&#34;2&#34; tipoPessoa=&#34;J&#34;&#62; &#60;nome&#62;Empresa Abz teste&#60;/nome&#62; &#60;/cliente&#62; &#60;cliente id=&#34;3&#34; tipoPessoa=&#34;F&#34;&#62; &#60;nome&#62;Maria da Silva&#60;/nome&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>XML simples de clientes com tipo de pessoa. Nesse exemplo vou usar xpath para pegar apenas os clientes do tipo &#8216;F&#8217;</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;xml<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;clientes<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;cliente</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;1&quot;</span> <span style="color: #000066;">tipoPessoa</span>=<span style="color: #ff0000;">&quot;F&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;nome<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Eliezer Rodrigues<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/nome<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/cliente<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;cliente</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;2&quot;</span> <span style="color: #000066;">tipoPessoa</span>=<span style="color: #ff0000;">&quot;J&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;nome<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Empresa Abz teste<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/nome<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/cliente<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;cliente</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;3&quot;</span> <span style="color: #000066;">tipoPessoa</span>=<span style="color: #ff0000;">&quot;F&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;nome<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Maria da Silva<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/nome<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/cliente<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/clientes<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/xml<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>Codigo completo, para fazer o teste, cole no firefug e rode:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> xmlString <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;&lt;xml&gt;&lt;clientes&gt;&lt;cliente id='1' tipoPessoa='F'&gt;&lt;nome&gt;Eliezer Rodrigues&lt;/nome&gt;&lt;/cliente&gt;&lt;cliente id='2' tipoPessoa='J'&gt;&lt;nome&gt;Empresa Abz teste&lt;/nome&gt;&lt;/cliente&gt;&lt;cliente id='3' tipoPessoa='F'&gt;&lt;nome&gt;Maria da Silva&lt;/nome&gt;&lt;/cliente&gt;&lt;/clientes&gt;&lt;/xml&gt;&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> parser<span style="color: #339933;">=</span><span style="color: #003366; font-weight: bold;">new</span> DOMParser<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> doc <span style="color: #339933;">=</span> parser.<span style="color: #660066;">parseFromString</span><span style="color: #009900;">&#40;</span>xmlString<span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;text/xml&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> xpath<span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;//clientes/cliente[@tipoPessoa = 'F']&quot;</span><span style="color: #339933;">;</span>
<span style="color: #003366; font-weight: bold;">var</span> xmlObject <span style="color: #339933;">=</span> doc.<span style="color: #660066;">evaluate</span><span style="color: #009900;">&#40;</span> xpath<span style="color: #339933;">,</span> doc<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span> XPathResult.<span style="color: #660066;">ORDERED_NODE_SNAPSHOT_TYPE</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">null</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span> <span style="color: #009900;">&#40;</span>entry <span style="color: #339933;">=</span> xmlObject.<span style="color: #660066;">snapshotItem</span><span style="color: #009900;">&#40;</span>i<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span><span style="color: #003366; font-weight: bold;">null</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> 
    <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Nome: &quot;</span><span style="color: #339933;">+</span>entry.<span style="color: #660066;">firstElementChild</span>.<span style="color: #660066;">textContent</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    i<span style="color: #339933;">++;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>legal neh?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eliezer.com.br/post/parse-de-xml-string-com-xpath-em-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lendo arquivo de propriedades com Shell Script &#8211; IFS</title>
		<link>http://www.eliezer.com.br/post/lendo-arquivo-de-propriedades-com-shell-script-ifs/</link>
		<comments>http://www.eliezer.com.br/post/lendo-arquivo-de-propriedades-com-shell-script-ifs/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 17:30:42 +0000</pubDate>
		<dc:creator>eliezer</dc:creator>
				<category><![CDATA[Shell Script]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[boas praticas]]></category>

		<guid isPermaLink="false">http://www.eliezer.com.br/?p=87</guid>
		<description><![CDATA[Bom, pode parecer simples, mas quando a velocidade é o seu primeiro quesito, isso pode mudar um pouco. Mas espera aí, é apenas ler um arquivo e fazer um split pegar a chave e o valor. Simples assim mesmo, mas quando o assunto é shell script um simples split não é tão simples. A primera [...]]]></description>
			<content:encoded><![CDATA[<p>Bom, pode parecer simples, mas quando a velocidade é o seu primeiro quesito, isso pode mudar um pouco. Mas espera aí, é apenas ler um arquivo e fazer um split pegar a chave e o valor. Simples assim mesmo, mas quando o assunto é shell script um simples split não é tão simples.</p>
<p>A primera forma de se fazer seria fazer com um cut, veja:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;chave=valor&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span> = <span style="color: #660033;">-f</span> <span style="color: #000000;">1</span></pre></td></tr></table></div>

<p>Legal, funciona, mas quando seu arquivo de properties é grande, ou que esse script rode toda hora, a velocidade do um simples cut que funciona passa a ser um problema.</p>
<p>Uma outra forma de se fazer isso é usar o IFS – Internal Field Separator para fazer isso de uma forma decente.</p>
<p>Então, vamos lá. Pimeiro meu arquivo de propriedades:</p>
<p><strong>sample.properties</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="properties" style="font-family:monospace;"><span style="color: #000080; font-weight:bold;">caminho</span><span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;">/tmp</span>
<span style="color: #000080; font-weight:bold;">version</span><span style="color: #000000;">=</span><span style="color: #008000; font-weight:bold;">1.0</span></pre></td></tr></table></div>

<p>Fiz um script simples para representar o problema. Função rox com IFS e função sux com CUT.</p>
<p><strong>sample.sh</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
rox<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>
	<span style="color: #007800;">IFS_OLD</span>=<span style="color: #007800;">$IFS</span>
	<span style="color: #007800;">IFS</span>=<span style="color: #ff0000;">&quot;=&quot;</span>
	<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> key value
	<span style="color: #000000; font-weight: bold;">do</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;key = <span style="color: #007800;">$key</span>&quot;</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Value = <span style="color: #007800;">$value</span>&quot;</span> 
	<span style="color: #000000; font-weight: bold;">done</span> <span style="color: #000000; font-weight: bold;">&lt;</span> sample.properties 
	<span style="color: #007800;">IFS</span>=<span style="color: #007800;">$IFS_OLD</span>
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
sux<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">while</span> <span style="color: #c20cb9; font-weight: bold;">read</span> line
	<span style="color: #000000; font-weight: bold;">do</span>
		<span style="color: #007800;">key</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$line</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span> = <span style="color: #660033;">-f</span> <span style="color: #000000;">1</span><span style="color: #000000; font-weight: bold;">`</span>
		<span style="color: #007800;">value</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$line</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">cut</span> <span style="color: #660033;">-d</span> = <span style="color: #660033;">-f</span> <span style="color: #000000;">2</span><span style="color: #000000; font-weight: bold;">`</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;key = <span style="color: #007800;">$key</span>&quot;</span>
		<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Value = <span style="color: #007800;">$value</span>&quot;</span>
	<span style="color: #000000; font-weight: bold;">done</span> <span style="color: #000000; font-weight: bold;">&lt;</span> sample.properties 
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
<span style="color: #c20cb9; font-weight: bold;">clear</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;rox--------------------------------------&quot;</span>
<span style="color: #000000; font-weight: bold;">time</span> rox
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;sux--------------------------------------&quot;</span>
<span style="color: #000000; font-weight: bold;">time</span> sux</pre></td></tr></table></div>

<p>Veja o resultado:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">rox--------------------------------------
key = caminho
Value = <span style="color: #000000; font-weight: bold;">/</span>tmp
key = version
Value = <span style="color: #000000;">1.0</span>
&nbsp;
real	0m0.001s
user	0m0.000s
sys	0m0.000s
&nbsp;
sux--------------------------------------
key = caminho
Value = <span style="color: #000000; font-weight: bold;">/</span>tmp
key = version
Value = <span style="color: #000000;">1.0</span>
&nbsp;
real	0m0.024s
user	0m0.007s
sys	0m0.019s</pre></td></tr></table></div>

<p>Notem a velocidade do script. Não é ser xiita, mas sim fazer da forma correta. <img src='http://www.eliezer.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.eliezer.com.br/post/lendo-arquivo-de-propriedades-com-shell-script-ifs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Template Engine em Python &#8211; Cheetah</title>
		<link>http://www.eliezer.com.br/post/template-engine-em-python-cheetah/</link>
		<comments>http://www.eliezer.com.br/post/template-engine-em-python-cheetah/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 04:38:32 +0000</pubDate>
		<dc:creator>eliezer</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[boas praticas]]></category>
		<category><![CDATA[cheetah]]></category>
		<category><![CDATA[legal]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://www.eliezer.com.br/?p=76</guid>
		<description><![CDATA[Um modulo simples para python, cheetah. Ele tem tudo que programadores python gosta, simples, bem documentado, comunidade ativa, rápido, possui um mecanismo de cache entre outras funcionalidades. Onde baixar? http://www.cheetahtemplate.org Instalando 1 python setup.py install Criando um objeto simples Cliente 1 2 3 4 class Cliente&#40;&#41;: def __init__&#40;self, nome, email&#41;: self.nome = nome self.email = [...]]]></description>
			<content:encoded><![CDATA[<p>Um modulo simples para python, cheetah. Ele tem tudo que programadores python gosta, simples, bem documentado, comunidade ativa, rápido, possui um mecanismo de cache entre outras funcionalidades.</p>
<li>Onde baixar?</li>
<p><a href="http://www.cheetahtemplate.org">http://www.cheetahtemplate.org</a></p>
<li>Instalando</li>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">python setup.<span style="color: black;">py</span> install</pre></td></tr></table></div>

<li>Criando um objeto simples Cliente</li>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">class</span> Cliente<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
	<span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, nome, <span style="color: #dc143c;">email</span><span style="color: black;">&#41;</span>:
		<span style="color: #008000;">self</span>.<span style="color: black;">nome</span> = nome
		<span style="color: #008000;">self</span>.<span style="color: #dc143c;">email</span> = <span style="color: #dc143c;">email</span></pre></td></tr></table></div>

<li>Criando um template</li>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>$title<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
	#for $cliente in $clientes        
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">b</span>&gt;</span>$cliente.nome<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">b</span>&gt;</span>
		(<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;mailto:$cliente.email&quot;</span>&gt;</span>$cliente.email<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>)
		<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
	#end for
	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></td></tr></table></div>

<li>Executando</li>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> Cheetah.<span style="color: black;">Template</span> <span style="color: #ff7700;font-weight:bold;">import</span> Template
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">&quot;__main__&quot;</span>:
&nbsp;
	clientes = <span style="color: black;">&#91;</span>Cliente<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Eliezer Rodrigues&quot;</span>, <span style="color: #483d8b;">&quot;eliezer@teste.net&quot;</span><span style="color: black;">&#41;</span>, 
                       Cliente<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Maria&quot;</span>, <span style="color: #483d8b;">&quot;maria@teste.net&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span>
&nbsp;
	template = Template<span style="color: black;">&#40;</span><span style="color: #008000;">file</span>=<span style="color: #483d8b;">&quot;page.tpl&quot;</span><span style="color: black;">&#41;</span>
	template.<span style="color: black;">title</span> = <span style="color: #483d8b;">&quot;Todos os clientes&quot;</span>
	template.<span style="color: black;">clientes</span> = clientes
&nbsp;
	<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #008000;">str</span><span style="color: black;">&#40;</span>template<span style="color: black;">&#41;</span></pre></td></tr></table></div>

<li>Resultado:</li>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>Todos os clientes<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
                <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
                <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">b</span>&gt;</span>Eliezer Rodrigues<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">b</span>&gt;</span>
                (<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;mailto:eliezer@teste.net&quot;</span>&gt;</span>eliezer@teste.net<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>)
                <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
                <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
                <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">b</span>&gt;</span>Maria<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">b</span>&gt;</span>
                (<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">a</span> <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;mailto:maria@teste.net&quot;</span>&gt;</span>maria@teste.net<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">a</span>&gt;</span>)
                <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span></pre></td></tr></table></div>

<p>Curtiu?? para saber mais sobre o projeto entre no<a href="http://www.cheetahtemplate.org/docs/users_guide_html/"> guia do usuário</a> e confira tudo sobre o cheetah.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eliezer.com.br/post/template-engine-em-python-cheetah/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sabe aquele monte de &#8220;if&#8221; e &#8220;else&#8221; no código? Limpando tudo em Java.</title>
		<link>http://www.eliezer.com.br/post/sabe-aquele-monte-de-if-e-else-no-codigo-limpando-tudo-em-java/</link>
		<comments>http://www.eliezer.com.br/post/sabe-aquele-monte-de-if-e-else-no-codigo-limpando-tudo-em-java/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 04:05:28 +0000</pubDate>
		<dc:creator>eliezer</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[boas praticas]]></category>
		<category><![CDATA[padrões de projetos]]></category>
		<category><![CDATA[strategy]]></category>

		<guid isPermaLink="false">http://www.eliezer.com.br/?p=37</guid>
		<description><![CDATA[Uma das coisas que considero mais ruins de se ler em um código são os malditos ifs encadeados. Veja, não é fácil de se ler, não é confiável e bem mais propício a bug. Portando se tem muitos ifs, algo não está correto. Vou utilizar polimorfismo para implementar o padrão de projeto Strategy. Um fiz [...]]]></description>
			<content:encoded><![CDATA[<p>Uma das coisas que considero mais ruins de se ler em um código são os malditos ifs encadeados. Veja, não é fácil de se ler, não é confiável e bem mais propício a bug. Portando se tem muitos ifs, algo não está correto.</p>
<p>Vou utilizar polimorfismo para implementar o padrão de projeto Strategy.</p>
<p>Um fiz um caso simples apenas para exemplificar o estudo.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> StringUtils <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span>	REMOVE_ALL_SPACES	<span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;remove-all-spaces&quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #003399;">String</span>	FILTER_ONLY_NUMBERS	<span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;filter-only-numbers&quot;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span> format<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> action, <span style="color: #003399;">String</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>REMOVE_ALL_SPACES.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>action<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> value.<span style="color: #006633;">replaceAll</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>s&quot;</span>, <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>FILTER_ONLY_NUMBERS.<span style="color: #006633;">equals</span><span style="color: #009900;">&#40;</span>action<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> value.<span style="color: #006633;">replaceAll</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>D&quot;</span>, <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Bom não é tão feio, pq tb quem nunca viu algo pior que isso que atire a primeira pedra. <img src='http://www.eliezer.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Vamos fazer com que esse método format seja mais simples. No caso ele está com apenas duas comparações, mas lembre-se que  poderiam ser 18. <img src='http://www.eliezer.com.br/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Mas dá pra melhorar e muito utilizando Enum. Veja:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">enum</span> StringFormat <span style="color: #009900;">&#123;</span>
&nbsp;
	TRIM_SPACES<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		@Override
		<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> format<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> value.<span style="color: #006633;">replaceAll</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>s&quot;</span>, <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span>,
	ONLY_NUMBERS<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		@Override
		<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">String</span> format<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">return</span> value.<span style="color: #006633;">replaceAll</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\\</span>D&quot;</span>, <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #003399;">String</span> format<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> value<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>E agora o nosso objetivo final, remover os ifs e else do método format:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> StringUtils <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #003399;">String</span> format<span style="color: #009900;">&#40;</span>StringFormat action, <span style="color: #003399;">String</span> value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">return</span> action.<span style="color: #006633;">format</span><span style="color: #009900;">&#40;</span>value<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Legal né?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eliezer.com.br/post/sabe-aquele-monte-de-if-e-else-no-codigo-limpando-tudo-em-java/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Persistência em Python com módulo Shelve</title>
		<link>http://www.eliezer.com.br/post/persistencia-em-python-com-modulo-shelve/</link>
		<comments>http://www.eliezer.com.br/post/persistencia-em-python-com-modulo-shelve/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 06:41:53 +0000</pubDate>
		<dc:creator>eliezer</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[persistência]]></category>

		<guid isPermaLink="false">http://www.eliezer.com.br/?p=21</guid>
		<description><![CDATA[Uma das coisa que atualmente mais acho legal em programação é Python. É muito bem documentado, simples e rápido. Em um projeto open source que estou parcipando, o Peanut [Explico melhor em um outro post ], tive que persistir uma configuração do software, e com isso veio a possibilidade de utilizar o módulo shelve do [...]]]></description>
			<content:encoded><![CDATA[<p>Uma das coisa que atualmente mais acho legal em programação é Python. É muito bem documentado, simples e rápido. Em um projeto open source que estou parcipando, o Peanut [Explico melhor em um outro post <img src='http://www.eliezer.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ], tive que persistir uma configuração do software, e com isso veio a possibilidade de utilizar o módulo shelve do python.</p>
<p>O shelve foi criado para trabalhar com persistência de dicionários (dict) python em arquivo. Para operações simples, configuração, dados não muito grandes, é perfeito. Sua chave sempre deve ser uma string.</p>
<p>Como a maioria dos módulos em python, é tudo muito simples:</p>
<p><strong>Exemplo 1: Vamos salvar uma lista de e-mail em um arquivo</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">shelve</span>
emails = <span style="color: #dc143c;">shelve</span>.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'emails.db'</span><span style="color: black;">&#41;</span>
&nbsp;
emails<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;maria&quot;</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;exemplo@maria.com.br&quot;</span>
emails<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;joao&quot;</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">&quot;exemplo@joao.com.br&quot;</span>
&nbsp;
emails.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Recuperando os e-mails</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">shelve</span>
emails = <span style="color: #dc143c;">shelve</span>.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'emails.db'</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">print</span> emails<span style="color: black;">&#91;</span><span style="color: #483d8b;">&quot;maria&quot;</span><span style="color: black;">&#93;</span>
&nbsp;
emails.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p><br/><strong>Exemplo 2: Persistência de um objeto mais completo</strong></p>
<p>Criação de um objeto simples</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">class</span> Profile<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
   <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, name, <span style="color: #008000;">type</span>, username, password=<span style="color: #008000;">None</span>, auto_login=<span style="color: #483d8b;">'off'</span><span style="color: black;">&#41;</span>:
   <span style="color: #008000;">self</span>.<span style="color: black;">name</span> = name
   <span style="color: #008000;">self</span>.<span style="color: #008000;">type</span> = <span style="color: #008000;">type</span>
   <span style="color: #008000;">self</span>.<span style="color: black;">username</span> = username
   <span style="color: #008000;">self</span>.<span style="color: black;">password</span> = password
   <span style="color: #008000;">self</span>.<span style="color: black;">auto_login</span> = auto_login</pre></td></tr></table></div>

<p>Classe util para acesso a shelve</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">shelve</span>
<span style="color: #ff7700;font-weight:bold;">class</span> Db<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
    <span style="color: #008000;">self</span>.__db = <span style="color: #dc143c;">shelve</span>.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;profiles.db&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> close<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
    <span style="color: #008000;">self</span>.__db.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> add<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, <span style="color: #dc143c;">profile</span><span style="color: black;">&#41;</span>:
    <span style="color: #008000;">self</span>.__db<span style="color: black;">&#91;</span><span style="color: #dc143c;">profile</span>.<span style="color: black;">name</span><span style="color: black;">&#93;</span> = <span style="color: #dc143c;">profile</span><span style="color: #66cc66;">;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> size<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.__db<span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> find_all<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.__db.<span style="color: black;">values</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: #66cc66;">;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> get<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, key<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.__db<span style="color: black;">&#91;</span>key<span style="color: black;">&#93;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> get_first<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>.<span style="color: black;">get</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.__db.<span style="color: black;">keys</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Inserindo um perfil</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="python" style="font-family:monospace;">db = Db<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
db.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">profile</span> = Profile<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;maria&quot;</span>, <span style="color: #483d8b;">&quot;user&quot;</span>, <span style="color: #483d8b;">&quot;mariazinha&quot;</span>, <span style="color: #483d8b;">&quot;123&quot;</span><span style="color: black;">&#41;</span>
db.<span style="color: black;">add</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">profile</span><span style="color: black;">&#41;</span>
db.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.eliezer.com.br/post/persistencia-em-python-com-modulo-shelve/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

