<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;AkUMQ3ozfSp7ImA9WhRXF0k.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500</id><updated>2011-12-24T15:38:02.485-02:00</updated><category term="loucuras mesmo" /><category term="dicas" /><category term="ecilpse" /><category term="bash" /><category term="java" /><category term="hacks" /><category term="diversão" /><category term="tutorial" /><title>ronoblog</title><subtitle type="html">Sobre a vida, software e tudo mais entre eles...</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.ronoaldo.net/" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/RonoaldoPereira" /><feedburner:info uri="ronoaldopereira" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;Dk8EQX85cSp7ImA9WhRXFkg.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-5491923366337922500</id><published>2011-12-21T17:53:00.000-02:00</published><updated>2011-12-23T13:40:00.129-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-23T13:40:00.129-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ecilpse" /><category scheme="http://www.blogger.com/atom/ns#" term="bash" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><title>Instalando features do Eclipse via linha de comando com Provision Platform, p2</title><content type="html">O &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; é a minha IDE favorita, por algumas razões:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OpenSource&lt;/strong&gt;: sendo uma ferramenta de código livre, além de ser possível contribuir, analisar, reutilizar o código-fonte e aprender com o mesmo, a comunidade de desenvolvedores ao redor do mundo pode ampliar os horizontes da plataforma com suas contribuições.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-plataforma&lt;/strong&gt;: assim como a maior parte das ferramentas open-source, o Eclipse também é multi-plataforma, oferecendo assim ainda mais liberdade para que você trabalhe no ambiente que lhe proporciona mais segurança e mais recursos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multi-linguagem&lt;/strong&gt;: como todo bom programador, eu não sou viciado em uma única linguagem, e procuro sempre utilizar a linguagem apenas como ferramenta. Apesar de ter trabalhando recentemente mais com a linguagem Java, Python, C e C++, PHP são outros sabores que eu aprecio. Claro, um pouco de shell script para automatizar tarefas corriqueiras são uma boa pedida. O Eclipse lhe oferece um ambiente uniforme para trabalhar com as linguagens, o que para mim é um fator importante, evitando atritos ao programar em mais de uma linguagem em curtos intervalos de tempo.&lt;/li&gt;
&lt;/ul&gt;
Por estes e outros motivos, me tornei um &lt;a href="http://www.ronoaldo.net/noticias/friendofeclipse"&gt;Amigo do Eclipse&lt;/a&gt;, e fiz uma modesta contribuição para o projeto. Recentemente, descobri um recurso da plataforma que facilita automatizar a instalação de plugins via linha de comando. Este recurso permite que você faça a instalação de uma série de plugins de uma única vez, realize deploys ou até mesmo, construa a partir de sua própria seleção de plugins, uma versão customizada da IDE.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Background&lt;/span&gt;&lt;br /&gt;
O processo faz uso de um recurso da plataforma do Eclipse chamado Provisioning Platform (p2). Especificamente, uma aplicação do p2 chamada Director [1]. Com esta aplicação, é possível automatizar o processo via linha de comando.&lt;br /&gt;
&lt;br /&gt;
Basicamente, tudo que você tem a fazer é executar a aplicação org.eclipse.equinox.p2.director, e informar as features a serem instaladas, bem como os repositórios a serem consultados para resolução de dependências.&lt;br /&gt;
&lt;br /&gt;
Tecnicamente, este é o mesmo processo que a interface gráfica realiza, com exceção de que você está automaticamente concordando com as licenças dos softwares que está instalando, uma vez que a tela de confirmação não é exibida.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Passo a passo&lt;/span&gt;&lt;br /&gt;
Terminologia básica para o processo de instalação:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Director&lt;/b&gt;: a aplicação do Eclipse que está realizando a instalação ou remoção de software. Ela está no bundle org.eclipse.equinox.p2.director.app.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Builder&lt;/b&gt;: uma aplicação baseada na plataforma do Eclipse que contém o bundle do Director e suas dependências. Pode ser utilizado, por exemplo, para criar uma nova instalação de plugins (modo shared) ou da IDE completa em um diretório diferente.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Produto alvo&lt;/b&gt;: uma aplicação alvo onde o software será instalado. Pode ser o mesmo do Builder, quando você quer instalar plugins e features em uma versão da IDE, como o Java EE.&lt;/li&gt;
&lt;/ul&gt;
Tudo que precisamos é do &lt;b&gt;p2 Director&lt;/b&gt; para começar. O modo mais fácil é você já ter baixado o Eclipse para Java, Java EE ou qualquer outro de sua preferência, e começar a adicionar um conjunto de plugins. Você também pode, por exemplo, criar também uma aplicação mínima do eclipse que tenha apenas o Director e então, criar um instalador para baixar um pacote completo.&lt;br /&gt;
&lt;br /&gt;
Vamos supor que você tenha baixado o Eclipse for Java EE Developers, e queira adicionar o Mobile Tools For Java (MTJ). Para isso, você precisará utilizar o seguinte comando (supondo que o binário ou script launcher do Eclipse esteja em seu PATH):&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="pretty"&gt;&lt;/pre&gt;
&lt;pre class="pretty"&gt;$ eclipse -nosplash -application org.eclipse.equinox.p2.director -repository http://download.eclipse.org/releases/indigo/ -installIU org.eclipse.mtj.feature.group -tag “Added-org.eclipse.mtj.feature.group”
&lt;/pre&gt;
&lt;br /&gt;
O parâmetro &lt;strong&gt;-nosplash&lt;/strong&gt; evita que a tela de splash seja exibida e fique congelada, já que não precisamos de interface gráfica. Com o parâmetro &lt;strong&gt;-application&lt;/strong&gt;&amp;nbsp;indicamos que o Director deve ser iniciado e não a Workbench. Os parâmetros seguintes, &lt;strong&gt;-repository&lt;/strong&gt; e &lt;strong&gt;-installIU&lt;/strong&gt;, permitem configurar, respectivamente, de onde os plugins e features serão baixados e quais &lt;em&gt;instalation units&lt;/em&gt; devem ser adicionadas (plugins, features ou feature-groups). Esses dois parâmetros recebem uma lista separada por vírgulas, o que permite instalar vários plugins de diferentes fontes ao mesmo tempo. O parãmetro &lt;strong&gt;-tag&lt;/strong&gt; permite marcar o que foi feito nesta operação, assim fica fácil “reverter” pela itnerface gráfica do Eclipse (ou mesmo pelo director) para uma tag mais antiga caso a instalação falhe.&lt;br /&gt;
&lt;br /&gt;
Depois de rodar este comando, você vai ver algumas linhas no prompt:&lt;br /&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;pre class="pretty"&gt;Installing org.eclipse.mtj.feature.group 1.1.2.201109111413.
Operation completed in 337201 ms.
&lt;/pre&gt;
&lt;br /&gt;
Ao iniciar novamente o Eclipse, você vai poder confirmar que o MTJ foi adicionado com sucesso ao sistema:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-Nfke_EDZaiM/TvFe8f6lj4I/AAAAAAAAA44/B8f1bQkt1lY/s1600/eclipse-p2-fig1.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="" border="0" src="http://1.bp.blogspot.com/-Nfke_EDZaiM/TvFe8f6lj4I/AAAAAAAAA44/B8f1bQkt1lY/s1600/eclipse-p2-fig1.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Você pdoe conferir nossa tag clicando em &lt;em&gt;Help → About Eclipse&lt;/em&gt;, depois no botão &lt;em&gt;Instalation Details&lt;/em&gt;. Na aba &lt;em&gt;Instalation History&lt;/em&gt;, você vai ver:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-1MS0EquQcZc/TvFe9hWWzPI/AAAAAAAAA5A/TUjHLa32tn8/s1600/eclipse-p2-fig2.png" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img alt="" border="0" src="http://3.bp.blogspot.com/-1MS0EquQcZc/TvFe9hWWzPI/AAAAAAAAA5A/TUjHLa32tn8/s1600/eclipse-p2-fig2.png" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Apesar dos parâmetros -repository e -feature aceitarem multiplas opções separadas por vírgula, eu notei que ao tentar instalar muitos plugins em uma única vez pode resultar em conflitos. Eu acredito que o &lt;i&gt;resolvedor&lt;/i&gt; de dependências começa a ficar confuso. Eu também notei isso na própria interface gráfica, via Eclipse Marketplace ao tentar instalar o Google Plugin + SDKs, Apache Ivy e Pydev ao mesmo tempo.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;p2-install&lt;/span&gt;&lt;br /&gt;
O que me motivou a descobrir este recurso foi ter que, nas últimas semanas, configurar várias vezes uma mesma instalação do Eclipse padrão com as ferramentas do Google Plugin for Eclipse, SDKs do AppEngine e Google Webtoolkit, Apache Ivy e IvyDE, e o MercurialEclipse. Este conjunto de ferramentas é o mínimo &amp;nbsp;essencial no meu emprego atual. Como erros intermitentes ao baixar todas de uma vez só pelo Eclipse Marketplace, tive que procurar uma alternativa.&lt;br /&gt;
&lt;br /&gt;
O trabalho rendeu até um pequeno script que eu compartilhei no Bitbucket no projeto &lt;a href="http://code.ronoaldo.net/ronoaldo-utils/"&gt;ronoaldo-utils&lt;/a&gt;.&amp;nbsp;O script já facilita um pouco com alguns defaults, prevê multiplas instalações do Eclipse e permite que você faça também um “discover” pelos feature-groups disponíveis.&lt;br /&gt;
&lt;br /&gt;
Veja o &lt;a href="http://code.ronoaldo.net/ronoaldo-utils/src/505f862f2b28/p2-install.sh"&gt;código-fonte aqui&lt;/a&gt;.&amp;nbsp;Se tiver alguma sugestão ou melhoria, crie um fork e submita um patch!&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Próximos Passos&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;
Além de instalar plugins e feature groups (Uma feature ou grupo de features composta por vários plugins), o Director permite que você instale em um outro diretório: ou seja, instale a partir de uma aplicação, tendo uma aplicação diferente como alvo. O interessante é que você pode baixar e construir a IDE inteira com este recurso. Outra ferramenta interessante do p2 é que você pode também fazer mirror e gerenciar repositório com os plugins. Ao ler isso, imaginei uma forma bem interessante de realizar o deploy de versões já pré-configuradas do Eclipse via linha de comando, para diversas máquinas, como em um laboratório ou departamento de TI. Mas, isso é assunto para outro post...&lt;br /&gt;
&lt;br /&gt;
Happy hacking!&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: large;"&gt;Referências&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
[1] Provisioning Platform, p2 - Instalation management&amp;nbsp;&lt;a href="http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc.isv/guide/p2_director.html"&gt;http://help.eclipse.org/indigo/topic/org.eclipse.platform.doc.isv/guide/p2_director.html&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-5491923366337922500?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/J4oXOHyFQ3HyyRXSg5RHfxpuiQk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J4oXOHyFQ3HyyRXSg5RHfxpuiQk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/J4oXOHyFQ3HyyRXSg5RHfxpuiQk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/J4oXOHyFQ3HyyRXSg5RHfxpuiQk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/j63d_EtoTbY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/5491923366337922500/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2011/12/instalando-features-do-eclipse-via.html#comment-form" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/5491923366337922500?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/5491923366337922500?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/j63d_EtoTbY/instalando-features-do-eclipse-via.html" title="Instalando features do Eclipse via linha de comando com Provision Platform, p2" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-Nfke_EDZaiM/TvFe8f6lj4I/AAAAAAAAA44/B8f1bQkt1lY/s72-c/eclipse-p2-fig1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2011/12/instalando-features-do-eclipse-via.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYNRHcyfip7ImA9WhdVFE0.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-2014591926414281018</id><published>2011-09-17T15:17:00.001-03:00</published><updated>2011-09-18T23:43:15.996-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-18T23:43:15.996-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="dicas" /><title>Calculando MD5 e SHA1 em Java</title><content type="html">&lt;a href="http://pt.wikipedia.org/wiki/Hash"&gt;Hashes&lt;/a&gt; são extremamente úteis para representar em uma pequena cadeia de bits uma outra cadeia de bits que pode ser bem maior. Podemos considerá-lo uma forma de &lt;i&gt;criptografia assimétrica&lt;/i&gt;, uma vez que não é possível (a não ser por meio de algoritmos de força bruta) recuperar a cadeia original a partir do hash.&lt;br /&gt;
&lt;br /&gt;
Existem diversos algoritmos para o cálculo de hashes, e em Java utilizamos a classe &lt;a href="http://download.oracle.com/javase/1,5.0/docs/api/java/security/MessageDigest.html" target="_blank"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;MessageDigest&lt;/span&gt;&lt;/a&gt; para recuperar a implementação desejada. Por exemplo, para calcular o MD5 de uma string, podemos utilizar:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint notranslate"&gt;MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update("string original".getBytes());
byte[] digest = md5.digest();
&lt;/pre&gt;
&lt;br /&gt;
Para exibir os dados como string, recurso util quando você pretende utilizar o MD5 para conferir se todos os bytes de um arquivo foram baixados, basta formatá-lo com:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint notranslate"&gt;String.format("%1$032x", new BigInteger(1, digest));&lt;/pre&gt;
&lt;br /&gt;
O resultado é exatamente o hash MD5 da string:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint notranslate"&gt;~$ echo "string original" | md5sum
3ced9d1f470cd18f06a8b6492d3ea94e &amp;nbsp;-
&lt;/pre&gt;
&lt;br /&gt;
Neste exemplo, utilizamos a string de formatação "%1$032x", porque queremos o resultado em hexadecimal, alinhado em 32 casas à esquerda. Construímos um BigInteger positivo, com os bits resultantes da soma, e isso nos permite converter os bytes do array para hexadecimal de forma simples.&lt;br /&gt;
&lt;br /&gt;
Podemos fazer de forma semelhante ao calcular o SHA1:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint notranslate"&gt;&lt;span class="Apple-style-span"&gt;MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
&lt;/span&gt;&lt;span class="Apple-style-span"&gt;sha1.update("string original".getBytes());
byte[] digest = &lt;/span&gt;sha1.digest();
&lt;span class="Apple-style-span"&gt;String.format("%1$040x", new BigInteger(1, digest));&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
Generalizando, você pode também utilizar os seguinte métodos:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint notranslate"&gt;public static String computeHash(String data, String algoritm,
        Integer resultSize) {
    try {
        MessageDigest digest = MessageDigest.getInstance(algoritm);
        digest.update(data.getBytes());
        return hexdigits(digest.digest(), resultSize);
    } catch (NoSuchAlgorithmException e) {
        throw new RuntimeException("Unable to hash with " + algoritm);
    }
}

public static String hexdigits(byte[] data, Integer resultSize) {
    return String
            .format("%1$0" + resultSize + "x", new BigInteger(1, data));
}
&lt;/pre&gt;
&lt;br /&gt;
Até a próxima dica!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-2014591926414281018?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UboOsUxJjYdWt2Y8W1_x7dDRsaE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UboOsUxJjYdWt2Y8W1_x7dDRsaE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UboOsUxJjYdWt2Y8W1_x7dDRsaE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UboOsUxJjYdWt2Y8W1_x7dDRsaE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/qDv1oaIIQKI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/2014591926414281018/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2011/09/calculando-hashes-em-java.html#comment-form" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/2014591926414281018?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/2014591926414281018?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/qDv1oaIIQKI/calculando-hashes-em-java.html" title="Calculando MD5 e SHA1 em Java" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2011/09/calculando-hashes-em-java.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ABQHo4eCp7ImA9WhdXEko.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-5460763165248251328</id><published>2011-08-25T08:29:00.000-03:00</published><updated>2011-08-25T08:29:11.430-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-25T08:29:11.430-03:00</app:edited><title>Coletânea de Soluções do GDD-BR</title><content type="html">O &lt;a href="http://www.google.com.br/events/developerday/2011/sao-paulo/"&gt;Google Developer Day Brasil 2011&lt;/a&gt; teve suas inscrições encerradas na última sexta-feira. Na empresa onde trabalho, eu e meus colegas fizemos &lt;a href="http://code.ronoaldo.net/gddbr-2011/overview"&gt;uma coletânea de soluções em Java&lt;/a&gt; e estamos compartilhando com o mundo hoje!&lt;br /&gt;
&lt;br /&gt;
As soluções são apenas para fins de &lt;i&gt;exercício&lt;/i&gt; e oferecem diferentes visões de como podemos resolver o problema. Obviamente, para publicar nossas respostas o mais rápido possível, não &lt;i&gt;otimizamos&lt;/i&gt; o código, e resolvemos as questões da primeira forma que nos veio em mente.&lt;br /&gt;
&lt;br /&gt;
Deixem suas opiniões e comentários! E, claro, podem ficar à vontade para clonar o repositório de códigos de exemplo.&lt;br /&gt;
&lt;br /&gt;
Se você gostaria de contribuir com sua solução, deixe um comentário que eu entro em contato para habilitar push no repositório. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-5460763165248251328?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/4gxMhuPPeG2GjAjODCIG9ZpeiRQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4gxMhuPPeG2GjAjODCIG9ZpeiRQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/4gxMhuPPeG2GjAjODCIG9ZpeiRQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/4gxMhuPPeG2GjAjODCIG9ZpeiRQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/6A5TV0aWPPA" height="1" width="1"/&gt;</content><link rel="related" href="http://code.ronoaldo.net/gddbr-2011/overview" title="Coletânea de Soluções do GDD-BR" /><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/5460763165248251328/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2011/08/coletanea-de-solucoes-do-gdd-br.html#comment-form" title="3 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/5460763165248251328?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/5460763165248251328?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/6A5TV0aWPPA/coletanea-de-solucoes-do-gdd-br.html" title="Coletânea de Soluções do GDD-BR" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2011/08/coletanea-de-solucoes-do-gdd-br.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIFRnk-cSp7ImA9WhdSF04.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-3322360573139419212</id><published>2011-07-26T23:41:00.000-03:00</published><updated>2011-07-26T23:41:57.759-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-26T23:41:57.759-03:00</app:edited><title>Pelo mundo (virtual) afora</title><content type="html">No ano passado tive um &lt;i&gt;acesso de inspiração&lt;/i&gt;&amp;nbsp;e publiquei alguns cliparts no OpenCliparts.org, um portal de hospedagem de ilustrações vetoriais sob &lt;a href="http://creativecommons.org/publicdomain/zero/1.0/"&gt;domínio público&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Algumas semanas depois, o &lt;a href="http://images.google.com/images?q=ronoaldo"&gt;Google começou a mostrar estes cliparts nos resultados de pesquisa por imagens com meu nome&lt;/a&gt;. Dias depois, cada clipart passou a aparecer várias vezes na mesma busca por imagens. Notei que os desenhos estavam se espalhando pela web de portal em portal, e como o OpenClipart adicionou meu nome no nome do arquivo e nos seus meta-dados, eu tive certeza que eram os mesmos.&lt;br /&gt;
&lt;br /&gt;
Tudo bem, publiquei no OpenClipart com esse objetivo mesmo: divulgar os desenhos. Hoje fui até o OpenClipart novamente, e agora eles exibem os &lt;a href="http://www.openclipart.org/user-detail/ronoaldo"&gt;&lt;i&gt;top 10 downloads&lt;/i&gt;&amp;nbsp;na página de cada artista&lt;/a&gt;. Para minha surpresa, alguns cliparts já passaram dos mil downloads! Claro, a maior parte deve ser dos robozinhos dos sites que republicaram o trabalho, mas já é gratificante.&lt;br /&gt;
&lt;br /&gt;
Também achei interessante que alguns dos modelos de documento do Google Docs que eu publiquei já foram utilizados diversas vezes. Agora os templates já não possuem mais a contagem de utilizações, apenas a avaliação dos usuários, &lt;a href="https://docs.google.com/templates?view=public&amp;amp;authorId=16982550004529957053"&gt;que até agora foi de 4 estrelas&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-3322360573139419212?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7EwwZt-1uuxOHOwcHb3HfUN2ed0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7EwwZt-1uuxOHOwcHb3HfUN2ed0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7EwwZt-1uuxOHOwcHb3HfUN2ed0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7EwwZt-1uuxOHOwcHb3HfUN2ed0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/14gPvNktGQQ" height="1" width="1"/&gt;</content><link rel="related" href="http://www.openclipart.org/user-detail/ronoaldo" title="Pelo mundo (virtual) afora" /><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/3322360573139419212/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2011/07/pelo-mundo-virtual-afora.html#comment-form" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/3322360573139419212?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/3322360573139419212?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/14gPvNktGQQ/pelo-mundo-virtual-afora.html" title="Pelo mundo (virtual) afora" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2011/07/pelo-mundo-virtual-afora.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMBRns_fCp7ImA9WhdVFE0.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-4176674388817657169</id><published>2010-12-04T20:48:00.000-02:00</published><updated>2011-09-18T23:47:37.544-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-18T23:47:37.544-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="hacks" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><title>Hacks para o Blogger</title><content type="html">Se você também utiliza o Blogger para os seus posts, aqui vão algumas dicas que eu descobri recentemente &lt;i&gt;googlando&lt;/i&gt; por aí.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Remover barra de navegação&lt;/h3&gt;
&lt;br /&gt;
&lt;a href="http://www.google.com/support/blogger/bin/answer.py?hl=br&amp;amp;answer=42269"&gt;Neste tópico da ajuda&lt;/a&gt;, você vai encontrar informações a respeito de como ativar a barra de navegação, e vai notar que a desativação é feita publicando seu blog por FTP. Eu nem sabia que poderia publicar via FTP, e não quero isso. Uma forma mais simples de &lt;i&gt;escondê-la&lt;/i&gt; é alterar a folha de estilos padrão para deixá-la invisível. Acesse o painel de configurações, e em seguida:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Clique na aba Design, e depois em "Designer do Modelo"&lt;/li&gt;
&lt;li&gt;Em seguida, vá em "Avançado", e clique na seção "Adicionar CSS"&lt;/li&gt;
&lt;li&gt;Insira a seguinte regra CSS ao modelo escolhido:&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="prettyprint notranslate"&gt;body .navbar {
&amp;nbsp;&amp;nbsp;&amp;nbsp; display: none !important;
}
&lt;/pre&gt;
&lt;br /&gt;
Pronto, agora a barra não estará visível. Note que ela continua lá, na verdade, mas ninguém deve vê-la.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Adicionar coloração de sintaxe&lt;/h3&gt;
&lt;br /&gt;
Se você vai postar trechos de código, provavelmente vai preferir que eles estejam com a sintaxe em destaque, pois isso ajuda (e muito) na leitura. Existem algumas formas de se fazer isso, e a que eu achei mais simples é a de utilizar o &lt;code&gt;prettyprint&lt;/code&gt;. Ele é bem mais simples, e detecta automaticamente a linguagem utilizada para inserir a coloração.&lt;br /&gt;
&lt;br /&gt;
Você precisa baixá-lo e hospedá-lo em algum lugar. Se você tem uma conta do &lt;a href="http://code.google.com/apis/storage"&gt;Google Storage for Developers&lt;/a&gt; ou em algum dos serviços como o &lt;a href="http://www.dropbox.com/"&gt;Dropbox&lt;/a&gt; ou simliares, pode publicar o arquivo na Web.&lt;br /&gt;
&lt;br /&gt;
Uma forma de inserí-lo em seu Blog é editar o HTML do seu modelo. Os novos modelos são bem interessantes, e construídos em formato XML. Entretanto, ao trocar de modelo ou realizar alguma configuração mais avançada, você pode acabar perdendo este código e ter de refazê-lo.&lt;br /&gt;
&lt;br /&gt;
Outra alternativa é inserir um &lt;i&gt;gadget&lt;/i&gt; no Blog que permita inserir código JavaScript e que não é perdido ao trocar/alterar seu modelo. Para isso, em seu painel de controle:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Clique na aba "Design", e em seguida na seção "Elementos da página".&lt;/li&gt;
&lt;li&gt;Na área do rodapé (para evitar que o carregamento dos posts fique muito lento), adicione um gadget do tipo &lt;b&gt;HTML/JavaScript&lt;/b&gt; com o seguinte conteúdo:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="prettyprint notranslate"&gt;&amp;lt;script type="text/javascript" 
    src="http://&amp;lt;local onde hospedou o script&amp;gt;/prettify/prettify.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript" language="javascript"&amp;gt;
(function() {
var css = document.createElement('link');
css.rel = 'stylesheet'; css.type = 'text/css';
css.href = 'http://&amp;lt;local onde hospedou o script&amp;gt;/prettify/prettify.css';
var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(css, s);
})();
prettyPrint();
&amp;lt;/script&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
Substitua os campos marcados com &lt;i&gt;&amp;lt;local onde hospedou o script&amp;gt;&lt;/i&gt; apropriadamente para a sua situação.&lt;br /&gt;
&lt;br /&gt;
Pronto, agora basta inserir em seus posts os trechos de código envolvidos por uma tag &lt;code&gt;pre&lt;/code&gt; ou &lt;code&gt;code&lt;/code&gt;, com o elemento &lt;code&gt;class="prettyprint"&lt;/code&gt;. Por exemplo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint notranslate"&gt;&amp;lt;pre class="prettyprint"&amp;gt;
&amp;lt;b&amp;gt;Sintaxe HTML&amp;lt;/b&amp;gt;
&amp;lt;/pre&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;h3&gt;
Alterar o favicon&lt;/h3&gt;
&lt;br /&gt;
Semelhante ao processo acima, você pode alterar o favicon do seu Blog utilizando um gadget de Script, agora com o seguinte conteúdo:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint notranslate"&gt;&amp;lt;script&amp;gt;
var icon = document.createElement('link');
icon.rel = 'shortcut icon'; icon.type = 'image/vnd.microsoft.icon';
icon.href = 'http://&amp;lt;local onde voce hospedou&amp;gt;/favicon.ico';
var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(icon, s);
&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
Ao acessar o seu blog, ele terá um ícone customizado. Utilizei esta abordagem porque estava com uma certa preguiça em procurar as opções de configuração, mas eu acredito que isso seja possível de ser realizado de forma diferente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-4176674388817657169?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/y15HAyr5LI-6xGbhex0artnCngE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y15HAyr5LI-6xGbhex0artnCngE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/y15HAyr5LI-6xGbhex0artnCngE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y15HAyr5LI-6xGbhex0artnCngE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/w69pIzaQMYA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/4176674388817657169/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2010/12/hacks-para-o-blogger.html#comment-form" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/4176674388817657169?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/4176674388817657169?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/w69pIzaQMYA/hacks-para-o-blogger.html" title="Hacks para o Blogger" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2010/12/hacks-para-o-blogger.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMAQ3s6fSp7ImA9WhdVGEQ.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-8797069180829210876</id><published>2010-12-02T22:11:00.000-02:00</published><updated>2011-09-24T15:54:02.515-03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-24T15:54:02.515-03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="tutorial" /><title>Implementando o pattern Composite View com Tags JSP</title><content type="html">&lt;b&gt;Update 1&lt;/b&gt;: Atualizei o nome deste post, uma vez que "Templates estilo Django para páginas JSP" não refletia muito o conteúdo. O código também está disponível no repositório de códigos-fonte &lt;a href="http://code.ronoaldo.net/composite-view/"&gt;http://code.ronoaldo.net/composite-view/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Uma das ferramentas do Django que eu admiro é a sua engine de templates, pois com ele produzimos layouts uniformes para toda a sua aplicação web de maneira estruturada.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;



O problema&lt;/h3&gt;
&lt;br /&gt;
Em Django, você define um &lt;i&gt;template base&lt;/i&gt;, que geralmente contém o cabeçalho de suas páginas, e &lt;i&gt;define blocos&lt;/i&gt; onde o conteúdo será inserido. Nas páginas de conteúdo, você utiliza uma tag para indicar que você está &lt;i&gt;estendendo&lt;/i&gt; o template base, e preenche apenas os blocos de conteúdo a serem alterados.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://docs.google.com/drawings/pub?id=10fX2A7ApnIBKVet_az58FG_8fG7jse0Q3Wu11WTFTgs&amp;amp;w=594&amp;amp;h=414" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;/a&gt;Isso funciona como uma &lt;i&gt;herança&lt;/i&gt; de templates, onde o template filho apenas sobrescreve os blocos de conteúdo do template pai, ao mesmo tempo que permite ter um blocos de conteúdo padrão em um só arquivo. E mais, você pode criar uma hierarquia de quantos níveis forem necessários (e razoáveis!), proporcionando reuso inclusive de sua marcação HTML.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://docs.google.com/drawings/pub?id=10fX2A7ApnIBKVet_az58FG_8fG7jse0Q3Wu11WTFTgs&amp;amp;w=594&amp;amp;h=414" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="222" src="https://docs.google.com/drawings/pub?id=10fX2A7ApnIBKVet_az58FG_8fG7jse0Q3Wu11WTFTgs&amp;amp;w=594&amp;amp;h=414" width="320" /&gt;&lt;/a&gt;O problema aparece quando você tenta realizar algo semelhante em outras tecnologias com as quais acaba trabalhando. Estamos portando uma aplicação Django para o AppEngine, e por restrições diversas, a tecnologia escolhida foi Java&lt;i&gt;.&lt;br /&gt;
&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
Optamos por causar o mínimo de overhead, e escolhemos usar apenas as tecnologias estritamente necessárias. Além do mais, temos poucas interfaces distintas, uma meia dúzia de &lt;i&gt;jsps&lt;/i&gt; já resolveria o problema, e criamos uma interface administrativa utilizando o Google Web Toolkit, que nos permitiu criar uma interface rica e reutilizar&amp;nbsp; diversos códigos de validação &lt;i&gt;server-side&lt;/i&gt; em uma versão &lt;i&gt;client-side&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Por questões de simplicidade, geralmente criamos blocos reutilizáveis em JSP da seguinte maneira. No arquivo cabecalho.jsp:&lt;br /&gt;
&lt;pre class="prettyprint notranslate"&gt;&amp;lt;h1&amp;gt;Cabecalho&amp;lt;/h1&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
No arquivo rodape.jsp:&lt;br /&gt;
&lt;pre class="prettyprint notranslate"&gt;&amp;lt;i&amp;gt;Todos os direitos reservados&amp;lt;/i&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
No arquivo index.jsp:&lt;br /&gt;
&lt;pre class="prettyprint notranslate"&gt;&amp;lt;%@ include file="cabecalho.jsp" %&amp;gt;
Conteúdo
&amp;lt;%@ include file="rodape.jsp" %&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
Obviamente, isso chega a ofender. Pesquisando um pouco, encontrei algumas soluções, quase todas baseadas no pattern &lt;i&gt;Composite View&lt;/i&gt;. Basta fazer uma busca e você vai encontrar implementações, mas a maioria delas &lt;a href="http://java.sun.com/blueprints/corej2eepatterns/Patterns/CompositeView.html"&gt;dá muito trabalho&lt;/a&gt; e não é tão intuitiva quanto a solução &lt;i&gt;Django&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
Resolvi desenvolver algo um pouco mais simples, a partir da seguinte idéia: criar uma &lt;i&gt;custom tag&lt;/i&gt; que define um &lt;i&gt;bloco&lt;/i&gt;, e criar uma outra tag que permite &lt;i&gt;extender&lt;/i&gt; um template (outra página JSP). A tag que define um bloco, o registra no contexto da requisição e salva um &lt;i&gt;buffer&lt;/i&gt; com o conteúdo do mesmo, e em seguida, passa o controle da página para o template pai.&lt;br /&gt;
&lt;br /&gt;
A idéia seria utilizar nossas tags de template da seguinte forma:&lt;br /&gt;
&lt;br /&gt;
No arquivo base.jsp, temos a definição dos blocos:&lt;br /&gt;
&lt;pre class="prettyprint notranslate"&gt;&amp;lt;%@ page language="java" pageEncoding="utf-8" %&amp;gt;&amp;nbsp;
&amp;lt;%@ taglib prefix="t" uri="/templates.tld" %&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;
&amp;lt;t:block name="title"&amp;gt;Título padrão&amp;lt;/t:block&amp;gt;
&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;h1&amp;gt; 
&amp;lt;t:block name="header"&amp;gt;Cabeçalho Padrão&amp;lt;/t:block&amp;gt;
&amp;lt;/h1&amp;gt;
&amp;lt;div id="left-box"&amp;gt;  
&amp;lt;t:block name="left"&amp;gt;Navegação&amp;lt;/t:block&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id="main-box"&amp;gt;
&amp;lt;t:block name="main"&amp;gt;Bloco de conteúdo&amp;lt;/t:block&amp;gt; 
&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt; 
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
&lt;br /&gt;
E na página index.jsp, teríamos apenas:&lt;br /&gt;
&lt;pre class="prettyprint notranslate"&gt;&amp;lt;%@page language="java" pageEncoding="utf-8" %&amp;gt;
&amp;lt;%@taglib prefix="t" uri="/templates.tld" %&amp;gt;
&amp;lt;t:extends template="base.jsp"&amp;gt;
&amp;lt;t:block name="main"&amp;gt;
&amp;nbsp;Conteúdo da Index 
&amp;lt;/t:block&amp;gt;
&amp;lt;/t:extends&amp;gt;&amp;nbsp; &lt;/pre&gt;
&lt;br /&gt;
&lt;h3&gt;



Implementação&lt;/h3&gt;
&lt;br /&gt;
Primeiro, vamos à definição da tag &lt;i&gt;block&lt;/i&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint lang-java notranslate"&gt;package net.ronoaldo.tools.templateutils.tags;

import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;

import javax.servlet.jsp.JspContext;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;

/**
 * Tag simples que define um bloco de template.
 * 
 * @author Ronoaldo Pereira &amp;amp;lt;ronoaldo@ronoaldo.net&amp;amp;gt;
 */
public class Block extends SimpleTagSupport {

 /**
  * Chave para recuperar o buffer, no escopo da requisição.
  */
 private static final String BLOCK_REGISTRY_KEY = Block.class.getName()
   + "-BLOCK_REGISTRY_KEY";

 /**
  * {@link Logger} para depuração.
  */
 protected Logger logger = Logger.getLogger(Logger.GLOBAL_LOGGER_NAME);

 /**
  * Nome do bloco.
  */
 private String blockName;

 /**
  * &lt;i&gt;Setter&lt;/i&gt; para o atributo &lt;b&gt;name&lt;/b&gt;, que identifica unicamente o
  * bloco.
  * 
  * @param name
  *            o nome do bloco.
  */
 public void setName(String name) {
  this.blockName = name;
 }

 /**
  * Realiza a implementação da Tag propriamente dita.
  */
 @Override
 public void doTag() throws JspException, IOException {
  if (withinExtendsBlock()) {
   updateBlockContent();
  } else {
   renderBlock();
  }
 }

 /**
  * Atualiza o conteúdo em cache do bloco, caso ele ainda não tenha sido
  * definido.
  * 
  * @throws JspException
  * @throws IOException
  */
 private void updateBlockContent() throws JspException, IOException {
  // Renderiza o bloco caso ele ainda não exista
  if (getRegistry().get(blockName) != null)
   return;

  StringWriter sw = new StringWriter();
  JspFragment body = getJspBody();
  if (body != null) {
   body.invoke(sw);
  }
  getRegistry().put(blockName, sw.toString());
  logger.info(String.format("Content for block %s updated to %s",
    blockName, sw.toString()));
 }

 /**
  * Renderiza o bloco na página JSP.
  * 
  * @throws JspException
  * @throws IOException
  */
 private void renderBlock() throws JspException, IOException {
  // Insere o bloco na página
  updateBlockContent();
  JspWriter out = getJspContext().getOut();
  out.print(getRegistry().get(blockName));
 }

 /**
  * Identifica se esta tag {@link Block} está dentro de uma tag
  * {@link Extends}.
  * 
  * @return
  */
 private boolean withinExtendsBlock() {
  return (getParent() instanceof Extends);
 }

 /**
  * Recupera ou cria um registro no escopo da requisição, para armazenar os
  * buffers dos blocos da página a ser exibida.
  * 
  * @return um {@link Map} contendo os valores associados ao nome do bloco.
  */
 private Map&amp;lt;String, String&amp;gt; getRegistry() {
  JspContext ctx = getJspContext();

  @SuppressWarnings("unchecked")
  Map&amp;lt;String, String&amp;gt; registry = (Map&amp;lt;String, String&amp;gt;) ctx.getAttribute(
    Block.BLOCK_REGISTRY_KEY, PageContext.REQUEST_SCOPE);

  if (registry == null) {
   registry = new HashMap&amp;lt;String, String&amp;gt;();
   ctx.setAttribute(Block.BLOCK_REGISTRY_KEY, registry,
     PageContext.REQUEST_SCOPE);
  }

  return registry;
 }
}&lt;/pre&gt;
&lt;br /&gt;
Esta tag é bem simples. Neste caso, estamos utilizando uma implementação baseada em um Map&amp;lt;String, String&amp;gt;, para armazenar apenas um valor para o bloco durante o processamento de todas as tags das páginas envolvidas.&lt;br /&gt;
&lt;br /&gt;
Se utilizarmos apenas esta Tag, já conseguimos criar um efeito bem interessante. Basta definir os blocos antes de qualquer outra coisa, e finalizar a página com a diretiva &amp;lt;%@include %&amp;gt;. Isso já nos dá o resultado esperado, exceto para aninhar páginas.&lt;br /&gt;
&lt;br /&gt;
Para uma implementação mais completa, vamos definir a tag Extends:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint notranslate"&gt;package net.ronoaldo.tools.templateutils.tags;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;

/**
 * Tag simples que realiza um &lt;i&gt;include&lt;/i&gt; após realizar o processamento de
 * seu conteúdo.
 * 
 * @author Ronoaldo Pereira &amp;amp;lt;ronoaldo@ronoaldo.net&amp;amp;gt;
 */
public class Extends extends SimpleTagSupport {

 /**
  * Nome do template a ser utilizado para inclusão.
  */
 private String template;

 /**
  * &lt;i&gt;Setter&lt;/i&gt; para que o atributo &lt;code&gt;template&lt;/code&gt; funcione.
  * 
  * @param template
  *            o nome do template a ser extendido.
  */
 public void setTemplate(String template) {
  this.template = template;
 }

 /**
  * Implementação da Tag.
  */
 @Override
 public void doTag() throws JspException, IOException {
  // Processa o body (definição de blocos)
  getJspBody().invoke(null);

  // Realiza o include do template
  try {
   PageContext pageContext = (PageContext) getJspContext();
   pageContext.include(template);
  } catch (ServletException e) {
   throw new JspException(e);
  }
 }

}
&lt;/pre&gt;
&lt;br /&gt;
Para finalizar com chave de ouro, basta agora realizar a implementação de um arquivo &lt;i&gt;tld&lt;/i&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint notranslate"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;
&amp;lt;!DOCTYPE taglib PUBLIC
 "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
 "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd"&amp;gt;
&amp;lt;taglib&amp;gt;
 &amp;lt;tlib-version&amp;gt;1.2&amp;lt;/tlib-version&amp;gt;
 &amp;lt;jsp-version&amp;gt;2.0&amp;lt;/jsp-version&amp;gt;
 &amp;lt;short-name&amp;gt;template-utils&amp;lt;/short-name&amp;gt;
 &amp;lt;description&amp;gt;Several utilities for templating with JSP and JSTL&amp;lt;/description&amp;gt;

 &amp;lt;tag&amp;gt;
  &amp;lt;name&amp;gt;extends&amp;lt;/name&amp;gt;
  &amp;lt;tag-class&amp;gt;net.ronoaldo.tools.templateutils.tags.Extends&amp;lt;/tag-class&amp;gt;
  &amp;lt;body-content&amp;gt;scriptless&amp;lt;/body-content&amp;gt;
  &amp;lt;attribute&amp;gt;
   &amp;lt;name&amp;gt;template&amp;lt;/name&amp;gt;
   &amp;lt;required&amp;gt;true&amp;lt;/required&amp;gt;
   &amp;lt;type&amp;gt;java.lang.String&amp;lt;/type&amp;gt;
   &amp;lt;description&amp;gt;Indicates the parent template to extends from.&amp;lt;/description&amp;gt;
  &amp;lt;/attribute&amp;gt;
 &amp;lt;/tag&amp;gt;

 &amp;lt;tag&amp;gt;
  &amp;lt;name&amp;gt;block&amp;lt;/name&amp;gt;
  &amp;lt;tag-class&amp;gt;net.ronoaldo.tools.templateutils.tags.Block&amp;lt;/tag-class&amp;gt;
  &amp;lt;body-content&amp;gt;scriptless&amp;lt;/body-content&amp;gt;
  &amp;lt;attribute&amp;gt;
   &amp;lt;name&amp;gt;name&amp;lt;/name&amp;gt;
   &amp;lt;required&amp;gt;true&amp;lt;/required&amp;gt;
   &amp;lt;type&amp;gt;java.lang.String&amp;lt;/type&amp;gt;
   &amp;lt;description&amp;gt;The block name, unique across all template and its extensions&amp;lt;/description&amp;gt;
  &amp;lt;/attribute&amp;gt;
 &amp;lt;/tag&amp;gt;

&amp;lt;/taglib&amp;gt;&lt;/pre&gt;
&lt;br /&gt;
Você pode até criar um pequeno &lt;code&gt;jar&lt;/code&gt; com estas classes e este arquivo taglib.tld dentro de &lt;coe&gt;META-INF, e ele pode ser incluído no seu diretório &lt;code&gt;WEB-INF/lib&lt;/code&gt; como biblioteca reutilizável.&lt;/coe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-8797069180829210876?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rRyVhi7l3e-NVYxkR-r3drJIbVw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rRyVhi7l3e-NVYxkR-r3drJIbVw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rRyVhi7l3e-NVYxkR-r3drJIbVw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rRyVhi7l3e-NVYxkR-r3drJIbVw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/b2cC8LPUvBo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/8797069180829210876/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2010/12/templates-estilo-django-para-paginas.html#comment-form" title="5 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/8797069180829210876?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/8797069180829210876?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/b2cC8LPUvBo/templates-estilo-django-para-paginas.html" title="Implementando o pattern Composite View com Tags JSP" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>5</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2010/12/templates-estilo-django-para-paginas.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUCQnwzfip7ImA9Wx9TFEo.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-3591267714038813672</id><published>2009-09-01T23:38:00.000-03:00</published><updated>2010-11-23T00:11:03.286-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-23T00:11:03.286-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="loucuras mesmo" /><title>O dia em que a Terra parou... Ou foi o Gmail?</title><content type="html">Era uma tarde comum de trabalho. Tudo estava normalmente bem. Calor, ar condicionado, computadores, cadeiras e mesas. Tudo irritantemente normal. Até que um funcionário do departamento de vendas indagou:&lt;br /&gt;- ... a internet caiu?&lt;br /&gt;&lt;br /&gt;De prontidão, o técnico respondeu:&lt;br /&gt;- Não, a internet está funcionando normalmente. Estou conectado.&lt;br /&gt;&lt;br /&gt;O gerente retruca:&lt;br /&gt;- Não, não está funcionando, venha ver.&lt;br /&gt;&lt;br /&gt;O técnico tinha razão. Se não era a Internet, então o que havia "caído"? O mistério durou alguns instantes. Aos poucos, notamos que o Gmail de nosso Google Apps não estava conseguindo estabelecer uma conexão com o servidor. Mas ao contrário das outras vezes, o problema não era com nossa conexão à internet.&lt;br /&gt;&lt;br /&gt;Estranho. Começamos a ficar preocupados. Até que alguém resolveu apertar o atalho F5 do &lt;span style="font-style: italic;"&gt;browser&lt;/span&gt;. Desespero com o resultado: "&lt;span style="font-style: italic;"&gt;Server Error&lt;/span&gt;". Com assim? O &lt;span style="font-style: italic;"&gt;server&lt;/span&gt; não poderia ter dado um &lt;span style="font-style: italic;"&gt;error&lt;/span&gt; como resposta! Inacreditável. Durou bem mais de 30 segundos.&lt;br /&gt;&lt;br /&gt;Foi estranho. Era como se a energia elétrica tivesse acabado. Ou a comida. Ou a água potável. Ou a vida no planeta. Sem poder enviar ou receber a correspondência eletrônica com os clientes, o final da tarde foi tenso. A cada vez que acionávamos a tecla F5, mais tensa a tarde ficava.&lt;br /&gt;&lt;br /&gt;No finalzinho do expediente, quando alguns já iam embora, o último F5 do dia informava que, aparentemente, a Terra tinha voltado a girar.&lt;br /&gt;&lt;br /&gt;Um momento para reflexão. Talvez seja hora de fazer aquele backup dos seus dados da nuvem, pois pode chover a qualquer hora.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-3591267714038813672?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/D5klNlp-T6OHx4PT-cTIfZ0f0f8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/D5klNlp-T6OHx4PT-cTIfZ0f0f8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/D5klNlp-T6OHx4PT-cTIfZ0f0f8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/D5klNlp-T6OHx4PT-cTIfZ0f0f8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/csbcgcstZgQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/3591267714038813672/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2009/09/o-dia-em-que-terra-parou-ou-foi-o-gmail.html#comment-form" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/3591267714038813672?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/3591267714038813672?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/csbcgcstZgQ/o-dia-em-que-terra-parou-ou-foi-o-gmail.html" title="O dia em que a Terra parou... Ou foi o Gmail?" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2009/09/o-dia-em-que-terra-parou-ou-foi-o-gmail.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEHSXkyeSp7ImA9Wx9SFE4.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-7282559514209447506</id><published>2009-08-14T08:08:00.000-03:00</published><updated>2010-12-04T01:17:18.791-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-04T01:17:18.791-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="diversão" /><title>HIPHONE!</title><content type="html">Estava acessando as notícias do UOL, quando me deparei com uma oferta de aparelho telefônico Dual SIM.&lt;br /&gt;
&lt;br /&gt;
O melhor foi ler o texto descritivo do produto. Veja o trecho mais "relevante":&lt;br /&gt;
&lt;div style="text-align: center;"&gt;&lt;br /&gt;
&lt;blockquote&gt;O UNICO MP12 M8 COM WI-FI ( INTERNET SEM FIO GRATIS )O UNICO COM JAVA 2.0 O UNICO COM MSN e YAHOO O UNICO COM 2 CAMERAS E FLASH O UNICO COM OPERA O UNICO COM MESSANGER &lt;br /&gt;
&lt;br /&gt;
O UNICO COM DOIS CHIPS, DOIS EMEIS, CHIPS SIMULTANEOS,&lt;/blockquote&gt;&lt;/div&gt;&lt;br /&gt;
&lt;span style="background-color: white;"&gt;Não sei qual foi a melhor, entre "MESS&lt;/span&gt;&lt;span style="background-color: white; font-weight: bold;"&gt;A&lt;/span&gt;&lt;span style="background-color: white;"&gt;NGER" e "&lt;/span&gt;&lt;span style="background-color: white; font-weight: bold;"&gt;E&lt;/span&gt;&lt;span style="background-color: white;"&gt;MEI" (não era &lt;/span&gt;&lt;a href="http://pt.wikipedia.org/wiki/IMEI" style="background-color: white;"&gt;IMEI&lt;/a&gt;&lt;span style="background-color: white;"&gt;?) . &lt;/span&gt;Confesso que fiquei na dúvida entre "UNICO" e "GRATIS" ainda terem ou não acento depois do novo acordo... Alguém poderia me ajudar?&lt;br /&gt;
&lt;br /&gt;
Tomara que o aparelho tenha ao menos corretor ortográfico ou gramatical.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-7282559514209447506?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nweVXCaqdpI5n0QjDYyH6kAITjg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nweVXCaqdpI5n0QjDYyH6kAITjg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nweVXCaqdpI5n0QjDYyH6kAITjg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nweVXCaqdpI5n0QjDYyH6kAITjg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/ssgJt643F60" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/7282559514209447506/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2009/08/hiphone.html#comment-form" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/7282559514209447506?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/7282559514209447506?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/ssgJt643F60/hiphone.html" title="HIPHONE!" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2009/08/hiphone.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUCQnwzfip7ImA9Wx9TFEo.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-2258752591129399680</id><published>2009-08-13T08:29:00.000-03:00</published><updated>2010-11-23T00:11:03.286-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-23T00:11:03.286-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="loucuras mesmo" /><title>Amar é ...</title><content type="html">Esquecer,&lt;br /&gt;dos problemas cotidianos&lt;br /&gt;para dividir o que há de bom.&lt;br /&gt;&lt;br /&gt;Partilhar,&lt;br /&gt;a alegria de cada momento&lt;br /&gt;por mais simples que ele seja.&lt;br /&gt;&lt;br /&gt;Aceitar,&lt;br /&gt;as virtudes e também os&lt;br /&gt;defeitos.&lt;br /&gt;&lt;br /&gt;Dividir,&lt;br /&gt;tudo.&lt;br /&gt;&lt;br /&gt;Enfim,&lt;br /&gt;Amar é viver ao lado da&lt;br /&gt;minha esposa, Juliana!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-2258752591129399680?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/h8pCV64BTjqL-4SARiUG97zC72Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/h8pCV64BTjqL-4SARiUG97zC72Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/h8pCV64BTjqL-4SARiUG97zC72Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/h8pCV64BTjqL-4SARiUG97zC72Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/Us529gwRSvk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/2258752591129399680/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2009/08/amar-e.html#comment-form" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/2258752591129399680?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/2258752591129399680?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/Us529gwRSvk/amar-e.html" title="Amar é ..." /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2009/08/amar-e.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUCQnwzfip7ImA9Wx9TFEo.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-8091783182231558854</id><published>2009-08-12T08:07:00.000-03:00</published><updated>2010-11-23T00:11:03.286-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-23T00:11:03.286-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="loucuras mesmo" /><title>Casamento</title><content type="html">No último dia 19 de julho completei um ano de casamento. Passou muito rápido. Mas é assim mesmo: quando agente ama de verdade, o tempo é uma unidade de medida imprecisa.&lt;br /&gt;&lt;br /&gt;Claro, como vocês já devem saber, também fiquei um ano mais velho. Neste meu ano de vida, tive muitas realizações. A primeira deles, o casamento, foi um sucesso. O &lt;a href="http://ulissesleitao.blogspot.com/2008/11/lanamento-vix-linux.html"&gt;lançamento do Vix Linux&lt;/a&gt;, do qual tive a alegria de participar. Minha mudança para São Paulo. Minhas aulas em Campinas. A pós-graduação da minha amada. O aluguel do apartamento... Estes são alguns exemplos.&lt;br /&gt;&lt;br /&gt;Agradeço a todos que fizeram e fazem parte de minha vida, com quem pude dividir estas realizações. E espero que novas conquistas estejam próximas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-8091783182231558854?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XpYibwEnee6VLLhlRZtliQ2Cz3Q/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XpYibwEnee6VLLhlRZtliQ2Cz3Q/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XpYibwEnee6VLLhlRZtliQ2Cz3Q/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XpYibwEnee6VLLhlRZtliQ2Cz3Q/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/7Z7j5CILt0Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/8091783182231558854/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2009/08/casamento.html#comment-form" title="3 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/8091783182231558854?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/8091783182231558854?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/7Z7j5CILt0Q/casamento.html" title="Casamento" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2009/08/casamento.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUDRnw6cSp7ImA9Wx9TFEo.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-7716010875498227065</id><published>2009-06-13T13:08:00.000-03:00</published><updated>2010-11-23T00:11:17.219-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-23T00:11:17.219-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="loucuras mesmo" /><title>Tá bom, tá bom, eu escrevo</title><content type="html">&lt;div style="text-align: left;"&gt;Eu sei, deixo muito tempo entre uma postagem e outra. Já entendi, vou escrever mais.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Não sou um &lt;span style="font-style: italic;"&gt;repórter&lt;/span&gt;, mas vou tentar. Escrever faz bem. Você pensa, digita, e depois lê. Apaga tudo, porque não ficou bom, pensa mais um pouco, normalmente digita menos do que a última vez, e lê de novo. Apaga só a parte do meio, que ficou estranha e desconexa, escreve uma ou duas linhas em seu lugar e então lê novamente. Ai você acha que está bom, publica e aguarda os comentários.&lt;br /&gt;&lt;br /&gt;Gosto de escrever, apesar de não ser &lt;span style="font-style: italic;"&gt;expert&lt;/span&gt; no assunto. Acho que me sinto mais à vontade escrevendo textos técnicos. Mas como sou de carne e osso (mais do segundo elemento, como já devem ter notado), também escrevo para os mortais. Não que os técnicos sejam imortais, mas ... Bem, vocês entenderam.&lt;br /&gt;&lt;br /&gt;Sim, eu deveria ter apagado o parágrafo do meio, ficou estranho e desconexo. Mas aí eu teria escrito muito pouco, e você teria desistido logo. Ok... acho que está bom por hoje. Vou terminar meus afazeres. Depois agente se fala mais.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;PS&lt;/span&gt;: Para aqueles querendo saber novidades, aqui em Sampa está tudo bem, apesar do frio e, é claro, da garoa. Temos casa sem móveis (por enquanto) e muito trabalho. Estou ansioso pelo próximo semestre, que promete ser muito bom. E minha irmã vai se casar. Mas isso vocês já devem saber.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-7716010875498227065?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ap78XCvWEC_ZKZJX9GVnxoQTqqI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ap78XCvWEC_ZKZJX9GVnxoQTqqI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ap78XCvWEC_ZKZJX9GVnxoQTqqI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ap78XCvWEC_ZKZJX9GVnxoQTqqI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/Y4N01oGNOro" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/7716010875498227065/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2009/06/ta-bom-ta-bom-eu-escrevo.html#comment-form" title="2 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/7716010875498227065?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/7716010875498227065?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/Y4N01oGNOro/ta-bom-ta-bom-eu-escrevo.html" title="Tá bom, tá bom, eu escrevo" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2009/06/ta-bom-ta-bom-eu-escrevo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUCQnwzfyp7ImA9Wx9TFEo.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-5725093365693285559</id><published>2009-05-03T21:49:00.000-03:00</published><updated>2010-11-23T00:11:03.287-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-23T00:11:03.287-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="loucuras mesmo" /><title>Palavras</title><content type="html">São a unidade básica da comunicação.&lt;br /&gt;Empregadas com sabedoria, são um excelente remédio.&lt;br /&gt;Elguns casos, são a principal causa da doença.&lt;br /&gt;&lt;br /&gt;Se usadas para o bem, as palavras podem compor&lt;br /&gt;excelentes discursos.&lt;br /&gt;No aniversário do melhor amigo,&lt;br /&gt;no dia das mães.&lt;br /&gt;Podem trazer lágrimas nos aos olhos&lt;br /&gt;dos colegas de formatura.&lt;br /&gt;Podem fazer sorrir um doente internado.&lt;br /&gt;Podem fazer feliz aquele depressivo à beira do suicídio.&lt;br /&gt;&lt;br /&gt;Se usadas para o mal, as mesmas palavras&lt;br /&gt;podem fazer grandes estragos.&lt;br /&gt;Palavras que são ditas para ofender.&lt;br /&gt;Palavras gravadas em escutas telefônicas.&lt;br /&gt;Palavras em um plano de invasão militar.&lt;br /&gt;&lt;br /&gt;A dualidade acontece mesmo quando não há palavras.&lt;br /&gt;Seja no silêncio que conforta na dor,&lt;br /&gt;ou na omissão que pode até matar.&lt;br /&gt;&lt;br /&gt;Palavras mudam.&lt;br /&gt;Palavras podem causar mudanças.&lt;br /&gt;Palavras podem ser modificadas.&lt;br /&gt;Palavras podem até deixar de ser palavras,&lt;br /&gt;para ser sonho, gesto ou ação.&lt;br /&gt;&lt;br /&gt;Palavras podem ser pequenas,&lt;br /&gt;simples como um "oi".&lt;br /&gt;Podem abrigar complexidade como&lt;br /&gt;uma "cadeia polipeptídica".&lt;br /&gt;Podem ser tristes e alegres.&lt;br /&gt;&lt;br /&gt;Palavras podem ser apenas ... palavras.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-5725093365693285559?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vDTSPMzYmU-zXAEmIJEvzsdGNGE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vDTSPMzYmU-zXAEmIJEvzsdGNGE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vDTSPMzYmU-zXAEmIJEvzsdGNGE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vDTSPMzYmU-zXAEmIJEvzsdGNGE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/o_MF4MRoRGs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/5725093365693285559/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2009/05/palavras.html#comment-form" title="1 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/5725093365693285559?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/5725093365693285559?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/o_MF4MRoRGs/palavras.html" title="Palavras" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2009/05/palavras.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYDR3w-eCp7ImA9Wx9TFEo.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-2466345831717907120</id><published>2009-02-01T14:23:00.000-02:00</published><updated>2010-11-23T00:09:36.250-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-23T00:09:36.250-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="diversão" /><title>Programadores de verdade usam borboletas</title><content type="html">Esta é para os nerds de plantão.&lt;br /&gt;
&lt;br /&gt;
Estava procurando uma boa IDE para o desenvolvimento de aplicativos em Python, e me surpreendi com alguns comentários em fóruns.&lt;br /&gt;
&lt;br /&gt;
Resolvi usar as borboletas mesmo, depois de ler este quadrinho:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://xkcd.com/378/"&gt;http://xkcd.com/378/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Logo que der um tempinho, faço uma versão em português ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-2466345831717907120?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/91P9uhypTRnDJgyBpB-1HgJTkkY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/91P9uhypTRnDJgyBpB-1HgJTkkY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/91P9uhypTRnDJgyBpB-1HgJTkkY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/91P9uhypTRnDJgyBpB-1HgJTkkY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/2Z5mWXPpedo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/2466345831717907120/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2009/02/programadores-de-verdade-usam.html#comment-form" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/2466345831717907120?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/2466345831717907120?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/2Z5mWXPpedo/programadores-de-verdade-usam.html" title="Programadores de verdade usam borboletas" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2009/02/programadores-de-verdade-usam.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUCQnwzfyp7ImA9Wx9TFEo.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-4972855598225385471</id><published>2009-01-27T00:43:00.000-02:00</published><updated>2010-11-23T00:11:03.287-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-23T00:11:03.287-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="loucuras mesmo" /><title>Guarda-chuva: não saia de casa sem ele!</title><content type="html">Coisa difícil deve ser o trabalho dos meteorologistas da selva de pedra. Sem nenhum exagero, ao levantar de manhã e olhar o dia nascendo, manhoso, vá preparado para o trabalho.&lt;br /&gt;&lt;br /&gt;Vista uma camisa confortável, e fresquinha. Leve na bolsa ou maleta uma blusa de frio e um guarda-chuva. Apesar do sol nascendo, a previsão é de uma frente fria com tempo nublado a parcialmente nublado, com pancadas de chuva no meio ou final da tarde. Há ainda a probabilidade de que os rios, córregos e esgotos transbordem com a chuva, causando as desoladoras enchentes. Se ainda não estiver satisfeito, o tempo pode esfriar também, é claro, especialmente se você trabalhar dentro do ar condicionado do escritório. E para finalizar o dia, um calor medonho, como diriam na minha terra.&lt;br /&gt;&lt;br /&gt;Mas tudo isso é apenas para testar a resistência do seu organismo, somando um pouco de poluição e correria.&lt;br /&gt;&lt;br /&gt;Outro fato curioso nesta selva, são as filas. Em todo e qualquer lugar onde você vai em São Paulo, você provavelmente verá filas. Seja na padaria para comprar pão, na farmácia para a injeção ou na hora do almoço. É claro, o que você vê na televisão sendo chamado de trânsito, nada mais é do que uma fila de carros. Tem também a fila para entrar no elevador. E aquela outra fila que ninguém sabe onde vai dar, mas já que é uma fila, não podemos ficar de fora.&lt;br /&gt;&lt;br /&gt;Mas nem tudo na selva de pedra se resume em efeito estufa e filas. Tem também toda a diversão de almoçar um Beirute no Habib's em plena segunda-feira. De ganhar uma partida de boliche do seu cunhado, mesmo sendo as suas primeiras jogadas. Ou de atravessar a rua usufruindo da infra-estrutura da estação do metrô. Ao menos neste trecho não tem semáforo. Por enquanto.&lt;br /&gt;&lt;br /&gt;E como todo bom brasileiro, agente não desiste nunca! Mas no fundo, no fundo, eu gosto desta selva. Parece que sempre pertenci a este lugar. Mesmo não entendendo tudo. Enfim, como diria minha amada mãe: a vida só é dura para quem e mole!&lt;br /&gt;&lt;br /&gt;P.S.: Ju, meu anjo, vem logo! Tô com saudades :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-4972855598225385471?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xZotQTywDK3xM1V2h5ssA6HVldY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xZotQTywDK3xM1V2h5ssA6HVldY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xZotQTywDK3xM1V2h5ssA6HVldY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xZotQTywDK3xM1V2h5ssA6HVldY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/ZSS9hzhaCLQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/4972855598225385471/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2009/01/guarda-chuva-nao-saia-de-casa-sem-ele.html#comment-form" title="1 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/4972855598225385471?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/4972855598225385471?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/ZSS9hzhaCLQ/guarda-chuva-nao-saia-de-casa-sem-ele.html" title="Guarda-chuva: não saia de casa sem ele!" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2009/01/guarda-chuva-nao-saia-de-casa-sem-ele.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUCQnwzfyp7ImA9Wx9TFEo.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-4567155086040902402</id><published>2009-01-12T10:11:00.000-02:00</published><updated>2010-11-23T00:11:03.287-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-23T00:11:03.287-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="loucuras mesmo" /><title>Pode crer</title><content type="html">Estou em São Paulo, este território chuvoso repleto de edificações monstruosas e de uma população de cotidiano corriqueiro e agitado.&lt;br /&gt;&lt;br /&gt;Já estou me adaptando. Apesar de não ser muita novidade já que tive uma infância paulistana, eu estou novamente me habituando a andar vários quilômetros para ir nos locais desejados. Pegar metrô, trem, enfim ... coisas de cidade grande.&lt;br /&gt;&lt;br /&gt;Felizmente, ainda não tive de enfrentar o temeroso trânsito, mas eu também espero que me "acostume".&lt;br /&gt;&lt;br /&gt;Recebi hoje uma boa notícia. Acabo de ser aprovado no concurso do COTUCA, Colégio Técnico da Universidade Estadual de Campinas, para professor substituto. Já estou com trabalho garantido para o primeiro semestre, e com boas expectativas de continuar minha carreira de docente.&lt;br /&gt;&lt;br /&gt;Minha digníssima esposa foi bem na entrevista, e estamos aguardando o resultado do programa de aprimoramento profissional pela USP que ela esta almejando. Dia 17 teremos o resultado.&lt;br /&gt;&lt;br /&gt;E a vida na selva de pedra está começando a se ajeitar. Me disseram na TV que inovemos este ano de &lt;span style="font-style: italic;"&gt;2000 inove&lt;/span&gt;. Eu já comecei, e você?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-4567155086040902402?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7PbucIFMcN9F6Z_yaLjFYYEB1_s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7PbucIFMcN9F6Z_yaLjFYYEB1_s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7PbucIFMcN9F6Z_yaLjFYYEB1_s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7PbucIFMcN9F6Z_yaLjFYYEB1_s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/o517TNp_WU0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/4567155086040902402/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2009/01/pode-crer.html#comment-form" title="3 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/4567155086040902402?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/4567155086040902402?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/o517TNp_WU0/pode-crer.html" title="Pode crer" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>3</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2009/01/pode-crer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUCQnwzcCp7ImA9Wx9TFEo.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-4916958563433135756</id><published>2008-11-30T21:02:00.000-02:00</published><updated>2010-11-23T00:11:03.288-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-23T00:11:03.288-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="loucuras mesmo" /><title>Mudanças...</title><content type="html">Segundo o dicionário, &lt;span style="font-weight: bold; font-style: italic;"&gt;mudança&lt;/span&gt; é:&lt;br /&gt;&lt;br /&gt;(...)&lt;br /&gt;&lt;span class="sq"&gt;■&lt;/span&gt; &lt;span class="abrev"&gt;substantivo feminino&lt;/span&gt;&lt;br /&gt;&lt;span class="preto"&gt; ato ou efeito de mudar(-se); muda, mudamento.&lt;br /&gt;&lt;span class="preto"&gt; &lt;b&gt;&lt;br /&gt;1&lt;/b&gt;    troca de um lugar (país, região, localidade, residência etc. ) para outro&lt;br /&gt;&lt;span class="exemplo"&gt; Ex.:  está de m. para São Paulo&lt;br /&gt;(...)&lt;br /&gt;&lt;br /&gt;A mudança também é inerente ao ser humano, em diferentes estágios de sua vida.&lt;br /&gt;&lt;br /&gt;Então, quem sou eu para contrariar? Vou me embora para São Paulo!&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-4916958563433135756?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/S5s1qhkafL9DBGJ7Fc_kqJEajuI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/S5s1qhkafL9DBGJ7Fc_kqJEajuI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/S5s1qhkafL9DBGJ7Fc_kqJEajuI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/S5s1qhkafL9DBGJ7Fc_kqJEajuI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/SA1yZSt0oMQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/4916958563433135756/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2008/11/mudanas.html#comment-form" title="2 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/4916958563433135756?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/4916958563433135756?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/SA1yZSt0oMQ/mudanas.html" title="Mudanças..." /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2008/11/mudanas.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUCQnwzcCp7ImA9Wx9TFEo.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-7316194788787994330</id><published>2008-08-21T16:28:00.000-03:00</published><updated>2010-11-23T00:11:03.288-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-23T00:11:03.288-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="loucuras mesmo" /><title>Hello Scrible</title><content type="html">&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;Nunca tive muito tempo para postar informações no meu Blog. Engraçado. Até que descobri o ScribleFire, uma extensão para o &lt;a href='http;//br.mozdev.org/'&gt;Mozilla Firefox&lt;/a&gt; que permite criar meus &lt;i&gt;posts&lt;/i&gt; sem muito trabalho. Basta dar um clique, escrever e em seguida publicar. Simples e prático. Além de contar com um editor WYSIWYG, há uma série de ferramentas que ainda nem descobri.&lt;br/&gt;&lt;br/&gt;Esse post é, como de praxe na computação, o Hello World para o ScribleFire. Espero que a partir de agora eu consiga manter o Blog atualizado.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-7316194788787994330?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AogHxzQXDHZ3E7ydqWrtJCqrK40/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AogHxzQXDHZ3E7ydqWrtJCqrK40/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AogHxzQXDHZ3E7ydqWrtJCqrK40/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AogHxzQXDHZ3E7ydqWrtJCqrK40/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/NC4s-CUBO9M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/7316194788787994330/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2008/08/hello-scrible.html#comment-form" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/7316194788787994330?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/7316194788787994330?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/NC4s-CUBO9M/hello-scrible.html" title="Hello Scrible" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2008/08/hello-scrible.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUCQnwzcCp7ImA9Wx9TFEo.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-9080453695213708934</id><published>2008-05-05T03:33:00.000-03:00</published><updated>2010-11-23T00:11:03.288-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-23T00:11:03.288-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="loucuras mesmo" /><title>Pense em coisas boas. Elas acontecem</title><content type="html">Parece estranho, mas pensar em coisas boas realmente faz elas acontecerem. Cheguei à esta conclusão depois de passar um ano inteiro pensando que tudo sairia errado. E adivinhem: saiu tudo errado. Depois de 365 dias, exatamente 365 dias de aflições, desencontros, problemas, abacaxis, e todo o tipo de coisa ruim que você possa imaginar, eu cheguei à conclusão de que pior do que eu estava não poderia ficar. Aí, comecei a pensar em coisas boas. E adivinhem: elas aconteceram. Parece ironicamente tola essa observação, mas comece a reparar mais o seu dia-a-dia. Cada pequena coisa que você pensa que vai dar certo fará diferença no futuro.&lt;br /&gt;Não precisa acreditar em mim, é claro. Comprove você mesmo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-9080453695213708934?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FDIVo13W9B5IMw81bJfWymZUMfA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FDIVo13W9B5IMw81bJfWymZUMfA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FDIVo13W9B5IMw81bJfWymZUMfA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FDIVo13W9B5IMw81bJfWymZUMfA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/xw_lfcTj1cs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/9080453695213708934/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2008/05/pense-em-coisas-boas-elas-acontecem.html#comment-form" title="0 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/9080453695213708934?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/9080453695213708934?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/xw_lfcTj1cs/pense-em-coisas-boas-elas-acontecem.html" title="Pense em coisas boas. Elas acontecem" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2008/05/pense-em-coisas-boas-elas-acontecem.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUCQnwzcCp7ImA9Wx9TFEo.&quot;"><id>tag:blogger.com,1999:blog-4241414426102940500.post-1779572224382730917</id><published>2008-03-17T11:26:00.000-03:00</published><updated>2010-11-23T00:11:03.288-02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-23T00:11:03.288-02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="loucuras mesmo" /><title>Começos, meios e fins</title><content type="html">A vida é uma formação de começos meios e fins, dos quais temos ao mesmo tempo todo o controle e controle algum.&lt;br /&gt;&lt;br /&gt;Cada jornada que finda em nossa vida, inicia uma nova e intrigante etapa, cheia do desconhecido e do novo, do inusitado, do surpreendente. Repleta de anseios e decepções, dos altos e baixos que já estamos habituados, e daqueles que nunca imaginamos que iríamos viver um dia.&lt;br /&gt;&lt;br /&gt;Quanto ao controle, na verdade temos controle sobre a nossa parte do mundo. Aquela que vemos, que interferimos. Temos controle sobre pouca coisa na verdade. Mas nos iludimos com a impressão de que podemos decidir o futuro. Mas acho que, depois de tanto tempo iludido com essa idéia recíproca, hoje eu dirira que a mais sábia decisão é não decidir. Negar-se do direito, ou dever, que lhe impõem as escolhas, e fazer dessa indecisão a sua mais frenética experiência de vida.&lt;br /&gt;&lt;br /&gt;Assim, seus erros acabam por virar acertos em um dado momento futuro. Seja pela experiência adquirida, seja pelas reviravoltas do mundo. Seja pelo motivo que for, a regra é não deixar que alguma coisa ruim estrague tudo de bom que existe para viver. Se você acha que nada há de bom nessa vida, talvez é porque ainda não procurou no lugar certo, ou na hora certa. E mais, se estás à procura da hora certa ou do lugar certo, desista. Só vai encontrá-los quando parar de procurá-los. Eles vão até você.&lt;br /&gt;&lt;br /&gt;Talvez agora que leu esses parágrafos, tenha conhecido um pouco mais de mim. Talvez não, mas o que importa é conheceres um pouco mais de você. A mim, deixe apenas os recados e as loucuras. O resto é por nossa conta.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4241414426102940500-1779572224382730917?l=blog.ronoaldo.net' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6EliFYsK8UX55fNjw4szOsCRX4s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6EliFYsK8UX55fNjw4szOsCRX4s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6EliFYsK8UX55fNjw4szOsCRX4s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6EliFYsK8UX55fNjw4szOsCRX4s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/RonoaldoPereira/~4/h_aS61pN-Q0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.ronoaldo.net/feeds/1779572224382730917/comments/default" title="Postar comentários" /><link rel="replies" type="text/html" href="http://blog.ronoaldo.net/2008/03/comeos-meios-e-fins.html#comment-form" title="1 Comentários" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/1779572224382730917?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4241414426102940500/posts/default/1779572224382730917?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/RonoaldoPereira/~3/h_aS61pN-Q0/comeos-meios-e-fins.html" title="Começos, meios e fins" /><author><name>Ronoaldo Pereira</name><uri>https://profiles.google.com/117864600407725768640</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh6.googleusercontent.com/-wcVi3bhsQMQ/AAAAAAAAAAI/AAAAAAAAA4Q/ch_vZ1OIVVk/s512-c/photo.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://blog.ronoaldo.net/2008/03/comeos-meios-e-fins.html</feedburner:origLink></entry></feed>

