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

<channel>
	<title>Disk Chocolate &#187; programação</title>
	<atom:link href="http://diskchocolate.com/blog/category/programacao/feed/" rel="self" type="application/rss+xml" />
	<link>http://diskchocolate.com/blog</link>
	<description>Entregamos o melhor chocolate</description>
	<lastBuildDate>Tue, 22 May 2012 15:18:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Meu ambiente de trabalho em 7 itens</title>
		<link>http://diskchocolate.com/blog/2011/02/02/meu-ambiente-de-trabalho-em-7-itens/</link>
		<comments>http://diskchocolate.com/blog/2011/02/02/meu-ambiente-de-trabalho-em-7-itens/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 00:05:16 +0000</pubDate>
		<dc:creator>Cindy Dalfovo</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[ambiente]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[lost]]></category>
		<category><![CDATA[meme]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[trabalho]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://diskchocolate.com/blog/?p=1282</guid>
		<description><![CDATA[Eu estava lá, no meu cantinho, quando me convocam para um meme. Assim, do nada. Sem nem pedir antes. Essas pessoas, viu&#8230;? Bom, o que eu podia esperar do Cobalto, né? u_u Item 1 &#8211; Windows 7 Há, eu sei, aparentemente é de praxe começar pelo sistema operacional. Em todo caso, para mim faz diferença [...]]]></description>
			<content:encoded><![CDATA[<p>Eu estava lá, no meu cantinho, quando <a href="http://blog.cobline.com/2011/02/01/meu-ambiente-de-trabalho-em-7-itens/">me convocam para um meme</a>. Assim, do nada. Sem nem pedir antes. Essas pessoas, viu&#8230;?</p>
<p>Bom, o que eu podia esperar do <a href="http://blog.cobline.com">Cobalto</a>, né? u_u</p>
<h2>Item 1 &#8211; Windows 7</h2>
<p>Há, eu sei, aparentemente é de praxe começar pelo sistema operacional. Em todo caso, para mim faz diferença porque em casa uso o OS X, então&#8230; e o pior é que eu gosto. Sério, depois do detestável Windows Vista, é bom ver um Windows minimamente decente, que funciona bem.</p>
<p>Embora eu tenha toda sorte de bugs bizarros com ele &#8211; um só foi resolvido, er, criando uma conta nova no Windows. Não conseguimos descobrir qual era o problema da antiga, mas, enfim.</p>
<h2>Item 2 &#8211; Eclipse</h2>
<p><img class="size-full wp-image-1283 alignright" title="piranha" src="http://diskchocolate.com/blog/wp-content/uploads/2011/02/piranha.jpg" alt="piranha plant" width="375" height="500" /></p>
<p>Ah, a IDE que eu amo odiar. Ele tem a manha de travar quando você está no meio da digitação, uma coisa linda. por outro lado, bom, as ferramentas e atalhos para encontrar classes, métodos e refatorar salvam minha vida &lt;3</p>
<h2>Item 3 &#8211; Piranha Plant de pelúcia</h2>
<p>Junto com meu pequeno Wall-e, o Totoro na pokébola e a Marisa (Claymore), eles enfeitam meu ambiente de trabalho. As pessoas dizem que minha área é  mais bonitinha.</p>
<p>Que foi, só contava o ambiente de trabalho do computador em si? Bom, não li nada sobre ser só programas, então adicionei algo que eu adoro &#8220;no meu canto&#8221; <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Item 4 &#8211; TrueCrypt</h2>
<p>Todos os dados estão em partições do TrueCrypt, esse lindo. Sério, adoro o programa, ele é eficiente e faz muito bem o que precisa fazer. É sempre o primeiro programa a ser aberto quando ligo o computador, por motivos óbvios. E um dos poucos programas que eu uso que nunca deu problema (mas se der, também, FODEU, imagina não poder mais abrir os dados do trabalho? D:)</p>
<h2>Item 5 &#8211; Fones de ouvido</h2>
<p>Que diabos de ambiente de trabalho de programador está completo sem fones de ouvido? Às vezes é praticamente impossível trabalhar sem estar ouvindo música. Interessante quando tá todo mundo nesse clima, com fones de ouvido, concentrados no trabalho. Parece reunião de autistas.</p>
<h2>Item 6 &#8211; SVN/CVS</h2>
<p>É, eu sei que a moda agora é Git, mas, sinceramente, comitando meus programas direitinho, não tem problema. Sério. E tendo históricos.</p>
<h2>Item 7 &#8211; Plaquinha amarela escrito &#8220;Lost &#8211; the game&#8221;</h2>
<p>Embalagem de um presente que eu dei para um colega, agora passeia pelo trabalho. Preciso mencionar isso aqui já que nossa empresa provavelmente tem um dos índices de &#8220;FUUUU, PERDI O JOGO&#8221; mais altos de&#8230; bem, é um índice bem alto.</p>
<p>A propósito, vocês também acabam de perder o jogo <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>E para continuar o meme eu indico VOCÊ, AÍ, SENTADO NESSA CADEIRA, QUE ACABOU DE PERDER O JOGO. Isso, você mesmo. Vai lá.</p>
]]></content:encoded>
			<wfw:commentRss>http://diskchocolate.com/blog/2011/02/02/meu-ambiente-de-trabalho-em-7-itens/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>[Tutorial] Fazendo um jogo de memória em JavaScript (parte básica)</title>
		<link>http://diskchocolate.com/blog/2010/05/28/tutorial-fazendo-um-jogo-de-memoria-em-javascript-parte-basica/</link>
		<comments>http://diskchocolate.com/blog/2010/05/28/tutorial-fazendo-um-jogo-de-memoria-em-javascript-parte-basica/#comments</comments>
		<pubDate>Fri, 28 May 2010 18:03:10 +0000</pubDate>
		<dc:creator>Cindy Dalfovo</dc:creator>
				<category><![CDATA[Gamedev]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[videogame]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[joguinho]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[js]]></category>
		<category><![CDATA[memoria]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://diskchocolate.com/blog/?p=1139</guid>
		<description><![CDATA[Olá pessoas Eu queria ter postado esse tutorial já na semana passada, mas de lá para cá eu tive alguns problemas, e provas e, bom, acabei não programando nesses últimos dias. Em todo caso, esse tutorial vai explicar como fazer o joguinho básico que se encontra aqui, que eu havia mencionado no post anterior. Eu [...]]]></description>
			<content:encoded><![CDATA[<p>Olá pessoas <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Eu queria ter postado esse tutorial já na semana passada, mas de lá para cá eu tive alguns problemas, e provas e, bom, acabei não programando nesses últimos dias. Em todo caso, esse tutorial vai explicar como fazer o joguinho básico que se encontra <a href="http://diskchocolate.com/projetos/jogo_memoria/">aqui</a>, que eu havia mencionado no <a href="http://diskchocolate.com/blog/2010/05/17/meu-primeiro-jogo-em-javascript/">post anterior</a>. Eu quero fazer algumas adições a ele, colocar mais algumas funcionalidades mas, em todo caso, eu achei que seria legal fazer o tutorial para o básico e depois fazer outros pequenos tutoriais sobre as outras funcionalidades.</p>
<p>Esse tutorial não requer que você saiba muito de JavaScript e/ou jQuery, mas ter alguma noção ajuda, e já ter programado também. Não é muita coisa para explicar, então eu vou tentar explicar tudo com detalhes para ajudar quem também está aprendendo JavaScript e/ou jQuery, OK? <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>De qualquer maneira, eu ainda estou aprendendo a escrever tutoriais, embora já tenha escrito alguns, então eu sempre posso esquecer de falar algo importante&#8230; se for o caso, pode perguntar nos comentários que eu respondo e, se possível, melhoro o tutorial, ok? <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-1139"></span></p>
<h1>O Esqueleto da Aplicação: HTML e CSS</h1>
<p>Como não é feito nada de muito avançado nem no HTML nem no CSS, vamos apenas dar uma olhada rápida na estrutura dos dois, ok? <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<div class='easySpoilerWrapper' style=''>

<table class='easySpoilerTable' border='0' style='text-align:center;' align='center' bgcolor='FFFFFF' >

<tr><th class='easySpoilerTitleA'  style='text-align:left;vertical-align:middle;font-size:120%;' >Clique em 'mostrar' para ver o HTML</th>
<th class='easySpoilerTitleB'  style='text-align:right;vertical-align:middle;font-size:100%;' ><input type='button' id='spoilerDiv6988001_action' class='easySpoilerButton' value="Mostrar" onclick='wpSpoilerToggle("spoilerDiv6988001",true,"Mostrar","Esconder","fast",false);' align='right' style=''/></th>
</tr>

<tr><td class='easySpoilerRow' colspan='2' style=''><div><div id='spoilerDiv6988001' class='easySpoilerSpoils' style='display:none; white-space:wrap; vertical-align:middle;'>
</p>
<pre class="brush:xml">&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;head&gt;
&lt;meta name="generator" content="HTML Tidy, see www.w3.org" /&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt;
&lt;title&gt;Jogo da Mem&amp;oacute;ria em JavaScript&lt;/title&gt;
&lt;script type="text/javascript" src="lib/jquery/jquery-1.3.2.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/jogo.js"&gt;&lt;/script&gt;
&lt;link type="text/css" rel="stylesheet" href="styles/styles.css" /&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Jogo da Mem&amp;oacute;ria em JavaScript&lt;/h1&gt;
&lt;div id="mesa-de-jogo"&gt;
&lt;/div&gt;
&lt;div id="texto-tentativas"&gt; Tentativas: &lt;div id="tentativas"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre>
<p>
</div></div></td></tr>
</table>
<div class='easySpoilerConclude' style=''><table class='easySpoilerTable' border='0' style='text-align:center;' frame='box' align='center' bgcolor='FFFFFF'><tr><th class='easySpoilerEnd' style='width:100%;'></th><td class='easySpoilerEnd' style='white-space:nowrap;' colspan='2'></td></tr><tr><td class='easySpoilerGroupWrapperLastRow' colspan='2' style=''></td></tr></table></div>
</div>

<p>Como vocês podem ver, a parte HTML desse joguinho é realmente BEM simples. Só quero ressaltar alguns detalhes:</p>
<ol>
<li>São inseridos dois scripts: o script do jQuery, e o script do jogo. A ordem é importante, já que eles são carregados em ordem &#8211; se o jogo.js estivesse sendo carregado primeiro ele daria erro.</li>
<li>Estão vendo esses &#8220;div&#8221; no corpo da página? Sem entrar em aspectos técnicos, eu gosto de imaginá-los como marcações, um quadradinho colorido. Mais tarde eu vou mexer nesses &#8220;div&#8221; via CSS e via javascript e vou chamar o elemento cujo ID é mesa-de-jogo e o div certo vai ficar levantando os braços dizendo &#8220;me usa, me usa, sou eu, sou eu!&#8221; (imaginação fértil: eu tenho).</li>
<li>A parte de tentativas não está na página atual, apenas no arquivo do meu PC, mas é algo bem simples. Se você quiser implementar as tentativas, use esse div, senão, não use.</li>
</ol>
<p>O CSS tem mais alguns detalhes, mas também é bastante simples:</p>

<div class='easySpoilerWrapper' style=''>

<table class='easySpoilerTable' border='0' style='text-align:center;' align='center' bgcolor='FFFFFF' >

<tr><th class='easySpoilerTitleA'  style='text-align:left;vertical-align:middle;font-size:120%;' >Clique em 'mostrar' para ver o código CSS</th>
<th class='easySpoilerTitleB'  style='text-align:right;vertical-align:middle;font-size:100%;' ><input type='button' id='spoilerDiv32608002_action' class='easySpoilerButton' value="Mostrar" onclick='wpSpoilerToggle("spoilerDiv32608002",true,"Mostrar","Esconder","fast",false);' align='right' style=''/></th>
</tr>

<tr><td class='easySpoilerRow' colspan='2' style=''><div><div id='spoilerDiv32608002' class='easySpoilerSpoils' style='display:none; white-space:wrap; vertical-align:middle;'>
</p>
<pre class="brush:css">body {	background-color:#363636;}
h1 {	color:#84C1C3;	text-align:center;	font-family:sans-serif;}
.carta img:hover {	cursor:pointer;}
.carta img {	margin:5px;}
.carta {	display:inline;}
#mesa-de-jogo {   display: block;   text-align:center;}
#texto-tentativas {	text-align:center;	color:#84C1C3;	font-family:sans-serif;}
#tentativas {	display:inline;}</pre>
<p>
</div></div></td></tr>
</table>
<div class='easySpoilerConclude' style=''><table class='easySpoilerTable' border='0' style='text-align:center;' frame='box' align='center' bgcolor='FFFFFF'><tr><th class='easySpoilerEnd' style='width:100%;'></th><td class='easySpoilerEnd' style='white-space:nowrap;' colspan='2'></td></tr><tr><td class='easySpoilerGroupWrapperLastRow' colspan='2' style=''></td></tr></table></div>
</div>

<p>Novamente, nada de muito impressionante, apenas alguns detalhes para deixar a página mais &#8220;bonitinha&#8221;. Olhando em cada elemento, nós podemos ver:</p>
<ol>
<li>body é a página em si, foi definido só para colocar uma cor de fundo</li>
<li>h1 é o título, definido aqui apenas para definir cor, alinhamento e fonte (ou melhor, a família da fonte mas, enfim)</li>
<li>Esse &#8216;.carta img:hover&#8217; dita o comportamento de quando o mouse está sobre (hover) uma imagem (elemento img) que esteja aninhado em um elemento da classe &#8216;carta&#8217;. Ou seja, isso será aplicado apenas a imagens desta categoria. Neste caso não faz muita diferença, já que as únicas imagens da página são aquelas do jogo, mas vale pela organização. Esse estilo serve para mudar o cursos do mouse para &#8220;pointer&#8221;, para indicar que é possível interagir com aquelas cartas.</li>
<li>Nesse caso, em &#8220;.carta img&#8221; estamos definindo um estilo para as cartas, nesse caso, uma margem de 5 pixels para elas não ficarem &#8220;grudadas&#8221; umas nas outras.</li>
<li>As duas linhas definindo o estilo de carta e mesa-de-jogo servem para que as cartas fiquem juntas&#8230; se você não definir nada, as cartas vão ficar uma em cada linha, o que não ficaria muito bonito :p Inicialmente eu havia usado tabelas para organizar isso, mas assim o código fica mais limpo (a parte de Javascript não tem de se preocupar com essa parte de layout, o que é importante). Ou seja, a mesa de jogo mostra seus elementos &#8220;filhos&#8221; em um bloco, e as cartas que estão dentro da mesa de jogo estão configuradas para serem mostradas &#8220;inline&#8221;, ou seja, serem colocadas na mesma linha e não em uma nova linha, como seria padrão em um div.</li>
<li>Bom, o text-tentativas e o tentativas não tem nada de diferente e, novamente, só são usados se você quiser fazer uma linha sob as cartas com o número de tentativas do jogo.</li>
</ol>
<p>Uma nota sobre # e . : essas são dois marcados, usados tanto no CSS quando para manipular DOM. # serve para ID e . para classe. Não é difícil de imaginar que ID é um identificador único de um elemento na página, não é mesmo? E classe, por outro lado, pode ter vários elementos em uma página. É o caso de #mesa-de-jogo e .carta: só existe uma mesa de jogo, mas varias cartas, daí se usar mesa-de-jogo como ID e carta como classe.</p>
<p>A diferença pode não parecer relevante, mas existem diversas funções que encontram um elemento com um ID, por exemplo, como o document.getElementById(), que vai retornar um único elemento.</p>
<p>E isso encerra a parte de HTML e CSS. Agora, vamos para a parte divertida: Javascript e jQuery! <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h1>Javascript e jQuery: montando a lógica do jogo</h1>
<p>Então, nós temos um esqueleto em HTML e CSS, mas do jogo nós ainda não temos absolutamente nada, não é mesmo? É aí que entra a parte de JavaScript e jQuery. O código é bastante simples e eu fiquei em dúvida de por onde começar a explicar&#8230; até ter a brilhante idéia de começar explicando&#8230; por onde eu comecei <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>(eu tenho umas sacadas geniais, eu sei)</p>
<p>Então, a primeira coisa que eu fiz foi mostrar as cartas na tela ao abrir a página:</p>
<pre class="brush:js">$(function (){
	mesa_de_jogo.linhas = 2;
	mesa_de_jogo.colunas = 4;
	for (linha=1;linha&lt;=mesa_de_jogo.linhas;linha++)
	{
		for (coluna=1;coluna&lt;=mesa_de_jogo.colunas;coluna++)
		{
			$("&lt;div class='carta'&gt;&lt;img&gt;&lt;/img&gt;&lt;/div&gt;").bind("click",function(){ mudarCarta(this);}).appendTo("#mesa-de-jogo");
		}
		$("#mesa-de-jogo").append("&lt;br&gt;");

	}
	novoJogo();

});</pre>
<p>Por onde começar? Bom, essa função de jQuery, simplesmente $( function () { coisas } ) é carregado assim que o DOM é carregado. Ou seja, esse é, essencialmente, o nosso Main().</p>
<p>Serão colocadas 8 cartas, em duas linhas e quatro colunas, como pode ser visto em mesa_de_jogo.linhas e mesa_de_jogo.colunas. mesa_de_jogo é um objeto que eu criei, apenas para guardar esses dois valores de maneira significativa. Na primeira versão eu usei simplesmente as variáveis linhas e colunas e não faz diferença.</p>
<p>O primeiro for percorre as linhas, e o segundo for percorre as colunas, colocando cada carta na página. O código responsável por adicionar a carta à página é este:</p>
<pre class="brush:js">$("&lt;div class='carta'&gt;&lt;img&gt;&lt;/img&gt;&lt;/div&gt;").bind("click",function(){ mudarCarta(this);}).appendTo("#mesa-de-jogo");</pre>
<p>A cifra é o &#8220;seletor&#8221;, a grande ferramente de jQuery: permite que eu faça inúmeras coisas com os objetos do DOM de maneira muito mais prática que usando Javascript puro.</p>
<h1>DOM?</h1>
<p>Eu suponho que muitos aqui já saibam o que é DOM, mas vamos a uma explicação simples para aqueles que não sabem: trata-se de uma &#8220;árvore&#8221; de elementos. Uma página HTML é montada como se fosse uma árvore, cujo tronco principal é o &#8220;html&#8221;, os dois primeiros grandes galhos são &#8220;head&#8221; e &#8220;body&#8221; e daí vão se acrescentando mais galhos e folhas a esta árvore. Por exemplo, a árvore deste nosso jogo poderia ser representada assim (só coloquei os ramos referentes à parte de carta e mesa de jogo, para simplificar):</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1156" title="arvore" src="http://diskchocolate.com/blog/wp-content/uploads/2010/05/arvore.png" alt="árvore DOM" width="486" height="461" /></p>
<p style="text-align: center;">
<p style="text-align: left;">Eu até tentei desenhar como uma árvore, para ficar mais fácil de visualizar <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Mexer com HTML/CSS/JS basicamente envolve mexer bastante com essa árvore, mexendo nos ramos, adicionando folhas, etc. No caso, com</p>
<pre class="brush:js">$("&lt;div class='carta'&gt;&lt;img&gt;&lt;/img&gt;&lt;/div&gt;")</pre>
<p style="text-align: left;"><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; font-size: small;"><span style="line-height: 18px; white-space: pre;"><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: small;"><span style="line-height: 19px; white-space: normal;">Nós criamos um ramo, com o elemento carta, e que possui uma folha chamada img. Ao colocar isso dentro de $() nós podemos realizar operações sobre esse ramo mais facilmente.</span></span></span></span></p>
<p style="text-align: left;"><span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; font-size: small;"><span style="line-height: 18px; white-space: pre;"><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; font-size: small;"><span style="line-height: 19px; white-space: normal;">Por exemplo, após a linha acima nós temos a seguinte função:</span></span></span></span></p>
<pre class="brush:js">.bind("click",function(){ mudarCarta(this);})</pre>
<p>O que isso faz? Basicamente faz uma conexão com o ramo. Bind funciona com .bind(evento, função). Neste caso, estamos dizendo que ao ocorrer o evento &#8220;click&#8221; sobre o ramo supracitado deve ser chamada a função mudarCarta(). &#8220;this&#8221; é passado como parâmetro da função, para que a função saiba qual carta foi clicada.</p>
<p>(Veremos essa função mudarCarta() mais tarde, calma, mas já é possível imaginar o que ela faz, não?).</p>
<p>Ou seja, já temos um ramo &#8220;carta&#8221;, que possui um evento de clique atrelado a ele. Porém, este ramo AINDA não está na árvore do documento. Ela ainda precisa ser anexada a algum elemento já existente da árvore do documento. No caso, nós queremos anexar esse ramo ao ramo &#8220;mesa-de-jogo. e a função .appendTo(elemento) faz isso. Agora, é possível entender totalmente o que faz a linha principal dessa parte do programa, não?</p>
<pre>$("&lt;div class='carta'&gt;&lt;img&gt;&lt;/img&gt;&lt;/div&gt;").bind("click",function(){ mudarCarta(this);}).appendTo("#mesa-de-jogo");</pre>
<p>Feito isso você irá perceber que por enquanto são apenas elementos&#8230; embora exista o elemento img, ele não tem o atributo &#8220;src&#8221;, ou seja, ele não está ligado a nenhuma imagem. Isso e outras inicializações são feitas na função novoJogo(), que é chamada depois que os dois laços for são executados e todas as cartas já estão na árvore do documento:</p>
<pre class="brush:js">function novoJogo(){
	cartaLadoB.sort(function() {return 0.5 - Math.random()});
	$(".carta img").attr("src","images/carta.png");
	pares_restantes = pares;
	tentativas = 0;
	$("#tentativas").text(tentativas);
}</pre>
<p>O que essa função faz? Basicamente, quatro coisas:</p>
<ol>
<li>Embaralha as cartas</li>
<li>Define a imagem do fundo da carta</li>
<li>Diz quantos pares faltam para terminar o jogo</li>
<li>Reseta o número de tentativas</li>
</ol>
<h1>Embaralhando as Cartas</h1>
<p>Essa parte de embaralhar as cartas é feita com uma única linha:</p>
<pre class="brush:js">cartaLadoB.sort(function() {return 0.5 - Math.random()});</pre>
<p>cartaLadoB é um array que eu define com o nome das imagens dos pares. No caso, no início do documento javascript eu a declaro da seguinte forma:</p>
<pre class="brush:js">var cartaLadoB =
		["bear2-card.png","bear-card.png","leaf-card.png","leaf2-card.png",
		 "bear2-card.png","bear-card.png","leaf-card.png","leaf2-card.png"];</pre>
<p>A função sort é a responsável por &#8220;embaralhar&#8221; esse array. Se eu simplesmente chamada cartaLadoB.sort() esse array seria ordenado em ordem alfabética, mas .sort() é uma função de JavaScript MUITO BACANINHA que te permite dizer COMO você quer organizar o array.</p>
<p>Basicamente, você passa uma função que pode retornar &lt; 0, 0 ou &gt; 0, e  o sort organiza os elementos de acordo. Se você comparar os elementos a e b e retornar &lt; 0, a função irá definir que a deve vir antes de b, se &gt; 0, b deve vir antes de a, e se for 0 eles são considerados iguais e suas posições não mudam. Sabendo disso, é possível fazer uma infinidade de funções para fazer os mais diferentes tipos de ordenamento (como fazer uma função para ordenar pelo primeiro nome de um objeto Pessoa, por exemplo).</p>
<p>Para fazer um ordenamento aleatório, nós temos a seguinte função: function () { return 0.5 &#8211; Math.random() }.</p>
<p>Math.random() retorna um número aleatório entre 0.0 e quase 1 (não chegando a, exatamente, 1). Desta maneira, há uma chance de 50% deste número ser maior do que 0.5 e 50% de ser menor do que 0.5. Ao fazer o retorno de 0.5 &#8211; Math.random() há, portanto, uma chance de 50% do resultado ser maior do que 0, e 50% deste número ser menor do que 0. Ou seja, a ordenação de cada dois elementos é definida aleatoriamente, que é o que nós queríamos <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h1>Alterando um atributo da carta</h1>
<p><a href="http://diskchocolate.com/blog/wp-content/uploads/2010/05/carta.png"><img class="aligncenter size-full wp-image-1163" title="carta" src="http://diskchocolate.com/blog/wp-content/uploads/2010/05/carta.png" alt="carta" width="150" height="200" /></a></p>
<p>Nós já vimos como criar uma &#8220;folha&#8221; da árvore, mas muito de Javascript não consiste em criar esta folha e colocá-la no documento, mas também modificá-la conforme necessário.</p>
<p>Por exemplo, ao criarmos o elemento &#8220;img&#8221; nós não definimos seu atributo src, e agora? Para isso, nós podemos alterar atributos de qualquer ramo a qualquer hora, selecionando-o conforme necessário. E melhor, podemos mexer um atributo para todos os elementos de um determinado tipo, se for necessário. Por exemplo:</p>
<pre>$(".carta img").attr("src","images/carta.png");</pre>
<p>Aqui o que nós estamos selecionando são os elementos img que estejam sob o ramo &#8220;carta&#8221;. TODOS os elementos, veja que não há nenhuma restrição como first, last ou qualquer outra coisa. Então, nós podemos mexer em todos os elementos de uma só vez. E então nós usamos a função .attr(atributo,valor_do_atributo) para modificar um atributo de todos esses elementos. No caso, nós estamos definindo que o atributo src deve receber o valor &#8220;images/carta.png&#8221; que é o endereço do fundo da carta.</p>
<p>Aqui cabe uma ressalva: eu recomendo NÃO fazer como eu fiz e colocar esse endereço hardcoded como eu fiz. Crie uma variável e coloque o valor dela conforme for necessário, e use esta variável aqui. É que mais tarde você vai fazer uma comparação com este endereço e eu perdi algum tempo até perceber que o erro que eu estava tendo se devia ao fato de ter colocado um espaço a mais em um dos endereços da imagem. Vivendo e aprendendo :p</p>
<p>Os outras linhas se referem a definir que o número de pares que devem ser encontrados para terminar o jogo é o número total de pares do jogo, e depois se atribui que o número de tentativas é zero, e se atribui esse valor ao ramo &#8220;tentativas&#8221; da árvore. Pronto, temos um novo jogo.</p>
<p>Exceto que, por enquanto, ele não faz nada além de mostrar algumas cartas bonitinhas na tela. E agora?</p>
<h1>A função mudarCarta()</h1>
<p>Esta é a função responsável por mudar a carta quando ela é clicada:</p>
<pre class="brush:js">function mudarCarta(elemento){
	if ( ($(elemento).find("img").attr("src") == "images/carta.png" ) &amp;&amp; (wait == 0))
	{
		$(elemento).find("img").attr("src", "images/" + cartaLadoB[$(".carta").index(elemento)]);
		if (!is_segunda_carta) {
			primeira_carta = elemento;
			is_segunda_carta = true;
		} else {
			segunda_carta = elemento;
			wait = 1;
			setTimeout(verificaPar,700);
		}
	}
}</pre>
<p>E aí, deu para perceber o que ela faz? <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Elemento é a carta que foi clicada, que é passada como parâmetro desta função. A primeira coisa que é verificada é se é o fundo que está aparecendo, para evitar que alguém fique clicando numa imagem que já foi virada, e também verifica se o jogo não está esperando (wait == 0). Esperando pelo que? Calma, já vamos ver.</p>
<p>Se o jogo não estiver esperando e o jogador tiver clicado numa carta que ainda não foi virada, então é verificado qual a ordem da carta que foi clicada, para alterar para a imagem de acordo com que foi definido no array cartaLadoB. Novamente, vamos analisar esta linha de código com calma:</p>
<pre>$(elemento).find("img").attr("src", "images/" + cartaLadoB[$(".carta").index(elemento)]);</pre>
<p>Primeiro, nós pegamos o elemento e obtemos sua folha &#8220;img&#8221;, para então alterar seu atributo src. Ou seja, até <em>$(elemento).find(&#8220;img&#8221;).attr(&#8220;src&#8221;, </em>&#8230; está tranquilo entender, de acordo com que nós já vimos. É importante notar que .find() também é um seletor, logo, ele irá retornar todos os elementos que estejam de acordo com os parâmetros. No caso, teremos um único elemento img sendo retornado pois cada carta possui um único ramo chamado img.</p>
<p>E a imagem é definida de acordo com o array cartaLado B, de acordo com &#8220;images/&#8221; + cartaLadoB[$(".carta").index(elemento)]. O índice desejado do array é o índice da carta na lista de cartas da página. Mas como saber isso? Para isso, novamente usaremos seletores: primeiro selecionamos todos os elementos de classe carta com $(&#8220;.carta&#8221;) e então verificamos, nesta seleção, qual é o índice desse elemento que foi clicado com index(element0). Pronto, temos o índice correto da imagem a ser exibida <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Feito isso, temos que verificar se esta foi a primeira carta clicada, ou seja, apenas deixe a carta exposta ali, ou se já é a segunda carta, para verificarmos o par e desvirar as duas cartas se for necessário.  Isso é feito com o if (!is_segunda_carta) (que também poderia ser um if (is_primeira_carta), se você preferir :p), sendo que is_segunda_carta é uma variável booleana definida no início do documento javascript como false.</p>
<p>Se for a primeira carta, nós armazenamos esta carta como primeira_carta, para depois fazermos a comparação e, se for o caso, desvirá-la, e então mudamos a variável is_segunda_carta para que a próxima carta verifique o par conforme necessário.</p>
<p>Se já for a segunda carta, nós armazenamos essa carta na variável segunda_carta, definimos que devemos entrar em modo de espera (falei que iria explicar, não falei? :]) e chamamos a função verificaPar depois de 700 milissegundos. A função setTimeout faz justamente isso: chama uma determinada função, depois de um tempo pré-determinado. Algumas observações importantes sobre a função setTimeout, essa função malandra:</p>
<ol>
<li>você deve passar o NOME da função a ser chamada, e não invocá-la, por isso colocamos verificaPar e não verificaPar(). Se for necessário passar parâmetros, crie uma função anônima ali mesmo, com function() { funcaoQueVoceQuerChamar(parametros,que,voce,quiser);}.</li>
<li>setTimeout não PÁRA o funcionamento ali. Ele joga a função para ser executada depois e continua executando as instruções do código. No caso, eu não coloquei nada depois de setTimeout mas, se existisse algo, esse algo seria executado antes de verificaPar ser executado.</li>
</ol>
<p>Por causa desse tempo de espera eu criei a tal variável wait &#8211; ela está ali só para o jogador não ficar clicando nas cartas nesse tempo de espera. E a função é chamada só depois de 700 milissegundos para dar tempo do jogador ver a carta antes que ela seja desvirada.</p>
<h1>A função verificaPar()</h1>
<p>Estamos quase acabando, amiguinhos <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Mas ainda falta o mais importante para o jogo funcionar: ele já vira as cartas, e tudo o mais, mas ainda não consegue verificar se você acertou o par ou não. E é aí que entra a última função desse joguinho, a verificaPar <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush:js">function verificaPar(){
	is_segunda_carta = false;
	if ( $(segunda_carta).find("img").attr("src") == $(primeira_carta).find("img").attr("src"))
	{
		pares_restantes--;
	} else {
		$(segunda_carta).find("img").attr("src","images/carta.png");
		$(primeira_carta).find("img").attr("src","images/carta.png");
	}
	tentativas++;
	$("#tentativas").text(tentativas);
        wait = 0;
        if (pares_restantes == 0) {
		novoJogo();
	}
}</pre>
<p>Eu acho que aqui, mesmo que no início você não soubesse nada de jQuery e Javascript, você já consegue entender o que esse código faz, não? <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Mas, claro, como eu gosto de explicar as coisas (sério, eu ainda não sei se é uma coisa boa eu explicar tudo nos mínimos detalhes em todo tutorial&#8230; eu tento deixá-los claros e fáceis de ler, estou conseguindo amiguinhos? Ou só estou conseguindo fazer tutoriais enormes? :p), vamos olhar o que esse código está fazendo para não restar nenhuma dúvida.</p>
<p>Primeiro, nós definimos que a próxima carta não será uma segunda carta, isto é, is_segunda_carta volta a ser false. Depois, verificamos se a imagem mostrada na primeira e na segunda cartas são iguais.</p>
<p>Se forem iguais, é um a menos que o jogador deve encontrar.</p>
<p>Se fore diferentes, desvira as duas cartas, isto é, muda a imagem de volta para o fundo da carta.</p>
<p>No caso aumenta-se o número de tentativas e atualiza o número de tentativas mostrado na página no ramo &#8220;tentativas&#8221;.</p>
<p>Wait é definido como zero, isto é, o jogador pode voltar a clicar nas cartas.</p>
<p>Se não houverem mais pares a serem encontrados, isto é, pares_restantes for igual a zero, o jogo terminou e, portanto, deve-se iniciar um novo jogo.</p>
<p>E, é isso <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Só para verificar, eu não cheguei a colocar explicitamente todas as variáveis que eu declarei no início de jogo.js, então aqui vão todas elas:</p>
<pre class="brush:js">var pares = 4;
var cartaLadoB =
		["bear2-card.png","bear-card.png","leaf-card.png","leaf2-card.png",
		 "bear2-card.png","bear-card.png","leaf-card.png","leaf2-card.png"];
var pares_restantes;
var is_segunda_carta = false;
var primeira_carta;
var segunda_carta;
var wait = 0;
var tentativas;
var mesa_de_jogo = new Object;</pre>
<p>Lembrando que elas devem ser declaradas no início do documento (&#8230;eu acho).</p>
<p>E, bom, é isso, agora vocês tem um super hiper mega incrível demais estupendo fenomenal joguinho de memória, feito por vocês mesmos <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  UAU EIN <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Aliás, sacanagem da semana foi eu estar toda empolgada com meu joguinho da memória e o Google me AVACALHAR com o joguinho do Pac-man feito em Javascript. Vou te contar, viu :p</p>
<p>Mas estou com o código salvo aqui <a href="http://github.com/macek/google_pacman">(encontrei aqui)</a> e vou estudá-lo com calma&#8230; não parece complexo, mas está bastante longo e foram usado algo para diminuir o tamanho do arquivo, acho, e várias variáveis estão com uma única letra como identificador, so, yeah.</p>
]]></content:encoded>
			<wfw:commentRss>http://diskchocolate.com/blog/2010/05/28/tutorial-fazendo-um-jogo-de-memoria-em-javascript-parte-basica/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Meu primeiro jogo em&#8230; JavaScript?</title>
		<link>http://diskchocolate.com/blog/2010/05/17/meu-primeiro-jogo-em-javascript/</link>
		<comments>http://diskchocolate.com/blog/2010/05/17/meu-primeiro-jogo-em-javascript/#comments</comments>
		<pubDate>Mon, 17 May 2010 14:54:39 +0000</pubDate>
		<dc:creator>Cindy Dalfovo</dc:creator>
				<category><![CDATA[Gamedev]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[videogame]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[inkscape]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jogo-memoria]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[meu-jogo]]></category>
		<category><![CDATA[projeto]]></category>
		<category><![CDATA[projetos]]></category>

		<guid isPermaLink="false">http://diskchocolate.com/blog/?p=1132</guid>
		<description><![CDATA[Oi Quem me acompanha no meu twitter já deve ter percebido que eu estava fazendo um joguinho em JavaScript (algumas pessoas até me ajudaram com algumas dúvidas, meus amiguinhos do twitter são demais 8D). Agora eu terminei uma primeira versão e estou oferecendo aqui para vocês testarem. Conheçam o meu hiper, mega, suuuuper&#8230; jogo de [...]]]></description>
			<content:encoded><![CDATA[<p>Oi <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Quem me acompanha no<a href="http://www.twitter.com/princessmiwi"> meu twitter</a> já deve ter percebido que eu estava fazendo um joguinho em JavaScript (algumas pessoas até me ajudaram com algumas dúvidas, meus amiguinhos do twitter são demais 8D). Agora eu terminei uma primeira versão e estou oferecendo aqui para vocês testarem.</p>
<p>Conheçam o meu hiper, mega, suuuuper&#8230; jogo de memória. Feito em JavaScript. Com gráficos feitos por mim no<a href="http://www.inkscape.org/"> Inkscape</a>.</p>
<p style="text-align: center;"><a href="http://diskchocolate.com/projetos/jogo_memoria/"><img class="aligncenter size-full wp-image-1133" title="jogo_memoria" src="http://diskchocolate.com/blog/wp-content/uploads/2010/05/jogo_memoria.png" alt="Jogo da memória" width="449" height="349" /></a></p>
<p style="text-align: left;">A questão é que eu me diverti bastante fazendo esse joguinho, então talvez eu faça mais alguns em JavaScript <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  O legal é que eu fiz ele em um único fim de semana&#8230; claro, se eu já conhecesse mais de JavaScript e JQuery eu provavelmente faria bem mais rápido, e se eu não fosse tão enrolada também&#8230; (gastei algumas horas escolhendo a IDE e deixando ela mais personalizada para o meu gosto&#8230; :p). Mas enfim. Para alguém com <a href="http://www.tdah.org.br/oque01.php">TDAH</a> é muito revigorante conseguir terminar alguma coisa, então eu estou bem feliz <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: left;">Eu vou tentar colocar mais alguns detalhes nele (como número de tentativas e talvez a opção de escolher quantos pares terá o jogo), mas o jogo em si está pronto e vocês podem testá-lo<a href="http://diskchocolate.com/projetos/jogo_memoria/"> aqui</a> ou clicando na imagem acima.</p>
<p style="text-align: left;">Eu vou fazer um post explicando como eu fiz o jogo, para aqueles que também tiverem algum interesse em jogos feitos em Javascript/jQuery, mas estou colocando o jogo para vocês jogarem e me avisarem se ainda tem algum bug e tal <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  e se tiverem alguma dúvida, que aí eu já lembro de explicar no tutorial. De qualquer maneira, vocês já podem fuçar no jogo se quiserem, já que o código está disponível e você pode até mexer nele se tiver alguma ferramente de desenvolvimento web no seu browser.</p>
<p style="text-align: left;">(E sim, estou numa segunda-feira bem feliz por conta disso :] )</p>
]]></content:encoded>
			<wfw:commentRss>http://diskchocolate.com/blog/2010/05/17/meu-primeiro-jogo-em-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>[Quick] Durante o tutorial de emacs&#8230;</title>
		<link>http://diskchocolate.com/blog/2010/04/28/quick-durante-o-tutorial-de-emacs/</link>
		<comments>http://diskchocolate.com/blog/2010/04/28/quick-durante-o-tutorial-de-emacs/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 23:33:28 +0000</pubDate>
		<dc:creator>Cindy Dalfovo</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[vida pessoal]]></category>
		<category><![CDATA[ctrl-c]]></category>
		<category><![CDATA[ctrl-v]]></category>
		<category><![CDATA[emacs]]></category>
		<category><![CDATA[lips]]></category>
		<category><![CDATA[papo-de-bar]]></category>
		<category><![CDATA[yank]]></category>

		<guid isPermaLink="false">http://diskchocolate.com/blog/?p=1105</guid>
		<description><![CDATA[Li tanto que era interessante editar programas Lisp no emacs que eu resolvi tentar usá-lo. Atualmente estou no tutorial de comandos, e tentando encontrar lógicas nos atalhos. Mas estão tentando me enganar com o comando de colar. Como assim, é Ctrl+y por que o nome do comando é&#8230; yank? Yank? YAAANK? Imagino o diálogo. - [...]]]></description>
			<content:encoded><![CDATA[<p>Li tanto que era interessante editar programas Lisp no emacs que eu resolvi tentar usá-lo.</p>
<p>Atualmente estou no tutorial de comandos, e tentando encontrar lógicas nos atalhos.</p>
<p>Mas estão tentando me enganar com o comando de colar.</p>
<p>Como assim, é Ctrl+y por que o nome do comando é&#8230; yank? Yank? YAAANK?</p>
<p>Imagino o diálogo.</p>
<p style="padding-left: 30px;">- Ah, esqueci um comando importante!</p>
<p style="padding-left: 30px;">- Qual?</p>
<p style="padding-left: 30px;">- O Paste!</p>
<p style="padding-left: 30px;">- Simples, use o Ctrl+p&#8230;</p>
<p style="padding-left: 30px;">- Não dá, cara, não dá!</p>
<p style="padding-left: 30px;">-Ctrl-i para Insert?</p>
<p style="padding-left: 30px;">- Não cara, esse já foi!</p>
<p style="padding-left: 30px;">- Ctrl-d, para down, colocar para baixo o que tá na pilha do copy&#8230;</p>
<p style="padding-left: 30px;">- Não, não, esse também já foi!</p>
<p style="padding-left: 30px;">- &#8230; ô merda. Coloca Ctrl-y então.</p>
<p style="padding-left: 30px;">- Ctrl-y? Mas o que diabos começa com y?</p>
<p style="padding-left: 30px;">-&#8230; * e depois de alguns segundos de reflexão * Yank?</p>
<p style="padding-left: 30px;">- Isso, fechou! Valeu!</p>
<p><br class="spacer_" /></p>
<p>Because, really.</p>
]]></content:encoded>
			<wfw:commentRss>http://diskchocolate.com/blog/2010/04/28/quick-durante-o-tutorial-de-emacs/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>20 Anos Depois, Ainda Não Entendemos Reusabilidade</title>
		<link>http://diskchocolate.com/blog/2010/04/23/20-anos-depois-ainda-nao-entendemos-reusabilidade/</link>
		<comments>http://diskchocolate.com/blog/2010/04/23/20-anos-depois-ainda-nao-entendemos-reusabilidade/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 21:50:56 +0000</pubDate>
		<dc:creator>Cindy Dalfovo</dc:creator>
				<category><![CDATA[programação]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[vida pessoal]]></category>
		<category><![CDATA[devaneio]]></category>
		<category><![CDATA[divagando]]></category>
		<category><![CDATA[lisp]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://diskchocolate.com/blog/?p=1085</guid>
		<description><![CDATA[Eu tenho uma relação de amor e ódio com programação, e não estou exagerando: são poucas as coisas que me fazem ficar tanto tempo lendo um único texto, e também são poucas as coisas que já me fizeram passar tanta raiva e dizer &#8220;não, porra, não vou mais fazer isso&#8221;. O que eu demorei a [...]]]></description>
			<content:encoded><![CDATA[<p>Eu tenho uma relação de amor e ódio com programação, e não estou exagerando: são poucas as coisas que me fazem ficar tanto tempo lendo um único texto, e também são poucas as coisas que já me fizeram passar tanta raiva e dizer &#8220;não, porra, não vou mais fazer isso&#8221;.</p>
<p>O que eu demorei a perceber, e só estou realmente aprendendo agora, é que na verdade existe uma parte da área de programação que eu amo, sou apaixonada. É a parte com a qual eu sempre sonhei trabalhar. Francamente? Eu acho que é a parte com a qual todos da área sempre sonharam em trabalhar.</p>
<p>É aquela parte na qual você tem de pensar, planejar o que irá fazer para criar uma solução elegante, boa e compreensível. Escrever um belo algoritmo e testá-lo.<span style="font-size: medium;"><strong> <span style="font-size: small;">Juntar as peças de maneira lógica.</span></strong></span></p>
<p>Eu me lembro de quando estava aprendendo a programar, em Pascal, no ensino técnico &#8211; a felicidade que eu sentia em pensar em maneiras de calcular as simples coisas que eram pedidas. Aquele sentimento de triunfo ao fazer seu primeiro algoritmo com recurso &#8211; que deve ter sido algo como calcular fatorial, já que este é um exemplo clássico de recursão.</p>
<p>Pensei<span style="font-size: medium;"><strong> <span style="font-size: small;">&#8220;poxa, isso é realmente legal, será legal trabalhar com isso&#8221;.</span></strong></span></p>
<p><span id="more-1085"></span></p>
<h1><strong>Desilusões</strong></h1>
<p>Aí eu comecei a trabalhar, numa grande empresa de softwares de ERP para empresas &#8211; gerir informações de empresas, gerar folhas de relatório, de pagamentos&#8230; essas coisas. Mas aquilo&#8230; aquilo não era a programação. Programação para mim era planejamento, lógica &#8211; algo como, se a matemática diz &#8220;o que é&#8221;, a programação diz &#8220;como fazer&#8221;.</p>
<p>Não, não era aquilo que eu estava fazendo. Eu havia me tornado uma &#8220;code monkey&#8221;.<span style="font-size: small;"> </span><strong><span style="font-size: medium;"><span style="font-size: small;">O ponto mais baixo foi o dia no qual me falaram para abrir um documento, procurar ocorrências de uma string e substitui-la por </span><span style="font-size: small;">outra.</span></span></strong></p>
<p>Sério, leia a frase anterior de novo e me diga se você não morreu um pouquinho por dentro. A argumentação foi que eu deveria me acostumar com o fluxo de trabalho, como ler chamadas, realizá-las e fechá-las. <span style="font-size: small;"><strong>Burocracia, enfim.</strong></span></p>
<p>Eu pensei que fosse um caso isolado. Afinal, eu era recém-contratada, tinham me transferido para lá. Pensei que o problema fosse comigo, que talvez eu não gostasse de trabalhar com programação.</p>
<p>Mas, no fundo, eu ainda gostava da parte lógica, e a maneira que eu encontrei de tentar seguir essa parte foi fazer Engenharia de Controle e Automação. Afinal, juntava Informática com coisas como Eletrônica e Mecânica, então com um pouco de sorte eu nunca mais teria de ver um ERP na minha frente.</p>
<p>Avance alguns anos. Eu descobri que, francamente, não curto interação com Hardware.</p>
<p>Mas, pensando agora, talvez o meu problema não fosse com o Hardware, mas com o estado dele &#8211; era frustrante construir um mero circuito digital e ter de adivinhar se ele não estava funcionando por problemas do projeto ou se porque algum dos componentes estava queimado.</p>
<p>Comecei a fazer um projeto em Java e, por um tempo, as coisas até que fluiram. Entrei em um outro projeto e as coisas começaram a decair. Não que o projeto fosse ruim, longe disso, mas é que eu me vi tendo de aprender estranhas e místicas bibliotecas para fazer meu trabalho, <span style="font-size: medium;"><strong><span style="font-size: small;">e eu acabava passando a maior parte do meu tempo não mais tentando encontrar um bom algoritmo para resolver o meu problema, mas tentando descobrir porque diabos aquela biblioteca não estava fazendo o que eu queria</span>.</strong></span></p>
<p>Eu achava que isso se devia à minha inexperiência &#8211; afinal, eu era uma programadora iniciante, e havia uma série de conceitos com as quais eu não estava perfeitamente familiarizada.</p>
<p>Esse ano algumas coisas aconteceram e me fizeram rever minha posição &#8211; talvez o problema não esteja APENAS comigo.</p>
<h1><strong>Reusabilidade Do Que?</strong></h1>
<p>Eu pensava OK, eu tenho apenas uns conceitos básicos sobre Spring/Struts, deve ser por isso que minha aplicação vive quebrando. Eu já fiz alguns programas com Hibernate, mas agora isso não está funcionando e&#8230;</p>
<p>Vocês já programaram com alguma dessas bibliotecas/frameworks? Elas foram criadas para facilitar o seu trabalho, para manter um código mais claro e fácil de manter.</p>
<p>Fácil de manter se você fizer todos os místicos procedimentos de geração, de manutenção, de modificação, escondidos em cerca de vinte arquivos e definidos nas páginas 700 a 735 do Pequeno Manual do Desenvolver daquela framework. Tudo funciona muito bem, até você dar um passo em falso &#8211; e por passo em falso eu digo, mudar um parâmetro em um dos vinte arquivos de configuração, um método ali, ou até mesmo a ordem que você resolveu compilar/gerar seu código. E, quando você dá esse passo em falso, você sabe o que acontece?</p>
<p><span style="font-size: small;"><strong>Meu amigo, A SUA APLICAÇÃO VAI PARA O INFERNO.</strong></span></p>
<p>Já aconteceu de eu olhar ara uma aplicação que não está funcionando e ficar me perguntando qual parâmetro estava errado. Às vezes era uma linha, uma mísera linha escondida no fundo de um dos milhares de arquivos daquela aplicação. Eu acabei fazendo o escambau naquela aplicação porque eu não conseguia entender como fazer uma pequena modificação em um dos módulos. Era uma modificação pequena, que não deveria ter levado tanto tempo para ser feito. Boa parte do tempo eu gastei me estressando, lendo e relendo documentação, wiki e tentando entender o que eu estava fazendo de errado.</p>
<p>Só agora eu começo a pensar que talvez eles estivessem errados. <span style="font-size: small;"><strong>Eu queria fazer uma coisa simples, porque estava sendo tão difícil?</strong></span></p>
<p>Ao mesmo tempo, porque ERP ainda são tão complicados? Eu entendo que eles sejam complexos, mas há quantos anos eles são desenvolvidos? Não deveria ser algo mais simples de manter hoje em dia? Certamente depois de um tempo 90~95% das funcionalidades de um ERP deveriam ser bem conhecidas e triviais, não?</p>
<p>Digo o mesmo sobre base de dados: quantos milhares de programas não envolvem alguma variação de manipulação de dados? Veja os dados, insira novos dados, delete dados, eventualmente visualize um relatório. A complexidade deveria estar toda em definir um bom modelo dos dados, não? E realizar alguns eventuais ajustes. Ainda assim, por isso ainda é tão complicado de ser feito? Por que algo que se tornou tão trivial ainda possui implementações tão&#8230; não-triviais?</p>
<p>Você pode argumentar, poxa, até em Java isso é rápido, se você for no Netbeans, você cria visualizações simples a partir de uma base de dados em questão de cinco minutos&#8230; com gerados de códigos.</p>
<p>Sim, claro, ao invés de fazer você mesmo o trabalho sujo, você manda a IDE fazer a porquice por você. E adivinha quem vai ter de fazer as modificações e dar manutenção no código depois? Não será a IDE, eu garanto.</p>
<p>Ah, a IDE tem várias ferramentas de teste, eu é que sou burra de não ter aprendido a usar isso tão bem quanto deveria.</p>
<p>Claro, ao invés de você mesmo sair cutucando o programa em &#8220;tentativa e erro&#8221;, mande a IDE fazer isso por você.</p>
<p>Gente, isso não são soluções. <span style="font-size: small;"><strong>São bandaids criados para esconder um problema maior: a maioria das bibliotecas é uma droga</strong>.</span> Prova disso é a quantidade de geradores de código que acompanham as IDEs mais modernas: é claro que existem certas tarefas um tanto quanto repetitivas, mas certamente criar uma aplicação base não deveria ser algo tão enrolado?</p>
<p>Certamente o que nós queríamos com reusabilidade não era &#8220;ah, eu escrevi 100 linhas e o IDE escreveu 1000&#8243;, ou &#8220;aprenda essas trocentas bibliotecas para fazer um belo Hello World&#8221;?</p>
<h1><strong>O Inferno Está Cheio de&#8230;</strong></h1>
<p>É claro que a idéia por trás de uma solução como Hibernate é interessante. Eu já desenvolvi um pequeno projeto com Hibernate e, tendo trabalhado com SQL puro antes, é difícil não reconhecer as vantages que uma solução como essa trouxe. Até certo ponto, quando eu falo que a maioria das bibliotecas é uma droga, não estou me referindo a algo como Hibernate (até porque Hibernate é uma framework, mas, enfim).</p>
<p>OK, certamente muitas bibliotecas/frameworks resolvem muitos problemas, e muitas delas representaram em bons ganhos de produtividade. Sob esse ponto de vista, nossa, as bibliotecas/frameworks são excelentes.</p>
<p>O maior problema é&#8230; bom, um dos maiores problemas é a gestão de complexidade. E o pior: <strong><span style="font-size: small;">na maior parte das vezes, existem boas técnicas para ajudar na gestão de complexidade, algumas conhecidas há mais de 20 anos, mas que muitos desenvolvedores insistem em ignorar!</span></strong></p>
<p>Digamos que você tenha uma linguagem bem simples, na qual você queira criar&#8230; um círculo. Então você cria uma simples lista, criada assim, por exemplo:</p>
<p style="padding-left: 30px;"><em>c = Círculo(x,y,raio)</em></p>
<p>E pronto, c é o nosso círculo, com coordenadas e um raio. Simples, não? Aí você pensa &#8220;sou um gênio, vou transformar isso numa biblioteca&#8221; (para fins de exposição, imaginem que foi criado algo um pouco mais complexo).</p>
<p>E, poxa, é tão simples, não é mesmo? Três simples parâmetros, e você tem um círculo, será um sucesso.</p>
<p>Aí o fulano vai usar sua biblioteca e pensa &#8220;poxa, legal, vou criar um círculo&#8221;:</p>
<p style="padding-left: 30px;"><em>c = Círculo(raio)</em></p>
<p>Afinal, ele só quer definir um círculo, sem se importar com a sua posição. Esse exemplo pode parecer ridículo, mas vocês não imaginam quantas bibliotecas são EXTREMAMENTE RIGÍDAS (ou, infelizmente, imaginam por já terem se deparado com bibliotecas assim&#8230;). Mesmo em um caso assim, no qual os parâmetros x e y poderiam ser considerados opcionais, restando apenas o parâmetro obrigatório raio. Ou ainda, poderia ser possível criar um Círculo sem parâmetro algum, para alterar seus parâmetros mais tarde. Parece tão simples, e pode ser uma solução perfeitamente lógica para o desenvolvedor da outra aplicação, mas ele terá de fazer algum malabarismo como</p>
<p style="padding-left: 30px;"><em>c = Círculo (0,0,10) </em></p>
<p>Ao invés de</p>
<p style="padding-left: 30px;"><em>c = Círculo (10)</em></p>
<p>Simplesmente porque a biblioteca o obrigava a usar todos os parâmetros, mesmo quando isso não fazia sentido. Claro, nós estamos falando de algo simples como um círculo, e qualquer um que olhe para Círculo(0,0,10) poderá imaginar que se trata de um círculo de raio 10 na origem, mas na maior parte dos casos práticos não é algo tão óbvio.</p>
<p><strong><span style="font-size: small;">É basicamente pegar toda a liberdade que uma linguagem de programação te dá e resolver limitá-la para funcionar apenas da maneira que os desenvolvedores da biblioteca imaginaram</span></strong>. Olhando por esse lado, eu nem sei como tantos militantes do software livre, da liberdade, podem aceitar certas frameworks e bibliotecas com tanto orgulho.</p>
<p>E, até certo ponto, isso não é tão surpreendente. Existem cadeiras em Ciências da Computação sobre como escrever boas bibliotecas? Eu imagino que existam bons livros, mas eles não costumam ser citados. Eu costumo ler sobre programação das mais diversas fontes, e diversos dos meus amigos são programadores, mas eu não costumo ler um artigo sobre a mais recente técnica para desenvolver uma boa biblioteca, e nem meus amigos costumam falar sobre o excelente livro de Desenvolvimento Avançado de Biblioteca que eles leram.</p>
<p>Então eu tenho motivos para desconfiar que as pessoas que estão desenvolvendo essas ferramentas também não tem um conhecimento tão aprofundado sobre desenvolvimento de bibliotecas quanto deveriam ter.</p>
<h1>Biblioteca = Reusabilidade, só?</h1>
<p>Eu imagino que deve ter gente pensando &#8220;O que ela está falando? Que coisa idiota, é claro que se ensina a escrever bibliotecas, só que sem esse nome &#8211; se ensina reusabilidade, orientação a objetos com fraco acoplamento&#8230;&#8221;</p>
<p>Sou obrigada a discordar. Tudo isso é NECESSÁRIO para escrever uma biblioteca &#8211; afinal, uma biblioteca deve ser um bom software antes de mais nada, certo?</p>
<p><strong><span style="font-size: small;">Mas não é SUFICIENTE.</span></strong></p>
<p>Digamos que você tenha escrito a sua biblioteca círculo para uso interno na sua empresa, e tudo funciona muito bem porque ela se aplica exatamente ao que você deseja.</p>
<p>E você a libera, mesmo com aquelas limitações, chamando-as de boas práticas.</p>
<p><strong><span style="font-size: small;">Sabe o que é uma boa prática? Consistência. </span></strong>E pode ser um pouco difícil ter consistência se você estiver usando diversas bibliotecas, e cada uma te obrigando a seguir o que ela considera &#8220;boas práticas&#8221;.</p>
<p>Além disso, muitas bibliotecas e frameworks são terríveis no quesito gestão de complexidade. Você acaba tendo a impressão de que quem usa a biblioteca deve seguir a mesma escola de pensamento que o desenvolvedor, e deve ter um conhecimento tão profundo quanto o desenvolvedor se quiser fazer algo que fuja um pouco do escopo pretendido.</p>
<p>Sabe porque as bibliotecas incluídas na maior parte das linguagens não costuma ter esse tipo de problema? Uma das razões é que elas são escritas por pessoas realmente experientes, e a outra é que elas possuem funções mínimas e bem delineadas. Uma função vai fazer uma coisa, e você irá utilizá-la para ela fazer exatamente o que você precisa. Ao contrário de muitas bibliotecas e frameworks megalomanícos que querem funções para fazer tudo de uma vez e AI de você se quiser algo diferente.</p>
<p>Existem técnicas que ajudam nesse processo? Existem, inúmeras! Fraco acoplamento, <a href="http://en.wikipedia.org/wiki/Law_of_Demeter">Lei de Demeter</a>, <a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself">Don&#8217;t Repeat Youself</a>&#8230; só para citar algumas que eu vi nos últimos dias.</p>
<p>Mas, francamente, porque desenvolver software tem se tornado tão complicado? Existem centenas de razões para isso, algumas que mal cheguei a citar nesse artigo (como as fábricas de software e seus macacos, que simplesmente acham que desenvolver software é juntar um monte de coisas e tentar juntá-las até ter algo que pode ser apresentado ao cliente) mas que costumam ser citadas na maior parte dos artigos.<span style="font-size: small;"><strong> Eu quis atacar um pouco o outro lado hoje, o fato de que poderiamos não apenas ter culpados do  lado do usuário, mas também dos desenvolvedores &#8211; que práticas hoje tão bem aceitas talvez não sejam tão eficientes quanto deveriam.</strong></span></p>
<p>Mas claro, esses são apenas os devaneios de uma jovem programadora, e eu deveria até me desculpar por ter escrito um devaneio tão longo, mas eu precisava dizer essas coisas. Quem sabe vocês também não  se sintam assim, não é mesmo? Eu mesma acabei decidindo escrever esse post depois de ler o artigo <a href="http://reprog.wordpress.com/2010/03/03/whatever-happened-to-programming/">&#8220;Whatever Happned to Programming?&#8221;</a> com quase o mesmo sentimento, mas de alguém muito mais experiente do que eu.</p>
<p>Então eu talvez não seja a única, e é isso o que me dá esperança de voltar a trabalhar na área de programação.</p>
<p>Mas antes disso, muito estudo <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  O Dive Into Python e o SICP não se lerão sozinhos&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://diskchocolate.com/blog/2010/04/23/20-anos-depois-ainda-nao-entendemos-reusabilidade/feed/</wfw:commentRss>
		<slash:comments>53</slash:comments>
		</item>
		<item>
		<title>Todo Software Tem Seu Preço</title>
		<link>http://diskchocolate.com/blog/2009/03/18/todo-software-tem-seu-preco/</link>
		<comments>http://diskchocolate.com/blog/2009/03/18/todo-software-tem-seu-preco/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 02:56:32 +0000</pubDate>
		<dc:creator>Cindy Dalfovo</dc:creator>
				<category><![CDATA[featured]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[feature]]></category>

		<guid isPermaLink="false">http://www.diskchocolate.com/blog/?p=679</guid>
		<description><![CDATA[N&#227;o existe algo como um software completamente &#34;gratuito&#34;. Chama-se de gratuito aquele programa que n&#227;o cobra de seu usu&#225;rio final nenhum tipo de taxa, mas &#233; &#243;bvio que ele possui custos &#8211; para seus desenvolvedores, que gastaram tempo nele e, em alguns casos, para a empresa que financia o projeto. Algumas vezes temos &#8211; e [...]]]></description>
			<content:encoded><![CDATA[<p>N&atilde;o existe algo como um software completamente &quot;gratuito&quot;. Chama-se de gratuito aquele programa que n&atilde;o cobra de seu usu&aacute;rio final nenhum tipo de taxa, mas &eacute; &oacute;bvio que ele possui custos &#8211; para seus desenvolvedores, que gastaram tempo nele e, em alguns casos, para a empresa que financia o projeto. Algumas vezes temos &#8211; e mais comumente em projetos web &#8211; projetos &quot;freemium&quot;, que n&atilde;o cobram nada por funcionalidades b&aacute;sicas e se sustentam pelos &quot;add-ons&quot;, suporte especial, etc.</p>
<p>At&eacute; aqui, digo apenas o &oacute;bvio &#8211; mas o &oacute;bvio que &eacute; muitas vezes esquecido e distorcido nas mais diversas mat&eacute;rias sobre &quot;software livre&quot;. Digo isso apenas para lev&aacute;-los ao pr&oacute;ximo passo: software livre n&atilde;o &eacute; o comunismo do mundo dos computadores. N&atilde;o &eacute; o nivelamento atrav&eacute;s do &quot;todos devem ter o que todos podem ter&quot;. H&Aacute; uma ideologia, uma filosofia, muito forte na comunidade do software livre, e que &eacute; interpretada das mais diversas maneiras por diferentes grupos. Assim como existe uma ideologia muito forte no mundo do software fechado, mas que n&atilde;o chama tanto a aten&ccedil;&atilde;o por n&atilde;o ser t&atilde;o ut&oacute;pica.</p>
<p>N&atilde;o &eacute; apenas o &quot;software livre&quot;, mas todo o movimento que vem ganhando for&ccedil;a no campo do software: &eacute; a democracia do software. Software livre implica em liberdade de escolha, de modifica&ccedil;&otilde;es. Os adeptos do software livre adoram falar em liberdade, mas muitas vezes se esquecem que essa liberdade pode implicar em uma escolha diferente da sua &#8211; uma pessoa que escolhe Windows pode ser t&atilde;o livre quanto uma que escolhe Linux. A diferen&ccedil;a est&aacute; na consci&ecirc;ncia da escolha: enquanto as pessoas usarem Windows simplesmente porque &eacute; o que veio na m&aacute;quina, a &uacute;nica liberdade que elas estar&atilde;o usando &eacute; a de se acomodarem no mais simples.</p>
<p>O que as pessoas ignoram &#8211; ou escolhem ignorar &#8211; quando travam infind&aacute;veis argumentos de &quot;software de c&oacute;digo fechado &eacute; ruim!&quot;, &quot;windows &eacute; melhor que linux!&quot; e etc, &eacute; que nenhuma dessas quest&otilde;es &eacute; t&atilde;o relevante quanto a democracia propiciada pelo software livre. E nem s&oacute; pelo software livre, mas por softwares gratuitos, de baixo custo, pelo software &quot;on the cloud&quot;.</p>
<p>H&aacute; cerca de 20 anos, software era algo caro, e com pouquissimas op&ccedil;&otilde;es de escolha. Muitos necessidades n&atilde;o eram atendidas por mais do que meia d&uacute;zia &#8211; ou nem isso &#8211; de programas. Nenhum deles se adapta?&nbsp;S&atilde;o muito caros para o seu or&ccedil;amento?&nbsp;Azar o seu, porque voc&ecirc; simplesmente n&atilde;o tinha op&ccedil;&otilde;es.</p>
<p><img height="600" width="600" align="middle" alt="Baby Tux" src="http://www.diskchocolate.com/blog/wp-content/uploads/600px-Baby_tux.jpg" /></p>
<blockquote>
<p>Por que eu uso Linux?&nbsp;Ah, &eacute; que o Tux &eacute; t&atilde;o fofinho, poxa&#8230;</p>
</blockquote>
<p>Recentemente o Meiobit postou sobre uma compara&ccedil;&atilde;o de perfomance entre o Photoshop e o Gimp &#8211; na realidade, era mais uma compara&ccedil;&atilde;o do Photoshop em diversas super-m&aacute;quinas, e eles aproveitaram para testar o Gimp tamb&eacute;m &#8211; e na qual o Gimp perdeu. E digo n&atilde;o apenas perdeu no sentido de &quot;nesse m&ecirc;s o Nintendo DS vendeu menos do que o PSP&quot;, mas no sentido de que &quot;o WonderSwam vendeu menos em toda a sua vida do que o Game&nbsp;Boy Advance vendeu em um m&ecirc;s&quot;. E, sinceramente, algu&eacute;m se surpreendeu com isso? Sim, o software livre vem avan&ccedil;ando bastante, e em algumas &aacute;reas j&aacute; possui competidores que est&atilde;o no topo do podium, como no caso cl&aacute;ssico do Firefox. Mas n&oacute;s estamos falando do Adobe Photoshop, que custa cerca de 700 d&oacute;lares sozinho ou 1700 d&oacute;lares em um pacote com outros softwares da Adobe. Eles n&atilde;o cobram tudo isso apenas pelo nome bacana, mas por conta de toda uma equipe muito bem paga que trabalha para melhorar continuamente seus programas &#8211; e eles n&atilde;o podem parar, porque se eles n&atilde;o lan&ccedil;arem mais atualiza&ccedil;&otilde;es, bom, como eles ir&atilde;o arrecadar fundos, n&atilde;o &eacute; mesmo?</p>
<p>O que eu n&atilde;o entendo &eacute; que a partir disso se estenda uma guerra sagrada &#8211; de um lado, os defensores do Gimp, que se recusam a aceitar que o Gimp n&atilde;o, n&atilde;o est&aacute; no mesmo n&iacute;vel do Photoshop, e do outro lado, os anti-software-livre, &quot;meu deus, &eacute; gr&aacute;tis, deve ser ruim&#8230;&quot;.</p>
<p>Softwares livres como o Gimp, ou mesmo alternativas web de editores de imagens n&atilde;o tem a pretens&atilde;o de desbancar o Photoshop. A quest&atilde;o &eacute;&#8230; n&atilde;o faz muitos anos que a &Uacute;NICA op&ccedil;&atilde;o existente era o Photoshop. Que outro programa de edi&ccedil;&atilde;o de imagens voc&ecirc; conhecia?&nbsp;O Paint? E ent&atilde;o existiam os profissionais da &aacute;rea, que possuem m&aacute;quinas super-poderoas e m&uacute;ltiplos monitores de muitas polegadas e que pagavam os 700 d&oacute;lares de um Photoshop&#8230; e existiam os seus priminhos, aquela tia que trabalha com imagens, aquele seu amigo que queria editar uma foto da formatura&#8230; que usavam c&oacute;pias pirateadas do Photoshop. Ou que pagavam os olhos do cara para algu&eacute;m abrir um arquivo no Photoshop e fazer meia d&uacute;zia de modifica&ccedil;&otilde;es simples.</p>
<p>Agora essas pessoas tem a op&ccedil;&atilde;o de um programa leve, gratuito, e que pode fazer muitas das coisas que antes eram feitas apenas no Photoshop.&nbsp;Eu j&aacute; usei Photoshop pirata e atualmente uso o Gimp. N&atilde;o sinto falta de nada do Photoshop no Gimp &#8211; claro, sou uma usu&aacute;ria &quot;banana&quot; nessa &aacute;rea, sou completamente incapaz de entender metade das op&ccedil;&otilde;es dispon&iacute;veis nesses programas. Mas eu consigo redimensionar, balancear cores e contraste, e fazer algumas montagens simples usando camadas e efeitos de camadas. Para mim, e muitos dos usu&aacute;rios comuns, o Gimp &eacute; plenamente suficiente.</p>
<p>Outro exemplo?&nbsp;O&nbsp;BrOffice em rela&ccedil;&atilde;o ao Microsoft Office. Sempre tiveram muito mais op&ccedil;&otilde;es do que eu jamais irei usar, ambos os programas. Uso o BrOffice e nunca, nunca pensei &quot;ah, isso tem no MS&nbsp;Office e n&atilde;o tem aqui&quot;, mesmo tendo usado o MS&nbsp;Office por mais de 10 anos. A mesma compara&ccedil;&atilde;o vale para o Inkscape x Illustrator, Thunderbird x Outlook.</p>
<p>&Eacute; claro que voc&ecirc; pode decidir pagar 700 d&oacute;lares no Photoshop se ir&aacute; us&aacute;-lo profissionalmente, ou comprar o pacote Office da Microsoft se ele tiver algo que os outros n&atilde;o possuam, ou pagar a licen&ccedil;a do Windows se os programas da sua empresa rodarem apenas em Windows, por exemplo (se bem que, nesse caso, dava para tentar testar com o Wine, n&atilde;o &eacute; mesmo?), assim como pode escolher comprar o Maya ao inv&eacute;s de baixar o Blender, e comprar o Adobe Premire Pro ao inv&eacute;s de&#8230; ao inv&eacute;s de tentar descobrir alguma alternativa gratuita vi&aacute;vel para edi&ccedil;&atilde;o de v&iacute;deo (ainda n&atilde;o conhe&ccedil;o nenhuma, adoraria que o cinelerra fosse menos zoado, poderia ser uma op&ccedil;&atilde;o interessante). Mas, a&iacute; est&aacute; a diferen&ccedil;a: &eacute; uma op&ccedil;&atilde;o, e n&atilde;o uma imposi&ccedil;&atilde;o feita pela pura falta de escolha.</p>
<p>Voc&ecirc; quer um sistema operacional?&nbsp;Voc&ecirc; pode pagar pelo Windows, pode pagar por um servidor Red Hat ou Solaris, ou pode usar uma distribui&ccedil;&atilde;o gratuita, como o Ubuntu, OpenSUSE, Slackware e OpenSolaris.</p>
<p>Voc&ecirc; tem uma necessidade especifica X?&nbsp;Voc&ecirc; pode procurar em sites como o <a href="http://freshmeat.net/">Freshmeat </a>e ver se existe algum que se adapte ao que voc&ecirc; precise.</p>
<p><img height="97" width="218" align="middle" src="http://www.diskchocolate.com/blog/wp-content/uploads/fm_logo.png" alt="Freshmeat Logo" /></p>
<p>A democracia vem n&atilde;o apenas pelo c&oacute;digo aberto, mas tamb&eacute;m pela gratuidade de muitos programas, que possibilitam o acesso a certas fun&ccedil;&otilde;es para pessoas que n&atilde;o teriam como pagar uma licen&ccedil;a na casa das centenas de d&oacute;lares, e tamb&eacute;m pelos programas que hoje em dia s&atilde;o encontrados nas &quot;nuvens&quot;: voc&ecirc; pode editar documentos com o Google, pode editar algumas imagens, pode at&eacute; mesmo programar uma aplica&ccedil;&atilde;o deixando toda a preocupa&ccedil;&atilde;o com processamento para o servidor. Isso possibilita que pessoas que n&atilde;o podem baixar arquivos ou que n&atilde;o possuem boas m&aacute;quinas em termos de RAM, processamento ou HD, que usufruam de certas coisas.</p>
<p>Internet e democracia devem andar juntas: ontem a divulga&ccedil;&atilde;o de informa&ccedil;&otilde;es era quase que totalmente restrita aos grandes meios, hoje muitas informa&ccedil;&otilde;es &quot;quentes&quot; podem ser encontradas nos mais diversos blogs. Isso n&atilde;o quer dizer que a grande m&iacute;dia v&aacute; sumir, ou que ela seja maligna &#8211; embora em certos casos ela seja -, mas que hoje em dia &eacute; poss&iacute;vel escolher da onde voc&ecirc; quer suas informa&ccedil;&otilde;es. Quem voc&ecirc; quer ouvir, quando, e como. Voc&ecirc; pode encontrar um blog que transmita not&iacute;cias de um jeito mais despojado e mais alinhado com o seu jeito de pensar, o que talvez fosse inconceb&iacute;vel na grande m&iacute;dia, onde tudo ser pensando &quot;na maioria&quot;, porque a minoria n&atilde;o d&aacute; dinheiro.</p>
<p>Mas democracia n&atilde;o &eacute; sin&ocirc;nimo de &quot;gr&aacute;tis&quot;, ou &quot;sem esfor&ccedil;os&quot;. Muitos pseudo-adeptos-do-software-livre o s&atilde;o apenas por adorarem poder baixar programas gratuitos sem sentirem qualquer peso na consci&ecirc;ncia. Algumas pessoas tratam o software livre como tratam software pirateado &#8211; como algo legal para se baixar r&aacute;pido, sem esfor&ccedil;os, e sem preocupa&ccedil;&atilde;o. Alguns chegam a chiar se algum &quot;software livre&quot; &eacute; pago.</p>
<p>Se lan&ccedil;assem um &quot;Gimp Pro&quot;, com muitas melhores e com uma interface muito melhor planejada, por 100 d&oacute;lares, quantos comprariam?&nbsp;Por melhor que esse programa estivesse?&nbsp;Poucos parariam para pensar que esses 100 d&oacute;lares estariam sendo usados para organizar uma equipe bem coordenada e fazer um desenvolvimento de software completo, com maiores investimentos nas partes de usabilidade e perfomance. N&atilde;o. A maioria pensaria &quot;porcos malditos, ficaram gananciosos, eu n&atilde;o pago pelo Firefox, porque iria pagar pelo Gimp&quot;?</p>
<p>Mas algu&eacute;m paga pelo Firefox. Algu&eacute;m paga pelo Ubuntu. E s&atilde;o os softwares que mais possuem investimento por tr&aacute;s que costumam se destacar &#8211; claro, softwares n&atilde;o se fazem sozinhos, e nem sempre voc&ecirc; vai conseguir que um programador vire noites atr&aacute;s de uma solu&ccedil;&atilde;o &oacute;tima para um problema de perfomance no programa&#8230; de gra&ccedil;a. J&aacute; n&atilde;o s&atilde;o tantas pessoas dispostas a fazer trabalho volunt&aacute;rio, e menos pessoas ainda est&atilde;o dispostas a se sacrificarem por causa desse trabalho volunt&aacute;rio. E sem receber nada em troca, porque muitas vezes o reconhecimento dessas pessoas &eacute; &iacute;nfimo.</p>
<p>Ent&atilde;o, lembrem-se: n&atilde;o existe software de gra&ccedil;a. N&atilde;o se concentre nessa palavrinha maldita na pr&oacute;xima vez em que voc&ecirc; pensar nas raz&otilde;es pelas quais software livre &eacute; legal. OK, voc&ecirc; pode baixar de gra&ccedil;a, mas se lembre que algu&eacute;m gastou algo para faz&ecirc;-lo, em termos de dinheiro e de tempo. Se voc&ecirc; achou um projeto underground que te quebrou um tremendo galho, porque n&atilde;o mandar um e-mail para o desenvolvedor?&nbsp;Fazer um tutorial?&nbsp;Ajudar na documenta&ccedil;&atilde;o? Divulgar para seus conhecidos?</p>
<p>Pensem nisso. <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://diskchocolate.com/blog/2009/03/18/todo-software-tem-seu-preco/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
		<item>
		<title>Um Novo Blog: Geek Cor de Rosa</title>
		<link>http://diskchocolate.com/blog/2009/02/17/um-novo-blog-geek-cor-de-rosa/</link>
		<comments>http://diskchocolate.com/blog/2009/02/17/um-novo-blog-geek-cor-de-rosa/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 02:08:02 +0000</pubDate>
		<dc:creator>Cindy Dalfovo</dc:creator>
				<category><![CDATA[opensource]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://www.diskchocolate.com/blog/?p=672</guid>
		<description><![CDATA[&#160; Uma coisa que muitos que l&#234;em esse blog n&#227;o sabem &#233; que, recentemente, eu me terminei uma embaixadora de campus da Sun. O que quer dizer que eu sou paga para divulgar coisas que eu costumo divulgar de gra&#231;a, como o uso do Netbeans e Java.&#160;Niiiice. Ali&#225;s, uma das minhas fun&#231;&#245;es &#233;, justamente, escrever [...]]]></description>
			<content:encoded><![CDATA[<p>&nbsp;</p>
<p>Uma coisa que muitos que l&ecirc;em esse blog n&atilde;o sabem &eacute; que, recentemente, eu me terminei uma embaixadora de campus da Sun. O que quer dizer que eu sou paga para divulgar coisas que eu costumo divulgar de gra&ccedil;a, como o uso do Netbeans e Java.&nbsp;Niiiice.</p>
<p>Ali&aacute;s, uma das minhas fun&ccedil;&otilde;es &eacute;, justamente, escrever sobre tecnologias Sun (Java,&nbsp;Netbeans, MySql, servidores,&nbsp;Sun&nbsp;Spots&#8230;) no blog. Eu pensei em fazer isso aqui mesmo, afinal, eu j&aacute; escrevi in&uacute;meros artigos sobre desenvolvimento aqui, n&atilde;o &eacute; mesmo? Mas, depois de pensar bem, achei que fazer um blog em blogs.sun.com seria melhor para fazer algo mais &quot;focado&quot;.</p>
<p>Ent&atilde;o, de agora em diante, voc&ecirc;s tem um novo blog para acompanhar, caso curtam meus textos e gostem de desenvolvimento e de novas tecnologias: o <a href="http://blogs.sun.com/cindydalfovo/" target="_blank">Geek Cor de Rosa</a>. Sim, eu sou SENSACIONAL para dar nomes &agrave;s coisas.</p>
<p>De qualquer maneira, esperem ver meus di&aacute;rios como embaixadora por l&aacute;, participando dos treinamentos, dando palestras, escrevendo tutoriais e artigos sobre Java,&nbsp;JavaFX, Netbeans, Open&nbsp;Solaris, mySql, etc.</p>
<p>Enfim, &eacute; isso. Eu estou com tr&ecirc;s projetos e estou cheia de mat&eacute;rias nesse novo semestre, ent&atilde;o, n&atilde;o estranhem se eu demorar para atualizar o blog. Ou parecer extremamente estressada.</p>
]]></content:encoded>
			<wfw:commentRss>http://diskchocolate.com/blog/2009/02/17/um-novo-blog-geek-cor-de-rosa/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>[Tutorial] Aprendendo a Mexer com o Sun SPOTS</title>
		<link>http://diskchocolate.com/blog/2009/01/11/tutorial-aprendendo-a-mexer-com-o-sun-spots/</link>
		<comments>http://diskchocolate.com/blog/2009/01/11/tutorial-aprendendo-a-mexer-com-o-sun-spots/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 16:28:54 +0000</pubDate>
		<dc:creator>Cindy Dalfovo</dc:creator>
				<category><![CDATA[featured]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[hardware]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jvm]]></category>
		<category><![CDATA[sun]]></category>
		<category><![CDATA[sun spot]]></category>
		<category><![CDATA[sunspot]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.diskchocolate.com/blog/?p=635</guid>
		<description><![CDATA[Eu sempre preferi a parte de software do que a de hardware &#8211; eu me lembro de realmente FUGIR das aulas sobre hardware no meu curso t&#233;cnico, e sempre que tenho algum problema com hardware eu costumo pedir socorro ao meu namorado. Al&#233;m dele entender mais disso do que eu, ele tem o mesmo efeito [...]]]></description>
			<content:encoded><![CDATA[<p>Eu sempre preferi a parte de software do que a de hardware &#8211; eu me lembro de realmente FUGIR das aulas sobre hardware no meu curso t&eacute;cnico, e sempre que tenho algum problema com hardware eu costumo pedir socorro ao meu namorado. Al&eacute;m dele entender mais disso do que eu, ele tem o mesmo efeito do Gizmo nesta tirinha do Recruta Zero:</p>
<img width="525" height="157" class="size-full wp-image-636" title="recrutazero_gizmo_effect" alt="Recruta Zero - The Gizmo Effect" src="http://diskchocolate.com/blog/wp-content/uploads/2009/01/recrutazero_gizmo_effect.jpg" />
<p>Al&eacute;m disso, eu sempre preferi a praticidade da programa&ccedil;&atilde;o: &eacute; muito mais f&aacute;cil aprender a programar do que aprender a mexer com hardware, j&aacute; que tudo o que voc&ecirc; precisa est&aacute; ao alcance dos seus dedos: existem milh&otilde;es de tutoriais de programa&ccedil;&atilde;o na rede, e n&atilde;o &eacute; muito dif&iacute;cil baixar IDEs e testar seus rec&eacute;m-feitos programas.</p>
<p>Mexer com hardware, por outro lado, envolve coisas misteriosas como comprar placas, ter de aprender a mexer com Assembly (ou com&nbsp;C, na melhor das hip&oacute;teses), montar redes m&iacute;sticas e torcer para nada queimar&#8230; e eu nem mencionei em tentar colocar perif&eacute;ricos extras e mais interessantes do que&#8230; LEDs.</p>
<p>Atualmente, existem algumas alternativas para quem quer mexer com um hardware mais interessante e de maneira n&atilde;o t&atilde;o complicada &#8211; uma que eu posso mencionar que eu j&aacute; usei &eacute; o <a href="http://mindstorms.lego.com/eng/LW_dest/default.aspx" target="_blank">kit de Lego Mindstorms</a> &#8211; voc&ecirc; pode criar bonecos em legos, colocar sensores de luz, de press&atilde;o, colocar motores, e programar tudo isso a partir de uma programa&ccedil;&atilde;o em blocos simples (mas limitada) provida pela kit, ou programar em C e passar o programa atrav&eacute;s de infravermelho para o rob&ocirc; feito de Lego.</p>
<p>Bom, o resultado do meu grupo quando n&oacute;s tivemos de fazer um projeto com isso na faculdade foi esse:</p>
<img width="500" height="375" class="size-full wp-image-637" title="lego_agv" alt="Lego Mindstorms - AGV" src="http://diskchocolate.com/blog/wp-content/uploads/2009/01/lego_agv.jpg" />
<p>Lindo, n&eacute;?&nbsp;Trata-se de um pequeno ve&iacute;culo para levar e trazer pe&ccedil;as em um ch&atilde;o de f&aacute;brica.&nbsp;Nada funcionou como a gente esperava na hora que a gente precisava, mas tudo bem&#8230;</p>
<p>O problema desse tipo de solu&ccedil;&atilde;o &eacute; que eles ainda s&atilde;o muito caros &#8211; especialmente aqui no Brasil. Um kit do Mindstorms mais recentes (e mais bacana) custa cerca de 1000 reais aqui no Brasil. N&atilde;o &eacute; exatamente algo que voc&ecirc; pense &quot;ah, ok, vou comprar um para ver como &eacute;&#8230;&quot;. Mas &eacute; o tipo de coisa que eu gostaria de dar para um filho, se ele se interessasse e eu tivesse condi&ccedil;&otilde;es. Ein, meu filho ser&aacute; filho de dois engenheiros nerds, voc&ecirc;s tem ALGUMA d&uacute;vida de que ele ser&aacute; criado como uma crian&ccedil;a tr00 nerd?</p>
<p>Devaneios maternais de lado, outra solu&ccedil;&atilde;o &eacute; o<a target="_blank" href="http://www.buglabs.net"> Bug Labs</a>, que oferece um kit b&aacute;sico e &quot;apetrechos&quot; extras para voc&ecirc; fazer coisas mais interessantes, como uma c&acirc;mera de 2MP, GPS, uma base para voc&ecirc; conectar apetrechos via USB, sensor de movimento, aceler&ocirc;metro&#8230; o problema, novamente, &eacute; o pre&ccedil;o: 250 d&oacute;lares pela base, e de 50 a 80 d&oacute;lares pelos m&oacute;dulos extras. Mas ele traz uma SDK para ajudar no desenvolvimento, e &eacute; open-source.</p>
<p>A outra op&ccedil;&atilde;o que eu conhe&ccedil;o e sobre a qual eu vou falar &eacute; a solu&ccedil;&atilde;o da Sun, o<a target="_blank" href="http://www.sunspotworld.com/"> Sun SPOTS</a>. Basicamente, s&atilde;o pequenos hardwares que voc&ecirc; pode programar em Java, j&aacute; que ele roda uma m&aacute;quina virtual. Conta com aceler&ocirc;metros, sensores de luz, bot&otilde;es anal&oacute;gicos e digitais, etc.</p>
<blockquote>
<p>Nota r&aacute;pida:&nbsp;Ao procurar por Sun Spots no Google, encontrei uma not&iacute;cia com essa headline:&nbsp;&quot;Sun goes longer than normal without producing sunspots&quot; e cliquei, j&aacute; preocupada em estar interessada em uma tecnologia que poderia estar dando sinais de cansa&ccedil;o.</p>
<p>Bom, n&atilde;o era bem esse o caso, como voc&ecirc; pode conferir <a target="_blank" href="http://www.sciencedaily.com/releases/2008/06/080609124551.htm">olhando a mat&eacute;ria</a>&#8230;</p>
<p>Nisso que d&aacute; uma empresa chamada Sun criar uma tecnologia chamada Sun SPOTS&#8230;</p>
</blockquote>
<p>Como existem muitos gamers que l&ecirc;em esse blog, eu acho que uma boa motiva&ccedil;&atilde;o seria mostrar esse v&iacute;deo do Sun&nbsp;Sposts sendo usado para criar um controle diferente para jogar Counter Strike:</p>
<p>&nbsp;</p>
<p><object width="425" height="344"><param value="http://www.youtube.com/v/3yrwwosSEfM&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1" name="movie" /><param value="true" name="allowFullScreen" /><embed width="425" height="344" allowfullscreen="true" type="application/x-shockwave-flash" src="http://www.youtube.com/v/3yrwwosSEfM&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1"></embed></object></p>
<p>&nbsp;Legal, ein? Novamente, os pre&ccedil;os s&atilde;o um problema: 750 d&oacute;lares pela base e seus apetrechos. Existe um desconto promocional para estudantes americanos, para 300 d&oacute;lares. H&aacute; algum tempo, por&eacute;m, eles estavam dando kits para estudantes que apresentassem propostas interessantes de uso &#8211; um amigo meu conseguiu um kit assim. Atualmente essa promo&ccedil;&atilde;o n&atilde;o est&aacute; mais valendo, mas mesmo assim eu tenho chances de conseguir um kit (o que &eacute; um assunto para outro post).</p>
<p>Para isso, claro, eu preciso fazer uma proposta interessante de uso do Sun SPOTS. E para poder fazer isso, eu preciso conhec&ecirc;-lo melhor, para saber do que esse danado &eacute; capaz.</p>
<p>E eu posso fazer isso n&atilde;o apenas lendo o site, mas efetivamente programando e testando no Sun Spots!&nbsp;N&atilde;o em um de verdade, claro, mas em um emulador fornecido pela Sun.</p>
<p>Como eu adoro criar tutoriais, eu vou tentar relatar o que eu estiver aprendendo por aqui. Se algu&eacute;m tiver MUITO interesse, entre em contato com uma proposta de uso. Eu n&atilde;o posso fazer muita coisa para conseguir kits, mas eu posso mostrar sua proposta para algu&eacute;m que possa. :p</p>
<h2>Instalando o Emulador</h2>
<p>Primeiramente, voc&ecirc; deve ter o Sun Java JRE. Se voc&ecirc; j&aacute; programa em Java, voc&ecirc; j&aacute; tem o que &eacute; necess&aacute;rio, ent&atilde;o n&atilde;o se preocupe. Instru&ccedil;&otilde;es mais espec&iacute;ficas podem ser encontradas <a target="_blank" href="http://www.sunspotworld.com/GettingStarted/">aqui</a>, de acordo com o sistema operacional que voc&ecirc; usa.</p>
<p>Tendo os runtimes necess&aacute;rios, tudo o que voc&ecirc; precisa fazer &eacute; ir na p&aacute;gina do <a target="_blank" href="http://www.sunspotworld.com/SPOTManager/">Sun Spot Manager </a>e baixar o aplicativo.</p>
<a href="http://www.sunspotworld.com/SPOTManager/"><img width="252" height="204" src="http://diskchocolate.com/blog/wp-content/uploads/2009/01/install_now.jpeg" alt="SunSpot Manager - Install Now" title="install_now" class="size-full wp-image-641" /></a>
<p>Execute-o com o Sun Java WebStart (seu sistema provavelmente ir&aacute; conhecer a extens&atilde;o e mandar abrir com esse programa, de qualquer maneira), leia aquilo tudo (eu tenho certeza de que voc&ecirc; vai fazer isso&#8230;), des&ccedil;a a barra de rolagem at&eacute; o final, clique em pr&oacute;ximo, pr&oacute;ximo&#8230; se quiser, crie um atalho para o Sun&nbsp;Spot&nbsp;Manager no seu desktop, facilita quando voc&ecirc; quiser acess&aacute;-lo depois.</p>
<p>Ele vai verificar se voc&ecirc; tem o Netbeans. Se voc&ecirc; ainda n&atilde;o tiver, instale-o quando sugerido, assim como o Ant. Isso facilita bastante&nbsp; na hora de desenvolver, acredite.</p>
<p>Al&eacute;m disso, n&atilde;o h&aacute; muito segredo na hora de instalar &#8211; ele ir&aacute; verificar os requisitos do seu sistema, sugerir instalar alguma coisa que n&atilde;o encontre&#8230; se voc&ecirc; ler pelo menos o m&iacute;nimo (sabe, aquelas mensagens que costumam aparecer com pontos de exclama&ccedil;&atilde;o do lado), voc&ecirc; n&atilde;o deve encontrar problemas aqui. Mas se encontrar algum, poste nos coment&aacute;rios que eu tento ajudar, claro.</p>
<p>Se voc&ecirc; fez tudo certo, d&ecirc; um duplo clique no atalho que est&aacute; na sua &aacute;rea de trabalho e ele ir&aacute; abrir o Sun SPOT Manager na aba de tutoriais. A parte que mais nos interessa &eacute; o Solarium:</p>
<a href="http://diskchocolate.com/blog/wp-content/uploads/2009/01/sunspot_solarium.jpeg"><img width="300" height="218" src="http://www.diskchocolate.com/blog/wp-content/uploads/2009/01/sunspot_solarium-300x218.jpg" alt="Sun SPOT Manager - Solarium" title="sunspot_solarium" class="size-medium wp-image-642" /></a>
<p>&Eacute; aqui que n&oacute;s temos acesso ao emulador do Sun SPOT &#8211; clicar no pequeno bot&atilde;o escrito &quot;Solarium&quot; no canto inferior direito ir&aacute; abrir o espa&ccedil;o do emulador (e tamb&eacute;m da onde voc&ecirc; visualiza os Sun SPOTs reais que voc&ecirc; tiver conectado ao seu PC).</p>
<a href="http://diskchocolate.com/blog/wp-content/uploads/2009/01/sunspot_solarium_2.jpeg"><img width="300" height="209" class="size-medium wp-image-644" title="sunspot_solarium_2" alt="Sun SPOT Solarium - Emulador" src="http://www.diskchocolate.com/blog/wp-content/uploads/2009/01/sunspot_solarium_2-300x209.jpg" /></a>
<p>Ao ir no menu &quot;emulator&quot; e selecionar a op&ccedil;&atilde;o&nbsp;&quot;new virtual spot&quot;, voc&ecirc; ir&aacute; ver a imagem de um pequeno spot na sua tela:</p>
<a href="http://diskchocolate.com/blog/wp-content/uploads/2009/01/sunspot_solarium_3.jpeg"><img width="159" height="261" class="size-full wp-image-645" title="sunspot_solarium_3" alt="Sun SPOT - virtual spot" src="http://diskchocolate.com/blog/wp-content/uploads/2009/01/sunspot_solarium_3.jpeg" /></a>
<p>Pronto, esse &eacute; o emulador. Ao clicar com o bot&atilde;o direito sobre o Virtual SPOT voc&ecirc; vai ver a op&ccedil;&atilde;o &quot;deploy MIDlet bundle&quot;, que &eacute; onde voc&ecirc; ir&aacute; selecionar o programa que voc&ecirc; fez para testar no SPOT&#8230; o que nos leva, claro, ao passo seguinte: como fazer um programa para o SPOT?</p>
<h2>Desenvolvendo para Sun SPOT no NetBeans</h2>
<p>Se voc&ecirc; instalou o Netbeans junto do Sun SPOT&nbsp;Manager, voc&ecirc; j&aacute; deve ter os plugins necess&aacute;rios. Mas como esse n&atilde;o &eacute; o caso de muitas pessoas, vamos ver como instalar os&nbsp; plugins necess&aacute;rios. Em primeiro lugar, voc&ecirc; deve fazer o <a href="http://www.diskchocolate.com/blog/wp-content/uploads/2009/01/com-sun-sunspot-updatecenter.nbm">download</a> do plugin que ir&aacute; adicionar um novo Update Center ao NetBeans.</p>
<p>Para instalar esse plugin, abra o Netbeans e v&aacute; no menu &quot;Ferramentas&quot; -&gt;&nbsp;Plug-ins.</p>
<a href="http://diskchocolate.com/blog/wp-content/uploads/2009/01/netbeans_instalar_plugin.jpeg"><img width="507" height="187" src="http://diskchocolate.com/blog/wp-content/uploads/2009/01/netbeans_instalar_plugin.jpeg" alt="Netbeans - Instalar Novo Plugin" title="netbeans_instalar_plugin" class="size-full wp-image-648" /></a>
<p>Na aba &quot;baixados&quot;, selecione &quot;adicionar plug-ins&quot; e escolha o plugin que voc&ecirc; acabou de baixar.&nbsp;Depois de instal&aacute;-lo, v&aacute; em plug-ins dispon&iacute;veis e recarregue o cat&aacute;logo. Instale os plugins da categoria SunSPOT que ir&atilde;o surgir:</p>
<img width="368" height="115" src="http://diskchocolate.com/blog/wp-content/uploads/2009/01/netbeans_sunspot_plugin.jpeg" alt="netbeans - sunspot plugin" title="netbeans_sunspot_plugin" class="size-full wp-image-649" />
<p>Depois disso, crie um novo projeto na categoria &quot;Java&quot;, do tipo Sun SPOT Application:</p>
<img width="455" height="135" src="http://diskchocolate.com/blog/wp-content/uploads/2009/01/netbeans_novo_projeto_sunspot.jpeg" alt="Netbeans - Novo Projeto de Sun SPOT" title="netbeans_novo_projeto_sunspot" class="size-full wp-image-650" />
<p>Voc&ecirc; vai ver que ele j&aacute; cria uma classe padr&atilde;o, a StartApplication.java, que tem todos os &quot;imports&quot; e inicializa&ccedil;&otilde;es necess&aacute;rias para fazer seu Spot funcionar &#8211; na realidade, este j&aacute; &eacute; um programa que voc&ecirc; pode testar no seu emulador. N&atilde;o que ele seja muito &uacute;teil &#8211; ele se resume a ficar piscando um led enquanto voc&ecirc; n&atilde;o abertar um bot&atilde;o.</p>
<p>O c&oacute;digo para isso se encontra no m&eacute;todo startApp():</p>
<img width="560" height="147" class="size-full wp-image-652" title="Sun SPOT - Example Code" alt="Sun SPOT - Example Code" src="http://diskchocolate.com/blog/wp-content/uploads/2009/01/sunspot_example_code.jpeg" />
<p>A primeira linha usa um m&eacute;todo para recuperar o Switch 1, o primeiro led &eacute; colocado em um cor ligeiramente vermelha na segunda linha e ent&atilde;o inicia-se um la&ccedil;o que &eacute; executado enquanto o Switch 1 estiver &quot;aberto&quot; (um switch fecha um circuito quando est&aacute; pressionado, por isso a express&atilde;o &quot;open&quot;, j&aacute; que quando ele n&atilde;o est&aacute; pressionado ele deixa um circuito aberto): Liga o led, espera um um quarto de segundo, desliga o led, espera um segundo e reinicia o processo.</p>
<p>Quando o switch &eacute; pressionado, o programa sai do la&ccedil;o e o notifyDestroyed serve para dizer que o programa foi encerrado (o que chama o destroyApp, que n&atilde;o faz nada al&eacute;m de se certificar de que todos os leds est&atilde;o apagados neste caso).</p>
<p>Para construir o programa e test&aacute;-lo, voc&ecirc; deve construi-lo, clicando com o bot&atilde;o direito sobre o projeto e selecionando &quot;construir&quot;. Isso ir&aacute; gerar um jar na pasta &quot;suite&quot; do seu projeto.</p>
<p>Agora, s&oacute; falta a parte mais divertida: finalmente testar seu projeto &quot;Hello, world!&quot;.</p>
<h2>Testando o Projeto no Emulador</h2>
<p>Lembram-se de que eu falei l&aacute; em cima que ir&iacute;amos testar o aplicativo no Solarium?&nbsp;Volte para o Solarium, onde voc&ecirc; criou o Virtual Spot, clique com o bot&atilde;o direito sobre ele,&nbsp; em&nbsp;&quot;deploy MIDlet bundle&quot; e ent&atilde;o selecione o jar que voc&ecirc; criou. </p>
<p>Para testar, clique com o bot&atilde;o direito sobre o SPOT, &quot;Run MIDlet&quot; -&gt;&nbsp;&quot;StartApplication&quot;. Pronto, voc&ecirc; ter&aacute; seu super-bacan&eacute;rrimo&#8230; SPOT que pisca o LED!</p>
<p>Se voc&ecirc; clicar novamente com o bot&atilde;o direito e ent&atilde;o em &quot;Display Sensor Output&quot; -&gt;&nbsp;Internal frame, voc&ecirc; ir&aacute; ver tamb&eacute;m os valores dos sensores (que voc&ecirc; tamb&eacute;m pode alterar atrav&eacute;s dessa interface), como abaixo:</p>
<img width="584" height="283" class="size-full wp-image-653" title="Sun SPOT - emulador rodando exemplo" alt="Sun SPOT - emulador rodando exemplo" src="http://diskchocolate.com/blog/wp-content/uploads/2009/01/sunspot_emulador_rodando_exemplo.jpeg" />
<p>E aqui n&oacute;s terminamos a primeira parte do tutorial.&nbsp;Espero que na pr&oacute;xima parte n&oacute;s j&aacute; estejamos fazendo coisas mais interessantes do que piscar LEDs, n&atilde;o? <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>De qualquer maneira, se voc&ecirc; se interessou, n&atilde;o fique me esperando: existem muitos tutoriais que vem com o pr&oacute;prio Sun SPOT&nbsp;Manager, no site oficial&#8230;</p>
<p>E, gente, tutoriais assim d&atilde;o um *** trabalho para fazer, ent&atilde;o, se voc&ecirc;s gostaram, percam dois segundos da sua vida e comentem :p Eu sou uma pessoa carente. Ainda mais agora que meu namorado vai passar um m&ecirc;s fora. *sniff* * abra&ccedil;a todos os leitores do blog*</p>
]]></content:encoded>
			<wfw:commentRss>http://diskchocolate.com/blog/2009/01/11/tutorial-aprendendo-a-mexer-com-o-sun-spots/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>TDC2008 [Florianópolis]: Eu fui!, parte 2</title>
		<link>http://diskchocolate.com/blog/2008/12/07/tdc2008-florianopolis-eu-fui-parte-2/</link>
		<comments>http://diskchocolate.com/blog/2008/12/07/tdc2008-florianopolis-eu-fui-parte-2/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 00:48:28 +0000</pubDate>
		<dc:creator>Cindy Dalfovo</dc:creator>
				<category><![CDATA[featured]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[evento]]></category>
		<category><![CDATA[florianópolis]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[java-me]]></category>
		<category><![CDATA[tdc]]></category>

		<guid isPermaLink="false">http://www.diskchocolate.com/blog/?p=534</guid>
		<description><![CDATA[Continuando meus relatos sobre o TDC que ocorreu no sábado retrasado (com algum atraso, é verdade&#8230; mas eu tenho de admitir que devo ter feito umas 4 provas na última semana&#8230;), vamos dar uma olhada nas outras duas paletras que eu vi: Palestra 5 &#8211; Java na ponta dos dedos: A caneta que roda Java [...]]]></description>
			<content:encoded><![CDATA[<p>Continuando meus relatos sobre o TDC que ocorreu no sábado retrasado (com algum atraso, é verdade&#8230; mas eu tenho de admitir que devo ter feito umas 4 provas na última semana&#8230;), vamos dar uma olhada nas outras duas paletras que eu vi:</p>
<p><strong>Palestra 5 &#8211; Java na ponta dos dedos: A caneta que roda Java</strong></p>
<p>Palestrante: Dr. Spock [<a title="Blog do Spock!" href="http://blog.spock.com.br" target="_blank"> blog</a> ]</p>
<p>Sinceramente, uma das palestras que me fez babar no evento. Se você não souber o que me dar de natal e for podre de rico, eu aceito isso como presente:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/bum_xYd6WgA&amp;hl=pt-br&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/bum_xYd6WgA&amp;hl=pt-br&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Sério. Trata-se de uma pequena caneta que possui uma máquina virtual Java (e que por isso foi destaque no último <a title="javaOne - o maior evento Java do mundo!" href="http://java.sun.com/javaone/sf/activities.jsp#Pulse" target="_blank">JavaOne</a>) e que, portanto, pode receber pequenos programas escritos em Java Me utilizando a API fornecida pelos <a title="Livescribe" href="http://www.livescribe.com/" target="_blank">desenvolvedores</a>. É uma caneta esferográfica com um pequeno sensor de infravermelho na ponta e um gravador.</p>
<p>Funciona assim: ela vem junto com um caderno que a caneta reconhece, e cada ponto do caderno é diferente, assim, quando o infravermelho passa pelas páginas, a caneta sabe em que página está, e em que parte da página ela se encontra.</p>
<p>Desta maneira, você pode começar uma gravação e ir escrevendo no seu caderno. A caneta grava e associa com o que você está escrevendo e mais tarde, ao &#8220;clicar&#8221; com a caneta sobre partes das suas anotações, você pode ouvir o que estava sendo dito quando você escreveu aquilo. E isso é apenas a função com a qual ela vem &#8211; lembre-se que ela possui uma máquina virtual Java, o que permita que você escreva seus próprios programas para ela.</p>
<p>Dois programas &#8220;demo&#8221; inclusos são o &#8220;teclado virtual&#8221;: de acordo com as instruções da caneta, você desenha um teclado no caderno e, ao passar com a caneta sobre ele, a caneta emite um som, como se você estivesse tocando um teclado. O outro demo é um pequeno tradutor: você escreve a palavra em inglês e pede para que ela seja traduzida e a caneta &#8220;fala&#8221; a tradução.</p>
<p>Virou um sonho de consumo, mas infelizmente ela custa 150~200 dólares, e isso nos EUA&#8230;</p>
<p><strong>Paletra 6: O mundo Java ME</strong></p>
<p>Palestrante: <span class="tx_palestrante">Bruno Ghisi / GUJava [ <a title="Blog do Bruno Ghisi" href="http://weblogs.java.net/blog/brunogh/" target="_blank">blog</a> ]<br />
</span></p>
<p>Essa é uma palestra que eu queria ver, especialmente por me sentir mais &#8220;em casa&#8221;, já que o Bruno também estuda na UFSC. <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Eu já o &#8220;conhecia&#8221; de tê-lo visto escrever artigos para a Mundo Java junto com o<a title="Blog do Lucas Torri" href="http://weblogs.java.net/blog/lucastorri/" target="_blank"> Lucas Torri.</a> Confesso que senti uma certa &#8220;invejinha&#8221; dos dois, já que eles sabem muito mais de Java e já fizeram coisas relevantes para a comunidade, mas tudo bem, é uma invejinha saudável <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Mas estou divagando&#8230;</p>
<p>O foco da palestra do Bruno não foi apenas falar sobre Java Me, mas sim contrapor uma afirmativa feita há algum tempo, de que o Java Me estaria fadado a desaparecer porque, com o avanço dos celulares, eles estariam passando a rodar Java Se ao invés de Java Me.</p>
<p>Não apenas o número de celulares mais simples que rodam Java Me é absurdamente maior do que o número de celulares smartphones &#8211; algo como mais de 2 bilhões de celulares pelo mundo, mas não são apenas os celulares que utilizam Java Me.</p>
<p>Da mesma maneira que os celulares estão evoluindo, outros dispositivos também estão, e aparelhos que outrora só rodavam programas em Assembly ou, no máximo, em C, agora começam a utilizar máquinas virtuais Java.</p>
<p>Ou seja, Java Me não está desaparecendo. Muito pelo contrário: agora ela se encontra no topo, já que nunca se usou tanto Java Me como agora.</p>
<p>Um exemplo óbvio é a caneta logo ali em cima, da outra palestra, que roda Java Me.</p>
<p>Moral da história: sim, ainda vale à pena aprender e desenvolver para Java Me. Diga-se de passagem, vale muito à pena!</p>
<p>Ué, e não eram 8 palestras, Cindy?</p>
<p>Eram, mas eu acabei de chegar de viagem e estou cansada. Ou seja, daqui a alguns dias eu coloco um resuminho sobre as outras duas palestras.</p>
<p>Para quem quiser, já disponibilizaram no site do evento os <a href="http://www.thedevelopersconference.com.br/download-floripa.html" target="_blank">downloads</a> das apresentações (em pdf/pps).</p>
]]></content:encoded>
			<wfw:commentRss>http://diskchocolate.com/blog/2008/12/07/tdc2008-florianopolis-eu-fui-parte-2/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>TDC2008 [Florianópolis]: Eu fui!, parte 1</title>
		<link>http://diskchocolate.com/blog/2008/11/30/tdc2008-florianopolis-eu-fui-parte-1/</link>
		<comments>http://diskchocolate.com/blog/2008/11/30/tdc2008-florianopolis-eu-fui-parte-1/#comments</comments>
		<pubDate>Sun, 30 Nov 2008 16:06:06 +0000</pubDate>
		<dc:creator>Cindy Dalfovo</dc:creator>
				<category><![CDATA[featured]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[brindes]]></category>
		<category><![CDATA[comida]]></category>
		<category><![CDATA[convenção]]></category>
		<category><![CDATA[design patterns]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[seam]]></category>
		<category><![CDATA[tdc]]></category>
		<category><![CDATA[tdc2008]]></category>

		<guid isPermaLink="false">http://www.diskchocolate.com/blog/?p=527</guid>
		<description><![CDATA[Ontem ocorreu o TDC (The Developer&#8217;s Conference) em Florianópolis. E, como o título do post já diz, eu fui! Depois de ir em eventos de animes e de games, eu tenho de dizer que foi uma grata surpresa ver como esse evento foi organizado: houveram alguns atrasos, que não foram absurdos e foram tranquilamente contornados, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-528" title="cindy_avatar_bone" src="http://diskchocolate.com/blog/wp-content/uploads/2008/11/cindy_avatar_bone.jpeg" alt="" />Ontem ocorreu o<a href="http://www.thedevelopersconference.com.br/index-floripa.html" target="_blank"> TDC (The Developer&#8217;s Conference) </a>em Florianópolis. E, como o título do post já diz, eu fui! Depois de ir em eventos de animes e de games, eu tenho de dizer que foi uma grata surpresa ver como esse evento foi organizado: houveram alguns atrasos, que não foram absurdos e foram tranquilamente contornados, os palestrantes eram excelentes (boa parte deles são professores na<a href="http://www.globalcode.com.br/" target="_blank"> Globalcode </a>daqui de Florianópolis), houve distribuição de brindes (e eu faturei dois, como você pode ver pela foto ao lado. Aliás, a camiseta é liiinda e eu estava mesmo precisando de um boné novo!) e o mais importante: os dois coffee-breaks tinham muita comida boa! Ei, se você não acha isso importante, tente encarar 8 palestras no mesmo dia sem comer lanchinhos gostosos!</p>
<p>Mas estou divagando&#8230;</p>
<p>Cheguei por volta das 08:30 na FIESC, peguei meu crachá e me pus a esperar. O começo desses eventos é sempre uma agonia para mim: como eu não conhecia absolutamente NINGUÉM, eu fiquei alguns bons minutos olhando de um lado para o outro sem saber o que fazer. Minha parte anti-social dizia &#8220;apenas fique sentada ali do lado olhando para o teto como você sempre faz&#8221; e a minha parte que estava ansiosa em fazer amigos que também entendessem de Java dizia &#8220;apenas se aproxime de algum desses grupinhos! Diabos, deve ter gente curiosa para saber como é uma menina que programa em Java, use isso a seu favor, sua tonta!&#8221;.</p>
<p>Felizmente eu não era a única mulher por lá, e logo puxei papo com uma que eu depois descobri se tratar de uma pessoa muito bacana, a Catia. Pouco depois das 09:00 o evento se iniciou, e eu fiquei na palestra sobre JSF 2.0 &#8211; que ainda não foi lançada, por isso a palestra discorria sobre o que esperar dessa nova especificação. Aliás, fazer isso de uma maneira mais organizada: abaixo vocês encontram resumos das<span style="text-decoration: line-through;"> 8 paletras (das 16 apresentadas) que eu v</span>i, das 4 primeiras palestras, na ordem em que as vi. Espero que isso sirva para repassar um pouco do conhecimento que eu adquiri ontem. <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Mais tarde devo atualizar o post com links para os PDFs das apresentações e, no caso das palestras técnicas, links para os exemplos utilizados, que serão disponibilizados no site do evento.</p>
<p><span id="more-527"></span></p>
<p><strong>Palestra 1: Aguardando o JSF 2.0 </strong><img class="alignright size-full wp-image-529" title="tdc2008_vinicius_nunes" src="http://diskchocolate.com/blog/wp-content/uploads/2008/11/tdc2008_vinicius_nunes.jpeg" alt="Vinicius Nunes - TDC 2008" /></p>
<p>Palestrante: <span class="tx_palestrante">Vinícius Nunes ( <a title="E-mail do Vinny" href="mailto:vinny@voffice.com.br">e-mail</a> )</span></p>
<p>O <a href="http://java.sun.com/javaee/javaserverfaces/" target="_blank">JSF (Java Server Faces) </a>se mostrou uma tecnologia muito interessante, e uma das causas do seu sucesso se deve, justamente, ao fato de ouvir seus usuários na hora de desenvolver as especificações.</p>
<p>Trata-se de uma framework para desenvolvimento baseada em componentes e que busca simplificar o desenvolvimento web &#8211; aliás, há diversas frameworks que buscam o mesmo e o atingiram de maneiras diferentes. Se você já tentou desenvolver para web em Java você deve imaginar porque é tão importante ter ferramentas que auxiliem nesse processo&#8230; um simples projeto pode se tornar uma salada macarrônica (?!) se você não tiver uma boa ferramenta para lhe auxiliar.</p>
<p>O JSF já passou por algumas refomurlações, e a sua versão 2.0 (que deverá ser lançada no final do ano que vem) deverá se aproximar ainda mais do que os seus usuários esperam:</p>
<ul>
<li>Trará suporte a AJAX</li>
<li>Trará também uma melhor compatibilidade entre bibliotecas de terceiros (já que você pode usar JSF com outras bibliotecas, como JBoss RichFaces, IceSoft ICEfaces e Sun Woodstock)</li>
<li>Auxiliará o desenvolvedor em diferentes etapadas do desenvolvimento, ajudando-o a descobrir falhas no código e até mesmo implementando pequenos detalhes que o programador pode ter se esquecido de colocar caso o projeto esteja em fase de &#8220;desenvolvimento&#8221;. Outros estágios possíveis são os estágios de produção e de testes, por exemplo.</li>
<li>Funcionará com um mínimo de configuração (fico feliz em ler isso. Quantas vezes você já empacaram ao aprenderem uma nova framework porque não estava configurando direito a linha 887 em algum config.xml da vida?)</li>
<li>Escopo view: uma alternativa para armazenar dados, ao invés de criar <em>memory leaks</em> jogando tudo no escopo session.</li>
</ul>
<p>Além disso, há uma pequena lista de sites e blogs recomendados para quem quiser se aprofundar no assunto:</p>
<ol>
<li><a title="JSF Central" href="http://www.jsfcentral.com/" target="_blank">JSF Central</a></li>
<li><a href="http://jsftutorials.net/" target="_blank">JSF Tutorials</a></li>
<li>(blog) <a title="Ed Burn's Blog" href="http://weblogs.java.net/blog/edburns/" target="_blank">Ed Burns</a> &#8211; desenvolvedor na Sun e que atua como líder na especificação JSF</li>
<li>(blog) <a title="Jason Lee's Blog" href="http://blogs.steeplesoft.com/" target="_blank">Jason Lee</a> &#8211; outro desenvolvedor senior da Sun com ampla experiência em JSF e que atualmente trabalha no<a title="Mojarra Scales" href="https://scales.dev.java.net/" target="_blank"> Mojarra Scales</a>, uma biblioteca de componentes para JSF.</li>
<li>(blog)<a title="Ryan Lubke's Blog" href="http://blogs.sun.com/rlubke/" target="_blank"> Ryan Lubke</a> &#8211; mais um desenvolvedor trabalhando com o Mojarra Scales.</li>
<li>(blog) <a title="Roger Kitain's Blog" href="http://weblogs.java.net/blog/rogerk/" target="_blank">Roger Kitain </a>- Outro líder na especificação JSF<a title="Roger Kitain's Blog" href="http://weblogs.java.net/blog/rogerk/" target="_blank"><br />
</a></li>
<li>(blog) <a title="Jacob Hookon's Blog" href="http://weblogs.java.net/blog/jhook/" target="_blank">Jacob Hookon</a> &#8211; criador do projeto Facelets, que fez tanto sucesso que será integrado à especificação 2.0 da JSF.</li>
</ol>
<p><strong>Palestra 2: Quais padrões ainda sobrevivem com as novas tecnologias?</strong></p>
<p>Palestra: Rodrigo Cândido</p>
<p>O que é uma design pattern? Trata-se de uma maneira de documentar soluções para que problemas comuns não tenham de ser extensamente analisados cada vez que aparecem &#8211; para quê reinventar a roda quando dezenas, centenas, milhares de desenvolvedores já passaram pelos mesmos problemas?</p>
<p>Qualquer um pode criar um &#8220;padrão de projeto&#8221;, basta que ele documento o problema encontrado (quando, em que condições, etc) e a sua respectiva solução (ou seja, como utilizar os recursos disponíveis para obter uma solução eficiente), além dos benefícios trazidos por aquela determinada solução, mas também consequências negativas e padrões de projeto relacionados com aquele.</p>
<p>Foram apresentados alguns dos padrões de projeto mais famosos, dos livros &#8220;Design Patterns: Elements of Reusable Object-Oriented Software&#8221;, lançado em 1995 com 23 padrões e que se aplica a qualquer linguagem de programação orientada a objeto (que ficou conhecido como o <a title="Guia para Auxiliar no Aprendizado dos Padrões GoF" href="http://mahemoff.com/paper/software/learningGoFPatterns/" target="_blank">catálogo GoF &#8211; Gang of Four</a> &#8211; pelo fato do livro possuir quatro autores) e do livro<a href="http://www.corej2eepatterns.com/" target="_blank"> Core J2EE Patterns</a>, lançado em 2001 e que conta com 25 padrões de projetos. Além disso, existem muitos outros catálogos de padrões por aí, como<a title="Catálogo de Padrões de Projeto na Sun" href="http://java.sun.com/blueprints/patterns/catalog.html" target="_blank"> este</a>, com boas explicações, no site da própria Sun, e o site na Sun sobre o livro<a href="http://java.sun.com/blueprints/corej2eepatterns/index.html" target="_blank"> Core J2EE Patterns,</a> que possui o livro para visualização.</p>
<p>Não irei passar cada um dos padrões mostrados porque, bem, é um assunto que já amplamente discutido e que você pode encontrar referências com facilidade no Google (embora eu tenha colocado alguns links para facilitar a sua vida).</p>
<p><strong>Palestra 3: JBoss Seam</strong></p>
<p>Palestrantes: <span class="tx_palestrante">dr. Spock <a title="Blog do Dr. Spock" href="http://blog.spock.com.br/" target="_blank">(blog</a>) e Vinícius Senger / Globalcode</span></p>
<p><img class="alignnone size-full wp-image-531" title="tdc_jboss_seam" src="http://diskchocolate.com/blog/wp-content/uploads/2008/11/tdc_jboss_seam.jpg" alt="JBoss Seam - Spock e Vinicius" /></p>
<p>O <a href="http://www.seamframework.org/" target="_blank">Seam</a> é uma plataforma de desenvolvimento open-source para construir aplicacações ricas para a internet &#8211; eu não falei que esse assunto estava em voga?</p>
<p>Trata-se de uma solução completa para simplificar todas as etapas do desenvolvimento web, utilizando muitas tecnologias fornecidas pela própria especificação da Sun: se existem<a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/annotations.html" target="_blank"> Annotations</a>, por que criar 1001 documentos xml? Você pode usar tanto Hibernate quanto JPA, pode testar seus módulos de maneira automatizada, além de se integrar facilmente com uma infinidade de tecnologias e conceitos como BPM.</p>
<p>Sinceramente, eu me interessei MUITO por essa solução, aguardem por novos posts a respeito do Seam, já que eu pretendo utilizar essa ferramenta no futuro.</p>
<p>O Seam permite que você faça muitas coisas, como contextos diferentes em abas diferentes (por exemplo, em um call center você pode estar atendendo pessoas diferentes em abas diferentes sem maiores problemas, ou ter dois carrinhos de compras diferentes em abas diferentes em um site de compras, embora eu não saiba ao certo porque raios alguém gostaria disso) e resolve problemas de persistências que podem irritar muitos desenvolvedores (nota: se desenvolvimento web já é um monstro de criar bugs, desenvolvimento web COM persistência deve ser coisa para querer arrancar os cabelos&#8230; não façam isso na mão, crianças), como o Lazy Init Error (ou seja, quando você quer mostrar um dado de persistência na tela mas a conexão com o banco de dados já foi fechada). Ele resolve esse problema permitindo que você escolha quando quer iniciar e quando quer fechar a sessão.</p>
<p>Uma sessão pode ser iniciada com um clique numa opção do menu, por exemplo, e encerrada quando outra opção é selecionada. Além disso, há uma necessidade de configuração muito menor, e as anotações fazem com que muita coisa não precise de 1000 linhas para ser &#8220;explicada&#8221; ao programa: se você tem um campo @DataModel, é óbvio que você precisa de gets e sets para ele, e você pode dizer ao programa que um elemento selecionado dentro de uma lista é uma variável dentro de uma classe que será tratada por ela com não mais do que duas ou três anotações.</p>
<p><strong>Palestra 4: SuperCRUD</strong></p>
<p>Palestrante: Vinícius Senger (<a title="E-mail do Vinicius Senger" href="mailto:vsenger@dev.java.net">e-mail</a>)</p>
<p>Uma palestra rápida que buscou mostrar um projeto open-source (cujo &#8220;papai&#8221; é o próprio Vinícius) que pretende ajudar desenvolvedores a gerar código mais rapidamente com o uso de templates. Você seleciona um template (a seleção é bastante limitada atualmente, e conta com colaboradores para aumentar a lista), define o formato da sua base de dados (relações, campos, tabelas, etc) e o programa gera um projeto para você, que você pode importar para o Eclipse e continuar a desenvolver sem ter de se preocupar em gerar as entidades e relacionamentos mais básicos. Ele até mesmo cria um pequeno projeto utilizando JSF e hibernate que conta com algumas páginas web para visualização e edição simples de dados, deixando mais tempo para que o desenvolvedor possa se preocupar com o que realmente importa no programa, que são os negócios e processos.</p>
<p>Ele também busca gerar código para diferentes linguagens, não apenas para Java &#8211; tudo depende dos templates disponíveis. O projeto possui uma <a title="SuperCRUD @ ning" href="http://supercrud.ning.com" target="_blank">comunidade no ning</a>, que conta com explicações do próprio Vinícius sobre como utilizar o projeto, e possui um<a title="SuperCRUD at Java.net" href="https://supercrud.dev.java.net/" target="_blank"> repositório no java.net</a>. O site <a title="SuperCRUD" href="http://www.supercrud.com">supercrud.com</a> está fora do ar neste momento, mas esperamos que ele volte logo. <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>O projeto conta com 70 colaboradores cadastrados na comunidade, e ele convidou os participantes a colocaborarem com o projeto e o utilizarem para aumentar sua produtividade. Na comunidade há um<a href="http://supercrud.ning.com/forum/topics/2273808:Topic:151" target="_blank"> tópico </a>explicando melhor o que é o projeto e como as pessoas podem utilizá-lo e colaborar com ele.</p>
<p>Na próxima parte, as outras 4 palestras que eu vi e considerações finais sobre o evento. <img src='http://diskchocolate.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Agora, se vocês me dão licença, eu vou almoçar que já são duas da tarde&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://diskchocolate.com/blog/2008/11/30/tdc2008-florianopolis-eu-fui-parte-1/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>

