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

<channel>
	<title>Zona J &#187; Ferramentas</title>
	<atom:link href="http://www.zonaj.org/category/ferramentas/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zonaj.org</link>
	<description>Zona Java - Um blog português sobre java.</description>
	<lastBuildDate>Wed, 26 May 2010 17:23:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Meta-Frameworks Java</title>
		<link>http://www.zonaj.org/2008/03/13/meta-frameworks-java/</link>
		<comments>http://www.zonaj.org/2008/03/13/meta-frameworks-java/#comments</comments>
		<pubDate>Thu, 13 Mar 2008 12:11:33 +0000</pubDate>
		<dc:creator>Ruben Badaró</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[dwr]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=88</guid>
		<description><![CDATA[Afinal o que é, genericamente, uma Meta-Framework, ou melhor, um Meta-&#8221;Qualquer coisa&#8221;?
A palavra &#8220;meta&#8221;, para o efeito desta fantástica anologia, pode ser definida pela seguinte rigorosa proposição/teorema/axioma/lema/etc:
Meta-"Qualquer coisa" é ("Qualquer coisa")2
Ou seja, 
Meta-"Qualquer coisa" é "Qualquer coisa sobre "Qualquer coisa""
Assim, podemos ter coisas como Meta-dados (Dados sobre dados), Meta-Teoremas, Meta-Matemática e Meta-Frameworks.
Temos, portanto, uma Framework [...]]]></description>
			<content:encoded><![CDATA[<p>Afinal o que é, genericamente, uma Meta-Framework, ou melhor, um Meta-&#8221;Qualquer coisa&#8221;?<br />
A palavra &#8220;meta&#8221;, para o efeito desta fantástica anologia, pode ser definida pela seguinte rigorosa proposição/teorema/axioma/lema/etc:</p>
<pre>Meta-"Qualquer coisa" é ("Qualquer coisa")<sup>2</sup></pre>
<p>Ou seja, </p>
<pre>Meta-"Qualquer coisa" é "Qualquer coisa sobre "Qualquer coisa""</pre>
<p>Assim, podemos ter coisas como Meta-dados (Dados sobre dados), Meta-Teoremas, Meta-Matemática e Meta-Frameworks.</p>
<p>Temos, portanto, uma Framework sobre Framework(s). Mais precisamente, o sentido dado é de uma framework agregadora de outras frameworks, ao invés de um framework que descreve outras frameworks, algo que o prefixo meta poderia sugerir. </p>
<p>Epistemologia à parte, de que raio é que estou aqui a falar?</p>
<p>Estou a falar de agregadores de frameworks, neste caso em java, que conjugam um conjunto de frameworks base, ligando as diversas peças, e facilitando o uso por parte do utilizador. Desta forma os diversos componentes estão agregados de uma forma minimamente provada ou testada e o tempo de configuração do projecto é incrivelmente reduzido. Podem inclusivé servir como objecto de estudo para observar boas práticas.<br />
Embora seja contra tudo o que seja ideia de criar frameworks base internas a empresas e usar sempre produtos open-source, meta-frameworks são uteis  e não são mais que uma definição formal da pilha tecnológica do projecto ou, se a empresa trabalhar dessa forma, da pilha tecnológica da empresa.</p>
<p>Arrancar com um projecto deverá ser tão simples como gerar uma estrutura base do projecto, já com todos os componentes wired up e pronta a compilar. Também deve ser possível importar o projecto do IDE de eleição da pessoa. Repito, da pessoa. Ao contrário do que acontece em muitas empresas, na minha opinião o IDE deve ser uma , sendo que a maioria das frameworks disponibilizam pelo menos para Eclipse e Netbeans.</p>
<p>No paradigma web, poderiamos pois ter uma framework que junta uma tecnologia de mapeamento OR, uma de caching, uma de Dependency Injection/Inversion of Control, uma de apresentação, uma de templating e mais quantas sejam necessárias; mas podemos aplicar isto a qualquer paradigma que queiramos.</p>
<p>Destaco as seguintes frameworks (que são as que conheço):</p>
<ul>
<li>Keel</li>
<p>O <a href="http://www.keelframework.org/index.shtml">projecto Keel</a> está morto (não há actividade aparente desde 2004). Apenas é interessante por ter sido a primeira framework deste género com que tive contacto.</p>
<li>Appfuse</li>
<p>O <a href="http://appfuse.org/display/APF/Home">Appfuse</a> é provavelmente o projecto deste género com maior sucesso e maior disseminação. Liderado pelo <a href="http://raibledesigns.com/">Matt Raible</a>, reconhecido especialista em tecnologias web, o Appfuse é na realidade uma colectânea de meta-frameworks.<br />
Basea-se no <a href="http://maven.apache.org/">Maven</a>, usando <a href="http://maven.apache.org/guides/introduction/introduction-to-archetypes.html">archetypes</a>, para rapidamente criar esqueletos de projectos. Depois é possível gerar o projecto para o IntelliJ IDEA, Eclipse ou Netbeans e usar qualquer uma das bibliotecas disponíveis no <a href="http://appfuse.org/display/APF/Reference+Guide">Reference Guide</a> &#8211; é possível rapidamente montar um sistema com muito pouco trabalho.<br />
O Appfuse, como usa POJOs e Spring, possibilita criar CRUDs rapidamente com uma simples acção Maven.</p>
<li>IWebMvc</li>
<p>O <a href="http://code.google.com/p/internna/">IWebMvc</a> é a mais recente meta-framework de que tomei conhecimento. É criada por um senhor chamado Jose Noheda, que é o responsável pela integração com Spring no projecto DWR. É com naturalidade então que ele criou uma meta-framework que agrega <a href="http://getahead.org/">DWR</a> + <a href="http://dojotoolkit.org/">Dojo</a> + <a href="http://www.springframework.org/">Spring</a> + <a href="www.hibernate.org/">Hibernate</a>/JPA.<br />
Ainda está na sua <a href="http://internna.blogspot.com/2008/03/iwebmvc-first-preview-version-available.html">primeira versão</a>, mas dada a qualidade do DWR isto promete. Certamente uma meta-framework a analisar.</p>
<li>Parancoe</li>
<p><a href="http://www.parancoe.org/">Parancoe</a> é uma meta-framework criada pelo <a href="http://benfante.blogspot.com/">Lucio Benfante</a>, líder do <a href="www.jugpadova.it/">JUG Padova</a>.<br />
A pilha tecnológica de Parancoe é <a href="http://getahead.org/">DWR</a> + <a href="http://www.springframework.org/projects">Spring MVC</a> + <a href="http://www.springframework.org/">Spring</a> + <a href="www.hibernate.org/">Hibernate</a>/JPA que é uma solução que considero ser muito prática e uma excelente conjugação de tecnologias.<br />
A característica técnica mais destacada são os DAOs genéricos que não requerem implementação. Para quem gosta de DAOs, pode ser bastante útil.<br />
Para verem um site feito em Parancoe, podem consultar o <a href="http://www.jugevents.org/">JUGEvents</a> que usámos para os registos no PTJUG.
</ul>
<p>Penso que qualquer uma destas últimas vale a pena uma voltinha <img src='http://www.zonaj.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2008/03/13/meta-frameworks-java/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Ganhar dinheiro com open-source: Netbeans Innovators Grant</title>
		<link>http://www.zonaj.org/2008/02/08/ganhar-dinheiro-com-open-source-netbeans-innovators-grant/</link>
		<comments>http://www.zonaj.org/2008/02/08/ganhar-dinheiro-com-open-source-netbeans-innovators-grant/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 18:30:39 +0000</pubDate>
		<dc:creator>Ruben Badaró</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=78</guid>
		<description><![CDATA[Li o post do Bruno Souza no DZone e achei uma excelente ideia. 
Quantas vezes não nos queixámos de esta ou aquela feature no nosso IDE favorito, sem no entanto fazer nada para a melhorar. Ou aquele plugin que gostavamos mesmo de ter.
A Sun criou a Netbeans Innovators Grant que permite que membros da comunidade [...]]]></description>
			<content:encoded><![CDATA[<p>Li o <a href="http://java.dzone.com/news/announcing-netbeans-innovators">post</a> do <a href="http://www.javaman.com.br/">Bruno Souza</a> no DZone e achei uma excelente ideia. </p>
<p>Quantas vezes não nos queixámos de esta ou aquela feature no nosso IDE favorito, sem no entanto fazer nada para a melhorar. Ou aquele plugin que gostavamos mesmo de ter.<br />
A Sun criou a <a href="http://www.netbeans.org/grant/">Netbeans Innovators Grant</a> que permite que membros da comunidade open-source ganhem dinheiro vivo com contributos para o projecto Netbeans. O que a Sun ganha são novas features implementadas para a plataforma a um custo bastante baixo e uma visibilidade pela publicidade que isto dos prémios por desenvolvimento atrai. Aliás, a jetbrains, criadores do fantástico IntelliJ IDEA, <a href="http://plugins.intellij.net/contest/prizes/">fizeram o mesmo há algum tempo atrás com sucesso</a>.</p>
<p>Resumidamente, serão atribuídas as seguintes bolsas:</p>
<ul>
<li>10x bolsas de $11.500 cada, para projectos &#8220;grandes&#8221;</li>
<li>10x bolsas de $2.000 cada, para projectos menores</li>
<li>2x gold awards no valor de $11.000, para atribuir a 2 projectos dos 20 anteriores que tenham muito sucesso</li>
<li>2x silver awards no valor de $5.000, para atribuir a 2 projectos dos 20 anteriores que tenham sucesso</li>
</ul>
<p>Para isto será necessário ter boas ideias. Uma vez escolhidas as 20 ideias, são atribuídas as bolsas às mesmas sendo que só se recebe o dinheiro no fim, se o projecto for concluído com sucesso. Ou seja, não será dinheiro fácil.</p>
<p>A submissão de propostas dura até dia 3 de Março. Podem consultar mais detalhes no <a href="http://www.netbeans.org/grant">site do Netbeans</a>.</p>
<p>Mesmo para gajos do Eclipse como eu isto pode vir a ser motivador <img src='http://www.zonaj.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2008/02/08/ganhar-dinheiro-com-open-source-netbeans-innovators-grant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exportar e Importar o ambiente do Firefox</title>
		<link>http://www.zonaj.org/2007/11/09/exportar-e-importar-o-ambiente-do-firefox/</link>
		<comments>http://www.zonaj.org/2007/11/09/exportar-e-importar-o-ambiente-do-firefox/#comments</comments>
		<pubDate>Fri, 09 Nov 2007 02:11:28 +0000</pubDate>
		<dc:creator>Bruno Braz Gonçalves</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=71</guid>
		<description><![CDATA[
Depois de instalar o Wubi no Windows (ler a Experiência Wubi [1]) o problema era obter funcionalidades do meu dia-a-dia.
Hoje em dia tudo está na web e no browser , louvai o Google e FireFox: mail, calendar, notebook, ide, whatever.


Descobri a solução com o FEBE (Firefox Environment Backup Extension) [2].
Esta extensão do Firefox permite exportar [...]]]></description>
			<content:encoded><![CDATA[<p>
Depois de instalar o Wubi no Windows (ler a <em>Experiência Wubi</em> <a target="_blank" href="http://www.zonaj.org/?p=70">[1]</a>) o problema era obter funcionalidades do meu dia-a-dia.<br />
Hoje em dia tudo está na web e no browser , louvai o Google e FireFox: mail, calendar, notebook, ide, whatever.
</p>
<p>
Descobri a solução com o FEBE (<em>Firefox Environment Backup Extension</em>) <a target="_blank" href="http://www.customsoftwareconsult.com/extensions/febe/febe.html">[2]</a>.<br />
Esta extensão do Firefox permite exportar e importar todas as extensões, temas, favoritos, preferências, password, cookies e tudo o resto.
</p>
<p>
Como o Wubi e o Windows estão na mesma máquina até pude utilizar o mesmo directório para a exportação de um sistema operativo e para importação no outro.
</p>
<p>
Louvai o <a target="_blank" href="http://www.customsoftwareconsult.com/extensions/febe/febe.html">FEBE</a>.
</p>
<p><b>Leituras</b></p>
<ul>
<li>[1] Experiência Wubi (<a target="_blank" href="http://www.zonaj.org/?p=70">http://www.zonaj.org/?p=70</a>)
  </li>
<li>[2] FEBE (<em>Firefox Environment Backup Extension</em>)<br />(<a target="_blank" href="http://www.customsoftwareconsult.com/extensions/febe/febe.html">http://www.customsoftwareconsult.com/extensions/febe/febe.html</a>)<br />(<a target="_blank" href="https://addons.mozilla.org/en-US/firefox/addon/2109">https://addons.mozilla.org/en-US/firefox/addon/2109</a>)
  </li>
</ul>
<p>&nbsp;</p>
<p>
<b><em>PS.</em></b><br />
Já agora, a propósito de editores de texto: sou fã do <a target="_blank" href="http://www.crimsoneditor.com">Crimson Editor</a> há alguns anos. Já tinha feito algumas tentativas de mudar sem sucesso, todos me pareciam sempre lentos a arrancar.<br />
Estou a escrever isto com o <a target="_blank" href="http://notepad-plus.sourceforge.net">Notepad++</a> e parece que tenho vencedor. Além de mais funcionalidades parece iniciar ainda mais rápido!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2007/11/09/exportar-e-importar-o-ambiente-do-firefox/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ctrl+Tab para alternar entre janelas do Eclipse</title>
		<link>http://www.zonaj.org/2007/11/08/69/</link>
		<comments>http://www.zonaj.org/2007/11/08/69/#comments</comments>
		<pubDate>Wed, 07 Nov 2007 23:15:14 +0000</pubDate>
		<dc:creator>Ricardo Antunes</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[eclipse]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=69</guid>
		<description><![CDATA[Tenho por hábito usar o conjunto de teclas Ctrl+Tab para alternar entre tabs em várias aplicações que uso (Firefox, NetBeans, etc.)
No Eclipse, por omissão, esta funcionalidade está configurada para as teclas Ctrl+F6.
Para alterarem a configuração deste atalho no Eclipse (Europa) eis o que devem fazer :

Acedam ao menú do eclipse Window &#62; Preferences
 Seleccionem na [...]]]></description>
			<content:encoded><![CDATA[<p>Tenho por hábito usar o conjunto de teclas <code>Ctrl+Tab</code> para alternar entre <em>tabs</em> em várias aplicações que uso (Firefox, NetBeans, etc.)</p>
<p>No Eclipse, por omissão, esta funcionalidade está configurada para as teclas <code>Ctrl+F6</code>.</p>
<p>Para alterarem a configuração deste atalho no Eclipse (Europa) eis o que devem fazer :</p>
<ul>
<li>Acedam ao menú do eclipse <code>Window &gt; Preferences</code></li>
<li> Seleccionem na árvore <code>General &gt; Keys</code></li>
<li> Substituam &#8216;<em>type filter text</em>&#8216; por &#8216;<code>Next Editor</code>&#8216;</li>
<li> Seleccionem a opção que surge na lista de resultados</li>
<li> Seleccionem a caixa de texto <em>Bindings</em> e executem a combinação de teclas correspondentes ao atalho (<code>Ctrl+Tab</code>).</li>
<li>Podem continuar a adicionar mais atalhos bastando para isso que carreguem em mais combinações de teclas (ou seja, podem manter o <code>Ctrl+F6</code> original, caso pretendam)</li>
<li> Confirmem as alterações e já podem usar o vosso novo atalho.</li>
</ul>
<p>É claro que poderão usar este mesmo método para mudar outros atalhos do Eclipse.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2007/11/08/69/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Liferay Portal &#8211; Configuração da ligação a uma base de dados MySQL</title>
		<link>http://www.zonaj.org/2007/10/22/todo/</link>
		<comments>http://www.zonaj.org/2007/10/22/todo/#comments</comments>
		<pubDate>Mon, 22 Oct 2007 20:37:49 +0000</pubDate>
		<dc:creator>Ricardo Antunes</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[portal]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=67</guid>
		<description><![CDATA[Tal como prometido no meu último artigo, aqui ficam as instruções para configurar o Liferay Portal para aceder a uma base de dados MySQL usando o ambiente de desenvolvimento com o eclipse.
1 &#8211; Criação da Base de Dados MySQL
Criem a base de dados com o nome lportal.
Poderão fazer isto utilizando o MySQL Administrator (a ferramenta [...]]]></description>
			<content:encoded><![CDATA[<p>Tal como prometido no meu <a href="http://www.zonaj.org/?p=59" target="_blank">último artigo</a>, aqui ficam as instruções para configurar o Liferay Portal para aceder a uma base de dados MySQL usando o ambiente de desenvolvimento com o eclipse.</p>
<h3>1 &#8211; Criação da Base de Dados MySQL</h3>
<p>Criem a base de dados com o nome <em>lportal</em>.</p>
<p>Poderão fazer isto utilizando o MySQL Administrator (a ferramenta de administração do MySQL) ou usando a seguinte linha de comando:<br />
<code>mysqladmin --default-character-set=utf8 create lportal</code></p>
<h3>2 &#8211; Configuração do acesso  à base de dados com o eclipse</h3>
<p>Abram o Data Source Explorer do eclipse (<code>Window -&gt; Show view -&gt; Data Source Explorer</code>).</p>
<p>Seleccionem o icon &#8216;New Connection Profile&#8217; ou usem o botão direito do rato do sobre &#8216;Databases&#8217; e depois seleccionem &#8216;New&#8217;.</p>
<p>Na janela &#8216;New Connection Profile&#8217; seleccionem o tipo <code>SQL Model-JDBC Connection.</code></p>
<p>No quadro seguinte indiquem um nome para o perfil (ex: &#8216;Liferay &#8211; Mysql&#8217;).</p>
<p>No último quadro, usem o botão de procura (&#8217;&#8230;&#8217;) na lista &#8220;Select a browser&#8221;.</p>
<ul> Adicionem uma nova definição:</p>
<li>localizem o template para bases de dados MySQL na árvore (<code>Database -&gt; MySQL -&gt; 5.0 -&gt; MySQL JDBC Driver</code>).</li>
<li>Alterem as definições do driver:
<ul>
<li>Alterem o nome para &#8216;Liferay MySQL Driver&#8217;;</li>
<li>Removam o driver  &#8216;default&#8217; e adicionem um novo Jar correspondente ao ficheiro <code>$WORKSPACE/ext/lib/development/mysql.jar</code> (<code>$WORKSPACE</code> corresponde à localização da pasta do vosso <em>workspace</em> no sistema de ficheiros);</li>
<li>Configurem o valor das propriedades de acesso (username, password, etc&#8230;) tendo em atenção que o valor do &#8216;Database Name&#8217; (e por consequência o final da linha do &#8216;Connection URL&#8217; deverá ser &#8216;<code>lportal</code>&#8216;.</li>
</ul>
</li>
<li> Confirmem as alterações e seleccionem agora este driver nas definições do driver  (<code>Database -&gt; MySQL -&gt; 5.0 -&gt; Liferay MySQL Driver</code>).</li>
</ul>
<p>Voltem de novo à janela de criação do perfil e validem que todas as informações estão de acordo com a vossa configuração (podem testar a ligação a partir desta janela).</p>
<h3>3 &#8211; Criação do modelo de dados</h3>
<p>Editem o ficheiro  <code>create-mysql.sql</code> na pasta <code>/sql/create</code> do projecto &#8216;ext&#8217;.<br />
Caso não tenham memoria para desperdiçar (é o meu caso) respondam afirmativamente quando o eclipse perguntar se pretendem desligar a validação de sintaxe do ficheiro.</p>
<p>No topo da janela de edição do ficheiro encontram a configuração do &#8216;Connection profile&#8217;. Seleccionem o tipo <code>Generic JDBC_1.x</code>, o driver  &#8216;<code>Liferay - Mysql</code>&#8216;  e a base de dados <code>lportal</code>.</p>
<p><strong>Nota</strong>: caso o status não seja &#8216;<code>Connected</code>&#8216; não vão conseguir ver o nome da base de dados.<br />
Neste caso devem aceder ao Data Source Explorer ( <code>Window -&gt; Show View -&gt; Data Source Explorer</code>), seleccionar a Database &#8216;Liferay &#8211; MySQL&#8217; e fazer connect (botão direito do rato)</p>
<p>Comentem as três primeiras linhas do ficheiro, uma vez que a base de dados já foi criada</p>
<p><code>-- drop database if exists lportal;<br />
-- create database lportal character set utf8;<br />
-- use lportal;</code></p>
<p>Gravem e executem o sql (ctrl+alt+X ou Execute All no menu contextual).</p>
<h3>4 &#8211; Configuração do datasource no tomcat</h3>
<p>Editem o ficheiro <code>Root.xml</code> localizado na pasta<code> servers/tomcat/conf/Catalina/localhost</code> do projecto &#8216;ext&#8217;.</p>
<p>Comentem o datasource do Hypersonic e  descomentem o datasource do MySQL.</p>
<p>Preencham os atributos <code>username</code> e <code>password</code> e, caso não estejam a usar os valores <em>default</em> do MySQL, editem tambem o valor do atributo <code>url</code>, de acordo com a vossa configuração.</p>
<p>Gravem as alterações.</p>
<h3>5 &#8211; Deploy da configuração para o servidor</h3>
<p>Copiem o ficheiro <code>Root.xml</code> para a pasta <code>conf/Catalina/localhost</code> do tomcat.</p>
<p>Copiem e o ficheiro <code>mysql.jar</code> para para a pasta <code>lib/ext</code> do tomcat.</p>
<p>Voltarei a falar sobre a forma correcta de fazer deploy destes ficheiros no meu próximo artigo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2007/10/22/todo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Webcast Mylyn</title>
		<link>http://www.zonaj.org/2007/07/20/webcast-mylyn/</link>
		<comments>http://www.zonaj.org/2007/07/20/webcast-mylyn/#comments</comments>
		<pubDate>Fri, 20 Jul 2007 17:44:41 +0000</pubDate>
		<dc:creator>Ruben Badaró</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[gtd]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=46</guid>
		<description><![CDATA[Tenho tido pouco tempo e tinha intenções falar do Eclipse Mylyn (ex-Mylar) que é uma ferramenta excelente e que pode aumentar muito &#8211; mas mesmo muito &#8211; a produtividade.
Mais fácil do que ser eu a explicar, é ver mesmo o webcast que é superficial mas porreiro.

]]></description>
			<content:encoded><![CDATA[<p>Tenho tido pouco tempo e tinha intenções falar do <a href="http://www.eclipse.org/mylyn/">Eclipse Mylyn</a> (ex-Mylar) que é uma ferramenta excelente e que pode aumentar muito &#8211; mas mesmo muito &#8211; a produtividade.<br />
Mais fácil do que ser eu a explicar, é ver mesmo o webcast que é superficial mas porreiro.</p>
<p><embed type="application/x-shockwave-flash" src="http://www.podtech.net/player/podtech-player.swf?bc=ec074a30954f4eff87139b19547ace32" flashvars="content=http://media1.podtech.net/media/2007/07/PID_011810/Podtech_eclipse_europa_mylyn_demo.flv&#038;totalTime=1092000&#038;permalink=http://www.podtech.net/home/3514/europa-mylyn-demo-task-management-and-context-filtering-for-teams&#038;breadcrumb=ec074a30954f4eff87139b19547ace32" height="299" width="480" allowScriptAccess="always" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2007/07/20/webcast-mylyn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSF + Oracle JDeveloper = Cabelos Brancos</title>
		<link>http://www.zonaj.org/2007/05/30/jsf-oracle-jdeveloper-cabelos-brancos/</link>
		<comments>http://www.zonaj.org/2007/05/30/jsf-oracle-jdeveloper-cabelos-brancos/#comments</comments>
		<pubDate>Wed, 30 May 2007 17:27:07 +0000</pubDate>
		<dc:creator>Ruben Badaró</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[indústria]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jdeveloper]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=41</guid>
		<description><![CDATA[Hoje, cheguei à conclusão que pior do que programar em JSF é programar em JSF com o Oracle JDeveloper. Aliás, cheguei a essa conclusão já há algum tempo mas quero acreditar que nunca tinha pensado nisso e que cheguei a uma nova e brilhante conclusão. Pelo menos durante o dia perdido com erros de jdeveloper, [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje, cheguei à conclusão que pior do que programar em JSF é programar em JSF com o Oracle JDeveloper. Aliás, cheguei a essa conclusão já há algum tempo mas quero acreditar que nunca tinha pensado nisso e que cheguei a uma nova e brilhante conclusão. Pelo menos durante o dia perdido com erros de jdeveloper, teria tido uma ideia brilhante e produtiva. Mas nem isso&#8230;<br />
Avisa-se que o uso pode originar diversos insultos no lugar de trabalho em linguagem menos própria para com o computador bem como algumas agressões físicas ao hardware. </p>
<p>Resumidamente: Mesmo que tenham de usar jsf, não usem o jdeveloper. É um sanity killer! Era só mesmo este desabafo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2007/05/30/jsf-oracle-jdeveloper-cabelos-brancos/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>ReportMill JFXBuilder</title>
		<link>http://www.zonaj.org/2007/05/28/reportmill-jfxbuilder/</link>
		<comments>http://www.zonaj.org/2007/05/28/reportmill-jfxbuilder/#comments</comments>
		<pubDate>Mon, 28 May 2007 15:29:01 +0000</pubDate>
		<dc:creator>Ruben Badaró</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[javafx]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=38</guid>
		<description><![CDATA[A ReportMill, conhecidos por terem feito o &#8230; ReportMill, do qual não tenho assim grande opinião, lançou um pequeno aplicativo que pode ser engraçado. Chamam-lhe JFXBuilder e permite fazer umas brincadeiras com o novo JavaFX de que falei há uns tempos atrás. Por enquanto é apenas desenhar formas geométricas e brincar com cores e animações [...]]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://www.reportmill.com/">ReportMill</a>, conhecidos por terem feito o &#8230; <a href="http://reportmill.com/product/">ReportMill</a>, do qual não tenho assim grande opinião, lançou um pequeno aplicativo que pode ser engraçado. Chamam-lhe JFXBuilder e permite fazer umas brincadeiras com o novo <a href="http://www.zonaj.org/?p=35">JavaFX de que falei há uns tempos atrás</a>. Por enquanto é apenas desenhar formas geométricas e brincar com cores e animações mas dá para ter uma vista de ecrã dividido em que vemos em baixo o código JavaFX e em cima o resultado de executar aquilo tudo. Permite igualmente fazer tabelas e ligar a dados definindo datasources num interface simples.<br />
É básico mas é só para se ter um lamiré de como funcionará a tecnologia. Podem consultar a demo <a href="http://www.reportmill.com/jfx/">aqui</a>.</p>
<div style="text-align:center"><a href='http://www.zonaj.org/?attachment_id=39' rel='attachment wp-att-39' title='Exemplo JFXBuilder'><img src='http://www.zonaj.org/wp-content/uploads/2007/05/jfx.thumbnail.png' alt='Exemplo JFXBuilder' /></a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2007/05/28/reportmill-jfxbuilder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BreakDance na ZonaJ</title>
		<link>http://www.zonaj.org/2007/05/06/breakdance/</link>
		<comments>http://www.zonaj.org/2007/05/06/breakdance/#comments</comments>
		<pubDate>Sun, 06 May 2007 22:54:25 +0000</pubDate>
		<dc:creator>Ricardo Antunes</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=33</guid>
		<description><![CDATA[Num blog em que o texto das várias entradas tende a ser extenso (como este), a página principal começa rapidamente a ter um comprimento considerável.
Quando se pretende consultar uma entrada mais antiga só temos duas hipóteses:      

seguimos o link permanente para a entrada (caixa &#8216;Posts Recentes&#8217;) e depois fazemos &#8216;back&#8217; [...]]]></description>
			<content:encoded><![CDATA[<p>Num blog em que o texto das várias entradas tende a ser extenso (como este), a página principal começa rapidamente a ter um comprimento considerável.<br />
Quando se pretende consultar uma entrada mais antiga só temos duas hipóteses:      </p>
<ul>
<li>seguimos o link permanente para a entrada (caixa &#8216;Posts Recentes&#8217;) e depois fazemos &#8216;back&#8217; no browser;</li>
<li>damos ao dedo a fazer scroll na página até que a entrada fique visível.</li>
</ul>
<p>Uma forma interessante de resolver este problema seria ter uma opção de <em>toggle</em> do texto das entradas, ou seja, ter uma opção para mostrar ou esconder o texto dos posts por escolha do utilizador.</p>
<p>Estava a matutar sobre isto enquanto admirava os <a href="http://www.zonaj.org/?p=28">tons campestres</a> desta página  e pensei que não era má ideia pôr a solução em prática. </p>
<p>Um requisito importante é que o teria de fazer sem alterar efectivamente a página (só para não estar a  chatear o Administrador do blog durante o fim-de-semana <img src='http://www.zonaj.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ).</p>
<p>Outro é que o código teria de ser suficiente pequeno para poder ser postado aqui.</p>
<p>Era definitivamente um bom desafio para por à prova o <a href="http://jquery.com">jQuery</a>.</p>
<p>Precisava de quatro operações para concretizar as alterações:</p>
<ol>
<li>esconder inicialmente o texto das entradas e os links para tags e comentários mas não o titulo ou a informação dos autores;</li>
<li>acrescentar à frente do nome do autor um link para permitir mostrar ou esconder o texto;</li>
<li>associar ao evento <em>click</em> do link uma função para concretizar a opção do utilizador;</li>
<li>desenvolver a função;</li>
</ol>
<p>Usei o <a href="http://www.getfirebug.com/">Firebug</a> para analisar a estrutura do DOM da página.<br />
Cada entrada tem uma estrutura fixa: </p>
<ol>
<li>um <code>&lt;h2&gt;</code> com o link para o titulo;</li>
<li>um <code>&lt;h4&gt;</code> com a data do post e a identificação do autor;</li>
<li>um <code>&lt;div&gt;</code> com a class &#8216;entry&#8217; com o texto;</li>
<li>um <code>&lt;p&gt;</code> com a class &#8216;tagged&#8217; com links para as tags e comentários</li>
</ol>
<p>Portanto, para concretizar a primeira operação só precisava de esconder os elementos com as classes &#8216;entry&#8217; e &#8216;tagged&#8217; que em jQuery se traduz como:<br />
<code class="prettyprint">$('.entry, .tagged').hide();</code></p>
<p>Para a concretizar segunda operação acrescentei um link à frente do nome do autor, ou seja, de todos os <code>&lt;h4&gt;</code>s precedidos por <code>&lt;h2&gt;</code>s, ou em jQuery:<br />
<code class="prettyprint">$('h2 ~ h4').append('&lt;a href="javascript:void(0)" class="entryToggler"&gt;(Mostrar)&lt;/a&gt;');</code></p>
<p>Para a terceira opção e visto que associei os links criados à class <em>entryTogger</em>, basta associar uma função ao evento <em>onclick</em> de todos os elementos com esta classe ou em jQuery:<br />
<code class="prettyprint">$('.entryToggler').click(toggleEntry);</code></p>
<p>Falta só desenvolver a função <em>toggleEntry</em>.</p>
<p>Uma vez que esta função tem acesso ao elemento <em>anchor</em>  seleccionado pelo utilizador (<code>this</code>), podia usá-lo como referência para:</p>
<ol>
<li>verificar o estado da entrada a partir do texto:<br />
<code class="prettyprint">var isHidden = $(this).text().search('Mostrar')!=-1;</code></li>
<li>seleccionar os elementos correspondentes ao texto e aos links para as tags e comentários:<br />
<code class="prettyprint">var x=$(this).parent().next(); x = x.add(x.next());</code></li>
<li>mostrar ou esconder os elementos seleccionados:<br />
	<code class="prettyprint">isHidden ? x.slideDown('slow') : x.slideUp('slow');</code></li>
<li>alterar o texto do link para ficar de acordo com a operação:<br />
<code class="prettyprint">isHidden ? $(this).text('(Esconder)') : $(this).text('(Mostrar)');</code>	</li>
</ol>
<p>e estava feito!</p>
<p>Como podem testar o código? É fácil:<br />
abram a <a href="http://www.zonaj.org/">página principal</a> do blog. (pessoal do rss, tem <strong>mesmo</strong> que ser na página principal)</p>
<p>Se estiverem a usar o Firebug podem copiar o código completo para a consola e executarem-no:</p>
<pre class="prettyprint">
var toggleEntry = function(){
	var isHidden = $(this).text().search('Mostrar')!=-1;
	var x=$(this).parent().next();
	x = x.add(x.next());
	isHidden ? x.slideDown('slow') : x.slideUp('slow');
	isHidden ? $(this).text('(Esconder)') : $(this).text('(Mostrar)');
};
$('.entry, .tagged').hide();
$('h2 ~ h4').append('&lt;a href="javascript:void(0)" class="entryToggler"&gt;(Mostrar)&lt;/a&gt;');
$('.entryToggler').click(toggleEntry);
</pre>
<p>Para os outros casos, escrevi o código todo numa só linha que podem copiar para a caixa de endereço do browser (substituindo o http://www.zonaj.org):<br />
<code><br />
javascript:var toggleEntry = function(){var isHidden = $(this).text().search('Mostrar')!=-1;var x=$(this).parent().next();x = x.add(x.next());isHidden ? x.slideDown('slow') : x.slideUp('slow');isHidden ? $(this).text('(Esconder)') : $(this).text('(Mostrar)');};$('.entry, .tagged').hide();$('h2 ~ h4').append('&lt;a href="javascript:void(0)" class="entryToggler"&gt;(Mostrar)&lt;/a&gt;');$('.entryToggler').click(toggleEntry);void(0);<br />
</code><br />
Testado com FF2, IE7 e Opera9.</p>
<p>É claro que tive a vantagem de não me ter de preocupar em importar o script de jQuery porque a própria página já o faz.<br />
Caso estivesse a alterar o DOM de uma página que não use jQuery, podia fazer o mesmo tipo de alterações usando o <a href="http://www.learningjquery.com/2006/12/jquerify-bookmarklet">jQuerify</a>.</p>
<p>Nota 1:<br />
Para deixar a primeira entrada sem alterações basta alterar a linha<br />
<code class="prettyprint">$('.entry, .tagged').hide();</code><br />
para<br />
<code class="prettyprint">$('.entry, .tagged').not(':first').hide();</code><br />
e a linha<br />
<code class="prettyprint">$('h2 ~ h4').append('&lt;a href="javascript:void(0)" class="entryToggler"&gt;(Mostrar)&lt;/a&gt;');</code><br />
para<br />
<code class="prettyprint">$('h2 ~ h4').not(':first').append('&lt;a href="javascript:void(0)" class="entryToggler"&gt;(Mostrar)&lt;/a&gt;');</code></p>
<p>Nota 2:<br />
Para remover a irritante &#8216;caixa picotada&#8217; à volta do link quando este fica activo, acrescentar como ultima linha da função:<br />
<code class="prettyprint">$(this).blur();</code> </p>
<p>Nota 3:<br />
O código final tem cerca de 10 (!) linhas e repeti-o 3 vezes neste post.</p>
<p>Nota 4:<br />
Para ter de volta a página original basta fazer reload no browser (mesmo tendo alterado a linha de endereço).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2007/05/06/breakdance/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mr. JSF or: How I Learned to Start Worrying and Hate the Framework</title>
		<link>http://www.zonaj.org/2007/05/04/mr-jsf-or-how-i-learned-to-start-worrying-and-hate-the-framework/</link>
		<comments>http://www.zonaj.org/2007/05/04/mr-jsf-or-how-i-learned-to-start-worrying-and-hate-the-framework/#comments</comments>
		<pubDate>Fri, 04 May 2007 15:01:47 +0000</pubDate>
		<dc:creator>Ruben Badaró</dc:creator>
				<category><![CDATA[Ferramentas]]></category>
		<category><![CDATA[facelets]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[seam]]></category>
		<category><![CDATA[tomahawk]]></category>
		<category><![CDATA[wicket]]></category>

		<guid isPermaLink="false">http://www.zonaj.org/?p=30</guid>
		<description><![CDATA[Desde há cerca de 2 anos para cá, tenho trabalhado intensamente com Java Server Faces no desenvolvimento web em Java. Inicialmente as coisas não correram muito bem, pensou-se por a tecnologia ser ainda muito nova e ainda verde. Depois, continuaram a não correr bem. No futuro, espero que não corram.
Cheguei à conclusão que JSF não [...]]]></description>
			<content:encoded><![CDATA[<p>Desde há cerca de 2 anos para cá, tenho trabalhado intensamente com <a href="http://en.wikipedia.org/wiki/JavaServer_Faces">Java Server Faces</a> no desenvolvimento web em Java. Inicialmente as coisas não correram muito bem, pensou-se por a tecnologia ser ainda muito nova e ainda verde. Depois, continuaram a não correr bem. No futuro, espero que não corram.<br />
Cheguei à conclusão que JSF não é a melhor solução para desenvolvimento web em Java e consegui reunir umas quantas razões minhas:</p>
<ul>
<li><strong>JSF é uma especificação</strong></li>
</ul>
<p>JSF é uma especificação e existem diversas implementações, sendo que a Sun fornece uma <em><a href="https://javaserverfaces.dev.java.net/servlets/ProjectDocumentList?folderID=5420&#038;expandFolder=5420&#038;folderID=5420">Reference Implementation</a></em>. Por um lado, a especificação deixa pequenos detalhes de implementação à escolha dos implementadores e por outro, existem algumas falhas de desenho na especificação, assumidos inclusivamente por quem está a trabalhar na versão 2 do <em>draft</em> de especificação.</p>
<ul>
<li><strong>Fases</strong></li>
</ul>
<p>O processamento JSF é dividido em 6 fases e é definida a ordem e o que ocorre em cada uma delas. O programador, em muitas situações, tem de ter a noção de fase presente quando está a programar, a desenvolver as suas acções, etc. Requer um conhecimento que apenas é adquirido com experiência e muitas falhas Aliás, tanto a noção de fases como as questões de request e sessão também deveriam ser o mais transparentes possíveis para quem desenvolve, deixando o programador dedicar-se a desenhar o interface e adicionar comportamento aos elementos do interface, como se fosse uma simples aplicação.</p>
<ul>
<li><strong>Bugs</strong></li>
</ul>
<p>Historicamente, foram detectados alguns bugs graves nas implementações de JSF. Um dos exemplos é o do JSF gerar identificadores que já existiam declarados pelo utilizador na página, se foi resolvido passado meses.</p>
<ul>
<li><strong>Identificadores Únicos</strong></li>
</ul>
<p>Temos de ter cuidado com identificadores duplicados e acaba-se por ter de se definir o <em>id</em> de cada componente da página. Obtemos um erro quando tentamos consultar a página e a origem do mesmo é não raras vezes difícil de depurar.</p>
<ul>
<li><strong>Renderkit</strong></li>
</ul>
<p>Renderkits são um esquema falhado, no que toca a desenvolver para web. Em casos reais é quase impossível fazer output para múltiplos outputs sem alterar o conteúdo do jsf. Além disso, a geração de html está escondida dentro do renderkit e é difícil de controlar. </p>
<ul>
<li><strong>Web Semântica e Acessibilidade</strong></li>
</ul>
<p>É muito difícil controlar o código que é gerado pelo JSF .<br />
No mundo actual, quer-se <em>markup</em> semanticamente correcto, separação entre informação semântica (XHTML) e apresentação gráfica (CSS) e acessibilidade para utilizadores com necessidades especiais. Deve ser possível ter um controlo fino sobre o markup gerado. As interacções com os designers (mesmo com o meu post anterior não nos safamos) tornam-se mais complexas pois o programador não consegue replicar o código criado pelo designer.</p>
<ul>
<li><strong>Manutenção de estado</strong></li>
</ul>
<p>Para manter o estado entre requests, o JSF fornece apenas a noção de sessão. Componentes como o <a href="http://myfaces.apache.org/tomahawk/uiSaveState.html">SaveState</a> do <a href="http://myfaces.apache.org/tomahawk/index.html">Tomahawk</a> ou novas frameworks facilitadoras como o <a href="http://www.jboss.com/products/seam">JBoss Seam</a> permitem ter a noção de Conversation numa aplicação JSF. Se não forem utilizados estes componentes, o programador é obrigado a usar a sessão, caindo no erro comum de definir Managed Beans como de sessão quando tal não é adequado. Ou então colocando a informação do bean em sessão e recuperando-a quando necessário, no caso de beans de sessão. Ao usarmos estes esquemas de sessão não conseguimos, por exemplo, navegar em duas páginas da mesma aplicação ao mesmo tempo.</p>
<ul>
<li><strong>ValueChangeListeners</strong></li>
</ul>
<p>Os eventos são processados mesmo quando não é esperado. Por exemplo, se tivermos uma dropdown com um ValueChangeListener e um valueBinding para uma nossa String, se submetermos a página sem alterar a dropdown, o evento será lançado porque o valor anterior da variável era null e o que é submetido é o valor default. Além disso, quando temos dropdowns com immediate=”true” e fazemos alterações no ValueChangeListeners, temos de saltar para fase de RenderResponse para que não tenhamos os dados reescritos. Duas palavras: mau desenho.</p>
<p>Estas são razões que chegue para não usar JSF. O que acontece em muitos casos, é usarem-se frameworks que tornem a tecnologia suportável, como sejam os componentes <a href="http://myfaces.apache.org/tomahawk/index.html">Tomahawk</a> ou as frameworks <a href="https://facelets.dev.java.net/">Facelets</a> e <a href="http://www.jboss.com/products/seam">JBoss Seam</a>.<br />
Quando finalmente se chega à conclusão que existem outras frameworks que são melhores que JSF, encontramos coisas como o Tapestry ou o Wicket. Estas duas frameworks permitem-nos definir o interface com markup xhtml, conseguindo assim a desejada interacção com os designers e podendo, inclusivamente, fazer as nossas páginas directamente do protótipo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zonaj.org/2007/05/04/mr-jsf-or-how-i-learned-to-start-worrying-and-hate-the-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
