<?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"
	>

<channel>
	<title>LeonardoEloy.com: Into the Source</title>
	<atom:link href="http://leonardoeloy.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://leonardoeloy.com</link>
	<description>Tecnologia Útil</description>
	<pubDate>Fri, 07 Nov 2008 20:56:37 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
	<language>en</language>
			<item>
		<title>Estendendo o Selenium: Criando um novo comando</title>
		<link>http://leonardoeloy.com/2008/11/07/estendendo-o-selenium-criando-um-novo-comando/</link>
		<comments>http://leonardoeloy.com/2008/11/07/estendendo-o-selenium-criando-um-novo-comando/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 19:25:06 +0000</pubDate>
		<dc:creator>Leonardo Eloy</dc:creator>
		
		<category><![CDATA[Selenium]]></category>

		<category><![CDATA[testes]]></category>

		<guid isPermaLink="false">http://leonardoeloy.com/?p=50</guid>
		<description><![CDATA[Estou fazendo uma API de testes para automatizar a homologação das aplicações web para empresa onde trabalho. Tivemos muito sucesso utilizando o Selenium RC com JUnit. Contudo, surgiram alguns casos onde seria interessante ir um pouco além: avaliar se os relatórios gerados pelo sistema estavam conformes com o Projeto Conceitual (uma espécie de Caso de [...]]]></description>
			<content:encoded><![CDATA[<p>Estou fazendo uma API de testes para automatizar a homologação das aplicações web para empresa onde trabalho. Tivemos muito sucesso utilizando o Selenium RC com JUnit. Contudo, surgiram alguns casos onde seria interessante ir um pouco além: avaliar se os relatórios gerados pelo sistema estavam conformes com o Projeto Conceitual (uma espécie de Caso de Uso).</p>
<p>Comprei a idéia e fui atrás de implementá-la utilizando o Selenium. O sistema exibe os relatórios no próprio browser, pois utiliza o header &#8220;<a href="http://p2p.wrox.com/topic.asp?TOPIC_ID=60018">Content-Disposition</a>&#8221; para suprimir a caixa de confirmação de download. Com o Selenium Server, é possível fazer uma gambiarra no Firefox para que isso não seja necessário (perdi o link pra isso).</p>
<p>Porém, como o nosso sistema está homologado somente para o Internet Explorer, não havia nenhuma possibilidade de gravar estes arquivos. Com esta motivação, criei um comando chamado &#8220;waitForContentType&#8221;, onde você pode informar ao Selenium que caso algum mime type específico seja carregado até um timeout, este deverá ser gravado localmente (onde o server está sendo executado).</p>
<p>Com isso, posso ler o PDF gerado pela aplicação e verificar se um conjunto de dados específicos estão lá (utilizando o <a href="http://www.pdfbox.org" target="_blank">PDFBox</a>).</p>
<p>Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="java java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> ChamadaRelatorioTeste <span style="color: #000000; font-weight: bold;">extends</span> TestCase <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> Selenium browser <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span>;
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> setUp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        browser <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DefaultSelenium<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;localhost&quot;</span>, <span style="color: #cc66cc;">4444</span>, <span style="color: #0000ff;">&quot;*iexplore&quot;</span>, <span style="color: #0000ff;">&quot;http://caminho/para/aplicacao&quot;</span><span style="color: #009900;">&#41;</span>;
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> testarChamadaRelatorio<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        browser.<span style="color: #006633;">open</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;http://caminho/para/aplicacao&quot;</span><span style="color: #009900;">&#41;</span>;
        browser.<span style="color: #006633;">type</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;campo1&quot;</span>, <span style="color: #0000ff;">&quot;valor1&quot;</span><span style="color: #009900;">&#41;</span>;
        browser.<span style="color: #006633;">click</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;btnGerarRelatorio&quot;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
        <span style="color: #666666; font-style: italic;">// Esperar até 10 segundos para o relatório ser gerado</span>
        browser.<span style="color: #006633;">waitForContentType</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;application/pdf&quot;</span>, <span style="color: #0000ff;">&quot;/Users/leonardoeloy/tmp/saidaRelatorio.pdf&quot;</span>, <span style="color: #cc66cc;">10000</span><span style="color: #009900;">&#41;</span>;
&nbsp;
        <span style="color: #003399;">String</span> textoRelatorio <span style="color: #339933;">=</span> TesteUtil.<span style="color: #006633;">obterTextoPdf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/Users/leonardoeloy/tmp/saidaRelatorio.pdf&quot;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
        assertNotNull<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Relatório não foi gerado&quot;</span>, textoRelatorio<span style="color: #009900;">&#41;</span>;
        assertTrue<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Coluna Data de Exclusão deve estar no relatório&quot;</span>, textoRelatorio.<span style="color: #006633;">contains</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Data de Exclusão&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;
        assertTrue<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Total de Registros tem que ser 10&quot;</span>, textoRelatorio.<span style="color: #006633;">contains</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Total De Registros: 10&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
    <span style="color: #009900;">&#125;</span>
&nbsp;
    @Override
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> tearDown<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        browser.<span style="color: #006633;">stop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h6>Se alguém tiver alguma dica de algum plugin de highlight de códigos bom pro WordPress, por favor, avise.</h6>
<p>Você pode fazer o download do patch <a href="http://leonardoeloy.com/wp-content/uploads/2008/11/waitForContentType-patch-with-jars.zip">com os JARs</a> do Selenium Java Client Driver e Selenium Server ou <a href="http://leonardoeloy.com/wp-content/uploads/2008/11/waitforcontenttype-patch-without-jars.zip">sem os JARs</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://leonardoeloy.com/2008/11/07/estendendo-o-selenium-criando-um-novo-comando/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tutorial de Ruby</title>
		<link>http://leonardoeloy.com/2008/09/21/tutorial-de-ruby/</link>
		<comments>http://leonardoeloy.com/2008/09/21/tutorial-de-ruby/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 23:25:41 +0000</pubDate>
		<dc:creator>Leonardo Eloy</dc:creator>
		
		<category><![CDATA[Rails]]></category>

		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://leonardoeloy.com/2008/09/21/tutorial-de-ruby/</guid>
		<description><![CDATA[Vários alunos estão me pedindo informações sobre o Ruby, uma linguagem dinâmica e altamente ortogonal. Já desenvolvi dois sistemas utilizando o framework Ruby on Rails e meus scripts diariamente são feitos em Ruby. É muito fácil de aprender e ágil para se implementar, ideal para requisitos e ambientes dinâmicos.
Pretendo criar uma lista de &#8220;espera&#8221; para [...]]]></description>
			<content:encoded><![CDATA[<p>Vários alunos estão me pedindo informações sobre o Ruby, uma linguagem dinâmica e altamente ortogonal. Já desenvolvi dois sistemas utilizando o framework Ruby on Rails e meus scripts diariamente são feitos em Ruby. É muito fácil de aprender e ágil para se implementar, ideal para requisitos e ambientes dinâmicos.</p>
<p>Pretendo criar uma lista de &#8220;espera&#8221; para quem estiver a fim de participar de um curso de Ruby Básico e Rails que pretendo ministrar. Para viabilizar este curso, preciso de gente interessada! Interessado? Me informe seu e-mail: <a href="mailto:eu.quero.ruby@leonardoeloy.com">eu.quero.ruby@leonardoeloy.com</a>.</p>
<p><a href="http://www.eustaquiorangel.com/downloads/tutorialruby.pdf" title="Tutorial Ruby">Aqui </a>o melhor tutorial da Web em Português, por <a href="http://www.eustaquiorangel.com/" title="Eustáquio Rangel">Eustáquio Rangel</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://leonardoeloy.com/2008/09/21/tutorial-de-ruby/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Compilação Condicional com Oracle 10g</title>
		<link>http://leonardoeloy.com/2008/07/30/compilacao-condicional-com-oracle/</link>
		<comments>http://leonardoeloy.com/2008/07/30/compilacao-condicional-com-oracle/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 03:22:42 +0000</pubDate>
		<dc:creator>Leonardo Eloy</dc:creator>
		
		<category><![CDATA[Banco de Dados]]></category>

		<category><![CDATA[Oracle]]></category>

		<category><![CDATA[PL/SQL]]></category>

		<category><![CDATA[database]]></category>

		<guid isPermaLink="false">http://leonardoeloy.com/2008/07/30/compilacao-condicional-com-oracle/</guid>
		<description><![CDATA[Estudando alguns recursos do banco para utilizar na Integração, verifiquei a existência de uma interessante característica do Oracle.
Estava escrevendo uma estrutura de integração onde iria alterar uma trigger em uma tabela central do sistema de gestão de planos de saúde da Unimed Fortaleza. Como temos outras Unimeds como clientes, não poderia simplesmente referenciar minhas novas [...]]]></description>
			<content:encoded><![CDATA[<p>Estudando alguns recursos do banco para utilizar na Integração, verifiquei a existência de uma interessante característica do Oracle.</p>
<p>Estava escrevendo uma estrutura de integração onde iria alterar uma trigger em uma tabela central do sistema de gestão de planos de saúde da Unimed Fortaleza. Como temos outras Unimeds como clientes, não poderia simplesmente referenciar minhas novas estruturas nesta trigger e enviá-las em outras versões para eles.</p>
<p>A compilação condicional permite utilizar o pré-processador do PL/SQL a fim de decidir se um excerto de código irá ou não ser utilizado na compilação.</p>
<p><strong><span style="font-size: 12pt">Utilização</span></strong></p>
<p>O exemplo abaixo ilustra uma função que utiliza este recurso:</p>
<p><a href="http://leonardoeloy.com/wp-content/uploads/2008/07/image004.png" title="Compilação Condicional 1"><img src="http://leonardoeloy.com/wp-content/uploads/2008/07/image004.png" alt="Compilação Condicional 1" border="0" /></a></p>
<p>Ao compilar esta função normalmente com o comando <span>ALTER FUNCTION IDADE COMPILE;</span>, teríamos o seguinte código:</p>
<p><a href="http://leonardoeloy.com/wp-content/uploads/2008/07/image002.png" title="Compilação Condicional 2"><img src="http://leonardoeloy.com/wp-content/uploads/2008/07/image002.png" alt="Compilação Condicional 2" border="0" /></a></p>
<p>Para utilizar a compilação condicional, teríamos o seguinte comando:</p>
<p>ALTER FUNCTION idade COMPILE PLSQL_CCFLAGS = &#8216;auditoria_idade:TRUE&#8217; REUSE SETTINGS;<br />
Teríamos o código deste jeito:</p>
<p><a href="http://leonardoeloy.com/wp-content/uploads/2008/07/image003.png" title="Compilação Condicional 3"><img src="http://leonardoeloy.com/wp-content/uploads/2008/07/image003.png" alt="Compilação Condicional 3" border="0" /></a></p>
<p><strong><span style="font-size: 12pt">Conclusão</span></strong></p>
<p>A utilização da compilação condicional permite que sejam ativados blocos de códigos de acordo com a passagem de parâmetros durante a compilação.</p>
<p>A principal desvantagem é a ortogonalidade do código, que fica um pouco comprometida pela utilização de instruções pouco usuais. Outro fator é que não temos como documentar as macros que são utilizadas nos códigos, a não ser que o objeto seja lido.</p>
<p>Vejo como maior vantagem a possibilidade de incluirmos códigos, que em certos contextos podem ser inválidos. Por exemplo, um cliente X não terá a estrutura de integração, mesmo assim, posso fazer referência às packages dentro do bloco condicional que este só será validado na compilação em que seja passado o valor TRUE para a macro.</p>
]]></content:encoded>
			<wfw:commentRss>http://leonardoeloy.com/2008/07/30/compilacao-condicional-com-oracle/feed/</wfw:commentRss>
		</item>
		<item>
		<title>NanoBase: Um processador de consultas para a plataforma JME CLDC/MIDP</title>
		<link>http://leonardoeloy.com/2008/07/17/nanobase-um-processador-de-consultas-para-a-plataforma-jme-cldcmidp/</link>
		<comments>http://leonardoeloy.com/2008/07/17/nanobase-um-processador-de-consultas-para-a-plataforma-jme-cldcmidp/#comments</comments>
		<pubDate>Thu, 17 Jul 2008 23:03:44 +0000</pubDate>
		<dc:creator>Leonardo Eloy</dc:creator>
		
		<category><![CDATA[Pesquisa]]></category>

		<category><![CDATA[nanobase]]></category>

		<category><![CDATA[nanozoom]]></category>

		<category><![CDATA[pesquisa científica]]></category>

		<guid isPermaLink="false">http://leonardoeloy.com/2008/07/17/nanobase-um-processador-de-consultas-para-a-plataforma-jme-cldcmidp/</guid>
		<description><![CDATA[Ano passado foi um ano corrido. Com orientação do Prof. José Maria Monteiro, Vitor Vasconcelos e eu reformulamos o NanoBase para uma arquitetura mais robusta e orientada a padrões.
Conheça mais o NanoBase e o NanoZoom.
]]></description>
			<content:encoded><![CDATA[<p>Ano passado foi um ano corrido. Com orientação do Prof. José Maria Monteiro, Vitor Vasconcelos e eu reformulamos o NanoBase para uma arquitetura mais robusta e orientada a padrões.</p>
<p>Conheça mais o <a href="http://www.leonardoeloy.com/nanobase">NanoBase</a> e o <a href="http://www.leonardoeloy.com/nanozoom">NanoZoom</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://leonardoeloy.com/2008/07/17/nanobase-um-processador-de-consultas-para-a-plataforma-jme-cldcmidp/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Security Masturbating Monkeys</title>
		<link>http://leonardoeloy.com/2008/07/16/security-masturbating-monkeys/</link>
		<comments>http://leonardoeloy.com/2008/07/16/security-masturbating-monkeys/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 12:10:28 +0000</pubDate>
		<dc:creator>Leonardo Eloy</dc:creator>
		
		<category><![CDATA[Crazy Ol' Linus]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[linus]]></category>

		<category><![CDATA[macacos]]></category>

		<category><![CDATA[me]]></category>

		<category><![CDATA[mordam]]></category>

		<category><![CDATA[segurança]]></category>

		<category><![CDATA[torvalds]]></category>

		<guid isPermaLink="false">http://leonardoeloy.com/2008/07/16/security-masturbating-monkeys/</guid>
		<description><![CDATA[&#160;
Linus Torvalds disse recentemente que ele acha o povo do OpenBSD, permitam-me a livre tradução, &#8220;um bando de macacos masturbadores&#8221;.Claro que não foi de graça, na realidade, ele se referia às pessoas que acham que bugs de segurança têm uma maior prioridade sobre bugs usuais, como a de um driver qualquer, por exemplo.
A causa de [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center">&nbsp;</p>
<p>Linus Torvalds <a href="http://article.gmane.org/gmane.linux.kernel/706950" target="_blank">disse recentemente</a> que ele acha o povo do OpenBSD, permitam-me a livre tradução, <em>&#8220;um bando de macacos masturbadores&#8221;</em>.Claro que não foi de graça, na realidade, ele se referia às pessoas que acham que bugs de segurança têm uma maior prioridade sobre bugs usuais, como a de um driver qualquer, por exemplo.</p>
<p>A causa de Linus é nobre, porém muito bairrista. Empresas de segurança não patrocinam o Linux. Ponto para eles que contam com um defensor de peso.</p>
]]></content:encoded>
			<wfw:commentRss>http://leonardoeloy.com/2008/07/16/security-masturbating-monkeys/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Filler</title>
		<link>http://leonardoeloy.com/2008/03/26/hello-world/</link>
		<comments>http://leonardoeloy.com/2008/03/26/hello-world/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 12:31:43 +0000</pubDate>
		<dc:creator>Leonardo Eloy</dc:creator>
		
		<category><![CDATA[Phun]]></category>

		<category><![CDATA[quadrinhos]]></category>

		<category><![CDATA[xkcd]]></category>

		<guid isPermaLink="false">http://leonardoeloy.com/?p=1</guid>
		<description><![CDATA[Enquanto a parada não começa!



]]></description>
			<content:encoded><![CDATA[<p>Enquanto a parada não começa!</p>
<p><a href="http://www.xkcd.net"></p>
<p style="text-align: center"><img src="http://leonardoeloy.com/wp-content/uploads/2008/03/exploits_of_a_mom.png" alt="Exploits of a Mom" border="0" /></p>
<p></a></p>
]]></content:encoded>
			<wfw:commentRss>http://leonardoeloy.com/2008/03/26/hello-world/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
