<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Diego Plentz</title>
	<atom:link href="http://plentz.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://plentz.org</link>
	<description>plentiful thoughts from my empty head</description>
	<pubDate>Mon, 05 Jan 2009 13:00:53 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Bad, bad class. No donut for you</title>
		<link>http://plentz.org/2008/12/30/bad-bad-class-no-donut-for-you/</link>
		<comments>http://plentz.org/2008/12/30/bad-bad-class-no-donut-for-you/#comments</comments>
		<pubDate>Tue, 30 Dec 2008 13:44:32 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
		
		<category><![CDATA[eclipse]]></category>

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

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

		<guid isPermaLink="false">http://plentz.org/?p=238</guid>
		<description><![CDATA[
Provavelmente quem já desenvolve em java à algum tempo, já passou por esse problema: UnsupportedClassVersionError. Ele acontece basicamente quando tentamos executar um .class compilado com uma versão superior à da JVM que estamos tentando executar (exemplo: rodar um .class compilado com java 1.6 em uma jvm 1.5). Hoje pela manhã estava enfrentando esse problema e [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/keesssss/2717166295/" onclick="javascript:pageTracker._trackPageview('/outbound/article/flickr.com');" title="BAD by !.keesssss.!"><img src="http://farm4.static.flickr.com/3213/2717166295_170710fee9_m.jpg" alt="BAD by !.keesssss.!" class="pc_img" height="150" width="240" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;"/></a><br />
Provavelmente quem já desenvolve em java à algum tempo, já passou por esse problema: <a href="http://java.sun.com/javase/6/docs/api/java/lang/UnsupportedClassVersionError.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/java.sun.com');">UnsupportedClassVersionError</a>. Ele acontece basicamente quando tentamos executar um .class compilado com uma versão superior à da JVM que estamos tentando executar (exemplo: rodar um .class compilado com java 1.6 em uma jvm 1.5). Hoje pela manhã estava enfrentando esse problema e não conseguia de jeito nenhum entender o porque.</p>
<p><code>java.lang.UnsupportedClassVersionError: Bad version number in .class file</code></p>
<p>Após decompilar uma classe (aproveitando, usei o <a href="http://java.decompiler.free.fr/" onclick="javascript:pageTracker._trackPageview('/outbound/article/java.decompiler.free.fr');">JD-GUI</a> que funcionou bem no MacOS) que estava rodando no servidor (e *MEH* eu não tinha o fonte), alterar, recompilar na minha máquina e jogar de volta pro servidor, comecei a receber a mensagem de erro. Após revisar todas as configurações do Eclipse (Java Compiler específico no projeto, JRE System Library correto) continuei recebendo o mesmo erro.</p>
<p>Depois de procurar muito, descobri que mesmo alterando todas as configurações no Eclipse, na pasta do projeto ainda ficou um arquivo configurado pra java 6.0. Então se enfrentar o mesmo problema, procure pelo arquivo:</p>
<p><code>$PROJECT_ROOT/.settings/org.eclipse.jst.common.project.facet.core.prefs</code></p>
<p>E edite alterando a JRE para a correta para o seu projeto.</p>
]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2008/12/30/bad-bad-class-no-donut-for-you/feed/</wfw:commentRss>
		</item>
		<item>
		<title>RMagick Cadabra</title>
		<link>http://plentz.org/2008/10/19/rmagick-cadabra/</link>
		<comments>http://plentz.org/2008/10/19/rmagick-cadabra/#comments</comments>
		<pubDate>Mon, 20 Oct 2008 02:35:03 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
		
		<category><![CDATA[ruby]]></category>

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

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

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

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

		<guid isPermaLink="false">http://plentz.org/?p=221</guid>
		<description><![CDATA[
Essa semana vi um twitt do Pellegrino comentando da dor de cabeça pra instalar o RMagick. O Kung inclusive sugeriu usar o ImageScience, que eu nunca usei, mas deve ser uma alternativa interessante.
Mas sendo mais prático preguiçoso, sempre existe uma forma mais fácil e menos dolorosa de fazer as coisas. E foi então que achei [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/kipourax/2167284601/" onclick="javascript:pageTracker._trackPageview('/outbound/article/flickr.com');" title="The Wizard by Kipourax"><img src="http://farm3.static.flickr.com/2010/2167284601_b870b8c59f_m.jpg" alt="The Wizard by Kipourax" class="pc_img" height="160" width="240" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;"/></a><br />
Essa semana vi um <a href="http://twitter.com/pellegrino/statuses/965341567" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">twitt</a> do <a href="http://vp.blog.br/" onclick="javascript:pageTracker._trackPageview('/outbound/article/vp.blog.br');">Pellegrino</a> comentando da dor de cabeça pra instalar o <a href="http://rmagick.rubyforge.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/rmagick.rubyforge.org');">RMagick</a>. O <a href="http://fabiokung.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/fabiokung.com');">Kung</a> inclusive <a href="http://twitter.com/fabiokung/statuses/965343031" onclick="javascript:pageTracker._trackPageview('/outbound/article/twitter.com');">sugeriu</a> usar o <a href="http://seattlerb.rubyforge.org/ImageScience.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/seattlerb.rubyforge.org');">ImageScience</a>, que eu nunca usei, mas deve ser uma alternativa interessante.</p>
<p>Mas sendo mais prático <del datetime="2008-10-20T01:54:36+00:00">preguiçoso</del>, sempre existe uma forma mais fácil e menos dolorosa de fazer as coisas. E foi então que achei o <a href="http://rubyforge.org/frs/?group_id=12" onclick="javascript:pageTracker._trackPageview('/outbound/article/rubyforge.org');">rmagick-osx-installer</a>. Basta fazer <a href="http://rubyforge.org/frs/?group_id=12" onclick="javascript:pageTracker._trackPageview('/outbound/article/rubyforge.org');">download</a>, descompactar e executar</p>
<p><code>ruby rm_install.rb</code></p>
<p>E depois de todo processo completo (com um pouco de sorte), você verá um lindo resumo como esse:</p>
<p><code>Summary: There were 0 failures<br />
libpng 1.2.26 was already installed.<br />
libjpeg was installed successfully<br />
ghostscript was installed successfully<br />
ghostscript-fonts-std was installed successfully<br />
FreeType 9.17.3 was already installed.<br />
libwmf was installed successfully<br />
ImageMagick was installed successfully<br />
RMagick was installed successfully<br />
Removing rm_install_tmp directory...Done</code></p>
]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2008/10/19/rmagick-cadabra/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Updating Gems</title>
		<link>http://plentz.org/2008/10/16/updating-gems/</link>
		<comments>http://plentz.org/2008/10/16/updating-gems/#comments</comments>
		<pubDate>Fri, 17 Oct 2008 03:47:29 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
		
		<category><![CDATA[coding]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://plentz.org/?p=213</guid>
		<description><![CDATA[
Hoje resolvi fazer uma atualização do Rails e cia aqui e dei de cara com um problema chato de resolver. Além de instalar as versões novas dos gems, queria me livrar as antigas. Mas sempre que tentava fazer o gem cleanup, recebia o seguinte erro:

~ plentz$ sudo gem cleanup
Cleaning up installed gems...
Attempting to uninstall mongrel-1.0.1
ERROR: [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/richlegg/84028300/" onclick="javascript:pageTracker._trackPageview('/outbound/article/flickr.com');" title="How many steps can I go? by LeggNet"><img src="http://farm1.static.flickr.com/38/84028300_3f2ea22ed6_m.jpg" alt="How many steps can I go? by LeggNet" class="pc_img" height="160" width="240" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;"/></a></p>
<p>Hoje resolvi fazer uma atualização do <a href="http://www.rubyonrails.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.rubyonrails.org');">Rails</a> e cia aqui e dei de cara com um problema chato de resolver. Além de instalar as versões novas dos <a href="http://www.rubygems.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.rubygems.org');">gems</a>, queria me livrar as antigas. Mas sempre que tentava fazer o <em>gem cleanup</em>, recebia o seguinte erro:<br />
<code><br />
~ plentz$ sudo gem cleanup<br />
Cleaning up installed gems...<br />
Attempting to uninstall mongrel-1.0.1<br />
ERROR:  While executing gem ... (Gem::InstallError)<br />
    Unknown gem mongrel = 1.0.1<br />
</code><br />
Depois de fazer um <em>find</em> (<em>find . -iname mongrel*</em> mesmo) no / inteiro, descobri um diretório com vários gems antigos. Ele fica em:</p>
<p><code>/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/gems/1.8</code></p>
<p>Entrei nele e fiz literalmente um limpa. Apaguei todos arquivos dentro das pastas specifications, doc, cache e gems. Então se quizer deixar sua instalação 100% fresh, rode os comandos abaixo, e caso encontre algum problema, siga a dica acima:<br />
<code><br />
sudo gem update --system<br />
sudo gem update<br />
sudo gem cleanup<br />
</code><br />
Depois confira que você ficou só com as últimas versões rodando: <em>gem list</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2008/10/16/updating-gems/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tomcat is deprecated</title>
		<link>http://plentz.org/2008/10/03/tomcat-is-deprecated/</link>
		<comments>http://plentz.org/2008/10/03/tomcat-is-deprecated/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 17:29:38 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
		
		<category><![CDATA[java]]></category>

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

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

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

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

		<guid isPermaLink="false">http://plentz.org/?p=204</guid>
		<description><![CDATA[
Tomcat is deprecated. Use Jetty instead.
É exatamente esse a impressão que eu tenho depois de migrar os nossos servidores para o Jetty. Depois de ver muita gente reclamando de OutOfMemory no Tomcat, inclusive aqui da empresa, resolvemos tentar o Jetty.
A tempo que escutava o pessoal da Caelum (e principalmente o Kung) falando bem do Jetty, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/hockeylover/2870581459/" onclick="javascript:pageTracker._trackPageview('/outbound/article/flickr.com');" title="Marky is frustrated by Hockey.Lover"><img src="http://farm4.static.flickr.com/3185/2870581459_59a7e18b58_m.jpg" alt="Marky is frustrated by Hockey.Lover" class="pc_img" height="160" width="240" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;"/></a><br />
<a href="http://tomcat.apache.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/tomcat.apache.org');">Tomcat</a> is deprecated. Use <a href="http://www.mortbay.org/jetty/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.mortbay.org');">Jetty</a> instead.</p>
<p>É exatamente esse a impressão que eu tenho depois de migrar os <a href="http://www.criterium.com.br" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.criterium.com.br');">nossos servidores</a> para o Jetty. Depois de ver <strong>muita</strong> gente reclamando de <a href="http://wiki.apache.org/tomcat/OutOfMemory" onclick="javascript:pageTracker._trackPageview('/outbound/article/wiki.apache.org');">OutOfMemory</a> no Tomcat, inclusive <a href="http://www.criterium.com.br" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.criterium.com.br');">aqui da empresa</a>, resolvemos tentar o Jetty.</p>
<p>A tempo que escutava o pessoal da <a href="http://blog.caelum.com.br/2008/06/27/melhorando-o-guj-jetty-nio-e-load-balancing/" onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.caelum.com.br');">Caelum</a> (e principalmente o <a href="http://fabiokung.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/fabiokung.com');">Kung</a>) falando bem do Jetty, mas só quando se começa a usar que se percebe as vantagens. Como temos várias aplicações rodando (diferente do <a href="http://guj.com.br" onclick="javascript:pageTracker._trackPageview('/outbound/article/guj.com.br');">GUJ</a>, que era só o <a href="http://www.jforum.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.jforum.net');">JForum</a>, acredito), imaginei que a troca não seria tão smooth <a href="http://blog.caelum.com.br/2008/06/27/melhorando-o-guj-jetty-nio-e-load-balancing/" onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.caelum.com.br');">assim</a>.</p>
<p>Claro que antes de sair trocando tudo, fizemos alguns testes pra ter certeza que tudo ia ocorrer bem. Por sinal, a troca foi <strong>bem</strong> tranquila do ponto de vista da aplicação, só tivemos que fazer alguns ajustes:</p>
<ul>
<li>o Jetty lança <a href="http://java.sun.com/j2se/1.4.2/docs/api/java/util/Collections.html#unmodifiableMap(java.util.Map)" onclick="javascript:pageTracker._trackPageview('/outbound/article/java.sun.com');">java.util.Collections$UnmodifiableMap</a> ao tentar modificar diretamente o (Hash)Map devolvido com <a href="http://java.sun.com/javaee/5/docs/api/javax/servlet/ServletRequest.html#getParameterMap()" onclick="javascript:pageTracker._trackPageview('/outbound/article/java.sun.com');">request.getParameterMap()</a> ao invés de usar o método setAttribute() do request - coisa que o Tomcat deixa;</li>
<li>Diferenças ao tentar recuperar um resource do sistema utilizando como pasta base &#8220;.&#8221;, ou usar &#8220;..&#8221; pra navegar na estrutura de pastas. Para resolver, basta usar como pasta base &#8220;/&#8221; (ex: &#8220;/com/foo/resources/xpto.xml&#8221;) e colocar dentro do WEB-INF/classes;</li>
<li>E a última, mas simples de resolver, é que o Jetty deixa habilitado listagem de diretórios. Você pode alterar isso no etc/webdefault.xml, trocando o atributo dirAllowed para false;</li>
</ul>
<p>Feitos esses ajustes, chegou a vez de configurar o Jetty para atender aos diferentes domínios. E é aqui que vi uma das grandes vantagens do Jetty. A parte de configuração dele fica <strong>muito</strong> organizada. Fizemos da seguinte forma:</p>
<ul>
<li>Para cada aplicação (pra cada .war na pasta /webapps do Jetty), criamos um arquivo de contexto no /contexts (não é necessário, mas como temos urls diferentes e contextos diferentes, tivemos que customizar - e acabamos ganhando um brinde que conto depois)</li>
<li>Cada arquivo de context tem uma estrutura estupidamente simples:
<p><code><br />
&lt;?xml version="1.0"  encoding="ISO-8859-1"?&gt;<br />
&lt;!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd"&gt;<br />
&lt;Configure class="org.mortbay.jetty.webapp.WebAppContext"&gt;<br />
&nbsp;&nbsp;&lt;Set name="contextPath"&gt;/&lt;/Set&gt;<br />
&nbsp;&nbsp;&lt;Set name="war"&gt;&lt;SystemProperty name="jetty.home" default="."/&gt;/webapps/demo_foo.war&lt;/Set&gt;<br />
&nbsp;&nbsp;&lt;Set name="defaultsDescriptor"&gt;&lt;SystemProperty name="jetty.home" default="."/&gt;/etc/webdefault.xml&lt;/Set&gt;<br />
<br />
&nbsp;&nbsp;&lt;Set name=&#8221;virtualHosts&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;Array type=&#8221;String&#8221;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Item&gt;demo.foo.com&lt;/Item&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/Array&gt;<br />
&nbsp;&nbsp;&lt;/Set&gt;<br />
<br />
&lt;/Configure&gt;<br />
</code>
</li>
</ul>
<p>Explicando por partes:</p>
<ul>
<li><a href="http://docs.codehaus.org/display/JETTY/ContextDeployer" onclick="javascript:pageTracker._trackPageview('/outbound/article/docs.codehaus.org');">WebAppContext</a> é o tipo de contexto que você vai usar, estamos usando esse pois permite o hotdeploy</li>
<li>contextPath serve para dizer (óbvio) o contexto que quer que a aplicação fique disponível. Aqui prefirimos colocar todas no contexto / e configurar diferentes <a href="http://docs.codehaus.org/display/JETTY/Virtual+hosts" onclick="javascript:pageTracker._trackPageview('/outbound/article/docs.codehaus.org');">Virtual Hosts</a> pra cada aplicação.</li>
<li>a propriedade war só diz qual .war (que pode ser um exploded war também) que vai ser <em>deployado</em> naquele contexto</li>
<li>na seção que diz <a href="http://docs.codehaus.org/display/JETTY/Virtual+hosts" onclick="javascript:pageTracker._trackPageview('/outbound/article/docs.codehaus.org');">virtualHosts</a>, você pode configurar todos os endereços que quer que sua aplicacão responda. Para ela aceitar mais de um endereço, basta ir adicionando Item&#8217;s com as outras URLs. Aproveitando, no Jetty 7 será possível <a href="http://jira.codehaus.org/browse/JETTY-721" onclick="javascript:pageTracker._trackPageview('/outbound/article/jira.codehaus.org');">usar wildcards</a>!</li>
</ul>
<p>Com isso feito, ficou <strong>muito</strong> fácil configurar o deploy automático de todas nossas aplicações, pois basta substituir o arquivo .war e dar um <a href="http://en.wikipedia.org/wiki/Touch_(Unix)" onclick="javascript:pageTracker._trackPageview('/outbound/article/en.wikipedia.org');">touch</a> no arquivo de contexts que o Jetty faz reload do contexto (e esse é o brinde! )! Agora, com o Jetty combinado ao <a href="https://hudson.dev.java.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/hudson.dev.java.net');">Hudson</a>, com um clique podemos fazer deploy de qualquer uma das nossas aplicações em um ambiente específico ou mesmo em todos, <strong>automaticamente</strong>. Mas <a href="https://hudson.dev.java.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/hudson.dev.java.net');">isso</a> já é assunto para um outro post.</p>
<p></p>
<h3>Links Relacionados</h3>
<ul>
<li><a href="http://blog.caelum.com.br/2008/06/27/melhorando-o-guj-jetty-nio-e-load-balancing/" onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.caelum.com.br');">Melhorando o GUJ: Jetty, NIO e load balancing</a></li>
<li><a href="http://docs.codehaus.org/display/JETTY/Jetty+Documentation" onclick="javascript:pageTracker._trackPageview('/outbound/article/docs.codehaus.org');">Jetty Documentation</a></li>
<li></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2008/10/03/tomcat-is-deprecated/feed/</wfw:commentRss>
		</item>
		<item>
		<title>E a privacidade, Anatel?</title>
		<link>http://plentz.org/2008/08/21/e-a-privacidade-anatel/</link>
		<comments>http://plentz.org/2008/08/21/e-a-privacidade-anatel/#comments</comments>
		<pubDate>Thu, 21 Aug 2008 14:43:53 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
		
		<category><![CDATA[news]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://plentz.org/?p=175</guid>
		<description><![CDATA[
Faz dois meses que tento cancelar o BrTurbo. Após me dar conta que eu estava pagando 25 reais por mês para ter um login e poder logar na internet. Procurando um pouco, acabei achando 2 alternativas. O PS5 e o ADSLResidencial. Como o ADSLResidencial era mais barato, optei por ele. Dois minutos para criar um [...]]]></description>
			<content:encoded><![CDATA[<p><a href="/photos/darwinbell/544550430/" title="messed up"><img src="http://farm2.static.flickr.com/1185/544550430_a531b9cb64_m.jpg" onclick="javascript:pageTracker._trackPageview('/outbound/article/farm2.static.flickr.com');" alt="messed up" class="pc_img" height="240" width="188" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;"/></a><br />
Faz dois meses que tento cancelar o BrTurbo. Após me dar conta que eu estava pagando 25 reais por mês para ter um login e poder logar na internet. Procurando um pouco, acabei achando 2 alternativas. O <a href="http://www.ps5.com.br/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ps5.com.br');">PS5</a> e o <a href="http://www.adslresidencial.com.br/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.adslresidencial.com.br');">ADSLResidencial</a>. Como o <a href="http://www.adslresidencial.com.br/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.adslresidencial.com.br');">ADSLResidencial</a> era mais barato, optei por ele. Dois minutos para criar um usuário e já sair funcionando. Troquei o login no modem e funcionou de imediato. O boleto paguei 2 dias depois (criei o login no final de semana). Perfeito. Agora &#8220;basta&#8221; cancelar o BrTurbo. Depois de uma novela de 2 meses, continuo sem conseguir cancelar. Como não teve jeito de fazer pelos meios tradicionais, resolvi abrir um chamado na <a href="http://www.anatel.gov.br/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.anatel.gov.br');">Anatel</a>. A novela toda pode ser acompanhada <a href="http://sistemas.anatel.gov.br/focus/FaleConosco/MostrarDetalheSolicitacao.asp?idtSolicitacao=7094023" onclick="javascript:pageTracker._trackPageview('/outbound/article/sistemas.anatel.gov.br');">aqui</a>.</p>
<p>Mas perai. Qualquer um consegue acessar o <strong>meu</strong> chamado na <a href="http://www.anatel.gov.br/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.anatel.gov.br');">Anatel</a>? E se eu trocar o número do chamado? Vamos ver. <a href="http://sistemas.anatel.gov.br/focus/FaleConosco/MostrarDetalheSolicitacao.asp?idtSolicitacao=7094111" onclick="javascript:pageTracker._trackPageview('/outbound/article/sistemas.anatel.gov.br');">http://sistemas.anatel.gov.br/focus/FaleConosco/MostrarDetalheSolicitacao.asp?idtSolicitacao=7094111</a>. Excelente. Chamados públicos e com id sequencial. Parabéns equipe Anatel. Muito bom.</p>
<p>Ou seja, <strong>qualquer pessoa</strong> pode acessar qualquer chamado, pois os mesmos são abertos a público. E pior, com dados que não poderiam ser publicados, como CPF, email, telefone&#8230;ótimo não? Mas fica ainda pior. Sempre pode ficar pior. Me dei conta que o <a href="http://sistemas.anatel.gov.br/focus/FaleConosco/validarUsuario.asp" onclick="javascript:pageTracker._trackPageview('/outbound/article/sistemas.anatel.gov.br');">login do site da Anatel</a> é a combinação CPF+email. E esses dados são exibidos publicamente. Já entenderam o tamanho do problema, né?</p>
<p>Então já que após 3 dias até agora não escutei um &#8220;ah&#8221; da Anatel, resolvi fazer <em>uma certa publicidade</em>, pra ver se as coisas andam mais rápido. Por sinal, <a href="http://sistemas.anatel.gov.br/focus/FaleConosco/MostrarDetalheSolicitacao.asp?idtSolicitacao=7094023" onclick="javascript:pageTracker._trackPageview('/outbound/article/sistemas.anatel.gov.br');">meu chamado do BrTurbo</a> parece estar andando mais rápido que o <a href="http://sistemas.anatel.gov.br/focus/FaleConosco/MostrarDetalheSolicitacao.asp?idtSolicitacao=7094187" onclick="javascript:pageTracker._trackPageview('/outbound/article/sistemas.anatel.gov.br');">chamado deles</a>.</p>
<p>Só fica a dúvida: e a privacidade, Anatel?</p>
<p><em>update</em>: pra quem não viu, tirei uma screenshot <a href="http://flickr.com/photos/plentz/2785089034/" onclick="javascript:pageTracker._trackPageview('/outbound/article/flickr.com');">reproduzindo o problema</a>, <a href="http://flickr.com/photos/plentz/2784235159/" onclick="javascript:pageTracker._trackPageview('/outbound/article/flickr.com');">Anatel tentando corrigir o problema</a> e do <a href="http://flickr.com/photos/plentz/2784235009/" onclick="javascript:pageTracker._trackPageview('/outbound/article/flickr.com');">site da Anatel &#8220;em Manutenção&#8221;</a>.<br />
<em>update 2</em>: recebi agora pela manhã uma ligação da responsável pelo sistema da Anatel, agradecendo sobre o alerta e se comprometendo a só colocar o sistema no ar novamente quando tudo estiver resolvido - e me deixou o número para ligar diretamente, caso encontre outro problema. A <em>publicidade</em> funcionou.</p>
<p>Links:</p>
<ul>
<li><a href="http://www.baguete.com.br/noticiasDetalhes.php?id=27675" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.baguete.com.br');">Baguete - Furo: Anatel retira dados do ar</a></li>
<li><a href="http://www.baguete.com.br/noticiasDetalhes.php?id=27669" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.baguete.com.br');">Baguete - Furo: Anatel expõe dados pessoais</a></li>
<li><a href="http://imasters.uol.com.br/noticia/9788/seguranca/anatel_exibe_dados_de_usuarios_na_web/" onclick="javascript:pageTracker._trackPageview('/outbound/article/imasters.uol.com.br');">iMasters - Anatel exibe dados de usuários na web</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2008/08/21/e-a-privacidade-anatel/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Give It a Try</title>
		<link>http://plentz.org/2008/04/10/give-it-a-try/</link>
		<comments>http://plentz.org/2008/04/10/give-it-a-try/#comments</comments>
		<pubDate>Fri, 11 Apr 2008 02:34:20 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
		
		<category><![CDATA[coding]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://plentz.org/?p=169</guid>
		<description><![CDATA[
Não lembro exatamente onde li, ou quem vi falando essa semana sobre uma versão do &#8220;Pragmatic Version Control with *&#8221; voltada para Git. E parece que estavam prevendo, porque depois de todo o auê que ele tem causado os Pragmatic Programmers anunciaram hoje o Pragmatic Version Control using Git. E não é a toa. A [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/kruse/91118309/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.flickr.com');" title="Pragmatic Version Control Using Git"><img src="http://www.pragprog.com/images/covers/190x228/tsgit.jpg" alt="Pragmatic Version Control Using Git" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;"/></a><br />
Não lembro exatamente onde li, ou quem vi falando essa semana sobre uma versão do &#8220;Pragmatic Version Control with *&#8221; voltada para <a href="http://git.or.cz/" onclick="javascript:pageTracker._trackPageview('/outbound/article/git.or.cz');">Git</a>. E parece que estavam prevendo, porque depois de todo o <a href="http://www.google.com/search?q=git" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.google.com');">auê que ele tem causado</a> os <a href="http://pragprog.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/pragprog.com');">Pragmatic Programmers</a> anunciaram hoje o <a href="http://pragprog.com/titles/tsgit" onclick="javascript:pageTracker._trackPageview('/outbound/article/pragprog.com');">Pragmatic Version Control using Git</a>. E não é a toa. A primeira vez que ouvi alguém falando do <a href="http://git.or.cz/" onclick="javascript:pageTracker._trackPageview('/outbound/article/git.or.cz');">Git</a>, foi o próprio criador da criança, ninguém menos que <a href="http://en.wikipedia.org/wiki/Linus_Torvalds" onclick="javascript:pageTracker._trackPageview('/outbound/article/en.wikipedia.org');">Linus Torvalds</a>, em <a href="http://youtube.com/watch?v=4XpnKHJAok8" onclick="javascript:pageTracker._trackPageview('/outbound/article/youtube.com');">uma apresentação dentro do Google</a>, quase um ano atrás. Na época não dei a devida importância, mas vale a pena dar algumas horinhas de atenção pra ler a respeito e tirar suas próprias conclusões.</p>
<p>Além disso, hoje também foi <a href="http://github.com/blog/40-we-launched" onclick="javascript:pageTracker._trackPageview('/outbound/article/github.com');">oficialmente lançado</a> o <a href="http://github.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/github.com');">Github</a>, que é basicamente um host especializado em Git. E quem acompanha blogs gringos porai, deve ter percebido que não param de pipocar posts em tudo quanto é lado, explicando como usar Git e porque git é melhor que Subversion (acho que ninguém tem coragem de tentar comparar Git com <a href="http://www.cvshome.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.cvshome.org');">CVS</a> né?) então nem vou perder meu tempo escrevendo mais um. E como provavelmente daqui a algum tempo (pouco, inclusive), você vai estar <a href="http://git.or.cz/course/svn.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/git.or.cz');">abandonando seu querido Subversion</a>, siga os links do post e comece a usar. Não dói. <strong>G</strong>ive <strong>I</strong>t a <strong>T</strong>ry.</p>
]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2008/04/10/give-it-a-try/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Internet banda lerda 3g da Claro</title>
		<link>http://plentz.org/2008/03/15/internet-banda-lerda-3g-da-claro/</link>
		<comments>http://plentz.org/2008/03/15/internet-banda-lerda-3g-da-claro/#comments</comments>
		<pubDate>Sat, 15 Mar 2008 22:51:14 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
		
		<category><![CDATA[geek]]></category>

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

		<category><![CDATA[3g]]></category>

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

		<category><![CDATA[banda larga]]></category>

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

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

		<guid isPermaLink="false">http://plentz.org/2008/03/15/internet-banda-lerda-3g-da-claro/</guid>
		<description><![CDATA[
Bom, depois de algum bom tempo usando, posso afirmar, o serviço não vale a pena. De constante só tem duas coisas: a lentidão e a instabilidade. Vide as dezenas de reclamações que outras pessoas colocaram no outro post que fiz e também no site ReclameAqui.com.br, logo após contratar o serviço. No começo, funcionava bem, mas [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/rajkumark/292299985/" onclick="javascript:pageTracker._trackPageview('/outbound/article/flickr.com');" title="Snail on sail"><img src="http://farm1.static.flickr.com/114/292299985_3335a74e63_m.jpg" alt="Snail on sail" class="pc_img" height="150" width="240"  style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;"/></a><br />
Bom, depois de algum bom tempo usando, posso afirmar, o serviço não vale a pena. De constante só tem duas coisas: a lentidão e a instabilidade. Vide as dezenas de reclamações que outras pessoas colocaram <a href="http://plentz.org/2007/12/26/internet-banda-larga-3g-da-claro/#comments" >no outro post que fiz</a> e também no site <a href="http://www.reclameaqui.com.br/reclamacao/?id=3e33432622c36d0edf4953dbc102a97cad727cb4" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.reclameaqui.com.br');">ReclameAqui.com.br</a>, logo após contratar o serviço. No começo, funcionava bem, mas faz um bom tempo que não funciona nem de perto em um nível aceitável.</p>
<p>Reclamações na central deles não adiantam em nada, e quando entrei em contato na última vez (depois de esperar 40 minutos[sério!] no telefone), comentei com o atendente depois de explicar o problema todo:</p>
<blockquote><p>Bom, eu to ligando na verdade nem é pra reclamar, porque sei que não adianta. É mais pra pegar um número de protocolo e poder reclamar com a Anatel e entrar na justiça para cancelar o serviço. Inclusive, tu já deve estar enjoado de gente reclamando, então nem vou ocupar mais a linha, porque devem ter mais zilhões de clientes querendo reclamar.</p></blockquote>
<p>Ele só riu. Então fica a dica, se não comprou, não compre. Se comprou, ligue pra central de atendimento do consumidor da Claro (número 1052 - dica, ligue do celular e coloque no viva voz, pra não cansar o braço enquanto espera), reclame, anote o número do protocolo, ligue pra Anatel (número 0800 332001), reclame passando o número do protocolo da Claro e entre com seu devido processo contra a Claro.</p>
]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2008/03/15/internet-banda-lerda-3g-da-claro/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Internet banda larga 3g da Claro</title>
		<link>http://plentz.org/2007/12/26/internet-banda-larga-3g-da-claro/</link>
		<comments>http://plentz.org/2007/12/26/internet-banda-larga-3g-da-claro/#comments</comments>
		<pubDate>Wed, 26 Dec 2007 11:16:27 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
		
		<category><![CDATA[geek]]></category>

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

		<category><![CDATA[3g]]></category>

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

		<category><![CDATA[banda larga]]></category>

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

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

		<guid isPermaLink="false">http://plentz.org/2007/12/26/internet-banda-larga-3g-da-claro/</guid>
		<description><![CDATA[
Passadinha rápida só pra deixar registrado uma dica pra quem for instalar (ou tentar) o novo serviço de internet móvel da Claro com 3g no Mac OS. Eu assinei o serviço de 1mps e recebi &#8220;de cortesia&#8221; o modem USB Huawei E226. No manual que acompanha o produto, existe a informação que ele é compatível [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/bobnl/170318954/" onclick="javascript:pageTracker._trackPageview('/outbound/article/flickr.com');" title="Working late last night"><img src="http://farm1.static.flickr.com/44/170318954_542c09e3cf_m.jpg" alt="Working late last night" height="160" width="240"  style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;"/></a><br />
Passadinha rápida só pra deixar registrado uma dica pra quem for instalar (ou tentar) o novo serviço de <a href="http://www.tresg.com.br/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.tresg.com.br');">internet móvel da Claro com 3g</a> no <a href="http://www.apple.com/macosx/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.apple.com');">Mac OS</a>. Eu assinei o serviço de 1mps e recebi &#8220;de cortesia&#8221; o <a href="http://www.huawei.com/mobileweb/en/products/view.do?id=282" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.huawei.com');">modem USB Huawei E226</a>. No manual que acompanha o produto, existe a informação que ele é compatível com Windows XP, Vista e Mac OS X 10.3.7 ou superior (apesar de que no site do fabricante só diga Windows XP e 2000). </p>
<p>Ótimo einh? Recebi um CD de instação pra Mac e tudo vai funcionar corretamente. Bom, nem tudo é tão fácil. O CD instala os drivers do modem e também um discador para que você possa conectar. O problema é que se você tenta usar o discador, a mensagem que é exibida é &#8220;Fail to connect&#8221;. Talvez o problema seja que eu já esteja utilizando o <a href="http://www.apple.com/macosx/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.apple.com');">Leopard</a>, mas enfim, o que importa é que não funciona.</p>
<p>Depois de duas horas com o vendedor da loja da <a href="http://www.claro.com.br" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.claro.com.br');">Claro</a> tentando instalar (e o cara era realmente competente, só que não haviam dado treinamento para instalação em Mac`s - dei a sorte de ser atendido justamente pelo cara que foi para São Paulo ter treinamento disso e repassar pro pessoal aqui no RS), tivemos a idéia de tentar usar o discador do próprio Mac OS. E funcionou. Então caso você tenha problemas, a dica é usar o cd de instalação que acompanha para instalar os drivers, mas para conectar, crie uma conexão e não use o discador (MobileConnect) - ele até serve pra alguma coisa, já que é possível ver como está o sinal da operadora na tela principal.</p>
<p>Para criar uma conexão nova (depois de ter instalado os drivers), entre em System Preferences, Network, clique no sinal de +, selecione HUAWEI Mobile em interface e coloque o mesmo em Service name. Coloque os seguintes dados para conexão:</p>
<blockquote><p>Telephone number: *99***1#<br />
Account name: claro<br />
Password: claro
</p></blockquote>
<p>Entre agora em Advanced&#8230;, na aba Modem, selecione Vendor como Other, e em model selecione HUAWEI Mobile Connect - 3G Modem. Clique em OK, em seguida Apply. Para testar, clique em Connect. Se você deixar selecionada a opção &#8220;Show modem status in menu bar&#8221;, o que eu recomendo, você pode mandar conectar clicando no ícone do telefone do menu bar e em seguida Connect HUAWEI&#8230;That&#8217;s it.</p>
<p><strong>update:</strong> pra quem estiver se sentindo lesado ou estiver com problemas na conexão, registre um chamado na Anatel, fone 0800 33 2001.</p>
]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2007/12/26/internet-banda-larga-3g-da-claro/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Open Source Collaboration</title>
		<link>http://plentz.org/2007/07/19/open-source-collaboration/</link>
		<comments>http://plentz.org/2007/07/19/open-source-collaboration/#comments</comments>
		<pubDate>Thu, 19 Jul 2007 22:00:48 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
		
		<category><![CDATA[coding]]></category>

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

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

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

		<guid isPermaLink="false">http://plentz.org/2007/07/19/open-source-collaboration/</guid>
		<description><![CDATA[
Volta e meia vemos pela internet alguém falando que open source não dá dinheiro. Quem tem um pouco mais de conhecimento (e vivência) em ambientes desse tipo, sabe que muitas vezes o dinheiro pode não vir diretamente da empresa &#8220;guarda-chuva&#8221; do projeto, mas através de reconhecimento por se ter participado do desenvolvimento de algum software [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/kruse/91118309/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.flickr.com');" title="It's a Small World"><img src="http://farm1.static.flickr.com/41/91118309_95c43fefbf_m.jpg" alt="It's a Small World" height="180" width="240" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;"/></a></p>
<p>Volta e meia vemos pela internet alguém falando que open source não dá dinheiro. Quem tem um pouco mais de conhecimento (e vivência) em ambientes desse tipo, sabe que muitas vezes o dinheiro pode não vir diretamente da empresa &#8220;guarda-chuva&#8221; do projeto, mas através de reconhecimento por se ter participado do desenvolvimento de algum software que é usado por dezenas, centenas ou mesmo milhares de desenvolvedores. E com um pouco mais de dedicação(e expertise), é possível ser contrato pela empresa (e ainda ganhar um bom dinheiro). No Brasil mesmo, temos excelentes exemplos de gente trabalhando para projetos open source full time, como o <a href="http://fmeyer.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/fmeyer.org');">Fernando Meyer</a>, que trabalha no projeto <a href="http://labs.jboss.com/jbossrules/" onclick="javascript:pageTracker._trackPageview('/outbound/article/labs.jboss.com');">Jboss Drools</a> contratado pela <a href="http://www.redhat.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.redhat.com');">RedHat</a> e também o <a href="http://www.kumpera.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.kumpera.net');">Rodrigo Kumpera</a> (ou louds), trabalhando pela <a href="http://www.novell.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.novell.com');">Novell</a> no projeto <a href="http://www.mono-project.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.mono-project.com');">Mono</a>, ambos amigos pessoais. Além deles, com certeza devem existir outros que não conheço.</p>
<p>Pensando nesse pessoal, <a href="http://www.ohloh.net/accounts/1" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ohloh.net');">Jason Allen</a> e Scott Collison criaram um site de relacionamentos para desenvolvedores: o <a href="http://www.ohloh.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ohloh.net');">Ohloh</a>. O nome é tão estranho quanto o &#8220;primo&#8221; famoso, <a href="http://www.orkut.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.orkut.com');">orkut</a>, mas o foco é bem diferente. O Ohloh oferece uma série de recursos para quem participa de projetos open source, como possibilidade de criar &#8220;profiles&#8221; dos seus projetos e indexar o código fonte, permitindo que os desenvolvedores linkem seu profile aos seus commits no repositório. Também é possível dar um kudo(segundo a definição que está no site: (ku·do) a statement of praise or approval; accolade; compliment.) como forma de demonstrar sua confiança/admiração em algum desenvolvedor. Excenlente oportunidade pra quem colabora em algum projeto mostrar seu trabalho. Quem se cadastrar e tiver curiosidade pode dar uma passada no <a href="http://www.ohloh.net/accounts/5517" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ohloh.net');">meu profile</a> lá.</p>
<p>Na mesma linha, nas últimas semanas (ok, fazia meses que não postava), acabei ganhando alguns &#8220;pontos de confiança&#8221; em alguns projetos. Me tornei commiter (é, versão aportuguezada de quem pode dar commit no repositório), dos projetos <a href="http://hibernate.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/hibernate.org');">Hibernate</a> (e seus subprojetos) e do <a href="http://www.vraptor.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.vraptor.org');">Vraptor</a> (junto com o pessoal da <a href="http://www.caelum.com.br/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.caelum.com.br');">Caelum</a>) - tanto o <a href="http://www.ohloh.net/projects/55" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ohloh.net');">Hibernate</a> quanto o <a href="http://www.ohloh.net/projects/3571" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ohloh.net');">VRaptor</a> já estão indexados no Ohloh. Motivo à mais pra gatar um tempo extra codando na frente do micro <img src='http://plentz.org/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2007/07/19/open-source-collaboration/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Spin - Workshop on Software Trends</title>
		<link>http://plentz.org/2007/07/19/spin-workshop-on-software-trends/</link>
		<comments>http://plentz.org/2007/07/19/spin-workshop-on-software-trends/#comments</comments>
		<pubDate>Thu, 19 Jul 2007 05:57:23 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
		
		<category><![CDATA[coding]]></category>

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

		<guid isPermaLink="false">http://plentz.org/2007/07/19/spin-workshop-on-software-trends/</guid>
		<description><![CDATA[
Já estava com esse post em draft à séculos, mas como o tempo andava curto, acabava sempre procastinando de terminar. Algum tempo atrás (ok, bastante tempo, foi dia 30 de abril, 2007), ocorreu mais um encontro do Spin RS, fórum regional voltado para a melhoria das práticas de Engenharia de Software. Nessa edição em especial, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/leosagnotti/534349749/" onclick="javascript:pageTracker._trackPageview('/outbound/article/flickr.com');" title="Circolo di fotoamatori"><img src="http://farm2.static.flickr.com/1358/534349749_829a7306dc_m.jpg" alt="Circolo di fotoamatori" height="160" width="240" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;"/></a></p>
<p>Já estava com esse post em draft à séculos, mas como o tempo andava curto, acabava sempre procastinando de terminar. Algum tempo atrás (ok, bastante tempo, foi dia 30 de abril, 2007), ocorreu mais um encontro do <a href="http://www.esicenter.unisinos.br/frm_spinrs.php" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.esicenter.unisinos.br');">Spin RS</a>, fórum regional voltado para a melhoria das práticas de Engenharia de Software. Nessa edição em especial, diversas &#8220;celebridades&#8221; da <a href="http://www.ieee.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ieee.org');">IEEE</a> estavam presentes, então vale a pena dar uma olhada, mesmo que seja somente <a href="http://www.esicenter.unisinos.br/download/SPIN_30_04_2007.zip" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.esicenter.unisinos.br');">nos slides</a> das palestras.</p>
<p><a href="http://www.wirfs-brock.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.wirfs-brock.com');">Rebecca Wirfs-Brock</a>: sensacional. Candidata forte à melhor palestra. A palestra dela foi basicamente uma aula de como contar histórias (uma habilidade importantíssima pra quem desenvolve orientado à objetos, já que precisamos saber fazer um &#8220;roteiro&#8221; de como os objetos interagem, etc). O nome da palestra era &#8220;Trends on Object-Oriented Software Design&#8221;, mas acabou virando &#8220;The Art of Telling your Design Story&#8221;.<br />
PS: recomendo <em>mesmo</em> o livro da Rebecca, <a href="http://www.amazon.com/gp/product/0201379430" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.amazon.com');">Object Design: Roles, Responsibilities, and Collaborations</a>.</p>
<p>Outra palestra bacana foi a do <a href="http://philippe.kruchten.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/philippe.kruchten.com');">Philippe Kruchten</a>, sobre Arquitetura de software, onde ele levantou algumas questões sobre quem, como e quando deve fazer a arquitetura de um sistema. Mas a parte que mais me chamou atenção foi durante as perguntas da platéia, onde alguém perguntou alguma dica de como se tornar um bom arquiteto de software, e ele respondeu bem tranquilamente &#8220;troque muitas vezes de emprego&#8221;. <a href="http://www.flickr.com/photos/diegop/543111094/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.flickr.com');">Reações curiosas</a> puderam ser observadas.</p>
<p>Dessa vez só o <a href="http://blog.fragmental.com.br/" onclick="javascript:pageTracker._trackPageview('/outbound/article/blog.fragmental.com.br');">Phillip Calçado</a> e o Marcello Azambuja que <a href="http://www.flickr.com/photos/diegop/543113656/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.flickr.com');">vieram</a>, mas próxima vez espero ver mais gente por aqui, até para valorizar mais o evento (e também pra participar do churrasco pós-evento).</p>
]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2007/07/19/spin-workshop-on-software-trends/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Connection Leak Paradise</title>
		<link>http://plentz.org/2007/04/21/connection-leak-paradise/</link>
		<comments>http://plentz.org/2007/04/21/connection-leak-paradise/#comments</comments>
		<pubDate>Sun, 22 Apr 2007 03:32:55 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
		
		<category><![CDATA[coding]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://plentz.org/2007/04/21/connection-leak-paradise/</guid>
		<description><![CDATA[
Quem programa em Java e nunca passou por esse problema? Você está desenvolvendo, tudo funciona perfeitamente, quando a aplicação vai para produção e os usuários começam a usar você percebe que o contador de conexões disponíveis no seu pool só diminui.
As razões para isso podem ser as mais variadas (sendo a maioria deles problemas da [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/dinerdog/189083353/" onclick="javascript:pageTracker._trackPageview('/outbound/article/flickr.com');" title="Leak"><img src="http://farm1.static.flickr.com/69/189083353_ef004f5c30_m.jpg" alt="Leak" height="160" width="240" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;"/></a></p>
<p>Quem programa em Java e nunca passou por esse problema? Você está desenvolvendo, tudo funciona perfeitamente, quando a aplicação vai para produção e os usuários começam a usar você percebe que o contador de conexões disponíveis no seu pool só diminui.</p>
<p>As razões para isso podem ser as mais variadas (sendo a maioria deles problemas da aplicação e não algo ligado ao data source, servidor de aplicação ou mesmo driver jdbc), mas as mais comuns são:</p>
<ul>
<li>ausência de chamada ao connection.close();</li>
<li>falta de um tratamento de excessões, e conseqüentemente, o método close() não é chamado;</li>
</ul>
<p>É importante saber, que sempre que você estiver lidando diretamente com Connection (o que não é algo muito aconselhável, sabendo que já existem diversos frameworks que abstraem/simplificam a utilização de jdbc), você deve fechar ela através do método close() e o mesmo deve estar dentro de um bloco finally{}, para que ele seja executado mesmo se ocorrer um problema durante a execução do seu código.</p>
<p>Mas e quando você já revisou &#8220;todo&#8221; seu código e mesmo assim as conexões continuam vazando? Você olha as conexões do seu pool e elas simplesmente parecem ir para o limbo. Aqui alguns já podem começar a se perguntar, &#8220;mas tem como eu monitorar as conexões do meu pool?&#8221;. E é aqui que entra um recurso não muito conhecido (e menos ainda, usado): <a href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/" onclick="javascript:pageTracker._trackPageview('/outbound/article/java.sun.com');">Java Management Extensions</a> ou simplesmente <a href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/" onclick="javascript:pageTracker._trackPageview('/outbound/article/java.sun.com');">JMX</a>.</p>
<p>Copiando o site da Sun:</p>
<blockquote><p>JMX technology provides the tools for building distributed, Web-based, modular and dynamic solutions for managing and monitoring devices, applications, and service-driven networks. By design, this standard is suitable for adapting legacy systems, implementing new management and monitoring solutions, and plugging into those of the future.</p></blockquote>
<p>A maioria (se não todos) dos application servers já vem com recursos  JMX prontos pra monitoramento e diagnóstico de connection leaks. Ativar o monitoramento do data source pode muitas vezes sacrificar um pouco da performance da aplicação (principalmente em um arquitetura Database-Centered), mas normalmente é um custo aceitável para descobrir os pontos de perda das conexões.</p>
<p>No <a href="http://labs.jboss.com/portal/jbossas/" onclick="javascript:pageTracker._trackPageview('/outbound/article/labs.jboss.com');">JBoss</a>, servidor de aplicação que eu utilizo no meu atual projeto, ligar o monitoramento é bem simples. Quando ativo, ele basicamente armazena o stack trace de todos os pontos onde temos chamadas à getConnection(), até que essa conexão sehja devolvida ao pool. Para ligar o monitoramento, altere o arquivo de configuração do seu data source(provavelmente um *-ds.xml) adicionando a linha abaixo<br />
<code>  &lt;local-tx-datasource&gt;<br />
    .....<br />
    &lt;track-statements&gt;true&lt;/track-statements&gt;<br />
  &lt;/local-tx-datasource&gt;</code></p>
<p>Agora basta acessar o mbean <a href="http://wiki.jboss.org/wiki/Wiki.jsp?page=ConfigCachedConnectionManager" onclick="javascript:pageTracker._trackPageview('/outbound/article/wiki.jboss.org');">CachedConnectionManager</a> através da interface JMX do Jboss e invocar listInUseConnections() para ver o stack trace das conexões que não foram fechadas. Provavelmente vai ser algo semelhante à <a href="http://nome-do-servidor:8080/jmx-console/HtmlAdaptor?action=invokeOpByName&#038;name=jboss.jca%3Aservice%3DCachedConnectionManager&#038;methodName=listInUseConnections" onclick="javascript:pageTracker._trackPageview('/outbound/article/');">essa</a>. Se você quizer apenas ver como anda seu pool, acesse o mbean <a href="http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossJCAPooling" onclick="javascript:pageTracker._trackPageview('/outbound/article/wiki.jboss.org');">ManagedConnectionPool</a>, procurando principalmente pelos seguinte valores:</p>
<ul>
<li>AvailableConnectionCount - total de conexões disponíveis no pool</li>
<li>InUseConnectionCount - total de conexões sendo usadas atualmente</li>
<li>ConnectionCount - indica o total de conexões abertas atualmente no pool</li>
</ul>
<p>Utilizando esses recursos e tendo um pouco de paciência, fica bem mais fácil achar os pontos de vazamento da aplicação.</p>
<h3>Mais informações:</h3>
<ul>
<li><a href="http://wiki.jboss.org/wiki/Wiki.jsp?page=ConfigDataSources" onclick="javascript:pageTracker._trackPageview('/outbound/article/wiki.jboss.org');">Jboss DataSources</a></li>
<li><a href="http://blogs.sun.com/kshitiz/entry/connection_leak_tracing" onclick="javascript:pageTracker._trackPageview('/outbound/article/blogs.sun.com');">Connection Leak Tracing - Sun Application Server</a></li>
<li><a href="http://edocs.bea.com/wls/docs100/ConsoleHelp/pagehelp/JDBCjdbcdatasourcesjdbcdatasourceconfigdiagnosticstitle.html#jdbc.datasources.jdbcdatasourceconfigdiagnostics.profiletype_conn_leak.label" onclick="javascript:pageTracker._trackPageview('/outbound/article/edocs.bea.com');">Bea WebLogic - Profile Connection Leak</a></li>
<li><a href="http://publib.boulder.ibm.com/infocenter/ieduasst/v1r1m0/index.jsp?topic=/com.ibm.iea.was_v6/was/6.0/PD/WASv6_Connection_Leak_Diagnostics/player.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/publib.boulder.ibm.com');">IBM Web Sphere Aplication Server - Connection Leak Diagnostics</a></li>
<li><a href="http://www.javaddicts.net/blog/index.php/2005/08/08/the-joy-of-finding-connection-leaks/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.javaddicts.net');">The Joy of Finding Connection Leaks</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2007/04/21/connection-leak-paradise/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Vote for Eclipse!</title>
		<link>http://plentz.org/2007/04/12/vote-for-eclipse/</link>
		<comments>http://plentz.org/2007/04/12/vote-for-eclipse/#comments</comments>
		<pubDate>Thu, 12 Apr 2007 07:04:11 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
		
		<category><![CDATA[eclipse]]></category>

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

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

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

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

		<guid isPermaLink="false">http://plentz.org/2007/04/12/vote-for-eclipse/</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href=""http://flickr.com/photos/silvia31163/250444001/" onclick="javascript:pageTracker._trackPageview('/outbound/article/flickr.com');" title="today i wear my sunday hat :)"><img src="http://farm1.static.flickr.com/83/250444001_6beae1b1a6_m.jpg" alt="today i wear my sunday hat :)" height="170" width="240" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;"/></a></p>
<p>Quem lê meu blog já à algum tempo, sabe que eu <a href="http://plentz.org/2005/02/27/eclipsed/" >uso o Eclipse</a> como principal ferramenta de trabalho. O que poucos sabem é que todos podem colaborar nas decisões do projeto, e de quebra, priorizar as correções de bugs e melhorias. Pra dar um empurrãozinho nos preguiçosos, segue minha lista atual de votos.</p>
<h3>Community</h3>
<ul>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=71735" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">71735</a> - Eclipse source repository should convert to subversion. </li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=177497" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">177497</a> - Bug status explanation page does not mention RESOLVED REMIND</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=178923" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">178923</a> - Remove LATER and REMIND resolutions when Bugzilla 3.0 is released</li>
</ul>
<h3>JDT</h3>
<ul>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=182064" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">182064</a> - Should be possible to &#8220;Migrate JAR File&#8221; in User Libraries  </li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=182071" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">182071</a> - [1.5][compiler] Unnecessary cast detection fails on ternary operation</li>
</ul>
<h3>Platform</h3>
<ul>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=2009" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">2009</a> - [EditorMgmt] Need to sort out handling of out-of-synch resources (1GDFD96)</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=8009" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">8009</a> - [Editor Mgmt] Split File Editor</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=14916" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">14916</a> - [Navigator] How can I recover from a &#8220;resource is out of sync&#8221; problem ?</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=19419" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">19419</a> - [resources] Cancellation during file transfer leaves files out-of-sync</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=35973" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">35973</a> - [resources] Better project organization</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=46207" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">46207</a> - [Workbench] [Services] Combine, compose, nest workbenchparts and editorparts</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=52338" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">52338</a> - [find/replace] regex replace with newline doesn&#8217;t insert anything</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=92250" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">92250</a> - [Workbench] Excessive amount of Permanent Generation memory reported by the VM</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=102527" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">102527</a> - [Wizards] Add support for projects refactoring (ie add/remove nature)</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=118294" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">118294</a> - Renaming an External Tool Builder (set to run during Auto Builds) causes error</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=134416" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">134416</a> - &#8220;Run As..&#8221; - &#8220;Ant Build&#8221; results in &#8220;Unable to find ant file to run&#8221;</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=142364" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">142364</a> - Replacing a large number of files hangs Eclipse</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=163714" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">163714</a> - Update manager interactively asks for mirror selection</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=167660" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">167660</a> - Out of sync not refreshed after file is closed</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=169121" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">169121</a> - cpu get &gt;50 when I did refactor to a method</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=169386" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">169386</a> - [Edit] Local side of java compare should be more like java editor</li>
</ul>
<h3>Web Tools</h3>
<ul>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=95450" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">95450</a> - add extract include file for JSP source refactoring</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=100511" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">100511</a> - JavaScript refactoring and better code complete</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=107052" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">107052</a> - jsp editor error if jsp is under a subdirectory</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=119334" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">119334</a> - [jsp20] jsp:directive.tag import= list not recognized in .tagx XML tag files</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=124288" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">124288</a> - [Plan] Improve JSP 2.0 support</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=124796" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">124796</a> - [refactoring] moving a servlet is not reflected in web.xml  </li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=136850" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">136850</a> - JSTL Code Assist from imported projects.</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=157465" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">157465</a> - jsp fragment does not see any variables/tags from its parent</li>
<li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=168538" onclick="javascript:pageTracker._trackPageview('/outbound/article/bugs.eclipse.org');">168538</a> - &#8220;Convert to a Dynamic Web Project&#8221; should work for Java projects</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2007/04/12/vote-for-eclipse/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Hibernate com PostGIS</title>
		<link>http://plentz.org/2007/03/28/hibernate-com-postgis/</link>
		<comments>http://plentz.org/2007/03/28/hibernate-com-postgis/#comments</comments>
		<pubDate>Thu, 29 Mar 2007 03:06:21 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
		
		<category><![CDATA[hibernate]]></category>

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

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

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

		<guid isPermaLink="false">http://plentz.org/2007/03/28/hibernate-com-postgis/</guid>
		<description><![CDATA[
Uns meses atrás tive um problema com o uso do Hibernate, em um caso um tanto quanto incomum: o projeto usava Ingres, um banco de dados muito pouco usado, e com algumas particularidades idiotas (sendo gentíl com eles). O tipo responsável por armazenar as datas no Ingres, diferentemente de todos os outros bancos que já [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/supriya/86805710/" onclick="javascript:pageTracker._trackPageview('/outbound/article/flickr.com');" title="Green pentagons"><img src="http://farm1.static.flickr.com/40/86805710_dbe9c536bf_m.jpg" alt="Green pentagons" height="180" width="240" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;" /></a></p>
<p>Uns meses atrás tive um problema com o uso do <a href="http://hibernate.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/hibernate.org');">Hibernate</a>, em um caso um tanto quanto incomum: o projeto usava <a href="http://www.ingres.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.ingres.com');">Ingres</a>, um banco de dados muito pouco usado, e com algumas particularidades idiotas (sendo gentíl com eles). O tipo responsável por armazenar as datas no Ingres, diferentemente de todos os outros bancos que já vi, aceita três &#8220;estados&#8221; nas colunas de data: uma data (óbvio), null, <strong>&#8221;</strong> - sim, uma <em>empty string</em>.</p>
<p>Com isto, eu não poderia usar as classes padrão para datas no Java, acabei criando uma classe Data para tratar desses estados. Como o tipo foi criado por mim, o Hibernate não oferece nada pronto (por razões óbvias), tive que achar uma alternativa.</p>
<p>Lendo um pouco <a href="http://hibernate.org/hib_docs/v3/reference/en/html_single/" onclick="javascript:pageTracker._trackPageview('/outbound/article/hibernate.org');">a referência</a>, mais especificamente o capítulo <a href="http://hibernate.org/hib_docs/v3/reference/en/html_single/#mapping-types-custom" onclick="javascript:pageTracker._trackPageview('/outbound/article/hibernate.org');"><em>Custom value types</em></a>, descobri que para esses casos especiais, onde muitos já apelariam para alguma forma menos ortodoxa, o Hibernate oferece um mecanismo muito poderoso : os <a href="http://www.hibernate.org/hib_docs/v3/api/org/hibernate/usertype/UserType.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.hibernate.org');">UserTypes</a>.</p>
<p>Um UserType é basicamente uma interface que permite a implementação de como um determinado tipo será recuperado e persistido no seu banco de dados. Este recurso é extremamente útil e me salvou graciosamente.</p>
<p>E porque estou escrevendo isso tudo? Recebi hoje uma dúvida bem interessante por mensagem privada no <a href="http://guj.com.br" onclick="javascript:pageTracker._trackPageview('/outbound/article/guj.com.br');">GUJ</a>. O usuário perguntava se haveria possibilidade de usar Hibernate em conjunto com o banco <a href="http://postgis.refractions.net/" onclick="javascript:pageTracker._trackPageview('/outbound/article/postgis.refractions.net');">PostGIS</a> - focado em armazenar dados geométricos.</p>
<p>O principal desafio é como mapear os dados que são armazenados em Geometry, como são chamados os tipos geométricos no PostGIS. Como não existe nenhum tipo nativo do Java que seria correspondente (e nem a especificação do <a href="http://java.sun.com/javase/technologies/database/" onclick="javascript:pageTracker._trackPageview('/outbound/article/java.sun.com');">JDBC</a> preve isso - tipos clob, lobs e variantes não contam!), o trabalho pode ser um pouco mais complicado que se imagina.</p>
<p>Dando uma pesquisada, acabei encontrado uma thread da lista de users do PostGIS que trata exatamente disso. <a href="http://www.nabble.com/PostGIS---hibernate---EJB3-t2064211.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.nabble.com');">Nela</a> é apresentada uma solução elegante para o tratamento dos tipos no Hibernate - e que acabou virando parte do projeto. <a href="http://postgis.com/support/wiki/index.php?SpatialEJB3" onclick="javascript:pageTracker._trackPageview('/outbound/article/postgis.com');">SpatialEJB3</a> nada mais é que um UserType (<a href="http://svn.refractions.net/postgis/trunk/java/ejb3/src/org/postgis/hibernate/GeometryType.java" onclick="javascript:pageTracker._trackPageview('/outbound/article/svn.refractions.net');">GeometryType</a> no caso) com a implementação responsável por tratar o tipo Geometry. Ele pode ser usadao tanto com Hibernate puro, quanto para EJB3. Só achei estranho que as classes ainda não estão no <a href=" http://postgis.refractions.net/download/postgis.jar" onclick="javascript:pageTracker._trackPageview('/outbound/article/postgis.refractions.net');">postgis.jar</a>.</p>
<p>Para usar o recurso, fica extremamente simples:</p>
<p><code>        @Type(type = "org.postgis.hibernate.GeometryType")<br />
        public Geometry getLocation(){<br />
                return location;<br />
        }</code></p>
<p>No site é possível encontrar a <a href="http://svn.refractions.net/postgis/trunk/java/ejb3/ejb3spatial.pdf" onclick="javascript:pageTracker._trackPageview('/outbound/article/svn.refractions.net');">documentação do projeto</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2007/03/28/hibernate-com-postgis/feed/</wfw:commentRss>
		</item>
		<item>
		<title>We CAN Change The World</title>
		<link>http://plentz.org/2007/03/25/we-can-change-the-world/</link>
		<comments>http://plentz.org/2007/03/25/we-can-change-the-world/#comments</comments>
		<pubDate>Mon, 26 Mar 2007 03:35:33 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
		
		<category><![CDATA[nature]]></category>

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

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

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

		<guid isPermaLink="false">http://plentz.org/2007/03/25/we-can-change-the-world/</guid>
		<description><![CDATA[
And we did it.
ps: e eles tão com um timinho bem produtivo de marketing, einh?
]]></description>
			<content:encoded><![CDATA[<p><object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/ma4g0hp2Eh8"></param><param name="wmode" value="transparent"></param><embed src="http://www.youtube.com/v/ma4g0hp2Eh8" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"></embed></object></p>
<p>And we did it.</p>
<p>ps: e <a href="http://greenpeace.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/greenpeace.org');">eles</a> tão com um timinho bem produtivo de marketing, einh?</p>
]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2007/03/25/we-can-change-the-world/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Democratic web host</title>
		<link>http://plentz.org/2007/03/03/democratic-web-host/</link>
		<comments>http://plentz.org/2007/03/03/democratic-web-host/#comments</comments>
		<pubDate>Sat, 03 Mar 2007 08:44:40 +0000</pubDate>
		<dc:creator>Diego Plentz</dc:creator>
		
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://plentz.org/2007/03/03/democratic-web-host/</guid>
		<description><![CDATA[
Desde que o porca morreu, estou hospedando meu blog no Dreamhost. Host bem bacana, uma série de features úteis (Subversion, Rails, etc etc), mas sempre há espaço pra melhoras. E eles tem uma forma bem legal de fazer isso, através de um espaço para os usuários votarem quais features acham legais de serem adicionadas. Dando [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://flickr.com/photos/peskymac/290959278/" onclick="javascript:pageTracker._trackPageview('/outbound/article/flickr.com');" title="Let's pretend we're just two people - 41/365"><img src="http://farm1.static.flickr.com/101/290959278_47e920f307_m.jpg" alt="Let's pretend we're just two people - 41/365" height="187" width="240" style="border: 2px solid rgb(0, 0, 0);float: right; margin-left: 10px; margin-bottom: 10px;" /></a></p>
<p>Desde que o <a href="http://plentz.org/2007/01/06/back-on-track/" >porca morreu</a>, estou hospedando meu blog no <a href="http://www.dreamhost.com/r.cgi?132781" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.dreamhost.com');">Dreamhost</a>. Host bem bacana, uma série de features úteis (Subversion, Rails, etc etc), mas sempre há espaço pra melhoras. E eles tem uma forma bem legal de fazer isso, através de <a href="https://panel.dreamhost.com/index.cgi?tree=home.sugg&#038;" onclick="javascript:pageTracker._trackPageview('/outbound/article/panel.dreamhost.com');">um espaço para os usuários votarem</a> quais features acham legais de serem adicionadas. Dando uma passada rápida por cima achei algumas legais:</p>
<ul>
<li><a href="https://panel.dreamhost.com/?tree=home.sugg&#038;current_step=Index&#038;next_step=DoVote&#038;sid=563&#038;&#038;voted=1" onclick="javascript:pageTracker._trackPageview('/outbound/article/panel.dreamhost.com');">Allow one-click installation of Trac (http://projects.edgewall.com/trac/)</a></li>
<li><a href="https://panel.dreamhost.com/?tree=home.sugg&#038;current_step=Index&#038;next_step=DoVote&#038;sid=210&#038;&#038;voted=1" onclick="javascript:pageTracker._trackPageview('/outbound/article/panel.dreamhost.com');">Install and support Apache Tomcat for JSP (JavaServer Pages) support.</a></li>
<li><a href="https://panel.dreamhost.com/?tree=home.sugg&#038;current_step=Index&#038;next_step=DoVote&#038;sid=72&#038;&#038;voted=1" onclick="javascript:pageTracker._trackPageview('/outbound/article/panel.dreamhost.com');">Add Java Servlet support.</a></li>
<li><a href="https://panel.dreamhost.com/?tree=home.sugg&#038;current_step=Index&#038;next_step=DoVote&#038;sid=232&#038;&#038;voted=1" onclick="javascript:pageTracker._trackPageview('/outbound/article/panel.dreamhost.com');">Allow multiple votes on one suggestion.</a></li>
<li><a href="https://panel.dreamhost.com/?tree=home.sugg&#038;current_step=Index&#038;next_step=DoVote&#038;sid=233&#038;&#038;voted=1" onclick="javascript:pageTracker._trackPageview('/outbound/article/panel.dreamhost.com');">Notify my via email whenever I get a new referral signed up.</a></li>
<li><a href="https://panel.dreamhost.com/?tree=home.sugg&#038;current_step=Index&#038;next_step=DoVote&#038;sid=242&#038;&#038;voted=1" onclick="javascript:pageTracker._trackPageview('/outbound/article/panel.dreamhost.com');">Compile pdflib support into PHP for creating pdf documents.</a></li>
<li><a href="https://panel.dreamhost.com/?tree=home.sugg&#038;current_step=Index&#038;next_step=DoVote&#038;sid=265&#038;&#038;voted=1" onclick="javascript:pageTracker._trackPageview('/outbound/article/panel.dreamhost.com');">Add DreamHost Staff submissions to the suggestions area, not just customers&#8217; suggestions.</a></li>
</ul>
<p>Sugestões também são bem-vindas.</p>
]]></content:encoded>
			<wfw:commentRss>http://plentz.org/2007/03/03/democratic-web-host/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
