<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Luiz Gustavo S. de Souza</title>
	<atom:link href="http://luizgustavoss.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://luizgustavoss.wordpress.com</link>
	<description>Just another programmer&#039;s weblog</description>
	<lastBuildDate>Fri, 27 Jan 2012 00:48:24 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='luizgustavoss.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/03280506289592731aa6b05e45ad03fb?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Luiz Gustavo S. de Souza</title>
		<link>http://luizgustavoss.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://luizgustavoss.wordpress.com/osd.xml" title="Luiz Gustavo S. de Souza" />
	<atom:link rel='hub' href='http://luizgustavoss.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Os números de 2011</title>
		<link>http://luizgustavoss.wordpress.com/2012/01/01/os-numeros-de-2011/</link>
		<comments>http://luizgustavoss.wordpress.com/2012/01/01/os-numeros-de-2011/#comments</comments>
		<pubDate>Sun, 01 Jan 2012 16:04:03 +0000</pubDate>
		<dc:creator>luizgustavoss</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://luizgustavoss.wordpress.com/?p=568</guid>
		<description><![CDATA[Os duendes de estatísticas do WordPress.com prepararam um relatório para o ano de 2011 deste blog. Aqui está um resumo: A sala de concertos da Ópera de Sydney tem uma capacidade de 2.700 pessoas. Este blog foi visitado cerca de 36.000 vezes em 2011. Se fosse a sala de concertos, eram precisos 13 concertos egostados [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=568&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Os duendes de estatísticas do WordPress.com prepararam um relatório para o ano de 2011 deste blog.</p>
<p><a href="/2011/annual-report/"><img src="http://www.wordpress.com/wp-content/mu-plugins/annual-reports/img/emailteaser.jpg" alt="" width="100%" /></a></p>
<p>Aqui está um resumo:</p>
<blockquote><p>A sala de concertos da Ópera de Sydney tem uma capacidade de 2.700 pessoas. Este blog foi visitado cerca de <strong>36.000</strong> vezes em 2011. Se fosse a sala de concertos, eram precisos 13 concertos egostados para sentar essas pessoas todas.</p></blockquote>
<p><a href="/2011/annual-report/">Clique aqui para ver o relatório completo</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/luizgustavoss.wordpress.com/568/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/luizgustavoss.wordpress.com/568/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/luizgustavoss.wordpress.com/568/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/luizgustavoss.wordpress.com/568/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/luizgustavoss.wordpress.com/568/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/luizgustavoss.wordpress.com/568/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/luizgustavoss.wordpress.com/568/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/luizgustavoss.wordpress.com/568/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/luizgustavoss.wordpress.com/568/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/luizgustavoss.wordpress.com/568/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/luizgustavoss.wordpress.com/568/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/luizgustavoss.wordpress.com/568/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/luizgustavoss.wordpress.com/568/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/luizgustavoss.wordpress.com/568/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=568&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://luizgustavoss.wordpress.com/2012/01/01/os-numeros-de-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/858a70485a3031da019ee88e701f150e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Luiz Gustavo</media:title>
		</media:content>

		<media:content url="http://www.wordpress.com/wp-content/mu-plugins/annual-reports/img/emailteaser.jpg" medium="image" />
	</item>
		<item>
		<title>WeaverFX &#8211; Um concorrente para o Apache Pivot?</title>
		<link>http://luizgustavoss.wordpress.com/2011/01/15/weaverfx-um-concorrente-para-o-apache-pivot/</link>
		<comments>http://luizgustavoss.wordpress.com/2011/01/15/weaverfx-um-concorrente-para-o-apache-pivot/#comments</comments>
		<pubDate>Sat, 15 Jan 2011 14:49:59 +0000</pubDate>
		<dc:creator>luizgustavoss</dc:creator>
				<category><![CDATA[Dica Rápida]]></category>
		<category><![CDATA[Pivot]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[WeaverFX]]></category>

		<guid isPermaLink="false">http://luizgustavoss.wordpress.com/?p=550</guid>
		<description><![CDATA[Esta semana, participando de um post do GUJ, fiquei sabendo da existência de uma plataforma RIA que muito se assemelha ao Apache Pivot. O WeaverFX tem a mesma proposta: uma plataforma que permita a criação de aplicações ricas que possam rodar tanto no desktop quanto na web, na forma de applets. Só hoje tirei um [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=550&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Esta semana, participando de um post do GUJ, fiquei sabendo da existência de uma plataforma RIA que muito se assemelha ao Apache Pivot.</p>
<p>O WeaverFX tem a mesma proposta: uma plataforma que permita a criação de aplicações ricas que possam rodar tanto no desktop quanto na web, na forma de applets.</p>
<p>Só hoje tirei um tempo para olhar o site, e ver alguns exemplos. Minha opinião pessoal? Não gostei.</p>
<p>Tenho que admitir que não me dei ao trabalho de criar uma aplicação de exemplo, me contentando apenas com os exemplos apresentados no site do projeto, mas isso foi devido à primeira impressão que tive.</p>
<p>Primeiramente há o fato de que é necessário instalar uma runtime específica para que se possa executar as aplicações. Uma vez que o Apache Pivot não me exige isto, já conto um ponto negativo para o WeaverFX em relação ao Apache Pivot.</p>
<p>&nbsp;</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2011/01/wfx-install.png"><img class="aligncenter size-medium wp-image-551" title="wfx install" src="http://luizgustavoss.files.wordpress.com/2011/01/wfx-install.png?w=297&#038;h=300" alt="" width="297" height="300" /></a></p>
<p>&nbsp;</p>
<p>Outra coisa que definitivamente não me agradou foi o &#8220;acabamento&#8221; dos componentes, e do resultado final das aplicações.</p>
<p>&nbsp;</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2011/01/wfx.png"><img class="aligncenter size-medium wp-image-552" title="wfx" src="http://luizgustavoss.files.wordpress.com/2011/01/wfx.png?w=300&#038;h=203" alt="" width="300" height="203" /></a></p>
<p>&nbsp;</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2011/01/wfx2.png"><img class="aligncenter size-medium wp-image-553" title="wfx2" src="http://luizgustavoss.files.wordpress.com/2011/01/wfx2.png?w=300&#038;h=110" alt="" width="300" height="110" /></a></p>
<p>&nbsp;</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2011/01/wfx3.png"><img class="aligncenter size-medium wp-image-554" title="wfx3" src="http://luizgustavoss.files.wordpress.com/2011/01/wfx3.png?w=300&#038;h=141" alt="" width="300" height="141" /></a></p>
<p>&nbsp;</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2011/01/wfx4.png"><img class="aligncenter size-medium wp-image-555" title="wfx4" src="http://luizgustavoss.files.wordpress.com/2011/01/wfx4.png?w=300&#038;h=136" alt="" width="300" height="136" /></a></p>
<p>&nbsp;</p>
<p>Apenas para efeito comparativo, eis uma imagem de uma aplicação que fiz em Pivot:</p>
<p>&nbsp;</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2011/01/pivot.png"><img class="aligncenter size-medium wp-image-556" title="pivot" src="http://luizgustavoss.files.wordpress.com/2011/01/pivot.png?w=300&#038;h=220" alt="" width="300" height="220" /></a></p>
<p>&nbsp;</p>
<p>Ok, o post é tendencioso, admito que prefiro o Apache Pivot, mas também não me coloco na obrigação de ser imparcial =)</p>
<p>Há pessoas que gostaram do WeaverFX, e acredito que realmente é uma questão de escolha. Eu já fiz a minha =)</p>
<p>&nbsp;</p>
<p>Para quem quiser saber mais sobre o projeto, acessem o site: <a href="http://www.weaverfx.com/" target="_blank">http://www.weaverfx.com/</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/luizgustavoss.wordpress.com/550/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/luizgustavoss.wordpress.com/550/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/luizgustavoss.wordpress.com/550/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/luizgustavoss.wordpress.com/550/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/luizgustavoss.wordpress.com/550/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/luizgustavoss.wordpress.com/550/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/luizgustavoss.wordpress.com/550/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/luizgustavoss.wordpress.com/550/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/luizgustavoss.wordpress.com/550/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/luizgustavoss.wordpress.com/550/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/luizgustavoss.wordpress.com/550/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/luizgustavoss.wordpress.com/550/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/luizgustavoss.wordpress.com/550/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/luizgustavoss.wordpress.com/550/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=550&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://luizgustavoss.wordpress.com/2011/01/15/weaverfx-um-concorrente-para-o-apache-pivot/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/858a70485a3031da019ee88e701f150e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Luiz Gustavo</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2011/01/wfx-install.png?w=297" medium="image">
			<media:title type="html">wfx install</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2011/01/wfx.png?w=300" medium="image">
			<media:title type="html">wfx</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2011/01/wfx2.png?w=300" medium="image">
			<media:title type="html">wfx2</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2011/01/wfx3.png?w=300" medium="image">
			<media:title type="html">wfx3</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2011/01/wfx4.png?w=300" medium="image">
			<media:title type="html">wfx4</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2011/01/pivot.png?w=300" medium="image">
			<media:title type="html">pivot</media:title>
		</media:content>
	</item>
		<item>
		<title>Jogo da Memória com Apache Pivot</title>
		<link>http://luizgustavoss.wordpress.com/2010/12/01/jogo-da-memoria-com-apache-pivot/</link>
		<comments>http://luizgustavoss.wordpress.com/2010/12/01/jogo-da-memoria-com-apache-pivot/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 04:38:29 +0000</pubDate>
		<dc:creator>luizgustavoss</dc:creator>
				<category><![CDATA[Artigo]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Pivot]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://luizgustavoss.wordpress.com/?p=535</guid>
		<description><![CDATA[É grande com satisfação que posto este pequeno tutorial! Tenho percebido, pelas estatísticas do blog, que o &#8220;Jogo da Memória em Java&#8221;, um de meus primeiros posts neste blog, é o tutorial mais acessado. A grande maioria da galera que acessa este tutorial está buscando uma solução fácil para algum trabalho de faculdade, mas no [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=535&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">É grande com satisfação que posto este pequeno tutorial!</p>
<p style="text-align:justify;">Tenho percebido, pelas estatísticas do blog, que o &#8220;Jogo da Memória em Java&#8221;, um de meus primeiros posts neste blog, é o tutorial mais acessado.</p>
<p style="text-align:justify;">A grande maioria da galera que acessa este tutorial está buscando uma solução fácil para algum trabalho de faculdade, mas no fundo, este tutorial representou muito mais pra mim. Foi meu primeiro desafio pessoal em Java, algo que eu quis fazer para realmente me desafiar, e aprender a programar em Swing.</p>
<p style="text-align:justify;">Agora, tenho o prazer de postar aqui o mesmo jogo, com algumas pequenas modificações  funcionais, escrito na plataforma Pivot.</p>
<p style="text-align:justify;">Sim! Apesar de ser escrito em Java, o Apache Pivot é uma plataforma RIA completa.</p>
<p style="text-align:justify;">Não vou entrar em detalhes para explicar o código. Ao invés disso, vou disponibilizar aqui o código do jogo, e deixar o desafio de executar o jogo para aqueles que se interessarem em aprender mais sobre esta fascinante plataforma RIA.</p>
<p style="text-align:justify;">Este jogo, apesar de pequeno, demonstra muitos dos recursos disponíveis no Pivot.</p>
<p style="text-align:justify;">Visitem o site do projeto, e leiam os tutoriais <a href="http://pivot.apache.org/">http://pivot.apache.org/</a>.</p>
<p style="text-align:justify;">A versão 2.0 estará saindo em breve (tenho acompanhado a lista de desenvolvimento e de usuários, e recomendo).</p>
<p style="text-align:justify;">&nbsp;</p>
<p style="text-align:justify;"><a href="http://luizgustavoss.files.wordpress.com/2010/12/pivot-mem-game1.png"><img class="aligncenter size-full wp-image-543" title="pivot-mem-game" src="http://luizgustavoss.files.wordpress.com/2010/12/pivot-mem-game1.png" alt="" width="636" height="596" /></a></p>
<p style="text-align:justify;">&nbsp;</p>
<p style="text-align:justify;">&nbsp;</p>
<p style="text-align:justify;">Definição da interface através do arquivo memgame.wtkx:</p>
<p style="text-align:justify;">&nbsp;</p>
<p><pre class="brush: xml;">

&lt;Window title=&quot;Pivot's Memory Game&quot; maximized=&quot;true&quot;
    xmlns:wtkx=&quot;http://pivot.apache.org/wtkx&quot;
    xmlns:content=&quot;org.apache.pivot.wtk.content&quot;
    xmlns=&quot;org.apache.pivot.wtk&quot;&gt;
    &lt;content&gt;
        &lt;Border&gt;
            &lt;content&gt;
	            &lt;GridPane columnCount=&quot;6&quot; styles=&quot;{horizontalSpacing:1, verticalSpacing:1,
                    showHorizontalGridLines:true, showVerticalGridLines:true}&quot;&gt;
                    &lt;rows&gt;
                        &lt;GridPane.Row&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;1&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;2&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;3&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;4&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
				            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;5&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
				            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;6&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                        &lt;/GridPane.Row&gt;
                        &lt;GridPane.Row&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;7&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;8&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;9&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;10&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
				            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;11&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
				            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;12&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                        &lt;/GridPane.Row&gt;
                        &lt;GridPane.Row&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;13&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;14&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;15&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;16&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
				            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;17&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
				            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;18&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                        &lt;/GridPane.Row&gt;
                        &lt;GridPane.Row&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;19&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;20&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;21&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;22&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
				            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;23&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
				            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;24&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                        &lt;/GridPane.Row&gt;
                        &lt;GridPane.Row&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;25&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;26&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;27&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;28&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
				            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;29&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
				            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;30&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                        &lt;/GridPane.Row&gt;
                        &lt;GridPane.Row&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;31&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;32&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;33&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;34&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
				            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;35&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
				            &lt;PushButton toggleButton=&quot;true&quot; wtkx:id=&quot;36&quot;&gt;
				                &lt;buttonData&gt;
				                    &lt;content:ButtonData text=&quot;&quot;/&gt;
				                &lt;/buttonData&gt;
				            &lt;/PushButton&gt;
                        &lt;/GridPane.Row&gt;
                    &lt;/rows&gt;
                &lt;/GridPane&gt;
            &lt;/content&gt;
        &lt;/Border&gt;
    &lt;/content&gt;
&lt;/Window&gt;

</pre></p>
<p>Classe que manipula os componentes de tela:</p>
<p><pre class="brush: java;">

package votti.pivot.memgame;

import org.apache.pivot.collections.Map;
import org.apache.pivot.wtk.Alert;
import org.apache.pivot.wtk.Application;
import org.apache.pivot.wtk.Button;
import org.apache.pivot.wtk.ButtonPressListener;
import org.apache.pivot.wtk.DesktopApplicationContext;
import org.apache.pivot.wtk.Display;
import org.apache.pivot.wtk.MessageType;
import org.apache.pivot.wtk.PushButton;
import org.apache.pivot.wtk.Window;
import org.apache.pivot.wtkx.WTKXSerializer;

import votti.pivot.memgame.component.MemGameButtonData;

public class Main implements Application, ButtonPressListener {

	private String defaultImage = &quot;img/default.gif&quot;;
	private boolean firstClick = true;
	private boolean right = true;
	private PushButton buttonOne;
	private PushButton buttonTwo;
	private Button clickedButtonOne;
	private Button clickedButtonTwo;

    private Window window = null;
    private String[] images18;
    private String[] images36;
    private PushButton[] buttons;

    @Override
    public void startup(Display display, Map&lt;String, String&gt; properties)

        throws Exception {
        WTKXSerializer wtkxSerializer = new WTKXSerializer();
        window = (Window) wtkxSerializer.readObject(this, &quot;memgame.wtkx&quot;);

        prepareImagesArray();

        buttons = new PushButton[36];

        for(int aux = 0; aux &lt; 36; aux++){
        	buttons[aux] = (PushButton) wtkxSerializer.get(String.valueOf(aux+1));
        	buttons[aux].setButtonData(new MemGameButtonData(defaultImage, images36[aux]));
        	buttons[aux].getButtonPressListeners().add(this);
        }

        window.open(display);
        window.setWidth(500);
        window.setHeight(520);
    }

    @Override
    public boolean shutdown(boolean optional) {
        if (window != null) {
            window.close();
        }

        return false;
    }

    @Override
    public void suspend() {
    }

    @Override
    public void resume() {
    }

    public static void main(String[] args) {
        DesktopApplicationContext.main(Main.class, args);
    }

    private void prepareImagesArray(){

		int posicaoNoArray, x, y;
		this.images18 = new String[18];

		for ( x = 0; x &lt; (18); x++ ){
			this.images18[ x ] = new String(&quot;img/&quot; + ( x + 1 ) + &quot;.gif&quot;);
		}

		this.images36 = new String[ (36) ];

		for ( x = 0; x &lt; 2; x++ ){
			for ( y = 0; y &lt; (18); y++ ){
				do{
					posicaoNoArray = ( int ) ( Math.random() * (36) );
				}while( this.images36[ posicaoNoArray ] != null );
				this.images36[ posicaoNoArray ] = images18[ y ];
			}
		}
	}

	@Override
	public void buttonPressed(Button button) {

		if( firstClick ){

			if ( !right ){

				buttonOne = (PushButton) clickedButtonOne;
				buttonTwo = (PushButton) clickedButtonTwo;

				((MemGameButtonData)buttonOne.getButtonData()).setDefaultURL();
				((MemGameButtonData)buttonTwo.getButtonData()).setDefaultURL();

				window.repaint();
			}

			clickedButtonOne = button;

			buttonOne = (PushButton) clickedButtonOne;
			((MemGameButtonData)buttonOne.getButtonData()).setButtonURL();

			firstClick = !firstClick;
		}
		else{

			clickedButtonTwo = button;
			buttonTwo = (PushButton) clickedButtonTwo;

			if ( clickedButtonTwo == clickedButtonOne ){

				right = false;

				Alert.alert(MessageType.WARNING, &quot;Not permited action!&quot;, window);
			}
			else{

				((MemGameButtonData)buttonTwo.getButtonData()).setButtonURL();

				if ( ((MemGameButtonData)buttonOne.getButtonData()).getButtonURL().equals(
						((MemGameButtonData)buttonTwo.getButtonData()).getButtonURL())){

					right = true;

					buttonOne.setEnabled( false );
					buttonTwo.setEnabled( false );
				}

				else{
					right = false;
				}

				firstClick = !firstClick;
			}
		}

	}
}

</pre></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/luizgustavoss.wordpress.com/535/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/luizgustavoss.wordpress.com/535/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/luizgustavoss.wordpress.com/535/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/luizgustavoss.wordpress.com/535/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/luizgustavoss.wordpress.com/535/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/luizgustavoss.wordpress.com/535/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/luizgustavoss.wordpress.com/535/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/luizgustavoss.wordpress.com/535/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/luizgustavoss.wordpress.com/535/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/luizgustavoss.wordpress.com/535/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/luizgustavoss.wordpress.com/535/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/luizgustavoss.wordpress.com/535/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/luizgustavoss.wordpress.com/535/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/luizgustavoss.wordpress.com/535/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=535&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://luizgustavoss.wordpress.com/2010/12/01/jogo-da-memoria-com-apache-pivot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/858a70485a3031da019ee88e701f150e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Luiz Gustavo</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/12/pivot-mem-game1.png" medium="image">
			<media:title type="html">pivot-mem-game</media:title>
		</media:content>
	</item>
		<item>
		<title>Mensagens dinâmicas com MessageFormat</title>
		<link>http://luizgustavoss.wordpress.com/2010/12/01/mensagens-dinamicas-com-messageformat/</link>
		<comments>http://luizgustavoss.wordpress.com/2010/12/01/mensagens-dinamicas-com-messageformat/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 02:23:33 +0000</pubDate>
		<dc:creator>luizgustavoss</dc:creator>
				<category><![CDATA[Code Tip]]></category>
		<category><![CDATA[i18n]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[MessageFormat]]></category>

		<guid isPermaLink="false">http://luizgustavoss.wordpress.com/?p=528</guid>
		<description><![CDATA[Esta é uma rápida dica sobre uma classe muito útil da API Java, a classe MessageFormat. Não vou dar muitas explicações, e mais detalhes podem ser encontrados na própria API: http://download.oracle.com/javase/1.4.2/docs/api/java/text/MessageFormat.html Dentre as muitas coisas legais que esta classe permite fazer (formatação de valores monetários, data, hora), temos uma maneira de tratar mensagens internacionalizadas (ou [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=528&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">Esta é uma rápida dica sobre uma classe muito útil da API Java, a classe <strong>MessageFormat</strong>. Não vou dar muitas explicações, e mais detalhes podem ser encontrados na própria API: <a href="http://download.oracle.com/javase/1.4.2/docs/api/java/text/MessageFormat.html">http://download.oracle.com/javase/1.4.2/docs/api/java/text/MessageFormat.html</a></p>
<p style="text-align:justify;">Dentre as muitas coisas legais que esta classe permite fazer (formatação de valores monetários, data, hora), temos uma maneira de tratar mensagens internacionalizadas (ou não) cujo conteúdo muda de acordo com o valor específico de um parâmetro. Explico melhor:</p>
<p style="text-align:justify;">Digamos que você precise internacionalizar, ou apenas armazenar em um properties, a seguinte frase:</p>
<p><em>&#8220;Duke, você nos visitou uma vez.&#8221;</em></p>
<p style="text-align:justify;">Digamos que você precise tratar esta frase, de maneira que quando a quantidade de visitas for maior, ela mude para:</p>
<p><em>&#8220;Duke, você nos visitou <strong>(n)</strong> vezes&#8221;</em></p>
<p style="text-align:justify;">Certo! O tal (n) alí pode ser qualquer número, então o que muita gente faz são concatenações para conseguir o resultado esperado, por exemplo:</p>
<p><em>&#8220;Duke, você nos visitou&#8221; + <strong>n</strong> + &#8220;vezes&#8221;;</em></p>
<p>Vamos Piorar a situação? E se o Duke nunca lhe visitou, ou seja, n é igual a zero? E é lógico que não é somente o Duke que lhe visita, então você ainda tem o seguinte:</p>
<p><strong><em>m</em></strong>*, você nos visitou uma vez. <strong><em>(quando n = 1)</em></strong></p>
<p><strong><em>m</em></strong>* + você nos visitou + <strong><em>n</em></strong> + vezes. <strong><em>(quando n &gt; 1)</em></strong></p>
<p><strong><em>m</em></strong>*, você nunca nos visitou. <strong><em>(quando n = 0)</em></strong></p>
<p>*onde <em><strong>m</strong></em> pode ser o Duke ou qualquer pessoa.</p>
<p>Isto ainda pode ficar mais complicado quando você precisa passar a mensagem para mais de um idioma, pois a posição das partes variantes (m e n) pode ser diferente na mensagem. Este cenário é comum em sistemas internacionalizados.</p>
<p>Apesar de a maioria dos frameworks web com foco em componentes de apresentação apresentarem algum suporte a este tipo de situação, algumas vezes será necessário tratar mensagens assim no código Java.</p>
<p>Para estas situações a classe <strong><em>MessageFormat</em></strong> é ideal.</p>
<p>Em primeiro lugar, podemos ter apenas uma mensagem que trata todas as possibilidades, acredite. Basta colocarmos, para cada parte variável da mensagem, um<em> placeholder</em>, que identificará a presença de um valor dinâmico. Como no exemplo temos dois valores variáveis (n e m) teremos dois <em>placeholders</em> na mensagem. A sintaxe de um<em> placeholder</em> é um numérico entre chaves: {0} e {1}. Os valores indicam a posição dos parâmetros passados para o método que formatará a mensagem.</p>
<p>Nossa mensagem então ficaria assim:</p>
<p>{1}, você nos visitou {0} vezes.</p>
<p>Mas espere! Isto ainda não nos atende. Apenas uma das variações da mensagem está contemplada; precisamos do tipo de formato <em><strong>choice</strong></em>: este tipo de formato nos permite escolher dinamicamente uma parte da mensagem de acordo com o valor passado a um <strong><em>placeholder</em></strong>:</p>
<p><em>{1}, você {0,<strong>choice</strong>,<strong><span style="color:#ff0000;">0# nunca nos visitou.</span></strong>|<strong><span style="color:#008000;">1# nos visitou uma vez.</span></strong>|<strong><span style="color:#0000ff;">1&lt;nos visitou {0,number,integer} vezes</span></strong>}.</em></p>
<p>Na mensagem acima, está em destaque a sintaxe do tipo de formatação choice; ele é colocado após o número do placeholder, depois de uma vírgula.</p>
<p>Em vermelho está o texto que será apresentado caso o valor passado ao placeholder seja zero. Em verde está o texto que será apresentado caso o valor passado ao placeholder seja um. Em azul está o texto que será apresentado caso o valor passado ao placeholder seja maior que um.</p>
<p>OK, mas como fazer a mágica da transformação? Basta passar a mensagem e os parâmetros para o método format, da classe MessageFormat. Abaixo coloco uma classe de exemplo, que mostra ainda a mesma mensagem traduzida em inglês e espanhol, para demonstrar que a localização dos placeholders pode mudar sem afetar o resultado esperado.</p>
<p><pre class="brush: java;">

import java.text.MessageFormat;

public class FormatacaoMensagem{

private static String ingles = &quot;You have {0,choice,0#never visited us|1#visited us once|1&lt;visited us {0,number,integer} times}, {1}.&quot;;
private static String portugues = &quot;{1}, você {0,choice,0#nunca nos visitou.|1#nos visitou uma vez.|1&lt;nos visitou {0,number,integer} vezes}.&quot;;
private static String espanhol = &quot;Usted {0,choice,0#nunca nos ha visitado, {1}|1#nos ha visitado una vez, {1}|1&lt;nos ha visitado {0,number,integer} veces, {1}}.&quot;;

public static void main(String[] args){

Object[] nenhum = {
new Integer(0),
&quot;Duke&quot;

};

Object[] um = {
new Integer(1),
&quot;Duke&quot;

};

Object[] varios = {
new Integer(2),
&quot;Duke&quot;

};

System.out.println( MessageFormat.format(ingles, nenhum) );
System.out.println( MessageFormat.format(ingles, um) );
System.out.println( MessageFormat.format(ingles, varios) );

System.out.println( MessageFormat.format(portugues, nenhum) );
System.out.println( MessageFormat.format(portugues, um) );
System.out.println( MessageFormat.format(portugues, varios) );

System.out.println( MessageFormat.format(espanhol, nenhum) );
System.out.println( MessageFormat.format(espanhol, um) );
System.out.println( MessageFormat.format(espanhol, varios) );

}
}

</pre></p>
<p>Eis o resultado final:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/12/result.png"><img class="aligncenter size-full wp-image-529" title="result" src="http://luizgustavoss.files.wordpress.com/2010/12/result.png" alt="" width="302" height="139" /></a></p>
<p>Vale a pena conferir a API para as outras opções que a classe oferece.</p>
<p>Está dada a dica!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/luizgustavoss.wordpress.com/528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/luizgustavoss.wordpress.com/528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/luizgustavoss.wordpress.com/528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/luizgustavoss.wordpress.com/528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/luizgustavoss.wordpress.com/528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/luizgustavoss.wordpress.com/528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/luizgustavoss.wordpress.com/528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/luizgustavoss.wordpress.com/528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/luizgustavoss.wordpress.com/528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/luizgustavoss.wordpress.com/528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/luizgustavoss.wordpress.com/528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/luizgustavoss.wordpress.com/528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/luizgustavoss.wordpress.com/528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/luizgustavoss.wordpress.com/528/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=528&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://luizgustavoss.wordpress.com/2010/12/01/mensagens-dinamicas-com-messageformat/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/858a70485a3031da019ee88e701f150e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Luiz Gustavo</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/12/result.png" medium="image">
			<media:title type="html">result</media:title>
		</media:content>
	</item>
		<item>
		<title>Dica: Prototipação com Balsamiq</title>
		<link>http://luizgustavoss.wordpress.com/2010/12/01/dica-prototipacao-com-balsamiq/</link>
		<comments>http://luizgustavoss.wordpress.com/2010/12/01/dica-prototipacao-com-balsamiq/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 01:26:40 +0000</pubDate>
		<dc:creator>luizgustavoss</dc:creator>
				<category><![CDATA[Dica Rápida]]></category>
		<category><![CDATA[Balsamiq]]></category>
		<category><![CDATA[Mockups]]></category>
		<category><![CDATA[Prototipação]]></category>

		<guid isPermaLink="false">http://luizgustavoss.wordpress.com/?p=525</guid>
		<description><![CDATA[Esta é uma dica rápida, de uma ferramenta que veio ao encontro de minhas necessidades, e pode ser o que você também procura. Há algum tempo deixei de usar o iPlotz, e hoje uma colega de trabalho me indicou o Balsamiq. Não vou explicar muito, apenas colocar uma imagem de uma tela e deixar o [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=525&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Esta é uma dica rápida, de uma ferramenta que veio ao encontro de minhas necessidades, e pode ser o que você também procura.</p>
<p>Há algum tempo deixei de usar o iPlotz, e hoje uma colega de trabalho me indicou o Balsamiq.</p>
<p>Não vou explicar muito, apenas colocar uma imagem de uma tela e deixar o link para quem tiver interesse.</p>
<p>&nbsp;</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/12/balsamiq.png"><img class="aligncenter size-full wp-image-526" title="balsamiq" src="http://luizgustavoss.files.wordpress.com/2010/12/balsamiq.png" alt="" width="645" height="498" /></a></p>
<p>&nbsp;</p>
<p>A instalação é fácil, mas é preciso ter instalada a plataforma AIR da Adobe (o que também é fácil conseguir &#8211; há um link na página de instalação para se chegar na instalação do AIR).</p>
<p>Eis a página do projeto: <a href="http://balsamiq.com/">http://balsamiq.com/</a></p>
<p>&nbsp;</p>
<p>Está dada a dica!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/luizgustavoss.wordpress.com/525/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/luizgustavoss.wordpress.com/525/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/luizgustavoss.wordpress.com/525/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/luizgustavoss.wordpress.com/525/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/luizgustavoss.wordpress.com/525/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/luizgustavoss.wordpress.com/525/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/luizgustavoss.wordpress.com/525/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/luizgustavoss.wordpress.com/525/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/luizgustavoss.wordpress.com/525/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/luizgustavoss.wordpress.com/525/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/luizgustavoss.wordpress.com/525/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/luizgustavoss.wordpress.com/525/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/luizgustavoss.wordpress.com/525/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/luizgustavoss.wordpress.com/525/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=525&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://luizgustavoss.wordpress.com/2010/12/01/dica-prototipacao-com-balsamiq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/858a70485a3031da019ee88e701f150e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Luiz Gustavo</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/12/balsamiq.png" medium="image">
			<media:title type="html">balsamiq</media:title>
		</media:content>
	</item>
		<item>
		<title>Trabalhando com o SVN no Eclipse</title>
		<link>http://luizgustavoss.wordpress.com/2010/11/22/trabalhando-com-o-svn-no-eclipse/</link>
		<comments>http://luizgustavoss.wordpress.com/2010/11/22/trabalhando-com-o-svn-no-eclipse/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 02:17:08 +0000</pubDate>
		<dc:creator>luizgustavoss</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[branch]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[merge]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[trunk]]></category>

		<guid isPermaLink="false">http://luizgustavoss.wordpress.com/?p=476</guid>
		<description><![CDATA[Introdução Neste pequeno tutorial vou apresentar uma descrição básica de como se trabalhar com o Subversion (SVN) no Eclipse. Embora outros servidores de controle de versão estejam sendo utilizados cada vez mais pelo mercado, como o Git, por exemplo, o SVN ainda é, sem dúvida, utilizado por uma grande quantidade de usuários nas empresas. Apesar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=476&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Introdução</h2>
<p>Neste pequeno tutorial vou apresentar uma descrição básica de como se trabalhar com o Subversion (SVN) no Eclipse.<br />
Embora outros servidores de controle de versão estejam sendo utilizados cada vez mais pelo mercado, como o Git, por exemplo, o SVN ainda é, sem dúvida, utilizado por uma grande quantidade de usuários nas empresas.<br />
Apesar da grande utilização, nem sempre as melhores práticas são adotadas quando se trabalha com este tipo de ferramenta, nem mesmo recursos como merging e branching são utilizados na maioria das vezes (ou pela maioria dos usuários), o que acaba por provocar a  subutilização da ferramenta, afetando consequentemente a produtividade das equipes.</p>
<h2>Objetivos</h2>
<p>Apresentar orientações básicas de como trabalhar com o SVN no Eclipse, que é um dos ambientes de desenvolvimento Java mais utilizados do mercado.<br />
Serão apresentados exemplos de como criar um branch, realizar um merge entre o branch e o trunk, e resolver problemas de conflito durante o merge.<br />
Os conceitos apresentados são válidos para outros ambientes de desenvolvimento, mas os procedimentos podem mudar de acordo com os plugins utilizados em cada um.</p>
<h2>Pré-Requisitos</h2>
<p>Como não é o foco do tutorial apresentar a instalação do servidor SVN, é necessário ter um repositório disponível para os testes. Uma dica, para se testar em uma máquina local, é instalar o VisualSVN Server Manager.<br />
É necessário também ter o plugin do SVN instalado no Eclipse. Um exemplo de como a instalação do plugin pode ser feita pode ser encontrado no seguinte endereço: http://luizgustavoss.wordpress.com/2009/12/13/preparando-um-ambiente-de-desenvolvimento-java-ee-baseado-em-eclipse/</p>
<h2>Mão na Massa!</h2>
<h3></h3>
<h3></h3>
<h3>Configurando o repositório no Eclipse</h3>
<p>Para começar a utilizar um repositório do SVN é necessário configurá-lo n o Eclipse. Para isso é preciso ter a URL do repositório, o que pode ser conseguido com o administrador do repositório.<br />
Com a URL em mãos, abra a perspectiva do repositório SVN no Eclipse:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img1.png"><img class="aligncenter size-full wp-image-477" title="img1" src="http://luizgustavoss.files.wordpress.com/2010/11/img1.png" alt="" width="300" height="364" /></a></p>
<p>Clicando com o botão auxiliar do mouse, selecione a opção para adicionar um novo local:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img2.png"><img class="aligncenter size-full wp-image-478" title="img2" src="http://luizgustavoss.files.wordpress.com/2010/11/img2.png" alt="" width="300" height="205" /></a></p>
<p>Adicione a URL do repositório de testes no campo indicado:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img3.png"><img class="aligncenter size-full wp-image-479" title="img3" src="http://luizgustavoss.files.wordpress.com/2010/11/img3.png" alt="" width="450" height="371" /></a></p>
<p>Pode ser necessário informar o usuário e senha para acesso. Esta informação pode ser conseguida com o administrador do servidor:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img4.png"><img class="aligncenter size-full wp-image-480" title="img4" src="http://luizgustavoss.files.wordpress.com/2010/11/img4.png" alt="" width="402" height="193" /></a></p>
<p>Após estes passos, o repositório será apresentado na perspectiva, conforme abaixo:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img5.png"><img class="aligncenter size-full wp-image-481" title="img5" src="http://luizgustavoss.files.wordpress.com/2010/11/img5.png" alt="" width="300" height="244" /></a></p>
<p>A estrutura sugerida pelo SVN possui três diretórios: branches, tags e trunk.</p>
<p><strong>/trunk</strong> -  o diretório onde o desenvolvimento principal do projeto ocorre, ou seja, onde sempre está a versão mais recente e estável dos artefatos oficiais;<br />
<strong>/branches</strong> – o diretório onde pode-se criar ramificações da linha principal de desenvolvimento (trunk);<br />
<strong>/tags</strong> – o diretório onde se pode armazenar ramificações da linha principal que são criadas, e talvez destruídas, mas nunca modificadas.</p>
<h3></h3>
<h3></h3>
<h3>Criando uma aplicação Java</h3>
<p>Crie, no C:\, um diretório chamado workspace, e nele crie dois diretórios chamados work1 e work2. Estes serão os workspaces usados para os testes.</p>
<p>Abra o Eclipse apontando para o workspace work1. Após configurar o ambiente (adicionar um JDK apropriado) crie um projeto Java simples, chamado Calculadora. Neste projeto crie um pacote chamado testes.svn, e nele crie uma classe chamada Calculadora.java, com os seguintes métodos:</p>
<p><pre class="brush: java;">

public class Calculadora {

public BigDecimal somar(BigDecimal param1, BigDecimal param2) throws Exception{
return null;
}

public BigDecimal subtrair(BigDecimal param1, BigDecimal param2) throws Exception{
return null;
}

public BigDecimal multiplicar(BigDecimal param1, BigDecimal param2) throws Exception{
return null;
}

public BigDecimal dividir(BigDecimal param1, BigDecimal param2) throws Exception{
return null;
}
}

</pre></p>
<p>Esta é a estrutura do projeto após a criação da classe:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img6.png"><img class="aligncenter size-full wp-image-483" title="img6" src="http://luizgustavoss.files.wordpress.com/2010/11/img6.png" alt="" width="319" height="152" /></a></p>
<p>Vamos agora colocar o projeto no repositório que configuramos anteriormente. Clique com o botão auxiliar do mouse sobre o projeto, vá até a opção de menu &#8220;Team&#8221; e escolha a opção &#8220;Share Project&#8221;:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img7.png"><img class="aligncenter size-full wp-image-484" title="img7" src="http://luizgustavoss.files.wordpress.com/2010/11/img7.png" alt="" width="512" height="233" /></a></p>
<p>Na próxima tela, escolha a opção SVN e prossiga. Na tela seguinte, escolha o repositório configurado anteriormente e prossiga:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img8.png"><img class="aligncenter size-full wp-image-485" title="img8" src="http://luizgustavoss.files.wordpress.com/2010/11/img8.png" alt="" width="450" height="376" /></a></p>
<p>Na próxima tela, temos a opção de configurar o nome sobre o qual o projeto será armazenado no repositório, e sua localização. Marque a segunda opção, e clicando no botão &#8220;Select&#8230;&#8221; informe o diretório trunk:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img9.png"><img class="aligncenter size-full wp-image-486" title="img9" src="http://luizgustavoss.files.wordpress.com/2010/11/img9.png" alt="" width="430" height="446" /></a></p>
<p>Ao retornar da tela, esta deverá ser a configuração da tela:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img10.png"><img class="aligncenter size-full wp-image-487" title="img10" src="http://luizgustavoss.files.wordpress.com/2010/11/img10.png" alt="" width="450" height="376" /></a></p>
<p>Prossiga, e na tela final digite uma mensagem inicial para o versionamento e confirme:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img11.png"><img class="aligncenter size-full wp-image-488" title="img11" src="http://luizgustavoss.files.wordpress.com/2010/11/img11.png" alt="" width="450" height="376" /></a></p>
<p>O seguinte comando será executado contra o servidor, adicionando o projeto ao repositório:</p>
<p><em>mkdir &#8211;parents -m &#8220;Versionamento do projeto Calculadora.&#8221; https://votti/svn/calculadora/trunk/Calculadora</em><br />
<em>checkout https://votti/svn/calculadora/trunk/Calculadora -r HEAD &#8211;depth=immediates &#8211;force</em></p>
<p>Logo em seguida, será apresentada a perspectiva de sincronização, onde poderemos &#8220;commitar&#8221; o projeto no repositório, ou seja, enviar o conteúdo do projeto para o repositório, literalmente.<br />
As setas cinza sobre os arquivos e diretórios indicam que estes arquivos devem ser comitados, então selecione os mesmos e, clicando com o botão auxiliar do mouse sobre os itens selecionados, escolha a opção &#8220;commit&#8221;:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img12.png"><img class="aligncenter size-full wp-image-489" title="img12" src="http://luizgustavoss.files.wordpress.com/2010/11/img12.png" alt="" width="400" height="386" /></a></p>
<p>Na tela seguinte, inclua um comentário inicial e confirme:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img13.png"><img class="aligncenter size-full wp-image-490" title="img13" src="http://luizgustavoss.files.wordpress.com/2010/11/img13.png" alt="" width="450" height="346" /></a></p>
<p>Os seguintes comandos serão executados, indicando que os artefatos foram &#8220;commitados&#8221; com sucesso:</p>
<p><em>add -N C:\workspace\work1\Calculadora\.settings</em><br />
<em> A         C:/workspace/work1/Calculadora/.settings</em><br />
<em>add -N C:\workspace\work1\Calculadora\src</em><br />
<em> A         C:/workspace/work1/Calculadora/src</em><br />
<em>add -N C:\workspace\work1\Calculadora\src\testes</em><br />
<em> A         C:/workspace/work1/Calculadora/src/testes</em><br />
<em>add -N C:\workspace\work1\Calculadora\src\testes\svn</em><br />
<em> A         C:/workspace/work1/Calculadora/src/testes/svn</em><br />
<em>add -N C:\workspace\work1\Calculadora\.settings\org.eclipse.jdt.core.prefs</em><br />
<em> A         C:/workspace/work1/Calculadora/.settings/org.eclipse.jdt.core.prefs</em><br />
<em>add -N C:\workspace\work1\Calculadora\.project</em><br />
<em> A         C:/workspace/work1/Calculadora/.project</em><br />
<em>add -N C:\workspace\work1\Calculadora\src\testes\svn\Calculadora.java</em><br />
<em> A         C:/workspace/work1/Calculadora/src/testes/svn/Calculadora.java</em><br />
<em>add -N C:\workspace\work1\Calculadora\.classpath</em><br />
<em> A         C:/workspace/work1/Calculadora/.classpath</em><br />
<em>commit -m &#8220;Versionamento inicial dos artefatos.&#8221; (8 paths specified)</em><br />
<em> Adding         C:/workspace/work1/Calculadora/.classpath</em><br />
<em> Adding         C:/workspace/work1/Calculadora/.project</em><br />
<em> Adding         C:/workspace/work1/Calculadora/.settings</em><br />
<em> Adding         C:/workspace/work1/Calculadora/.settings/org.eclipse.jdt.core.prefs</em><br />
<em> Adding         C:/workspace/work1/Calculadora/src</em><br />
<em> Adding         C:/workspace/work1/Calculadora/src/testes</em><br />
<em> Adding         C:/workspace/work1/Calculadora/src/testes/svn</em><br />
<em> Adding         C:/workspace/work1/Calculadora/src/testes/svn/Calculadora.java</em><br />
<em> Transmitting file data &#8230;</em></p>
<p>Voltando à perspectiva Java, podemos perceber que o projeto está no repositório, pela notação à frente do nome do projeto, e podemos ver ainda qual usuário realizou o &#8220;commit&#8221; da classe Calculadora:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img14.png"><img class="aligncenter size-full wp-image-491" title="img14" src="http://luizgustavoss.files.wordpress.com/2010/11/img14.png" alt="" width="346" height="154" /></a></p>
<p>Pois bem, temos o projeto versionado no trunk. Como dito anteriormente, no trunk deveriam ser mantidos os códigos estáveis de um projeto. Para a realização de testes ou implementações que podem ser instáveis por um longo período, pode ser preferível criar um branch. No branch colocamos uma cópia do projeto que está no trunk, mas sem perder a referência. A equipe que trabalha no código do branch pode ainda manter uma sincronização com o trunk, trazendo deste as atualizações pertinentes, evitando que o código do branch fique desatualizado com relação ao trunk,  mas evitando que o código instável do branch influencie negativamente o código do trunk.<br />
Para nosso tutorial, vamos supor que a implementação dos métodos da classe Calculadora serão  realizados no branch. No dia-a-dia tal implementação poderia ser feita no trunk, mas como nosso objetivo é aprender a criar branches, vamos supor que esta seja uma necessidade real.</p>
<h3></h3>
<h3></h3>
<h3>Criando um Branch</h3>
<p>Para criar um branch vá até a perspectiva do repositório SVN e, expandindo os diretórios, clique com o botão auxiliar do mouse sobre o projeto Calculadora, e no menu de contexto escolha a opção &#8220;Branch/Tag&#8230;&#8221;:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img15.png"><img class="aligncenter size-full wp-image-492" title="img15" src="http://luizgustavoss.files.wordpress.com/2010/11/img15.png" alt="" width="290" height="474" /></a></p>
<p>Na tela seguinte precisamos informar o diretório destino, no repositório, para o projeto. Como estamos criando um branch, o diretório destino será o branch. Porém, como podem existir vários branches de um mesmo projeto ao mesmo tempo, é conveniente criar um subdiretório com um nome que identifique o objetivo do branch.<br />
Para fazer isso, selecione o branch através do botão &#8220;Select&#8230;&#8221;:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img16.png"><img class="aligncenter size-full wp-image-493" title="img16" src="http://luizgustavoss.files.wordpress.com/2010/11/img16.png" alt="" width="450" height="425" /></a></p>
<p>Ao voltar para a tela anterior, dê um nome ao subdiretório. Isso pode ser feito adicionando o nome à URL resultante do processo anterior. Para este exemplo, o diretório será &#8220;metodos_calculadora&#8221;. Eis a URL final:</p>
<p>https://votti/svn/calculadora/branches/metodos_calculadora</p>
<p>Lembre-se de marcar na tela a opção que permite que o diretório adicional seja criado (<em>Create any intermediate folders that are missing</em>.):</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img17.png"><img class="aligncenter size-full wp-image-494" title="img17" src="http://luizgustavoss.files.wordpress.com/2010/11/img17.png" alt="" width="450" height="338" /></a></p>
<p>Na próxima tela podemos escolhar qual revisão queremos para o branch. No nosso caso vamos escolhar a opção HEAD, que indica que será enviada para o branch a versão mais atual existente no trunk. Porém, se necessário, uma versão específica poderá ser selecionada:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img18.png"><img class="aligncenter size-full wp-image-495" title="img18" src="http://luizgustavoss.files.wordpress.com/2010/11/img18.png" alt="" width="450" height="338" /></a></p>
<p>Na tela seguinte adicione um comentário pertinente, e faça a confirmação:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img19.png"><img class="aligncenter size-full wp-image-496" title="img19" src="http://luizgustavoss.files.wordpress.com/2010/11/img19.png" alt="" width="450" height="338" /></a></p>
<p>Se formos agora à perspectiva do repositório, poderemos ver que o conteúdo do trunk foi copiado para o branch configurado:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img20.png"><img class="aligncenter size-full wp-image-497" title="img20" src="http://luizgustavoss.files.wordpress.com/2010/11/img20.png" alt="" width="300" height="353" /></a></p>
<p>Veja que até o momento copiamos o conteúdo do projeto para o trunk e a partir do trunk criamos um branch para realizar a implementação, mas no nosso workspace temos apenas o projeto que está &#8220;ligado&#8221; ao trunk. Isso significa que se fizermos qualquer modificação, e fizermos um commit, estas modificações serão enviadas ao trunk.</p>
<h3></h3>
<h3></h3>
<h3>Realizando modificações no branch</h3>
<p>Se quisermos realizar modificações no branch criado, teremos que configurar um projeto que esteja &#8220;ligado&#8221; a ele.<br />
Para fazer isso, vamos reiniciar o Eclipse e como workspace vamos selecionar o diretório work2, criado no início do tutorial. Assim que tiver aberto o Eclipse no novo workspace faça as configurações necessárias (configuração de uma JDK padrão, por exemplo).<br />
Abra a perspectiva do SVN e, assim como no início do tutorial, insira uma novo local de repositório, informando a URL do repositório de exemplo.<br />
Ao terminar o processo de configuração do repositório, abra o diretório branch. Clique com o botão auxiliar do mouse sobre o diretório &#8220;metodos_calculadora&#8221;, e no menu de contexto escolha a opção &#8220;Checkout&#8230;&#8221;:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img21.png"><img class="aligncenter size-full wp-image-498" title="img21" src="http://luizgustavoss.files.wordpress.com/2010/11/img21.png" alt="" width="300" height="361" /></a></p>
<p>Com isso vamos copiar o conteúdo do branch para o repositório, para trabalhar nele.<br />
A próxima tela apresenta os dados para o projeto qe será criado:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img22.png"><img class="aligncenter size-full wp-image-499" title="img22" src="http://luizgustavoss.files.wordpress.com/2010/11/img22.png" alt="" width="450" height="438" /></a></p>
<p>Repare que o nome do projeto foi recuperado e dado como sugestão. Também há a possibilidade de escolher uma revisão específica, ou então a última (HEAD). Vamos manter as configurações sugeridas.<br />
Na próxima tela será sugerido como workspace o workspace atual (work2). Mantenha o valor sugerido e prossiga, clicando em &#8220;Finish&#8221;.<br />
Ao voltar para a perspectiva Java, é possível verificar que o projeto foi configurado, e que referencia o branch criado:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img23.png"><img class="aligncenter size-full wp-image-500" title="img23" src="http://luizgustavoss.files.wordpress.com/2010/11/img23.png" alt="" width="341" height="138" /></a></p>
<p>Agora vamos simular a situação real de ter que alterar o código em ambos os locais, trunk (work1) e branch (work2) e ter de mantê-los sincronizados.<br />
Vamos começar codificando a classe Calculadora no workspace work2, que referencia o branch, no qual estamos:</p>
<p><pre class="brush: java;">

public class Calculadora {

    public BigDecimal somar(BigDecimal param1, BigDecimal param2) throws Exception{
        return param1.add(param2);
    }

    public BigDecimal subtrair(BigDecimal param1, BigDecimal param2) throws Exception{
        return param1.subtract(param2);
    }

    public BigDecimal multiplicar(BigDecimal param1, BigDecimal param2) throws Exception{
        return param1.multiply(param2);
    }

    public BigDecimal dividir(BigDecimal param1, BigDecimal param2) throws Exception{
        return param1.divide(param2);
    }
}

</pre></p>
<p>Depois de codificar a classe, faça o commit das modificações no branch, descrevendo as modificações:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img24.png"><img class="aligncenter size-full wp-image-502" title="img24" src="http://luizgustavoss.files.wordpress.com/2010/11/img24.png" alt="" width="450" height="357" /></a></p>
<p>É extremamente importante realizar o commit de todas as alterações do workspace no brach/trunk antes de realizar qualquer operação de merge. Aliás, é uma exigência!<br />
Vamos agora realizar uma modificação no projeto do trunk, para ver como recuperar esta modificação, depois, no branch. Mude de workspace, voltando para a workspace work1.<br />
Você verá que, como esperado, os métodos na classe Calculadora do workspace work1 estão como antes, sem implementação.<br />
Adicione então, à classe Calculadora, um método a mais:</p>
<p><pre class="brush: java;">
public BigDecimal potencial(BigDecimal param1, BigDecimal param2) throws Exception{
return null;
}
</pre></p>
<p>Faça o commit da modificação, adicionando um comentário pertinente:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img25.png"><img class="aligncenter size-full wp-image-503" title="img25" src="http://luizgustavoss.files.wordpress.com/2010/11/img25.png" alt="" width="450" height="346" /></a></p>
<p>Retorne para o workspace work2.</p>
<h3></h3>
<h3></h3>
<h3>Realizando um merge do trunk para o branch</h3>
<p>Agora, no workspace work2, vamos realizar um merge para receber as atualizações do trunk, ou seja, o novo método adicionado à classe Calculadora.<br />
Este procedimento deveria ser, como comentado anteriormente, uma prática realizada frequentemente para que o branch não fique muito tempo desatualizado em relação ao trunk. Isto minimiza problemas de conflito na hora de mover para o trunk as modificações do branch, procedimento este que realizaremos depois.</p>
<p>Selecione a classe Calculadora no projeto, e clicando com o botão auxiliar do mouse sobre ela escolha a opção de &#8220;Merge&#8230;&#8221; no menu &#8220;Team&#8221;:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img26.png"><img class="aligncenter size-full wp-image-504" title="img26" src="http://luizgustavoss.files.wordpress.com/2010/11/img26.png" alt="" width="550" height="537" /></a></p>
<p>A tela seguinte nos apresenta algumas opções para a operação de merge:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img27.png"><img class="aligncenter size-full wp-image-505" title="img27" src="http://luizgustavoss.files.wordpress.com/2010/11/img27.png" alt="" width="450" height="461" /></a></p>
<p>Para este tutorial as duas primeiras opções são as que interessam.<br />
Para esta operação que realizaremos agora, mantenha selecionada a primeira opção. Esta opção é usada para capturar mudanças que foram realizadas no trunk ou outro branch, e trazê-las ao branch no qual estamos trabalhando. Confirme a operação, clicando em &#8220;Next&#8221;:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img28.png"><img class="aligncenter size-full wp-image-506" title="img28" src="http://luizgustavoss.files.wordpress.com/2010/11/img28.png" alt="" width="450" height="461" /></a></p>
<p>A próxima tela apresenta uma sugestão do artefato a partir do qual desejamos realizar o merge, ou seja, a classe Calculadora  presente no projeto do trunk. Neste ponto você poderia apontar para a mesma classe presente em algum outro branch, caso existisse, ou seja, não precisa ser necessariamente um merge a partir do trunk. Mas no nosso caso manteremos a sugestão, pois realmente precisamos realizar o merge com o trunk.<br />
Na próxima tela são apresentadas opções para a operação. Basicamente, as sugestões marcadas por padrão são melhores, pois indicam que a cada problema encontrado, o usuário deverá ser consultado sobre o que fazer. Mantenha as sugestões apresentadas por padrão:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img29.png"><img class="aligncenter size-full wp-image-507" title="img29" src="http://luizgustavoss.files.wordpress.com/2010/11/img29.png" alt="" width="450" height="461" /></a></p>
<p>Ao confirmar, a seguinte tela é apresentada, indicando que uma atualização foi encontrada:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img30.png"><img class="aligncenter size-full wp-image-508" title="img30" src="http://luizgustavoss.files.wordpress.com/2010/11/img30.png" alt="" width="450" height="471" /></a></p>
<p>Após a conclusão da operação, você verá que o método adicionado na classe Calculadora do trunk apareceu na classe Calculadora do branch:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img31.png"><img class="aligncenter size-full wp-image-509" title="img31" src="http://luizgustavoss.files.wordpress.com/2010/11/img31.png" alt="" width="600" height="389" /></a></p>
<p>Vale lembrar que, apesar de termos realizado esta operação para apenas uma classe, ela pode ser realizada para vários artefatos ao mesmo tempo.<br />
Agora que a classe foi modificada, faça o commit das alterações no branch, informando um comentário pertinente para a mudança:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img32.png"><img class="aligncenter size-full wp-image-510" title="img32" src="http://luizgustavoss.files.wordpress.com/2010/11/img32.png" alt="" width="450" height="357" /></a></p>
<h3></h3>
<h3></h3>
<h3>Realizando um merge do branch para o trunk</h3>
<p>Depois do trabalho realizado no branch, precisamos reintegrá-lo ao trunk, uma hora ou outra.<br />
Muitas vezes o trabalho em um branch pode ser tão rápido quanto algumas horas, ou longo a ponto de levar vários dias ou meses. O tamanho do trabalho a ser realizado é que irá determinar isso.<br />
Independente de quanto tempo ele leve, o fato de realizar periodicamente o merge do trunk com o branch, como feito anteriormente, deve minimizar os problemas de conflitos quando chegar a hora de trazer o branch para o trunk, uma vez que, idealmente, os conflitos existentes já terão sido resolvidos no momento em que se levou as mudanças do trunk para o branch.<br />
Vamos agora trazer o que foi feito no branch para o trunk. Mude para o workspace work1.<br />
Selecione a classe Calculadora no projeto, e clicando com o botão auxiliar do mouse sobre ela escolha a opção de &#8220;Merge&#8230;&#8221; no meu &#8220;Team&#8221;</p>
<p>Na tela que aparece em seguida, mantenha selecionada a segunda opção, que nos permitirá trazer as mudanças do branch para o trunk:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img33.png"><img class="aligncenter size-full wp-image-511" title="img33" src="http://luizgustavoss.files.wordpress.com/2010/11/img33.png" alt="" width="450" height="486" /></a></p>
<p>Na tela seguinte, na qual informamos a partir de onde será feito o merge, selecione a classe Calculadora do branch, como indicado:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img34.png"><img class="aligncenter size-full wp-image-512" title="img34" src="http://luizgustavoss.files.wordpress.com/2010/11/img34.png" alt="" width="450" height="486" /></a></p>
<p>Na próxima tela confirme as opções oferecidas como padrão, e ao finalizar a tela seguinte será apresentada, indicando que uma atualização será realizada:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img35.png"><img class="aligncenter size-full wp-image-513" title="img35" src="http://luizgustavoss.files.wordpress.com/2010/11/img35.png" alt="" width="450" height="471" /></a></p>
<p>Confirme clicando no botão &#8220;OK&#8221;. Ao término da operação as atualizações do branch serão aplicadas ao trunk.</p>
<h3></h3>
<h3></h3>
<h3>Lidando com conflitos entre o trunk e o branch</h3>
<p>Até agora realizamos o merge entre o trunk e o branch sem nenhum problema de conflito, mas isto está longe de ser a realidade do dia-a-dia de trabalho das equipes de desenvolvimento. Na verdade os conflitos são muito comuns. As boas práticas procuram melhorar a produtividade das equipes, manter a estabilidade dos repositórios (principalmente do trunk) e minizar os conflitos, mas eliminar os conflitos, principalmente em um ambiente onde muitos desenvolvedores atualizam os mesmos arquivos, é algo muito difícil. Por esta razão é bom se acostumar com estes conflitos, e se acostumar a resolvê-los também.<br />
Para simular este cenário, vamos modificar o último método adicionado à classe Calculadora. Perceba que ele ainda não foi implementado, e que recebe dois parâmetros. Na verdade precisamos modificar um de seus parâmetros, e também precisamos implementá-lo.<br />
Ainda no workspace work1 modifique o método como abaixo:</p>
<p><pre class="brush: java;">
public BigDecimal potencial(BigDecimal param1, int param2) throws Exception{
return param1.pow(param2);
}
</pre></p>
<p>Realize o commit das modificações, e sim, coloque um comentário! (não é à toa que estou batendo nesta tecla):</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img36.png"><img class="aligncenter size-full wp-image-514" title="img36" src="http://luizgustavoss.files.wordpress.com/2010/11/img36.png" alt="" width="450" height="346" /></a></p>
<p>Agora mude para o workspace work2 e também faça estas modificações no métod, exatamente como no trunk, realizando o commit ao final.<br />
Depois de realizado o commit, faça um merge, trazendo do trunk as modificações para o branch.<br />
Apesar de termos alterado o mesmo método em ambos os locais, nenhuma atualização é encontrada, uma vez que as modificações foram exatamente as mesmas, ou seja, nenhum conflito é encontrado.<br />
Vamos agora simular um conflito real, quando o mesmo local é modificado, porém com valores diferentes.</p>
<p>Mude para o workspace work1 e altere o método dividir conforme apresentado abaixo, realizando o commit ao final:</p>
<p><pre class="brush: java;">

public BigDecimal dividir(BigDecimal param1, BigDecimal param2) throws Exception{
return param1.divide(param2, BigDecimal.ROUND_UP);
}
</pre></p>
<p>Agora mude para o workspace work2 e altere o método dividir conforme apresentado abaixo, realizando o commit no final:</p>
<p><pre class="brush: java;">
public BigDecimal dividir(BigDecimal param1, BigDecimal param2) throws Exception{
return param1.divide(param2, BigDecimal.ROUND_HALF_EVEN);
}
</pre></p>
<p>Agora tente novamente trazer do trunk para o branch as modificações na classe Calculadora e veja o resultado.</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img37.png"><img class="aligncenter size-full wp-image-515" title="img37" src="http://luizgustavoss.files.wordpress.com/2010/11/img37.png" alt="" width="450" height="357" /></a></p>
<p>Desta vez há um conflito, pois o método foi modificado em mais de um local (repositório), e no mesmo ponto.<br />
As opções apresentadas na tela que é apresentada são:</p>
<p>- Marcar como em conflito. Resolverei mais tarde.<br />
- Resolver o conflito usando a minha versão do arquivo.<br />
- Resolver o conflito usando a versão do arquivo que está chegando.<br />
- Me deixe editar o arquivo com os marcadores de conflito inseridos.<br />
- Abrir um editor gráfico de solução de conflitos.</p>
<p>Particularmente recomendo lidar o quando antes com os conflitos, portanto, escolha a última opção e confirme. O Editor apresenta os conflitos a serem resolvidos:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img38.png"><img class="aligncenter size-full wp-image-516" title="img38" src="http://luizgustavoss.files.wordpress.com/2010/11/img38.png" alt="" width="600" height="399" /></a></p>
<p>Suponhamos que nossa versão do branch está correta. Então feche o editor, e uma mensagem será apresentada, perguntando se o conflito foi resolvido:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img39.png"><img class="aligncenter size-full wp-image-517" title="img39" src="http://luizgustavoss.files.wordpress.com/2010/11/img39.png" alt="" width="450" height="372" /></a></p>
<p>Marque que o conflito foi resolvido (primeira opção) e confirme:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/11/img40.png"><img class="aligncenter size-full wp-image-518" title="img40" src="http://luizgustavoss.files.wordpress.com/2010/11/img40.png" alt="" width="450" height="471" /></a></p>
<p>Na tela que indica que uma atualização será feita faça a confirmação. Depois realize o commit da classe Calculadora no branch.<br />
Desta forma, cada implementação do método, no trunk e no branch, ficou de uma forma. Se quiséssemos deixá-las iguais, bastaria ter aceito a diferença vinda do trunk (caso esta fosse a correta) ou então, a partir do trunk, puxar as alterações do branch e aceitá-las.</p>
<p>&nbsp;</p>
<h2>Conclusão</h2>
<p>Neste tutorial foram apresentados os passos necessários para se configurar um repositório SVN no Eclipse e para se adicionar um projeto ao repositório.<br />
Foram apresentados também os passos necessários para se criar um branch, como realizar o merge entre o branch e o trunk (em ambas as direções) e como resolver conflitos de versionamento.<br />
Com isso concluímos este tutorial!<br />
Espero que tenha sido de bom proveito, e que com o que foi apresentado aqui você possa melhorar sua rotina de trabalho aplicando mais algumas boas práticas no seu dia-a-dia de utilização do SVN.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/luizgustavoss.wordpress.com/476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/luizgustavoss.wordpress.com/476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/luizgustavoss.wordpress.com/476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/luizgustavoss.wordpress.com/476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/luizgustavoss.wordpress.com/476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/luizgustavoss.wordpress.com/476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/luizgustavoss.wordpress.com/476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/luizgustavoss.wordpress.com/476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/luizgustavoss.wordpress.com/476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/luizgustavoss.wordpress.com/476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/luizgustavoss.wordpress.com/476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/luizgustavoss.wordpress.com/476/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/luizgustavoss.wordpress.com/476/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/luizgustavoss.wordpress.com/476/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=476&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://luizgustavoss.wordpress.com/2010/11/22/trabalhando-com-o-svn-no-eclipse/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/858a70485a3031da019ee88e701f150e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Luiz Gustavo</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img1.png" medium="image">
			<media:title type="html">img1</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img2.png" medium="image">
			<media:title type="html">img2</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img3.png" medium="image">
			<media:title type="html">img3</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img4.png" medium="image">
			<media:title type="html">img4</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img5.png" medium="image">
			<media:title type="html">img5</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img6.png" medium="image">
			<media:title type="html">img6</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img7.png" medium="image">
			<media:title type="html">img7</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img8.png" medium="image">
			<media:title type="html">img8</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img9.png" medium="image">
			<media:title type="html">img9</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img10.png" medium="image">
			<media:title type="html">img10</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img11.png" medium="image">
			<media:title type="html">img11</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img12.png" medium="image">
			<media:title type="html">img12</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img13.png" medium="image">
			<media:title type="html">img13</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img14.png" medium="image">
			<media:title type="html">img14</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img15.png" medium="image">
			<media:title type="html">img15</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img16.png" medium="image">
			<media:title type="html">img16</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img17.png" medium="image">
			<media:title type="html">img17</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img18.png" medium="image">
			<media:title type="html">img18</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img19.png" medium="image">
			<media:title type="html">img19</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img20.png" medium="image">
			<media:title type="html">img20</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img21.png" medium="image">
			<media:title type="html">img21</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img22.png" medium="image">
			<media:title type="html">img22</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img23.png" medium="image">
			<media:title type="html">img23</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img24.png" medium="image">
			<media:title type="html">img24</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img25.png" medium="image">
			<media:title type="html">img25</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img26.png" medium="image">
			<media:title type="html">img26</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img27.png" medium="image">
			<media:title type="html">img27</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img28.png" medium="image">
			<media:title type="html">img28</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img29.png" medium="image">
			<media:title type="html">img29</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img30.png" medium="image">
			<media:title type="html">img30</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img31.png" medium="image">
			<media:title type="html">img31</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img32.png" medium="image">
			<media:title type="html">img32</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img33.png" medium="image">
			<media:title type="html">img33</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img34.png" medium="image">
			<media:title type="html">img34</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img35.png" medium="image">
			<media:title type="html">img35</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img36.png" medium="image">
			<media:title type="html">img36</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img37.png" medium="image">
			<media:title type="html">img37</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img38.png" medium="image">
			<media:title type="html">img38</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img39.png" medium="image">
			<media:title type="html">img39</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/11/img40.png" medium="image">
			<media:title type="html">img40</media:title>
		</media:content>
	</item>
		<item>
		<title>Swing e Pivot</title>
		<link>http://luizgustavoss.wordpress.com/2010/10/12/swing-e-pivot/</link>
		<comments>http://luizgustavoss.wordpress.com/2010/10/12/swing-e-pivot/#comments</comments>
		<pubDate>Tue, 12 Oct 2010 11:53:58 +0000</pubDate>
		<dc:creator>luizgustavoss</dc:creator>
				<category><![CDATA[Code Tip]]></category>
		<category><![CDATA[Pivot]]></category>
		<category><![CDATA[Swing]]></category>

		<guid isPermaLink="false">http://luizgustavoss.wordpress.com/?p=472</guid>
		<description><![CDATA[Este post é uma rápida nota sobre uma combinação que eu acredito que será muito útil para a criação de aplicações desktop. Trata-se da combinação de Swing com o Pivot. Isto será possível a partir da versão 2.0. A imagem abaixo mostra um exemplo, e em seguida coloco o link do exemplo, e de onde [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=472&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Este post é uma rápida nota sobre uma combinação que eu acredito que será muito útil para a criação de aplicações desktop.</p>
<p>Trata-se da combinação de Swing com o Pivot. Isto será possível a partir da versão 2.0.</p>
<p>A imagem abaixo mostra um exemplo, e em seguida coloco o link do exemplo, e de onde é possível obter os fontes:</p>
<p>&nbsp;</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/10/pivot-swing.png"><img class="aligncenter size-full wp-image-473" title="pivot-swing" src="http://luizgustavoss.files.wordpress.com/2010/10/pivot-swing.png" alt="" width="792" height="428" /></a></p>
<p>Link do exemplo:</p>
<p><a href="http://ixnay.biz/pivot-demos/swing-demo.html" target="_blank">http://ixnay.biz/pivot-demos/swing-demo.html</a></p>
<p>&nbsp;</p>
<p>URL  para obter o fonte:</p>
<p><a href="http://svn.apache.org/repos/asf/pivot/trunk/demos/src/org/apache/pivot/demos/swing/" target="_blank">http://svn.apache.org/repos/asf/pivot/trunk/demos/src/org/apache/pivot/demos/swing/</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/luizgustavoss.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/luizgustavoss.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/luizgustavoss.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/luizgustavoss.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/luizgustavoss.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/luizgustavoss.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/luizgustavoss.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/luizgustavoss.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/luizgustavoss.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/luizgustavoss.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/luizgustavoss.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/luizgustavoss.wordpress.com/472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/luizgustavoss.wordpress.com/472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/luizgustavoss.wordpress.com/472/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=472&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://luizgustavoss.wordpress.com/2010/10/12/swing-e-pivot/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/858a70485a3031da019ee88e701f150e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Luiz Gustavo</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/10/pivot-swing.png" medium="image">
			<media:title type="html">pivot-swing</media:title>
		</media:content>
	</item>
		<item>
		<title>Boas Práticas na Utilização de Controle de Versão</title>
		<link>http://luizgustavoss.wordpress.com/2010/09/09/boas-praticas-na-utilizacao-de-controle-de-versao/</link>
		<comments>http://luizgustavoss.wordpress.com/2010/09/09/boas-praticas-na-utilizacao-de-controle-de-versao/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 17:35:56 +0000</pubDate>
		<dc:creator>luizgustavoss</dc:creator>
				<category><![CDATA[Dica Rápida]]></category>
		<category><![CDATA[Controle de Versão]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://luizgustavoss.wordpress.com/?p=460</guid>
		<description><![CDATA[Controle de versões representa a possibilidade de compartilhar arquivos, armazenar todas alterações e resolver os conflitos de edição. A sua utilização é fundamental durante todo o ciclo de desenvolvimento, armazenando artefatos de especificações até o código fonte. Com o controle de versão é possível que diversos desenvolvedores editem o mesmo documento e todas alterações sejam [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=460&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">
<p>Controle de versões representa a possibilidade de compartilhar arquivos, armazenar todas alterações e resolver os conflitos de edição. A sua utilização é fundamental durante todo o ciclo de desenvolvimento, armazenando artefatos de especificações até o código fonte.</p>
<p style="text-align:justify;">Com o controle de versão é possível que diversos desenvolvedores editem o mesmo documento e todas alterações sejam armazenadas para que o histórico seja mantido e conflitos nas edições solucionados. Outra função muito importante do controle de versões é armazenar todas alterações que um documento sofreu e permitir a recuperação de qualquer uma das versões anteriores.</p>
<p style="text-align:justify;">Embora a utilização de controle de versões possa facilitar a vida dos desenvolvedoes, a falta de organização e padronização pode levar a mais problemas do que soluções.</p>
<p style="text-align:justify;">A seguir serão apresentadas algumas boas práticas referentes a utilização de ferramentas de controle de versão, mais especificamente o Subversion, retiradas de algumas das referências citadas ao final do documento.</p>
<h3></h3>
<h3>Usar um layout de repositório adequado</h3>
<p style="text-align:justify;">Há alguns pontos a considerar quando se está configurando um repositório do Subversion. O primeiro deles é se será criado um único repositório para vários projetos, ou um repositório para cada projeto, ou então alguma forma de combinação das duas opções. Há prós e contras em cada uma das opções.</p>
<p style="text-align:justify;">Há benefícios ao se utilizar um único repositório para vários projetos, e o mais óbvio deles é evitar a duplicidade de manutenção:</p>
<ul>
<li>Um único backup a ser feito periodicamente;</li>
<li>Um único ponto a exportar e carregar quando há uma nova versão do Subversion que é imcompatível com as anteriores;</li>
<li>Facilidade para mover dados entre projetos, e sem perder o histórico destes dados (mover dados entre repositórios diferentes causa a perda do histórico dos dados).</li>
</ul>
<p style="text-align:justify;">A contrapartida de se utilizar um único repositório para vários projetos é que:</p>
<p>Diferentes projetos podem ter diferentes requisitos de autorização e autenticação;<br />
O Subversion utiliza números de revisão que são globais no repositório; isso faz com que mudanças em projetos distintos aumentem o número de revisão de projetos não relacionados.</p>
<p style="text-align:justify;">O meio termo seria ter alguns repositórios criados, e cada um deles conter projetos relacionados. Desta forma, os projetos relacionados podem compartilhar dados facilmente, e caso novas revisões sejam criadas no repositório, elas estarão relacionadas a projetos que estão, de alguma forma, também relacionados.</p>
<p style="text-align:justify;">Além da organização dos repositórios em si, há ainda a questão da organização dentro dos repositórios. Há várias maneiras de organizar o repositório de um projeto, pois cada divisão existente não é nada mais do que um diretório, e o Subversion não impede a criação de diretórios. Embora exista esta flexibilidade, o projeto Subversion recomenda, oficialmente, a idéia de um “projeto raiz“ que representa o ponto principal de um projeto. Um repositório pode conter um ou mais “projetos raiz“, e o “projeto raiz“ possui exatamente três subdiretórios:</p>
<p><strong>/trunk</strong> -  o diretório onde o desenvolvimento principal do projeto ocorre, ou seja, onde sempre está a versão mais recente dos artefatos oficiais;<br />
<strong>/branches</strong> – o diretório onde pode-se criar ramificações da linha principal de desenvolvimento (trunk);<br />
<strong>/tags</strong> – o diretório onde se pode armazenar ramificações da linha principal que são criadas, e talvez destruídas, mas nunca modificadas.</p>
<p>Um repositório poderia se parecer com o seguinte:</p>
<p><pre class="brush: java;">

calc/
----trunk/
----tags/
----branches/
calendar/
----trunk/
----tags/
----branches/
spreadsheet/
----trunk/
----tags/
----branches/
</pre></p>
<p style="text-align:justify;">Se há múltiplos projetos em um mesmo repositório, é possível organizá-los em grupos dentro do repositório, colocando projetos com objetivos similares em subdiretórios, como a seguir:</p>
<p style="text-align:justify;">
<p><pre class="brush: java;">&lt;/p&gt;
utils/
----calc/
--------trunk/
--------tags/
--------branches/
----calendar/
--------trunk/
--------tags/
--------branches/
…
office/
----spreadsheet/
--------trunk/
--------tags/
--------branches/
</pre></p>
<h3></h3>
<h3>Faça o commit de conjuntos lógicos de mudanças</h3>
<p style="text-align:justify;">É importante ficar bem claro que o objetivo principal de um sistema de controle de versão não é o de realizar backup dos dados versionados, mas manter o controle de versões lógicas de modificações feitas nos artefatos.</p>
<p style="text-align:justify;">Sendo assim, realizar um commit apenas ao final do dia, com a idéia de que se está salvando o trabalho feito não é nada bom se este trabalho não estiver logicamente completo. Agindo assim só se está realizando um backup diário do trabalho.</p>
<p style="text-align:justify;">Uma operação de commit deve ter um significado maior: ela deve refletir um trabalho completo para corrigir um erro, a incorporação completa de uma nova funcionalidade ao sistema, ou alguma tarefa particular, mas sempre por completo. Uma operação de commit irá gerar um identificador globalmente reconhecido dentro do repositório, que identifica este trabalho por completo, como se fosse um nome. Este identificador poderá ser utilizado, posteriormente, para identificar uma correção em uma ferramenta de acompanhamento de solicitações,  ou então ser passado como parâmetros a comandos do Subversion quando se deseja desfazer uma mudança, ou então copiá-la de um branch a outro.</p>
<h3></h3>
<h3>Utilizar ferramentas de acompanhamento de solicitações de maneira adequada</h3>
<p style="text-align:justify;">Ao utilizar ferramentas de acompanhamento de solicitações (correção de bugs, novas funcionalidades, etc&#8230;) faça links cruzados entre o número da solicitação aberta e do commit, ou commits que a atendem.</p>
<p style="text-align:justify;">Uma maneira de fazer isso é incluir o número da solicitação que se está atendendo no comentário do commit, e adicionando o número da revisão, resultante do commit, nos comentários que se faz em uma solicitação, para explicar seu andamento ou seu encerramento.</p>
<h3></h3>
<h3>Acompanhar operações de merge manualmente</h3>
<p style="text-align:justify;">Ao realizar um commit depois de uma operação de merge, escreva uma mensagem descritiva explicando o que foi integrado, como por exemplo:</p>
<p><em>Realização da integração das versões 3490:4120 do /branches/algumbranch para /trunk.</em></p>
<p style="text-align:justify;">
<h3></h3>
<h3>Saber quando criar branches</h3>
<p style="text-align:justify;">O debate sobre quando criar branches, ou não, é um detabe antigo, e realmente não há uma palavra final sobre isso, pois cada equipe ou projeto pode assumir uma política diferente. A seguir são descritas as três políticas mais comuns de criação de branches:</p>
<p><strong>Nunca criar branches</strong></p>
<p>Eesta é a política utilizada por projetos que acabaram de nascer, e que ainda não têm código executável.<br />
Os usuários realizam o commit das mudanças diárias diretamente no /trunk.</p>
<p style="text-align:justify;">Eventualmente o /trunk pode parar de funcionar (não compila, não passa em testes unitários), quando alguém realiza o commit de mudanças complexas.</p>
<p><strong>Prós: </strong><br />
* É uma política fácil de seguir.<br />
* Novos desenvolvedores têm uma barreira menor para iniciar.<br />
* Ninguém precisa saber como criar branches e realizar integrações (merge).<br />
<strong>Contras: </strong><br />
* Desenvolvimento caótico.<br />
* O código pode se tornar instável a qualquer momento.</p>
<p style="text-align:justify;">
<p style="text-align:justify;"><strong>Sempre utilizar branches</strong></p>
<p>Esta é a política utilizada por projetos que favorecem um forte gerenciamento e supervisão.<br />
Cada usuário cria e trabalha em um branch privado para cada tarefa de codificação.</p>
<p style="text-align:justify;">Quando a codificação está completa, alguém (o autor original do código, um colega ou o gerente) revisa todas as modificações no branch as integra ao /trunk.</p>
<p><strong>Prós: </strong><br />
* Há a garantia de que o /trunk sempre estará consistente e estável.<br />
* Nenhum desenvolvedor precisa manter em sua máquina, por muito tempo, modificações incompatíveis com o /trunk.<br />
<strong>Contras: </strong><br />
* Os desenvolvedores ficam artificialmente isolados uns dos outros, possivelmente criando mais conflitos de integração que o necessário. Requer que os desenvolvedores façam integrações com maior frequência, para diminuir os conflitos.</p>
<p style="text-align:justify;">
<p><strong>Criar branches quando necessário</strong></p>
<p style="text-align:justify;">Esta é a prática utilizada pelo projeto Subversion.</p>
<p style="text-align:justify;">Os usuários realizam o commit das mudanças diárias diretamente no /trunk.</p>
<p style="text-align:justify;"><strong>Regra #1: </strong>o /trunk tem que compilar e passar nos testes de regressão sempre!<br />
<strong>Regra #2:</strong> uma operação de commit de um conjunto de modificações não pode ser tão grande a ponto de desencorajar a revisão por parte de um colega.<br />
<strong>Regra #3:</strong> se as regras #1 e #2 entrarem em conflito (exemplo: é impossível realizar uma série de commits sem corromper o /trunk) então o desenvolvedor deve criar um /branch e realizar uma série de commits de pequenos conjuntos de modificações lá. Isso permite que seja feita a revisão por parte de um colega, sem desestabilizar o /trunk.</p>
<p><strong>Pros: </strong><br />
* Tem-se a garantia de que o /trunk está estável todo o tempo.<br />
<strong>Contras:</strong><br />
* Adiciona algumas obrigações ao trabalho diário dos usuários: eles devem compilar e testar o código antes de cada commit realizado.</p>
<p style="text-align:justify;">
<h3 style="text-align:justify;"></h3>
<h3 style="text-align:justify;">Tenha cuidado ao realizar a atualização de sua área de trabalho</h3>
<p style="text-align:justify;">
<p style="text-align:justify;">Alguns cuidados, apesar de muito básicos, são ignorados por quem está começando a utilizar um sistema de controle de versão. Vejo constantemente amigos reclamando de estagiários que fazem uma verdadeira bagunça no código versionado, sobrescrevendo atualizações de colegas, criando com isso muitos problemas.</p>
<p style="text-align:justify;">Ao invés de realizar um commit direto em algum artefato, é adequado verificar se há atualizações pendentes para o mesmo. Plugins dificilmente permitem que se realize um commit em um código que possui uma versão mais nova no servidor, mas ainda assim é uma boa prática.</p>
<p style="text-align:justify;">Quando não há conflitos nos arquivos é difícil fazer alguma besteira. Os problemas surgem com eles.</p>
<p style="text-align:justify;">Os plugins das IDEs permitem que se faça a verificação dos conflitos, e a solução deles, passo-a-passo. Ainda assim muitas pessoas (acreditem) ignoram os conflitos e simplesmente forçam um commit de suas atualizações, &#8220;matando&#8221; as modificações de seus colegas. Acredite, se você não quer ter sua mãe escumungada pelos seus colegas, seja cauteloso. Ao solucionar conflitos, tenha paciência e copie para sua versão as atualizações pertinentes feitas pelos seus colegas. Quando o trecho em conflito refletir uma mesma mudança feita por você e outra pessoa, verifique com a pessoa o que ela acha melhor manter na versão, principalmente se você não conseguir entender a codificação dela.</p>
<p style="text-align:justify;">Só faça o commit quando você tiver certeza de que as mudanças feitas pelos outros colegas de trabalho foram contempladas em sua versão. Se você não conseguir resolver os conflitos, chame uma pessoa mais experiente.</p>
<p style="text-align:justify;">Quando você não tiver uma pessoa disponível para lhe ajudar a resolver os conflitos, é preferível copiar seu código para um arquivo de backup, aceitar todas as atualizações do servidor (sobrescrevendo as suas) e depois realizar novamente as suas alterações sobre a nova versão. Isso porque você certamente entenderá melhor as suas modificações do que a de seus colegas. Esta é uma prática que eu uso às vezes (quando há conflitos demais), e vários colegas me dizem também usar a mesma prática. Pelo menos se garante que nenhum trabalho alheio será estragado.</p>
<p style="text-align:justify;">
<p style="text-align:justify;">Quando tiver novas dicas para este post eu o atualizarei.</p>
<p style="text-align:justify;">
<p style="text-align:justify;">Está dada a dica!</p>
<p style="text-align:justify;">
<h3 style="text-align:justify;">Referências</h3>
<p style="text-align:justify;">
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { color: #0000ff } --></p>
<p style="text-align:justify;" lang="pt-BR"><span style="color:#0000ff;"><span style="text-decoration:underline;"><a href="http://svn.apache.org/repos/asf/subversion/trunk/doc/user/svn-best-practices.html">http://svn.apache.org/repos/asf/subversion/trunk/doc/user/svn-best-practices.html</a></span></span></p>
<p style="text-align:justify;" lang="pt-BR"><span style="color:#0000ff;"><span style="text-decoration:underline;"><a href="http://svnbook.red-bean.com/">http://svnbook.red-bean.com/</a></span></span></p>
<p style="text-align:justify;" lang="pt-BR"><span style="color:#0000ff;"><span style="text-decoration:underline;"><a href="http://www.iovene.com/21">http://www.iovene.com/21</a></span></span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/luizgustavoss.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/luizgustavoss.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/luizgustavoss.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/luizgustavoss.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/luizgustavoss.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/luizgustavoss.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/luizgustavoss.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/luizgustavoss.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/luizgustavoss.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/luizgustavoss.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/luizgustavoss.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/luizgustavoss.wordpress.com/460/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/luizgustavoss.wordpress.com/460/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/luizgustavoss.wordpress.com/460/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=460&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://luizgustavoss.wordpress.com/2010/09/09/boas-praticas-na-utilizacao-de-controle-de-versao/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/858a70485a3031da019ee88e701f150e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Luiz Gustavo</media:title>
		</media:content>
	</item>
		<item>
		<title>Dicas de Boas Práticas de Codificação</title>
		<link>http://luizgustavoss.wordpress.com/2010/09/09/dicas-de-boas-praticas-de-codificacao/</link>
		<comments>http://luizgustavoss.wordpress.com/2010/09/09/dicas-de-boas-praticas-de-codificacao/#comments</comments>
		<pubDate>Thu, 09 Sep 2010 17:06:25 +0000</pubDate>
		<dc:creator>luizgustavoss</dc:creator>
				<category><![CDATA[Dica Rápida]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://luizgustavoss.wordpress.com/?p=452</guid>
		<description><![CDATA[Este post não traz nenhuma novidade para quem já desenvolve há algum tempo, e a intenção é atingir aqueles que estão começando a programar em Java. Resolvi juntar algumas dicas de padrões de codificação e melhores práticas para códigos a serem aplicados no desenvolvimento de aplicações Java. São abordados padrões de nomes de arquivos, organização [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=452&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">Este post não traz nenhuma novidade para quem já desenvolve há algum tempo, e a intenção é atingir aqueles que estão começando a programar em Java.</p>
<p style="text-align:justify;">Resolvi juntar algumas dicas de padrões de codificação e melhores práticas para códigos a serem aplicados no desenvolvimento de aplicações Java.</p>
<p style="text-align:justify;">São abordados padrões de nomes de arquivos, organização de código, endentação, comentários, declarações, sentenças, espaços em branco, convenção de nomes, práticas de programação e exemplos de código.</p>
<p style="text-align:justify;">Estes padrões são baseados em princípios de engenharia de software que produzem códigos fáceis de entender, fáceis de manter e escaláveis. As convenções aqui adotadas foram fortemente baseadas no documento de Convenção de Codificação para a Linguagem de Programação Java, da Sun Microsystems.</p>
<p style="text-align:justify;">Algumas constatações reforçam a necessidade de se adotar uma padronização durante do desenvolvimento:</p>
<ul style="text-align:justify;">
<li>80% dos custos de um software é referente à manutenção.</li>
<li>Dificilmente qualquer software é mantido durante toda sua vida útil pelo autor original.</li>
<li>Convenções de código aumentam a legibilidade do software, permitindo que os desenvolvedores entendam novos códigos mais rapidamente e completamente.</li>
</ul>
<p style="text-align:justify;">No desenvolvimento de sistemas o uso de padrões de codificação promove o aumento da consistência do código e da produtividade da equipe. A seguir são descritas as principais instruções para a codificação de um código Java com padronizado e com qualidade.</p>
<p style="text-align:justify;">
<h3>Convenção de Nomes</h3>
<p style="text-align:justify;">Mantenha o tamanho dos nomes grande o bastante para transmitir o que eles representam. Exemplo: primeiroNome, sobrenome, ordemServico, etc.</p>
<p style="text-align:justify;">
<h3>Nomes de Classes e Interfaces</h3>
<p style="text-align:justify;">Os nomes de classe devem ser substantivos e, em caso de nomes compostos, utilize nomes com a primeira letra de cada palavra interna maiúscula. Use palavras inteiras evitando acrônimos e abreviaturas. Exemplo: Cliente ou ContaCliente.</p>
<p style="text-align:justify;">
<h3>Nomes de Métodos</h3>
<p style="text-align:justify;">Os nomes dos métodos devem ser verbos, em casos compostos com o primeiro nome minúsculo, e com a primeira letra de cada palavra interna em maiúsculo. Exemplo:</p>
<p style="text-align:justify;">
<p><pre class="brush: java;">
calcularPagamento().
</pre></p>
<h3>Nomes de Variáveis</h3>
<p style="text-align:justify;">Os nomes de variáveis devem estar com uma primeira letra minúscula e, em caso de nomes compostos, com a primeira letra de cada palavra interna em maiúsculo. Exemplo: contraPeso, primeiroNome, etc.</p>
<p style="text-align:justify;">Use abreviações consistentemente. Exemplo: numPedido, numChamado. Neste caso, num representa Numero.<br />
Evite os nomes que são similares. Exemplo: o numCliente e numcliente.</p>
<p style="text-align:justify;">Use nomes no plural para representar coleções tais como uma disposição ou um vetor. Exemplo: CustomerPK[] clientes ou Vector politicasDeAcesso.</p>
<p style="text-align:justify;">
<h3>Nomes de Constantes</h3>
<p style="text-align:justify;">Os nomes de constantes para tipos de dados ordinais devem ter todas as letras em maiúsculo, separadas por underscore. Exemplo:</p>
<p style="text-align:justify;">
<p><pre class="brush: java;">
public static final int MAX_POLICY_AMOUNT; ou
public static final char PROCESS_INFO_COMMAND;

</pre></p>
<h3>Documente com Comentários</h3>
<p style="text-align:justify;">Adicione comentários para facilitar a compreensão do código. Mantenha o comentário simples e separe-os de tal forma o código fique limpo e legível. Escreva também os comentários onde alguma explanação é necessária. Não escreva comentários para as coisas óbvias. Forneça documentação de acordo com a especificação do javadoc, tal que os arquivos do Java código podem ser usados para produzir a documentação externa das classes.</p>
<p style="text-align:justify;">
<h3>Documentação de Classes</h3>
<p style="text-align:justify;">Para documentar classes forneça comentários imediatamente antes de sua definição, especificando a finalidade e histórico de desenvolvimento.</p>
<p style="text-align:justify;">
<p style="text-align:justify;">
<h3>Documentação de Interfaces</h3>
<p style="text-align:justify;">Para documentar interfaces especifique a finalidade nos comentários da documentação, imediatamente antes de sua definição. Para cada método siga os padrões da documentação de métodos de membro.</p>
<p style="text-align:justify;">
<p style="text-align:justify;">
<h3>Documentação de Pacotes</h3>
<p style="text-align:justify;">Forneça documentação que especifique o relacionamento de um pacote com suas classes e Interfaces.</p>
<p style="text-align:justify;">
<h3>Use Linhas em Branco</h3>
<p style="text-align:justify;">Forneça linhas em branco entre as seções do código para melhorar a legibilidade. Use uma linha em branco nas seguintes circunstâncias:</p>
<p style="text-align:justify;">
<ul>
<li>Para separar as definições de classes das definições de métodos;</li>
<li>Para separar as variáveis locais de um método;</li>
<li>Para separar blocos de código; e</li>
<li>Para separar comentários das seções lógicas do código.</li>
</ul>
<p style="text-align:justify;">
<h3>Espaços em Branco e Tabulação</h3>
<p style="text-align:justify;">Use o espaço em branco para melhorar a legibilidade do código nas seguintes circunstâncias: Entre uma palavra-chave e um parêntese. Exemplo:</p>
<p style="text-align:justify;">
<p><pre class="brush: java;">
while (condicao) {
}

</pre></p>
<p>Após vírgulas na lista entre parênteses. Exemplo:</p>
<p><pre class="brush: java;">

operacao(param1, param2, param3);

</pre></p>
<p>Entre um operador binário e seu operando. Exemplos:</p>
<p><pre class="brush: java;">

x += y + z;
a = (a + b) / (c * d);

</pre></p>
<p>Entre expressões em uma declaração “for”. Exemplo:</p>
<p><pre class="brush: java;">

for (expr1; expr2; expr3)

</pre></p>
<p>Na utilização de casts.</p>
<p><pre class="brush: java;">

umMetodo((byte) num, (Object) x);

</pre></p>
<h3>Variáveis Locais</h3>
<p style="text-align:justify;">Declare uma variável local por linha do código e adicione um comentário que identifique a variável. Exemplo:</p>
<p style="text-align:justify;">
<p><pre class="brush: java;">
int contador = 0; // contador para número de referências

</pre></p>
<p>Declare todas as variáveis locais no começo dos blocos. Isto facilitará a localização das definições variáveis pelo programador. Exemplo:</p>
<p><pre class="brush: java;">

private void calcularProcessosPendentes() {
boolean processoEncerrado = false; // indica término do processamento
}

</pre></p>
<p>Use cada variável local para uma finalidade específica.<br />
Inicialize todas as variáveis locais onde elas são declaradas. A única razão para não inicializar uma variável no local onde ela é declarada é quando o valor inicial da variável depende de um processamento que ocorrerá posteriormente.</p>
<p><pre class="brush: java;">

int contador = 0; // contador para número de referências
int maxReferencias; // o número máximo de referências a serem processadas
…
maxReferencias = getMaxRefencias(…, …);

</pre></p>
<p>Evite as declarações locais que sobreponham declarações em níveis superiores. Exemplo:</p>
<p><pre class="brush: java;">

int contador = 0; //…
…
metodo() {
    if (condicao) {
        int contador = 0;
        …
    }
    …
}

</pre></p>
<p style="text-align:justify;">
<h3>Atributos de Membro</h3>
<p style="text-align:justify;">Para declarar atributos de membro utilize os seguintes padrões:</p>
<p><strong>Finalidade:</strong> Documente a finalidade do atributo;<br />
<strong>Visibilidade:</strong> Mantenha a visibilidade tão baixo quanto possível;<br />
<strong>Iniciação:</strong> Certifique-se de que todos os atributos estão inicializados antes que sejam alcançados. Inicialize todos os atributos no momento da criação do objeto. A inicialização posterior pode ser usada para os campos que não são acessados regularmente.</p>
<p style="text-align:justify;">
<h3>Métodos de Membro</h3>
<p style="text-align:justify;">Para declarar métodos de membro utilize os seguintes padrões:</p>
<p><strong>Nomenclatura:</strong> use get/set como um prefixo do nome do campo para todos os métodos de ascensão, a menos que forem do tipo booleano. Use o prefixo &#8220;is&#8221; para nomes de métodos que referenciem campos booleanos. Utilize também a primeira palavra do nome do método de membro como um verbo forte, ativo. Exemplo:</p>
<p><pre class="brush: java;">

getPotenciaMotor(), setPotenciaMotor(), isAutomatico(), reduzirMarcha().

</pre></p>
<p><strong>Visibilidade:</strong> Mantenha a visibilidade de funções de membro tão restritiva quanto possível para minimizar o acoplamento entre as classes;<br />
<strong>Documentação:</strong> Inclua um cabeçalho para especificar as seguintes informações da função de membro:</p>
<p style="text-align:justify;">
<ul>
<li>O propósito da função;</li>
<li>Seu valor de retorno;</li>
<li>Os parâmetros;</li>
<li>As mudanças nas versões do código.</li>
</ul>
<p style="text-align:justify;">
<h3>Parâmetros</h3>
<p style="text-align:justify;">Evite nomear parâmetros com o mesmo nome que as variáveis de membro. Isto evitará referenciar cada variável de membro utilizando o operador &#8220;this&#8221;, dificultando a localização de erros. Documente os parâmetros de uma função de membro no header usando a tag @param do javadoc. A documentação deve ser obrigatória para descrever todas as limitações ou pré-condições.</p>
<h3>Declarações ou Comandos</h3>
<p style="text-align:justify;">Cada linha deve conter no máximo um comando. Exemplo:</p>
<p style="text-align:justify;">
<p><pre class="brush: java;">
contador++; x = y; // EVITE ISSO!

</pre></p>
<h3>Chaves ou Blocos</h3>
<p style="text-align:justify;">Siga um esquema consistente para a abertura e fechamento de chaves. Alinhe a abertura e fechamento das chaves verticalmente. Isto facilitará a identificação do começo e término dos blocos. Exemplo:</p>
<p style="text-align:justify;">
<p><pre class="brush: java;">
class Cliente
{
    public void operacaoParaCliente()
    {
        if(condicao)
        {
        }
    }
}

</pre></p>
<p>Alternativamente, ponha a chave da abertura na extremidade da linha que começa o bloco. A chave de fechamento deve começar uma nova linha e ser posicionada no começo do comando de bloco. Exemplo:</p>
<p><pre class="brush: java;">

class Cliente {
    public void operacaoParaCliente() {
        if(condicao) {
        }
    }
}

</pre></p>
<h3>Ordem dos Membros</h3>
<p style="text-align:justify;">Declare membros de acordo com a ordem de visibilidade, do mais visível para menos visível, conforme modelo abaixo:</p>
<p>construtores (constructors)<br />
public member functions<br />
protected member functions<br />
private member functions</p>
<p>Minimize a utilização do modificador de acessos public e protected. Isto reduz o acoplamento e deixa o código mais compreensível. Evite usar nomes de objetos para acessar membros estáticos (static members), em vez disto, use o nome da classe preferivelmente.</p>
<h3>Concatenação de Strings</h3>
<p style="text-align:justify;">Evite realizar a concatenação de Strings com o operador “+“. Strings são objetos imutáveis, e por esta razão, a cada vez que uma concatenação é realizada, novos objetos são criados na memória:</p>
<p style="text-align:justify;">
<p><pre class="brush: java;">
String a = “Evite“;
a = a + “realizar a concatenação“;
a = a + “de Strings assim!“;

</pre></p>
<p>Para concatenação, procure utilizar as classes StringBuilder ou StringBuffer:</p>
<p><pre class="brush: java;">

StringBuilder a = new StringBuilder(“Procure“);
a.append(“realizar a concatenação“);
a.append(“de Strings assim!“);

</pre></p>
<h3>Cuidados na Manipulação de Objetos que Podem Estar Nulos</h3>
<p style="text-align:justify;">Ao realizar a chamada de métodos em objetos que poderiam estar nulos, tenha sempre o cuidado de testá-lo antes, a menos que tenha a certeza de que o objeto não estará nulo.<br />
Um exemplo útil, no caso de comparação de Strings:</p>
<p>Ao invés de realizar a comparação desta maneira:</p>
<p><pre class="brush: java;">

if(umaString.equals(““)){
…

</pre></p>
<p>Faça o seguinte, chamando o método equals no valor literal:</p>
<p><pre class="brush: java;">

if(““.equals(umaString)){
...

</pre></p>
<h3>Remover Imports Desnecessários</h3>
<p style="text-align:justify;">É importante, por uma questão de economia de memória, manter nas classes e interfaces somente as definições de imports que são utilizadas.<br />
Uma outra prática importante, que já é reforçada pelas IDE&#8217;s, é fazer o import classe a classe, ao invés de importar todos as classes de um determinado pacote.</p>
<h3>Utilize Parênteses Sempre que Puder</h3>
<p style="text-align:justify;">Não economize na utilização de parênteses quando estes puderem deixar uma expressão mais clara.</p>
<h3>Atribuição de Variáveis</h3>
<p style="text-align:justify;">Evite fazer múltiplas atribuições a uma mesma variável em uma única linha:</p>
<p style="text-align:justify;">
<p><pre class="brush: java;">
fooBar.fChar = barFoo.lchar = 'c'; // EVITE ISSO!

</pre></p>
<h3>Referência a Atributos e Métodos Estáticos</h3>
<p style="text-align:justify;">Sempre referencie membros estáticos (atributos e métodos) através da classe, e não de uma instância da mesma:</p>
<p><pre class="brush: java;">

UmaClasse.metodoEstatico(); // OK
instanciaDeUmaClasse.metodoEstatico(); // EVITE ISSO!

</pre></p>
<h3>Utilize Chaves Sempre!</h3>
<p style="text-align:justify;">Sempre utilize chaves para delimitar blocos de comandos, mesmo que estes tenham apenas uma instrução:</p>
<p style="text-align:justify;">
<p><pre class="brush: java;">
if(determinadaCondicao) // EVITE ISSO!
    realizaOperacao();

if(determinadaCondicao){ // OK
    realizaOperacao();
}
</pre></p>
<p style="text-align:justify;">
<p style="text-align:justify;">
<p style="text-align:justify;">
<p style="text-align:justify;">Bom, definitivamente não há nada de novo aqui para quem já desenvolve há algum tempo, com uma ou outra adaptação.</p>
<p style="text-align:justify;">O importante é definir quais práticas se adequam à sua realidade/equipe/projeto e seguí-la.</p>
<p style="text-align:justify;">
<p style="text-align:justify;">Está dada a dica!</p>
<p style="text-align:justify;">
<h3 style="text-align:justify;">Referência</h3>
<p style="text-align:justify;">
<p style="text-align:justify;">
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } 		A:link { color: #0000ff } --></p>
<p lang="pt-BR"><span style="color:#0000ff;"><span style="text-decoration:underline;"><a href="http://www.oracle.com/technetwork/java/codeconv-138413.html">http://www.oracle.com/technetwork/java/codeconv-138413.html</a></span></span></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/luizgustavoss.wordpress.com/452/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/luizgustavoss.wordpress.com/452/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/luizgustavoss.wordpress.com/452/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/luizgustavoss.wordpress.com/452/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/luizgustavoss.wordpress.com/452/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/luizgustavoss.wordpress.com/452/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/luizgustavoss.wordpress.com/452/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/luizgustavoss.wordpress.com/452/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/luizgustavoss.wordpress.com/452/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/luizgustavoss.wordpress.com/452/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/luizgustavoss.wordpress.com/452/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/luizgustavoss.wordpress.com/452/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/luizgustavoss.wordpress.com/452/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/luizgustavoss.wordpress.com/452/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=452&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://luizgustavoss.wordpress.com/2010/09/09/dicas-de-boas-praticas-de-codificacao/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/858a70485a3031da019ee88e701f150e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Luiz Gustavo</media:title>
		</media:content>
	</item>
		<item>
		<title>Metrics for Eclipse</title>
		<link>http://luizgustavoss.wordpress.com/2010/06/29/metrics-for-eclipse/</link>
		<comments>http://luizgustavoss.wordpress.com/2010/06/29/metrics-for-eclipse/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 22:56:36 +0000</pubDate>
		<dc:creator>luizgustavoss</dc:creator>
				<category><![CDATA[Dica Rápida]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Métricas]]></category>
		<category><![CDATA[Metrics]]></category>
		<category><![CDATA[Plugins]]></category>

		<guid isPermaLink="false">http://luizgustavoss.wordpress.com/?p=438</guid>
		<description><![CDATA[Revisando edições antigas da Java Magazine encontrei, na edição 55, um artigo muito interessante sobre o plugin Metrics for Eclipse, escrito por Leonardo da Silva Mota, Thamine Chaves L. de Abreu e Marco Antônio Pereira Araújo. Esta edição da revista é voltada à qualidade, e vale muito a pena a leitura. Na página do projeto [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=438&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:justify;">Revisando edições antigas da Java Magazine encontrei, na edição 55, um artigo muito interessante sobre o plugin <strong>Metrics for Eclipse</strong>, escrito por Leonardo da Silva Mota, Thamine Chaves L. de Abreu e Marco Antônio Pereira Araújo.</p>
<p>Esta edição da revista é voltada à qualidade, e vale muito a pena a leitura.</p>
<p>Na página do <a href="http://sourceforge.net/projects/metrics/" target="_blank">projeto</a> é possível encontrar maiores detalhes, e o plugin pode ser instalado no Eclipse através do update site <em>http://metrics.sourceforge.net/update</em>. Instalei tranquilamente o plugin no Eclipse Galileo (32bit e 64bit).</p>
<p><strong> </strong></p>
<p><strong> </strong></p>
<h2><strong>Como usar?</strong></h2>
<p style="text-align:justify;">Para utilizá-lo é preciso estar na perspectiva  &#8220;<em>Java</em>&#8221; do Eclipse. Vá até as propriedades do projeto e, selecionando no menu esquerdo a opção Metrics, habilite as métricas para o projeto:</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/06/habilitacao.png"><img class="aligncenter size-full wp-image-439" title="habilitacao" src="http://luizgustavoss.files.wordpress.com/2010/06/habilitacao.png" alt="" width="618" height="413" /></a></p>
<p>Depois de habilitar as métricas, dê um build no projeto.</p>
<p style="text-align:justify;">Vá ao menu <em>Window &gt; Show View</em> e selecione a opção <em>Metrics</em>. Dentro desta opção existem quatro opções de visualização. Selecione a opção <strong><em>Metrics View</em></strong>.</p>
<p><a href="http://luizgustavoss.files.wordpress.com/2010/06/show_view.png"><img class="aligncenter size-full wp-image-440" title="show_view" src="http://luizgustavoss.files.wordpress.com/2010/06/show_view.png" alt="" width="311" height="438" /></a></p>
<p>É possível visualizar várias métricas calculadas pelo plugin:</p>
<p style="text-align:justify;">
<p style="text-align:justify;"><a href="http://luizgustavoss.files.wordpress.com/2010/06/metrics_view.png"><img class="aligncenter size-full wp-image-442" title="metrics_view" src="http://luizgustavoss.files.wordpress.com/2010/06/metrics_view.png" alt="" width="582" height="499" /></a></p>
<p style="text-align:justify;">
<p style="text-align:justify;">A métrica <a href="http://eclipse-metrics.sourceforge.net/descriptions/CyclomaticComplexity.html"><strong><em>McCabe Cyclomatic Complexity</em></strong></a>, por exemplo, é uma métrica de software que proporciona uma medida quantitativa da complexidade de um algoritmo.</p>
<p style="text-align:justify;">
<p style="text-align:justify;"><a href="http://luizgustavoss.files.wordpress.com/2010/06/metrics_view2.png"><img class="aligncenter size-full wp-image-441" title="metrics_view2" src="http://luizgustavoss.files.wordpress.com/2010/06/metrics_view2.png" alt="" width="548" height="163" /></a></p>
<p style="text-align:justify;">
<h2>Gráfico de Dependência</h2>
<p style="text-align:justify;">
<p style="text-align:justify;">
<p style="text-align:justify;">É possível ainda visualizar um gráfico de dependência entre classes e pacotes:</p>
<p style="text-align:justify;">
<p style="text-align:justify;"><a href="http://luizgustavoss.files.wordpress.com/2010/06/dependency_graph.png"><img class="aligncenter size-full wp-image-443" title="dependency_graph" src="http://luizgustavoss.files.wordpress.com/2010/06/dependency_graph.png" alt="" width="593" height="399" /></a></p>
<p style="text-align:justify;">
<p style="text-align:justify;">
<h2 style="text-align:justify;">Personalização</h2>
<p style="text-align:justify;">
<p style="text-align:justify;">
<p style="text-align:justify;">É possível ainda personalizar esta ferramenta, através do menu Window &gt; Preferences &gt; Metrics Preferences.</p>
<p style="text-align:justify;">Dentre as personalizações possíveis, podemos ajustar os intervalos de valores para cada métrica, e habilitar a emissão de avisos, caso estes valores atinjam níveis indesejados.</p>
<p style="text-align:justify;">
<p style="text-align:justify;">Para maiores detalhes, recomendo a leitura do artigo.</p>
<p style="text-align:justify;">
<p style="text-align:justify;">Está dada a dica!</p>
<p style="text-align:justify;">
<p style="text-align:justify;">
<h3 style="text-align:justify;">Referências</h3>
<p style="text-align:justify;">
<p style="text-align:justify;"><a href="http://sourceforge.net/projects/metrics/">http://sourceforge.net/projects/metrics/</a></p>
<p style="text-align:justify;"><a href="http://en.wikipedia.org/wiki/Cyclomatic_complexity">http://en.wikipedia.org/wiki/Cyclomatic_complexity</a></p>
<p><a href="http://eclipse-metrics.sourceforge.net/descriptions/CyclomaticComplexity.html"></a></p>
<p style="text-align:justify;"><a href="http://eclipse-metrics.sourceforge.net/descriptions/CyclomaticComplexity.html">http://eclipse-metrics.sourceforge.net/descriptions/CyclomaticComplexity.html</a></p>
<p><a href="http://developer.spikesource.com/wiki/index.php/Measuring_Code_Complexity_Metrics"></a></p>
<p style="text-align:justify;"><a href="http://developer.spikesource.com/wiki/index.php/Measuring_Code_Complexity_Metrics">http://developer.spikesource.com/wiki/index.php/Measuring_Code_Complexity_Metrics</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/luizgustavoss.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/luizgustavoss.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/luizgustavoss.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/luizgustavoss.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/luizgustavoss.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/luizgustavoss.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/luizgustavoss.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/luizgustavoss.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/luizgustavoss.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/luizgustavoss.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/luizgustavoss.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/luizgustavoss.wordpress.com/438/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/luizgustavoss.wordpress.com/438/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/luizgustavoss.wordpress.com/438/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=luizgustavoss.wordpress.com&amp;blog=3343921&amp;post=438&amp;subd=luizgustavoss&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://luizgustavoss.wordpress.com/2010/06/29/metrics-for-eclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/858a70485a3031da019ee88e701f150e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Luiz Gustavo</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/06/habilitacao.png" medium="image">
			<media:title type="html">habilitacao</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/06/show_view.png" medium="image">
			<media:title type="html">show_view</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/06/metrics_view.png" medium="image">
			<media:title type="html">metrics_view</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/06/metrics_view2.png" medium="image">
			<media:title type="html">metrics_view2</media:title>
		</media:content>

		<media:content url="http://luizgustavoss.files.wordpress.com/2010/06/dependency_graph.png" medium="image">
			<media:title type="html">dependency_graph</media:title>
		</media:content>
	</item>
	</channel>
</rss>
