<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>JEP - Java e Produtividade</title>
    <link rel="alternate" type="text/html" href="http://blog.felipecoury.com/jep/" />
    <link rel="self" type="application/atom+xml" href="http://blog.felipecoury.com/jep/atom.xml" />
    <id>tag:blog.felipecoury.com,2008-02-09:/jep//2</id>
    <updated>2008-06-22T21:39:56Z</updated>
    <subtitle>Blog dedicado a dicas valiosas para desenvolvedores Java (e afins, como Groovy, J2EE, Databases, etc.) que queiram aprimorar tanto suas habilidades na linguagem quanto sua produtividade. Dicas ideais para se sair melhor em seu ambiente de trabalho ou em seu Home Office.</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Personal 4.1</generator>

<entry>
    <title>Pair programming remoto usando Eclipse</title>
    <link rel="alternate" type="text/html" href="http://blog.felipecoury.com/jep/2008/06/pair-programming-remoto-usando.html" />
    <id>tag:blog.felipecoury.com,2008:/jep//2.15</id>

    <published>2008-06-22T21:07:02Z</published>
    <updated>2008-06-22T21:39:56Z</updated>

    <summary>Semana passada tive a sorte de participar de um curso de Agile Development, patrocinado pela IBM - que é meu empregador. O curso ministrado por um dos papas do assunto na IBM, Jim Brisson.Devo confessar que, tendo algum background em...</summary>
    <author>
        <name>Felipe Coury</name>
        <uri>http://felipecoury.com</uri>
    </author>
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Produtividade" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Tecnologia" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.felipecoury.com/jep/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="agile1.gif" src="http://blog.felipecoury.com/jep/agile1.gif" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" height="131" width="200" /></span>Semana passada tive a sorte de participar de um curso de <a href="http://en.wikipedia.org/wiki/Agile_software_development">Agile Development</a>, patrocinado pela IBM - que é meu empregador. O curso ministrado por um dos papas do assunto na IBM, Jim Brisson.<br /><br />Devo confessar que, tendo algum background em XP, era um pouco cético sobre o assunto. Hoje meu time usa uma pequena parte da gama oferecida pela metodologia Agile: apenas usamos as ferramentas de Sprints (ou Iterations) e Scrums. Devo confessar que fui surpreendido: o Agile, além de ser conceitualmente bem mais light que o XP, tem outros apelos bem interessantes. Se tiver mais interesse sobre o assunto me mande comentários que eu escrevo sobre a metodologia, mas em outra hora :-) <br /><br />Retomando o assunto principal deste post, neste curso, uma das grandes dúvidas dos PMs presentes era a respeito do controverso <a href="http://en.wikipedia.org/wiki/Pair_programming">Pair Programming</a>. Uma destas dúvidas era da possibilidade de utilizar esta técnica em times distribuídos. <br /><br />Descobri um screencast que mostra uma ferramenta exatamente com este propósito. Trata-se de um plugin para o Eclipse chamado Cola. Então, chega de papo e segue o screencast abaixo:<br /><br /><br /> 

<p align="center">
<object width="500" height="281">	<param name="allowfullscreen" value="true" />	<param name="allowscriptaccess" value="always" />	<param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id=1195398&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" />	<embed src="http://www.vimeo.com/moogaloop.swf?clip_id=1195398&amp;server=www.vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="281"></embed></object><br /><a href="http://www.vimeo.com/1195398?pg=embed&sec=1195398">Cola: Real-Time Shared Editing</a> from <a href="http://www.vimeo.com/mustafa?pg=embed&sec=1195398">Mustafa K. Isik</a> on <a href="http://vimeo.com?pg=embed&sec=1195398">Vimeo</a>.
</p>
<br/>
Via <a href="http://www.dzone.com/links/rss/realtime_pair_programming_in_eclipse.html">DZone</a>]]>
        
    </content>
</entry>

<entry>
    <title>JFileHelpers - Arquivos texto sem complicação</title>
    <link rel="alternate" type="text/html" href="http://blog.felipecoury.com/jep/2008/06/jfilehelpers-arquivos-texto-se.html" />
    <id>tag:blog.felipecoury.com,2008:/jep//2.14</id>

    <published>2008-06-07T19:56:29Z</published>
    <updated>2008-06-07T21:16:38Z</updated>

    <summary> Depois de um bom tempo só promovendo o uso da biblioteca JFileHelpers através de um post neste blog, decidi fazer o website do projeto.Embora ainda esteja no seu começo, pelo menos é um lugar comum para os usuários poderem...</summary>
    <author>
        <name>Felipe Coury</name>
        <uri>http://felipecoury.com</uri>
    </author>
    
        <category term="Downloads" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Produtividade" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="arquivos" label="arquivos" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="flatfiles" label="flatfiles" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="java" label="java" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="library" label="library" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="texto" label="texto" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tutorial" label="tutorial" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="txt" label="txt" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.felipecoury.com/jep/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="jfilehelpers.png" src="http://blog.felipecoury.com/jep/jfilehelpers.png" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" height="50" width="200" /></span> <div>Depois de um bom tempo só promovendo o uso da biblioteca <a href="http://www.jfilehelpers.com/index_pt.php">JFileHelpers</a> através de um post neste blog, decidi fazer o website do projeto.<br /><br />Embora ainda esteja no seu começo, pelo menos é um lugar comum para os usuários poderem ter uma referência de como usar a biblioteca. A outra grande vantagem é ter um versão em inglês. Assim, os gringos também podem conferir e quem sabe consigo algum novo colaborador.<br /><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="jfilehelpers-website.png" src="http://blog.felipecoury.com/jep/jfilehelpers-website.png" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;" height="288" width="450" /></span><br /><br />Se você tem vontade de participar de um projeto Open Source em Java, que faz uso de tecnologias interessantes como Refactoring, Annotations e muito mais, visite a <a href="http://www.jfilehelpers.com/feedback_pt.php">página de contatos</a> do projeto e me mande seus dados! <br /><br />Mesmo se você acredita que não pode ajudar com o código, você pode fazer testes, ajudar no website ou mesmo sugerindo novas funcionalidades. Não deixe de deixar seu comentário se você testar a biblioteca! Este é aquele tipo de projeto "movido a comentários" :-).<br /></div><div><br /></div>
<br/><br/>
<hr width="60%">
<br/>
<b>Links:</b>
<ul>
	<li>Página do JFileHelpers <a href="http://www.jfilehelpers.com/index_pt.php">http://www.jfilehelpers.com</a></li>
	<li>Projeto Inspirador - FileHelpers: <a href="http://filehelpers.com">http://filehelpers.com</a></li>
</ul>
]]>
        
    </content>
</entry>

<entry>
    <title>Diagramas de Sequência a Jato!</title>
    <link rel="alternate" type="text/html" href="http://blog.felipecoury.com/jep/2008/04/diagramas-de-sequencia-a-jato.html" />
    <id>tag:blog.felipecoury.com,2008:/jep//2.13</id>

    <published>2008-04-25T18:58:11Z</published>
    <updated>2008-04-25T20:51:09Z</updated>

    <summary> Desenhar diagramas de seqüência, mesmo com as novas ferramentas do mercado hoje, é um trabalho quase artístico. Clica aqui, arrasta uma classe, cria uma relação entre elas, clica de novo, coloca o nome do método, e por aí vai.Outro...</summary>
    <author>
        <name>Felipe Coury</name>
        <uri>http://felipecoury.com</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.felipecoury.com/jep/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="sequence.jpg" src="http://blog.felipecoury.com/jep/sequence.jpg" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" height="108" width="200" /></span>
Desenhar
diagramas de seqüência, mesmo com as novas ferramentas do mercado hoje,
é um trabalho quase artístico. Clica aqui, arrasta uma classe, cria uma
relação entre elas, clica de novo, coloca o nome do método, e por aí
vai.<br /><br />Outro dia, lendo alguns artigos em blogs por aí, me deparei
com uma maneira absolutamente fantástica de criar estes diagramas.
Trata-se do website <a href="http://www.websequencediagrams.com/">WebSequenceDiagrams</a>.<br /><br />O
apelo é ainda maior para programadores sem uma veia artística como eu.
Basicamente o que você faz para criar o diagrama de sequência é passar
um roteiro, no formato texto mesmo. Por exemplo:<br /><br /><pre>
HttpListener-&gt;Delegate: atende o request
Delegate-&gt;DAO: grava a requisição
note right of DAO: Este DAO é abstrato, podendo utilizar qualquer servidor para persistência.
Delegate-&gt;BusinessLogic: executa a regra de negócios
Delegate-&gt;HttpListener: responde o request</pre>
<br />
Este roteiro em formato texto gera o seguinte diagrama:<br /><br />

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="samplediagram.png" src="http://blog.felipecoury.com/jep/samplediagram.png" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;"/></span>

Além disso, o site também disponibiliza templates para tornar o diagrama mais elaborado visualmente, como por exemplo:<br /><br />

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="samplediagram-modernblue.png" src="http://blog.felipecoury.com/jep/samplediagram-modernblue.png" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;"/>
<div style="text-align: center;"><i>Exemplo de diagrama usando o tema <b>Modern Blue</b></i></div>
</span>
<br /><br/>
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="samplediagram-green.png" src="http://blog.felipecoury.com/jep/samplediagram-green.png" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;"/>
<div style="text-align: center;"><i>Exemplo de diagrama usando o tema <b>Green Earth</b></i></div>
</span>
<br/><br/>
Além disso, é possível salvar como PDF e dividir em várias páginas para impressão. Como diria o pessoal do MTV Rock Gol, totalmente excelente! :-)
<br/><br/>
E você, o que você usa no seu dia-a-dia para criar diagramas UML em geral? Deixe comentários com suas dicas!

<br/><br/>
<hr width="60%">
<br/>
Links:
<ul>
	<li>WebSequenceDiagrams:<br/><a href="http://websequencediagrams.com">http://websequencediagrams.com</a></li>
</ul>]]>
        
    </content>
</entry>

<entry>
    <title>Como treinar sua criatividade</title>
    <link rel="alternate" type="text/html" href="http://blog.felipecoury.com/jep/2008/03/como-treinar-sua-criatividade.html" />
    <id>tag:blog.felipecoury.com,2008:/jep//2.12</id>

    <published>2008-03-03T14:03:51Z</published>
    <updated>2008-03-03T14:40:18Z</updated>

    <summary>No mundo de hoje, a palavra concorrência ganhou um novo sentido. Em uma realidade onde seu principal concorrente não está mais necessariamente na mesma cidade, estado ou sequer no mesmo país, ela se tornou um fator decisivo entre o sucesso...</summary>
    <author>
        <name>Felipe Coury</name>
        <uri>http://felipecoury.com</uri>
    </author>
    
        <category term="Criatividade" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Produtividade" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="criatividade" label="criatividade" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="produtividade" label="produtividade" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="treinamento" label="treinamento" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.felipecoury.com/jep/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="criatividade.jpg" src="http://blog.felipecoury.com/jep/criatividade.jpg" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" height="170" width="200" /></span>No mundo de hoje, a palavra concorrência ganhou um novo sentido. <br /><br />Em uma realidade onde seu principal concorrente não está mais necessariamente na mesma cidade, estado ou sequer no mesmo país, ela se tornou um fator decisivo entre o sucesso e o fracasso: a criatividade.<br /><br />A sua presença hoje pode resolver disputas difíceis. Imagine competir, por exemplo, com a mão de obra chinesa, fruto de um país que por muitos não é considerado nem uma economia de mercado. <br /><br />Uma das nossas maiores armas, que nos permite competir mesmo em condições adversas é uma das características mais marcantes do nosso povo, que desenvolveu a criatividade como uma forma de subsistir. <br /><br />Já se tornou um jargão aquela frase que diz que sucesso é 10% inspiração e 90% transpiração. <br /><br />Então, aplicando esta frase ao nosso caso, a parte da inspiração diz que você deve ter fé que você é sim uma pessoa criativa. Mas só isso não basta: você tem que exercitar constantemente sua criatividade. E esta, você adivinhou, é a parte da transpiração. <br /><br />Baseado em um <a href="http://cultivategreatness.com/2008/02/27/8-ways-to-train-yourself-to-be-creative">artigo de John Hoff</a>, para o blog americano <a href="http://cultivategreatness.com/">Cultive Greatness</a>, enumero abaixo oito dicas de como ser mais criativo. <br /><br /><br /><font style="font-size: 1.25em;"><u><b>Escute</b></u></font><br /><br />É muito importante saber ser um bom ouvinte. E por ser um bom ouvinte eu quero dizer ouvir sem julgar, sem tirar nenhuma conclusão precipitada. Esta característica é vital se você vai criar um produto para encher os olhos dos clientes e de seu empregador. Lembre-se: escutar não é a mesma coisa que apenas ouvir.<br /><br />Uma dica: tente ouvir uma rádio ou um canal novo. Tente descobrir qual é a audiência alvo. Quem seriam fiéis ouvintes e quem ouviria esta rádio ocasionalmente? Que pessoas influentes poderiam ouvir esta rádio? Qual é o seu mercado potencial?<br /><br /><br /><u><font style="font-size: 1.25em;"><b>Faça Brainstorm</b></font></u><br /><br />Brainstorm é uma maneira clássica de gerar idéias criativas. Mas antes, tente aquecer sua criatividade.<br /><br /><b><i>Aquecendo a criatividade</i></b><br /><br />Pegue um lápis e um pedaço de papel em branco e comece a escrever. Se nada vier a sua mente, escreva isso, e depois escreva o que vier a sua mente, independente do que for. Então, a partir disso, elabore.<br /><br />Um outro exemplo, pegue seu papel e lápis, tente criar algo novo e descreva o que você está pensando, mesmo se parecer absurdo. Tente criar uma nova forma de vida. De onde ela vem? Quais são seus objetivos? Ou então, tente criar uma pessoa. Quem é ela? Elabore a idéia.<br /><br />Estes são bons exemplos de como deixar sua mente em um estado favorável a "pensar fora da caixa".<br /><br /><br /><u><b><font style="font-size: 1.25em;">Complemente os pontos negativos com pontos positivos</font></b></u><br /><br />Este talvez seja um dos pontos mais importantes. <br /><br />As vezes, quando você quer fazer algo, sua cabeça continua dizendo que é impossível, que você não consegue. Escreva este pensamento e, logo ao seu lado, escreva também 2 ou 3 motivos que provam que você pode fazer. <br /><br />Faça isso de forma rápida e de forma rotineira. Você logo vai perceber que você treinou sua mente para reagir de forma automática a um ponto negativo, apresentando um pensamento positivo, que pode até viabilizar sua idéia.<br /><br /><br /><font style="font-size: 1.25em;"><u><b>Esteja preparado</b></u></font><br /><br />Se você estiver procurando idéias criativas, mantenha sempre um bloco e uma caneta ao seu alcance. Nunca se sabe quando um pensamento crítico pode aparecer. As vezes um pensamento ou uma idéia alheia, ou algo que você ouve de alguém pode ser a faísca para uma nova idéia.<br /><br /><br /><font style="font-size: 1.25em;"><b><u>Aprenda</u></b></font><br /><br />É claro que quanto mais você conhecimento você adquire, mais o ambiente fica propício para novas idéias criativas. <br /><br />Você não saberia como física e paisagismo podem interagir, a não ser que você saiba ao menos um pouco de cada uma. A idéia aqui é simples: quanto mais você sabe, mais você pode criar.<br /><br />Idéias para expandir os horizontes:<br /><br /><blockquote><ul><li>leia blogs;</li><li>faça cursos;</li><li>leia livros;</li><li>tente uma coisa nova, que você nunca fez;</li><li>ensine algo a alguém;</li><li>participe de um grupo de discussão ou uma comunidade onlline;</li><li>fale com pessoas que você não falaria normalmente;</li></ul></blockquote>Continue esta lista com suas próprias idéias.<br /><br /><br /><font style="font-size: 1.25em;"><u><b>Faça críticas</b></u></font><br /><br />Quando você estiver sem idéias criativas, pare e faça uma crítica.<br /><br /><i><b>Revistas</b></i><br /><br />Se você está estagnado, tente folhear uma revista e criticar as propagandas. Quais prendem sua atenção e porque? Qual é o público alvo? O que você faria diferente se você tivesse feito a propaganda? Naqueles que chamaram sua atenção, como você os mudaria?<br /><br /><i><b>Seus concorrentes</b></i><br /><br />Visite páginas de seus concorrentes. Veja se o que eles fazem servem como inspiração de idéias a seu favor. Existe algo que eles não fizeram, mas que você poderia fazer? Ou fazer melhor, de forma diferenciada?<br /><br /><i><b>Auto-análise</b></i><br /><br />Pegue novamente um papel e desenhe uma linha no centro. No lado esquerdo escreva "Meus pontos fracos" e, do lado direito "Meus pontos fortes". Tente listar todas suas fraquezas, sempre compensando com pontos fortes do lado direito.<br /><br />Agora você tem um mapa do que você precisa fazer.<br /><br /><i><b>Pergunte, pergunte, pergunte</b></i><br /><br />Quando você estiver empacado em uma tentativa de ser criativo, faça uma série de perguntas para tentar obter uma nova perspectiva de um produto ou idéia.<br /><br /><blockquote><ul><li>O que eu posso substituir?</li><li>O que eu posso adicionar para fazer isto um pouco melhor?</li><li>O que é desnecessário?</li><li>O que é o oposto disso?</li><li>De onde isso veio?</li><li>Como isso vem sendo usado?</li><li>Para o que mais isso pode ser usado?</li></ul></blockquote><br />... e por aí vai. Continue as perguntas e faça sua própria lista.<br /><br /><br /><font style="font-size: 1.25em;"><u><b>Exercite o seu processo criativo</b></u></font><br /><br />Tente uma dessas atividades de tempos em tempos:<br /><br /><blockquote><ul><li>Todo dia, escolha um tópico e anote; então crie um diagrama para ver aonde esta idéia te leva.</li><li>Pense em um produto. Como ele poderia ter sido inventado de uma forma diferente, produzindo o mesmo resultado?</li><li>Depois de ler metade de um livro, feche e pense como você terminaria a história</li><li>Leia livros verídicos, e tente resolver os problemas antes que eles sejam resolvidos na história.</li><li>Faça palavras-cruzadas, porque elas te fazem pensar amplamente, em todo tipo de assunto.</li></ul></blockquote><br /><font style="font-size: 1.25em;"><u><b>Viaje</b></u></font><br /><br />Uma das melhores formas de gerar idéias criativas é indo a lugares novos ou simplesmente sair e andar. Não tem dinheiro para viajar? Não tem problema. Vá aonde você tem que ir, mas faça um caminho diferente.<br /><br />Novas experiências e novos destinos são uma ótima forma de gerar novas perspectivas e gerar criatividade.<br /><br /><br />E estas são as 8 idéias para ajudá-lo a ser mais criativo.<br /><br />E você, se considera uma pessoa criativa? Quais são suas técnicas? ]]>
        
    </content>
</entry>

<entry>
    <title>Use seu Mouse para Alt-Tab</title>
    <link rel="alternate" type="text/html" href="http://blog.felipecoury.com/jep/2008/02/use-seu-mouse-para-alttab.html" />
    <id>tag:blog.felipecoury.com,2008:/jep//2.11</id>

    <published>2008-02-26T00:11:41Z</published>
    <updated>2008-02-26T00:21:53Z</updated>

    <summary>A única frase que me vem à cabeça é: Como não pensei nisso antes?. Um pequeno executável automatiza o Alt+Tab, tornando possível que você mude de janela apenas com o mouse. Sem instalação, sem um monte de arquivos, sem raízes...</summary>
    <author>
        <name>Felipe Coury</name>
        <uri>http://felipecoury.com</uri>
    </author>
    
        <category term="Downloads" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Produtividade" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="awesome" label="awesome" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="downloads" label="downloads" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mouse" label="mouse" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="productivity" label="productivity" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="shortcut" label="shortcut" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.felipecoury.com/jep/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="mouse-alttab.jpg" src="http://blog.felipecoury.com/jep/mouse-alttab.jpg" width="200" height="133" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></span>A única frase que me vem à cabeça é: <i>Como não pensei nisso antes?</i>. 
<br /><br />Um pequeno executável automatiza o Alt+Tab, tornando possível que você mude de janela apenas com o mouse. Sem instalação, sem um monte de arquivos, sem raízes brancas (exagerei!).<br /><br />Para utilizar, você simplesmente segura o botão da esquerda e, sem soltar, pressiona o da direita. Cada vez que você aperta o da direita, é um Alt+Tab. Fantástico! <br /><br />

<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="alttab-mouse.jpg" src="http://blog.felipecoury.com/jep/alttab-mouse.jpg" width="450" height="272" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span>

<br/><br/>
Ele vem em dois "sabores": <a href="http://cybernetnews.com/wp-content/uploads/2008/02/AltTabXP.exe">AltTab</a> e <a href="http://cybernetnews.com/wp-content/uploads/2008/02/AltTabMouse.exe">CtrlAltTab</a> que no Windows Vista mantém a janela aberta se você soltar o botão. Eu prefiro a primeira versão, mas gosto é gosto.<br /><br />via <a href="http://lifehacker.com/360336/switch-programs-from-your-mouse-with-alttab-mouse-shortcut">Lifehacker</a> [via <a href="http://cybernetnews.com/2008/02/24/alttab-mouse-shortcut/">CyberNet</a>]
<br/><br /><hr width="60%">
<br />Links:<br /><br /><ul><li>Link original no CyberNet - <a href="http://cybernetnews.com/2008/02/24/alttab-mouse-shortcut/">http://cybernetnews.com/2008/02/24/alttab-mouse-shortcut/</a></li><li>Matéria da Lifehacker - <a href="http://lifehacker.com/360336/switch-programs-from-your-mouse-with-alttab-mouse-shortcut">http://lifehacker.com/360336/switch-programs-from-your-mouse-with-alttab-mouse-shortcut</a><br /></li></ul> ]]>
        
    </content>
</entry>

<entry>
    <title>Phun - Excelente e divertido simulador de Física</title>
    <link rel="alternate" type="text/html" href="http://blog.felipecoury.com/jep/2008/02/phun-excelente-e-divertido-sim.html" />
    <id>tag:blog.felipecoury.com,2008:/jep//2.10</id>

    <published>2008-02-21T11:05:43Z</published>
    <updated>2008-02-21T11:19:12Z</updated>

    <summary>Não, não é o que você está pensando. Não se trata de um software chato para Nerds que calcula a correlação entre pontos. Estou falando do Phun (para os desligados é uma brincadeira com as palavras Fun e Physics), um...</summary>
    <author>
        <name>Felipe Coury</name>
        <uri>http://felipecoury.com</uri>
    </author>
    
    
    <content type="html" xml:lang="en" xml:base="http://blog.felipecoury.com/jep/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="phun-physics-fun.jpg" src="http://blog.felipecoury.com/jep/phun-physics-fun.jpg" width="200" height="150" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></span>Não, não é o que você está pensando. Não se trata de um software chato para Nerds que calcula a correlação entre pontos. <br /><br />Estou falando do <a href="http://www.acc.umu.se/%7Eemilk/index.html">Phun</a> (para os desligados é uma brincadeira com as palavras Fun e Physics), um engine que, a todos os elementos que você desenha são aplicadas as leis da física que regem o nosso universo. O vídeo vale mais que mil palavras:<br /><br /><br /> 

<center>
<object width="425" height="373"><param name="movie" value="http://www.youtube.com/v/0H5g9VS0ENM&rel=1&color1=0xd6d6d6&color2=0xf0f0f0&border=1"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/0H5g9VS0ENM&rel=1&color1=0xd6d6d6&color2=0xf0f0f0&border=1" type="application/x-shockwave-flash" wmode="transparent" width="425" height="373"></embed></object>
</center>

<br/><br/>

Se você gostou e começar a criar cenas divertidas, <a href="mailto:contact@felipecoury.com">mande para mim</a>. Ah! E deixe comentários também!

<br/><br/>

<hr width="60%">
<br/>

Links:<br/>
<ul>
	<li>Home-page do Phun - <a href="http://www.acc.umu.se/%7Eemilk/index.html">http://www.acc.umu.se/%7Eemilk/index.html</a></li>
        <li>Download - <a href="http://www.acc.umu.se/%7Eemilk/downloads.html">http://www.acc.umu.se/%7Eemilk/downloads.html</a></li>
</ul>]]>
        
    </content>
</entry>

<entry>
    <title>log5j</title>
    <link rel="alternate" type="text/html" href="http://blog.felipecoury.com/jep/2008/02/log5j.html" />
    <id>tag:blog.felipecoury.com,2008:/jep//2.9</id>

    <published>2008-02-18T21:27:03Z</published>
    <updated>2008-02-18T22:03:46Z</updated>

    <summary>Numa das minhas andanças atrás de novidades, me deparei com o log5j. Primeiramente, pensei que fosse uma atualização do famoso framework para logging ou algum novo framework que trouxesse novidades em relação ao já famigerado log4j. Na verdade, não é...</summary>
    <author>
        <name>Felipe Coury</name>
        <uri>http://felipecoury.com</uri>
    </author>
    
        <category term="Downloads" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Produtividade" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="biblioteca" label="biblioteca" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="frameworks" label="frameworks" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="java" label="java" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="lib" label="lib" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="library" label="library" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="log" label="log" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="log4j" label="log4j" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="logging" label="logging" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.felipecoury.com/jep/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="log5j-picture.jpg" src="http://blog.felipecoury.com/jep/log5j-picture.jpg" width="200" height="150" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></span>Numa das minhas andanças atrás de novidades, me deparei com o <a href="http://code.google.com/p/log5j/">log5j</a>. Primeiramente, pensei que fosse uma atualização do <a href="http://logging.apache.org/log4j/">famoso framework</a> para logging ou algum novo framework que trouxesse novidades em relação ao já famigerado log4j.<br /><br />

Na verdade, não é nada disso. Trata-se apenas de um <i>face-lift</i> para o log4j, trazendo uma implementação mais atual. Esta biblioteca - que, diga-se de passagem, só tem uma classe - tem dois principais objetivos:<br /><br />

<u><strong>Permitir logs no estilo do comando <i>printf</i>:</strong></u><br /><br />

<blockquote>Antes:
<pre name="code" class="java">
log.error(
   "Houve um erro: " + foo + 
   " por causa disso: " + bar + 
   " nisso: " + car );
</pre>

Depois:
<pre name="code" class="java">
log.error(
   "Houve um erro: %s por causa disso: %s nisso: %s", 
   foo, bar, car);
</pre>

Além de prováveis ganhos de performance, acredito que o código fique bem mais limpo.
<br/><br/></blockquote>

<u><strong>Acabar com o inconveniente Logger.getLogger(NomeDaClasse.class):</strong></u>
<br/><br/>

<blockquote>Antes:
<pre name="code" class="java">
private static final Logger log = 
   Logger.getLogger(NomeDaClasse.class);
</pre>

Depois:
<pre name="code" class="java">
private static final Logger log = new Logger();
</pre></blockquote>

E é isso, simples assim... Eu gostei bastante porque é extremamente simples e despretensioso, mas agrega duas funcionalidades que há tempos eu gostaria de ver no Log4J.
<br/><br/>
Vocês acham que vale a pena usar essa lib? Porque? Mandem comentários!

<br/><br/><hr width="60%"><br/>

Links:
<ul>
	<li>Página do projeto no Google Code - <a href="http://code.google.com/p/log5j/">http://code.google.com/p/log5j/</a></li>
	<li>Blog do criador - <a href="http://feedblog.org/2007/10/29/log5j/">http://feedblog.org/2007/10/29/log5j/</a></li>
</ul>]]>
        
    </content>
</entry>

<entry>
    <title>Servidor HTTP light e descomplicado no Java 6</title>
    <link rel="alternate" type="text/html" href="http://blog.felipecoury.com/jep/2008/02/httpserver-descomplicado-no-ja.html" />
    <id>tag:blog.felipecoury.com,2008:/jep//2.8</id>

    <published>2008-02-13T21:05:10Z</published>
    <updated>2008-02-14T01:27:05Z</updated>

    <summary> Poucas pessoas sabem, mas a versão 6 do JDK da Sun vem com um HttpServer light nativo. Não é necessário mais escrever http sobre socket ou utilizar alguma biblioteca externa. Mas atenção: esta classe está em um pacote da...</summary>
    <author>
        <name>Felipe Coury</name>
        <uri>http://felipecoury.com</uri>
    </author>
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="http" label="http" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="httpserver" label="httpserver" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="java" label="java" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="server" label="server" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sockets" label="sockets" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="tcpip" label="tcp/ip" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="web" label="web" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.felipecoury.com/jep/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="lightweight-1.jpg" src="http://blog.felipecoury.com/jep/lightweight-1.jpg" width="240" height="179" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></span>
Poucas pessoas sabem, mas a versão 6 do JDK da Sun vem com um HttpServer <em>light</em> nativo. Não é necessário mais escrever http sobre socket ou utilizar alguma biblioteca externa. Mas atenção: esta classe está em um pacote da sun e não há garantias que outras implementações java terão estas classes.<br /><br />De qualquer forma, é muito fácil utilizar a classe para resolver problemas onde seja necessário um HttpServer <i>out-of-the-box.<br /><br /></i>Tudo o que deve ser feito é criar uma nova instância da classe HttpServer (pacote com.sun.net.httpserver) através do método estático <i>create</i>, passando o IP e a porta aos quais o servidor irá ouvir, além do <i>backlog</i>, que é o tamanho da fila que o servidor irá armazenar com requests que estão esperando para serem atendidos.

<pre name="code" class="java">
HttpServer server = 
	HttpServer.create(new InetSocketAddress(8088), 0);
</pre>

Depois disso, você deve criar uma classe que implemente a interface <i>HttpHandler</i> para atender suas requisições. Nela é colocada a regra de negócio do que deve ser feito e o que deve ser respondido ao cliente. 
<br/><br/>
A cada novo request, o método <i>handle</i> é chamado, tendo um <i>HttpExchange</i> como parâmetro. Esta classe tem uma série de propriedades que facilitam a interação com o servidor. 
<br/><br/>
Por fim, você deve criar um contexto no qual este <i>handler</i> irá ser utilizado. O contexto nada mais é do que uma espécie de <i>virtual folder</i> para sua URL. Por exemplo, se você utilizar o contexto "/exemplo", o handler irá responder quaisquer requisições para <i>http://seuservidor:8088/exemplo</i> (incluindo arquivos dentro desta pasta, parâmetros e sub-pastas).

Veja este exemplo:
<pre name="code" class="java">
public static void main(String[] args) throws IOException {
	// cria um novo servidor que vai ouvir a porta 8088 local
	HttpServer server = 
		HttpServer.create(new InetSocketAddress(8088), 0);

	// cria um contexto com um HttpHandler dinâmico
	server.createContext("/exemplo", new HttpHandler() {

		@Override
		public void handle(HttpExchange xchg) 
			throws IOException {

			// corpo da resposta
			StringBuffer response = new StringBuffer();

			// o corpo da resposta será apenas uma indicação
			// de qual foi o método do request (GET / POST)
			response.append("&lt;html>&lt;body>");
			response.append("Request method: ");
			response.append(xchg.getRequestMethod());
			response.append("&lt;/body>&lt;/html>");

			// envia uma resposta de código 200 (OK) para 
			// o cliente e com o Content-Length, que é o 
			// tamanho da resposta
			xchg.sendResponseHeaders(200, response.length());
			
			// recupera o stream de saída
			OutputStream os = xchg.getResponseBody();
			// imprime nele a resposta
			os.write(response.toString().getBytes());
			// e fecha o stream (com try..finally talvez?)
			os.close();
		}
		
	});
	
	// por fim inicializamos o servidor
	server.start();
}
</pre>
Se você rodar esta classe e apontar seu servidor para o endereço mencionado, você vai ver a mensagem conforme abaixo:

<br/><br/>
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="httpserver-screenshot.jpg" src="http://blog.felipecoury.com/jep/httpserver-screenshot.jpg" width="344" height="126" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></span>

Porém se você for mais além, e tentar abrir várias requisições em paralelo, verá que a aplicação começará a responder de forma bem lenta. Para resolver o problema, precisamos criar uma thread para cada requisição. No meu caso criei uma classe que estende thread para atender cada uma das requisições:

<pre name="code" class="java">
public class HandleThread extends Thread {
    public HttpExchange xchg;
    
    public HandleThread(HttpExchange xchg) {
        this.xchg = xchg;
    }
    
    @Override
    public void run() {            
        try {
            // corpo da resposta
            StringBuffer response = new StringBuffer();

            // o corpo da resposta será apenas uma indicação
            // de qual foi o método do request (GET / POST)
            response.append("&lt;html>&lt;body>");
            response.append("Request thread: ");
            response.append(Thread.currentThread().getId());
            response.append("&lt;/body>&lt;/html>");

	    // o resto continua igual (...)
        }
        catch (Throwable t) {
            t.printStackTrace();
        }
    }
}
</pre>

Finalmente, alteramos a classe principal para criar uma thread a cada nova requisição:

<pre name="code" class="java">
// (...)
// cria um contexto com um HttpHandler dinâmico
server.createContext("/echo", new HttpHandler() {

    @Override
    public void handle(HttpExchange xchg) throws IOException {
        HandleThread ht = new HandleThread(xchg);
        ht.start();
    }
    
});
// (...)
</pre>

Vale a pena salientar que existe suporte nas APIs também a HTTPS (veja Javadoc nos links abaixo).
<br/><br/>
Estes exemplos têm apenas um caráter didático. Em uma aplicação séria, não seriam criadas threads a esmo: usaríamos um pool de threads e técnicas mais apuradas para controle de requisições. 
<br/><br/>
Mas acho que a idéia era esta: dar um apanhado geral de como usar estas novas classes, oferecidas pelo JDK 6.
<br/><br/>
Aguardo seus comentários sobre o que você pensa destas idéias.
<br/><br/>
<hr width="60%">
<br/>
Links:
<ul>
	<li>JavaDoc do pacote httpserver:<br/><a href="http://java.sun.com/javase/6/docs/jre/api/net/httpserver/spec/com/sun/net/httpserver/package-summary.html">http://java.sun.com/javase/6/docs/jre/api/net/httpserver/spec/com/sun/net/httpserver/package-summary.html</a></li>
	<li>Pedido de suporte a um servidor HTTP no Java 6 (post original)<br/><a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6270015">http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6270015</a></li>
</ul>]]>
        
    </content>
</entry>

<entry>
    <title>Faça seu próprio mouse ergonômico</title>
    <link rel="alternate" type="text/html" href="http://blog.felipecoury.com/jep/2008/02/faca-seu-proprio-mouse-ergonom.html" />
    <id>tag:blog.felipecoury.com,2008:/jep//2.7</id>

    <published>2008-02-13T04:31:59Z</published>
    <updated>2008-02-13T13:35:52Z</updated>

    <summary>Você acha que seu mouse é ergonômico? Pense novamente: Este mouse foi o vencedor do Red Dot Design Award. O Moudable Mouse (ou Mouse Moudável) é feito de massa de modelar, coberto com um tecido de nylon e poliuretano. Em...</summary>
    <author>
        <name>Felipe Coury</name>
        <uri>http://felipecoury.com</uri>
    </author>
    
        <category term="Design" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Produtividade" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Tecnologia" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="design" label="design" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="device" label="device" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="ergonomia" label="ergonomia" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mouse" label="mouse" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="produtividade" label="produtividade" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.felipecoury.com/jep/">
        <![CDATA[Você acha que seu mouse é ergonômico? Pense novamente:<img alt="lite-on-technology-mouldable-mouse.jpg" src="http://blog.felipecoury.com/jep/lite-on-technology-mouldable-mouse.jpg" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;" height="351" width="400" />
Este mouse foi o vencedor do <a href="http://www.red-dot.sg/concept/porfolio/06/13pw/R094MM.htm">Red Dot Design Award</a>. O Moudable Mouse (ou Mouse Moudável) é feito de massa de modelar, coberto com um tecido de nylon e poliuretano. Em sua base, feita de PC/ABS recicláveis contendo o Circuito Impresso, o laser ótico e as pilhas.<br /><br /> <div><br /><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="lite-on-technology-mouldable-mouse-detail.jpg" src="http://blog.felipecoury.com/jep/lite-on-technology-mouldable-mouse-detail.jpg" class="mt-image-center" style="margin: 0pt auto 20px; text-align: center; display: block;" height="193" width="240" /></span>
<br /><a href="http://www.geekologie.com/2008/01/mold_your_mouse_into_any_shape.php">Moudable Mouse</a> | via <a href="http://www.geekologie.com/">Geekologie</a><br /><br /><br /></div><div><br /></div>]]>
        
    </content>
</entry>

<entry>
    <title>Você já praticou uma soneca poderosa?</title>
    <link rel="alternate" type="text/html" href="http://blog.felipecoury.com/jep/2008/02/voce-ja-praticou-uma-power-nap.html" />
    <id>tag:blog.felipecoury.com,2008:/jep//2.6</id>

    <published>2008-02-13T02:20:36Z</published>
    <updated>2008-02-13T03:06:45Z</updated>

    <summary>Soneca poderosa parece coisa de português, não é? Mas não é nada disso, leia o artigo abaixo para algumas dicas para recarregar as baterias durante o dia.Muito já foi falado dos benefícios de dormir por um curto intervalo de tempo...</summary>
    <author>
        <name>Felipe Coury</name>
        <uri>http://felipecoury.com</uri>
    </author>
    
        <category term="Produtividade" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="produtividade" label="produtividade" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="rendimento" label="rendimento" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="soneca" label="soneca" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sono" label="sono" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="stress" label="stress" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="téncincas" label="téncincas" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.felipecoury.com/jep/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="powernap-option2.jpg" src="http://blog.felipecoury.com/jep/powernap-option2.jpg" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" height="132" width="200" /></span><p>Soneca poderosa parece coisa de português, não é? Mas não é nada disso, leia o artigo abaixo para algumas dicas para recarregar as baterias durante o dia.<br /></p><p>Muito já foi falado dos benefícios de dormir por um curto intervalo de tempo após o almoço para recuperar a energia e estimular o cérebro. Se você lê blogs de produtividade em geral, existem muitos conselhos para recuperar a energia durante um dia de trabalho. <br /><br />Não estamos falando das siestas, que duram horas. Esta "dormidinha" é conhecida como <i>power naps</i>, cochiladas poderosas ou - muito melhor - só soneca. <br /><br />Segundo seus defensores, estas sonecas reduzem o stress, aumentam a produtividade, melhoram a memória e a concentração, entre outras maravilhas.&nbsp; <br /><br />Para os que ainda não ouviram falar desta técnica, ela consiste em dormir de 20 a 30 minutos, acordando antes que comece a fase de sono profundo. <br /><br />Eu confesso que já usei esta técnica algumas vezes, favorecido pelo fato de trabalhar em regime Home Office. Os resultados foram diferentes, sendo que os melhores foram obtidos quando usei uma variação da Power Nap, que fiquei conhecendo através de um <a href="http://lifehacker.com/software/sleep/take-a-caffeine-nap-154237.php">artigo no blog lifehacker.com</a> chamado de caffeine nap.
<br /><br />Segue uma descrição, traduzida direto to artigo:<br /></p><blockquote>"<i>A Caffeine Nap é bem simples.&nbsp; Você deve tomar uma xícara de café e tirar uma soneca de 15 minutos imediatamente.&nbsp; Pesquisadores descobriram que o café ajuda a liberar seu corpo da </i><i>adenosina, uma substância que te faz ficar sonolento.&nbsp; Em alguns testes, uma combinação de uma xícara de café com uma tentativa imediata de adormecer deixou um maior estado de alerta por um maior período de tempo.&nbsp; A recomendação é de dormir apenas 15 minutos, não mais nem menos.&nbsp; E você deve deitar e tentar dormir imediatamente após tomar o café.</i>"<br /></blockquote>Eu aconselho que você experimente primeiro a cochilada tradicional, de 20 a 30 minutos, ainda mas se você não bebe café costumeiramente. Se achar que não está sendo o ideal, parta para a versão cafeinada.<br /><br />E você, qual a sua técnica para agüentar o dia-a-dia e recarregar as baterias? Deixe seu comentário!<br /><br /><hr width="60%"><br />Alguns artigos relacionados:<br /><br /><ul><li>Revista Opinião - O cochilo produtivo <a href="http://www.revistaopiniao.net/05.shtml"><br />http://www.revistaopiniao.net/05.shtml<br /><br /></a></li><li>Revista Veja - A redenção da soneca <a href="http://veja.abril.com.br/201206/p_090.html"><br />http://veja.abril.com.br/201206/p_090.html</a></li></ul><br /><br /> 
]]>
        

    </content>
</entry>

<entry>
    <title>Importando e Exportando Arquivos Texto em Java</title>
    <link rel="alternate" type="text/html" href="http://blog.felipecoury.com/jep/2008/02/java-text-import-export.html" />
    <id>tag:blog.felipecoury.com,2008:/jep//2.5</id>

    <published>2008-02-11T21:49:06Z</published>
    <updated>2008-06-07T22:02:59Z</updated>

    <summary>Uma coisa que eu sempre gostei de trabalhar é com conversão de dados. Sempre achei desafiador pegar dados em um formato proprietário de uma aplicação e tranformá-lo em algo interessante para outra aplicação.Durante minha carreira como Analista Desenvolvedor, já participei...</summary>
    <author>
        <name>Felipe Coury</name>
        <uri>http://felipecoury.com</uri>
    </author>
    
        <category term="Downloads" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Java" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Produtividade" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="arquivotexto" label="arquivo texto" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="downloads" label="downloads" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="java" label="java" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="produtividade" label="produtividade" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.felipecoury.com/jep/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="text.jpg" src="http://blog.felipecoury.com/jep/text.jpg" width="200" height="127" class="mt-image-right" style="float: right; margin: 0 0 20px 20px;" /></span>Uma coisa que eu sempre gostei de trabalhar é com conversão de dados. Sempre achei desafiador pegar dados em um formato proprietário de uma aplicação e tranformá-lo em algo interessante para outra aplicação.<br /><br />Durante minha carreira como Analista Desenvolvedor, já participei de diversas migrações de dados, já criei softwares para automação de conversão de interfaces, já utilizei toolkits prontos, como o Data Transformation Services do MS SQL. <br /><br />Foi esta experiência que me levou a conhecer um excepcional toolkit para importar, exportar e trabalhar com arquivos texto, mais conhecidos como <i>flat files.</i> Trata-se do <a href="http://www.filehelpers.com/">FileHelpers</a>, escrito pelo argentino Marcos Meli. O toolkit se aproveita de annotations para descrever o arquivo e transformá-lo de texto para um objeto ou vice-versa. O grande problema, para mim, deste toolkit é que ele está escrito em C# e eu utilizo Java no meu dia-a-dia. Então veio a idéia de fazer um port desta biblioteca. Nasceu então o <a href="http://sourceforge.net/projects/jfilehelpers">JFileHelpers</a>. A idéia inicial é ter as mesmas funcionalidades do FileHelpers, em Java.<br /><br />Mas chega de lero-lero, vamos às funcionalidades. Veja que interessante como fica um bean anotado pelo JFileHelpers:<br />
<pre name="code" class="java">@FixedLengthRecord()
public class Customer {
	@FieldFixedLength(4)
	public Integer custId;

	@FieldAlign(alignMode=AlignMode.Right)
	@FieldFixedLength(20)
	public String name;

	@FieldFixedLength(3)
	public Integer rating;

	@FieldTrim(trimMode=TrimMode.Right)
	@FieldFixedLength(10)
	@FieldConverter(converter = ConverterKind.Date, 
		format = "dd-MM-yyyy")
	public Date addedDate;
	
	@FieldFixedLength(3)
	@FieldOptional
	public String stockSimbol;	
}
</pre>
<br/>
Neste exemplo, estamos trabalhando com um arquivo de texto com delimitação, por exemplo:
<br/><br/>
<pre>
1   Antonio Pereira     10012-12-1978ABC
2   Felipe Coury          201-01-2007
3   Anderson Polga       4212-11-2007DEF
</pre>
<br/>
Tudo o que é necessário fazer, para ler este arquivo seria:
<br />
<pre name="code" class="java">
FileHelperEngine&lt;Customer> engine = 
	new FileHelperEngine&lt;Customer>(Customer.class);	
List&lt;Customer> customers = 
	new ArrayList&lt;Customer>();

customers = engine.readResource(
	"/samples/customers-fixed.txt");
</pre>
<br/>
E <i>voilá</i>: você tem um um <code>ArrayList</code> devidamente preenchido com objetos do tipo Customers, com todas as regras que você definiu. Note que a conversão do campo addedDate foi feita de forma transparente, usando as anotações de formatação:
<br/>
<pre name="code" class="java">
@FieldTrim(trimMode=TrimMode.Right)
@FieldFixedLength(10)
@FieldConverter(converter = ConverterKind.Date, 
	format = "dd-MM-yyyy")
public Date addedDate;
</pre>
<br/>
Além destas funcionalidades, o JFileHelpers permite que você faça o caminho inverso, ou seja, se você tem objetos anotados, ele pode fazer a persistência de forma extremamente fácil, veja no nosso exemplo:
<br/>
<textarea name="code" class="java">
FileHelperEngine<Customer> engine = 
	new FileHelperEngine<Customer>(Customer.class);	
List<Customer> customers = new ArrayList<Customer>();

customers = engine.readResource(
	"/samples/customers-fixed.txt");

// recupera o cliente 3 - Anderson Polga
Customer c = customers.get(2);
// faz algumas alteração em seus campos
c.rating = 82;
c.stockSimbol = "APR";

// remove o primeiro cliente - Antonio Pereira
customers.remove(0);

// escreve o arquivo de saída
engine.writeFile("customers-fixed-out.txt", customers);
</textarea>
O arquivo para este exemplo ficaria:<br/><br/>
<pre>
   2        Felipe Coury  201-01-2007   
   3      Anderson Polga 8212-11-2007APR
</pre>
<br/>
Isto é apenas o começo. Existem muito mais funcionalidades fantásticas no JFileHelpers (como por exemplo, trabalhar com arquivos delimitados, entre outros). Porém, sou suspeito para falar porque sou o pai da criança. Então sugiro que, se você quiser fazer alguns testes e conhecer melhor esta biblioteca, faça o download dos <span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://blogs.felipecoury.com/jep/jfilehelpers/jfilehelpers-0.1a-20071016.jar">binários</a></span> dos <span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://blogs.felipecoury.com/jep/jfilehelpers/jfilehelpers-src-0.1a-20080211.rar">arquivos fontes</a></span>.
<br/><br/>
Agora, se você se empolgar e quiser contribuir para o projeto, entre na <a href="http://sourceforge.net/projects/jfilehelpers">página do SourceForge</a> e cadastre-se como desenvolvedor, você será muito bem vindo. Em caso de dúvidas, <a href="mailto:contato@felipecoury.com">entre em contato comigo</a>, que eu terei prazer em ajudar.
<br/><br/>
<hr width="60%">
<br/>
<b>Links:</b>
<ul>
	<li>Página do Projeto: <a href="http://www.jfilehelpers.com">http://www.jfilehelpers.com</a></li>
	<li>Página do JFileHelpers no SF.Net: <a href="http://sourceforge.net/projects/jfilehelpers">http://sourceforge.net/projects/jfilehelpers</a></li>
	<li>Projeto Inspirador - FileHelpers: <a href="http://filehelpers.com">http://filehelpers.com</a></li>
	<li>Código Fonte: <span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://blog.felipecoury.com/jep/jfilehelpers/jfilehelpers-src-0.1a-20080211.rar">jfilehelpers-src-0.1a-20080211.rar</a></span></li>
	<li>Binário: <span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://blog.felipecoury.com/jep/jfilehelpers/jfilehelpers-0.1a-20071016.jar">jfilehelpers-0.1a-20071016.jar</a></span></li>
</ul>
]]>
        
    </content>
</entry>

<entry>
    <title>Comandos Unix no Windows (sem Cygwin)</title>
    <link rel="alternate" type="text/html" href="http://blog.felipecoury.com/jep/2008/02/comandos-unix-no-windows-sem-c.html" />
    <id>tag:blog.felipecoury.com,2008:/jep//2.4</id>

    <published>2008-02-10T09:13:03Z</published>
    <updated>2008-02-10T16:25:58Z</updated>

    <summary> Quantas vezes você, depois de algumas sessões em um servidor remoto, via SSH ou algo parecido, se pegou digitando tail -f SystemOut.log ou coisa parecida? Ainda sente falta do grep na linha de comando? Normalmente, o que poderia ser...</summary>
    <author>
        <name>Felipe Coury</name>
        <uri>http://felipecoury.com</uri>
    </author>
    
        <category term="Downloads" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Produtividade" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="downloadsprodutividadeferramentasutilitários" label="downloads produtividade ferramentas utilitários" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.felipecoury.com/jep/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="unix.jpg" src="http://blog.felipecoury.com/jep/unix.jpg" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" height="150" width="200" /></span>
Quantas vezes você, depois de algumas sessões em um servidor remoto, via SSH ou algo<span class="mt-enclosure mt-enclosure-image" style="display: inline;"></span>
<span class="mt-enclosure mt-enclosure-image" style="display: inline;"></span> parecido, se pegou digitando <code>tail -f SystemOut.log</code> ou coisa parecida? Ainda sente falta do grep na linha de comando? Normalmente, o que poderia ser feito era instalar o Cygwin, e daí usar os comandos.<br /><br />Poderia, porque agora é possível utilizar todos aqueles comandos de Linux / Unix, sem maiores pré-requisitos. Faça o download do <a href="http://sourceforge.net/projects/unxutils/">UnxUtils</a> e acabe com a sua frustração.<br /><br /><a href="http://sourceforge.net/projects/unxutils/">UnxUtils</a> | via <a href="http://lifehacker.com/354014/get-gnu-tools-on-windows-with-unixutils">Lifehacker</a><br /> ]]>
        
    </content>
</entry>

<entry>
    <title>Intimidação Verbal (ou como trabalhar com um chefe nervosinho)</title>
    <link rel="alternate" type="text/html" href="http://blog.felipecoury.com/jep/2008/02/intimidacao-verbal-ou-como-tra.html" />
    <id>tag:blog.felipecoury.com,2008:/jep//2.3</id>

    <published>2008-02-09T21:12:23Z</published>
    <updated>2008-02-10T01:30:11Z</updated>

    <summary>Poucos são os sortudos que nunca tiveram que se reportar a um chefe histérico, profundo admirador da arte da intimidação, defensor árduo do lema de que empregado sob pressão trabalha melhor.Até aí, tudo bem. O problema começa quando você se...</summary>
    <author>
        <name>Felipe Coury</name>
        <uri>http://felipecoury.com</uri>
    </author>
    
        <category term="Produtividade" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="produtividaderelacionamentointimidaçãoconflitospessoais" label="produtividade relacionamento intimidação conflitos pessoais" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="en" xml:base="http://blog.felipecoury.com/jep/">
        <![CDATA[<span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="intimidacao-verbal.jpg" src="http://blog.felipecoury.com/jep/intimidacao-verbal.jpg" class="mt-image-right" style="margin: 0pt 0pt 20px 20px; float: right;" height="161" width="200" /></span>Poucos são os sortudos que nunca tiveram que se reportar a um chefe histérico, profundo<span class="mt-enclosure mt-enclosure-image" style="display: inline;"></span> admirador da arte da intimidação, defensor árduo do lema de que empregado sob pressão trabalha melhor.<br /><br />Até aí, tudo bem. O problema começa quando você se vê em uma discussão onde fica difícil até recuperar o fôlego, ficando extremamente difícil retrucar um por um todos os pontos que são jogados na sua cara, como se fosse uma metralhadora.<br /><br />Acredite: existe uma saída. Se você conhecer as armas da outra parte e tiver a consciência (a porque não a coragem) de se manter calmo e centrado, você pode revidar. Pode não, deve. Neste artigo, vou tentar mostrar algumas armas utilizadas por estas pessoas, e como invertê-las, transformando-as em armas a seu favor.<br /><br />Segue abaixo uma compilação inspirada em um artigo que li no excelente Blog de Jay Morrisey. Para começar no clima, vou traduzir a primeira frase de seu artigo: "Olho por olho faria todo mundo ficar cego, mas eu prefiro ser cego do que ver um covarde no espelho". É bem por aí. <br /><br /><b><font style="font-size: 1.25em;">Intimidação Verbal</font></b><br /><br />A intimidação verbal é a melhor arma de um covarde, em um mundo onde a violência física é cada vez menor. Este tipo de intimidação é a mais usada por advogados, grandes rivais em grandes empresas, policiais e... chefes!<br /><br /><font style="font-size: 1.25em;"><b>Técnicas de Intimidação<br /></b></font><br />Cada técnica empregada por quem está tentando intimidar tem sempre um só objetivo: tirar o poder de você. Existe um espírito de batalhador em cada um de nós, é esse espírito que nos faz acordar de manhã e enfrentar o mundo. O intimidador tenta, de todas as formas, tirar este poder de você, seja deixando você nervoso, duvidando de si mesmo ou até fazendo você engasgar enquanto fala.<br /><br />Seu objetivo então deve também ser um só: nunca entregar seu poder. Você vai sempre conseguir mantê-lo se permanecer calmo, confiante e principalmente, equipado com as respostas aqui mostradas.<br /><br /><font style="font-size: 1.25em;"><b>Interrupção<br /></b></font><br />Ao usar esta técnica, o intimidador faz uma pergunta, e imediatamente corta sua resposta. O resultado é que o alvo fica sem espaço para se explicar, ficando com medo do que pode ser a próxima questão. O medo de ser mal-interpretado gera a ansiedade e o nervosismo, muitas vezes fazendo a vítima se sentir pequena e tomando assim sua confiança para revidar.<br /><br /><b>Sua Defesa - Diminuir o Ritmo</b><br /><br />Se alguém tentar cortar suas respostas, faça uma pausa e responda de forma bem educada:<br /><blockquote><i><br />Eu vou responder sua próxima pergunta assim que eu estiver terminado esta.</i><br /></blockquote>Talvez você receba uma resposta do tipo "A gente já passou dessa", ou algo similar. Você deve responder de forma confiante:<br /><blockquote><br /><i>Não vamos sim passar desta, assim que eu terminar de responder.</i><br /></blockquote>É extremamente importante que você responda de forma calma e usando um tom que não expresse emoção. Não fique com medo de responder assim. Seu objetivo é tirar o poder do intimidador. Ele vai tentar retomar o controle da conversa, tentando novamente te interromper. Você deve sempre tentar diminuir o ritmo da conversa. Insista sempre em dizer "Eu ainda não terminei" em toda tentativa de interrupção.<br /><br /><font style="font-size: 1.25em;"><b>Gritar</b></font><br /><br />Grandes gerentes de cabeça quente podem algumas vezes se sentirem como verdadeiros deuses nos seus ambientes de trabalho. Além de ter criado o escritório em 7 dias, eles gritam com empregados como se fossem crianças. Não deixe que isso acontece com você. Existem apenas duas pessoas que têm o direito de te tratar assim: seu pai e sua mãe.<br /><br />Se você permitir que gritem com você, ou tentar entrar numa disputa de gritos, pronto! Seu intimidador tomou seu poder e alcançou seu objetivo.<br /><br /><b>Sua Defesa - Humilhação Súbita</b><br /><br />Embora isso pareça um pouco contra-producente para sua carreira, você deve imprimir uma forma de humilhação súbita. Na verdade, você precisa humilhar quem está te atacando mantendo a calma e fazendo-os parecer um dramalhão. Uma situação descrita no blog que usei como referência, ilustra bem este cenário: um empregado que foi atacado verbalmente por um alto gerente. Enquanto o gerente aumentava sua voz para declarar seu domínio, o empregado dizia:<br /><br /><blockquote><i>Entendo sua preocupação, embora eu realmente ache que você está sendo muito emocional agora. Vamos discutir isso quando você conseguir se acalmar.</i><br /></blockquote>A raiva nos olhos do gerente aumentou umas dez vezes. Numa tentativa desesperada de parecer dominante, ele aumentou ainda mais sua voz e respondeu:<br /><br /><blockquote><i>De jeito nenhum! Estamos discutindo isso agora!</i><br /></blockquote>Foi quando o empregado se levantou e respondeu, em um tom bem leve e calmo:<br /><br /><blockquote><i>Eu vou conversar com você, mas não vou deixar que você grite comigo. Você é meu chefe e eu lhe respeito, mas você não é minha mãe.</i><br /></blockquote>Este empregado conseguiu manter seu poder e reverteu o efeito do agressor. Num esforço para manter o controle da situação, o gerente ficou parecendo muito emocional. O controle então foi transferido para o empregado, que depois tomou o cargo de gerente depois de seis meses. Assim como no Judô, use o poder e peso do agressor contra ele mesmo.<br /><br /><font style="font-size: 1.25em;"><b>Enxurrada de Informações</b></font><br /><br />Este tática é normalmente utilizada por grandes advogados na tentativa de obter um acordo intimidando um membro do público. Ao inundar a vítima com jargão e documentos técnicos, referências a leis, a vítima se sente perdida e tem uma sensação de estar se afogando.Os advogados que praticam esta técnica têm total conhecimento que membros do público em geral não entendem as referências e precedentes. Eles não estão tentando ser informativos, apenas intimidar. Ao te fazer sentir perdido, você está muito mais suscetível a cooperar com suas intenções. NÃO permita que alguém lhe faça sentir assim.<br /><br /><b>Sua Defesa - Curiosidade Ingênua</b><br /><br />Curiosidade ingênuo é quando você fica entusiasmado em aprender algo novo. Esta atitude vai fazer seu intimidador ficar maluco. Seu objetivo é deixá-los explicar tudo pra você, e parecer extremamente faminto em aprender. Ele está tentando te ameaçar, mas você age como uma criança que está aprendendo a jogar cartas. Você está sorridente, atento e fazendo várias perguntas. Enquanto ele joga suas leis, você sorri, concorda e os faz explicar cada pequeno detalhe. Trate isso como edução de escola. Não entregue seu poder. Enquanto você manter sua confiança, você já tem um vantagem.<br /><br /><font style="font-size: 1.25em;"><b>A Isca</b></font><br /><br />Assim como na pesca, a isca é usada para te atrair para um ataque inesperado. O objetivo do intimidador aqui é jogar frases que lhe acuse ou te machuque de alguma forma, dentro de uma conversa inocente que você está tendo, para te atrair. Um exemplo:<br /><br /><blockquote><i>Olá Sofia, sei que você está extremamente ocupada, mas eu preciso deste relatório para amanhã antes do almoço. Esse é tão simples que acho que até você consegue! Obrigado.</i><br /></blockquote>A isca é o "até você". Se a Sofia for como a maioria das pessoas, ela vai morder a isca e responder algo como:<br /><br /><blockquote><i>O que você quer dizer com "até eu consigo"? Eu trabalho aqui todo dia por 8 anos e...</i><br /></blockquote><b>Sua Defesa - Ignorar a Isca</b><br /><br />Sofia mordeu a isca, e agora ela está justificando sua existência para o intimidador. Para esta justificativa, ele poderia apenas responder: "não precisa exagerar". E assim, Sofia já perdeu seu poder na conversa. O objetivo dela (e seu também) deve ser NÃO morder a isca. Ignore. Faça de conta que você nem ouviu.<br /><br />Isso vai fazer o intimidador desistir. Você não deu a ele a resposta que ele tanto esperava. Você não tem mais que se explicar. <br /><br />Se alguém te jogar uma isca, esta pessoa está querendo que você fique preocupada e descontrolada emocionalmente - e as vezes se passar por tolo. Apenas responda, ignorando solenemente a isca. Se você repetir este processo com pessoas que o usam este artifício rotineiramente, eles vão parar de uma vez por todas.<br /><br /><font style="font-size: 1.25em;"><b>Conclusão</b></font><br /><br />A lição é simples: ou você aprende a regra do jogo, ou nunca conseguirá mudar as coisas. Jogue com as armas do seu oponente. O esperto não é aquele que responde de forma animal, esperto é aquele que usa de artifícios inteligentes para superar problemas. O poder é seu, não deixe que o tirem de você.<br /><div><br /></div><div><br /></div>]]>
        
    </content>
</entry>

</feed>
