<?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>Blog de desenvolvimento da Milfont Consulting, Client e Server-side &#187; Java</title>
	<atom:link href="http://www.milfont.org/tech/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.milfont.org/tech</link>
	<description>Blog da Comunidade Milfont Consulting, uma empresa especializada em desenvolvimento Web, principalmente Javascript, node.js e muito Javascript.</description>
	<lastBuildDate>Thu, 26 Jan 2012 11:30:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>N-ésimo encontro do PBJUG</title>
		<link>http://www.milfont.org/tech/2011/06/25/n-esimo-encontro-do-pbjug/</link>
		<comments>http://www.milfont.org/tech/2011/06/25/n-esimo-encontro-do-pbjug/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 20:52:06 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[palestras]]></category>
		<category><![CDATA[pbjug]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[vraptor]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1354</guid>
		<description><![CDATA[Vou palestrar ao lado de feras no próximo encontro do PBJUG, balançar a poeira do meu Eclipse e demonstrar como combinar aplicações feitas com Vraptor [melhor Framework para Java] com Frameworks JS. Confira descrição completa: Combinando Frameworks Javascript com VRaptor, uma abordagem prática Demonstração de padrões, técnicas e melhores práticas para utilização de Frameworks e [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-vertical"><script type="text/javascript">
			<!-- 
				tweetmeme_url = "http://www.milfont.org/tech/2011/06/25/n-esimo-encontro-do-pbjug/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><p>Vou palestrar ao lado de feras no <a href="http://www.pbjug.com.br/">próximo encontro do PBJUG</a>, balançar a poeira do meu Eclipse e demonstrar como combinar aplicações feitas com <a href="http://vraptor.caelum.com.br/">Vraptor</a> [melhor Framework para Java] com Frameworks JS. Confira descrição completa:</p>
<table>
<tbody>
<tr>
<td colspan="2"><strong>Combinando Frameworks Javascript com VRaptor, uma abordagem prática</strong><br />
<em>Demonstração de padrões, técnicas e melhores práticas para utilização de Frameworks e Libraries Javascript com VRaptor, desde engines de templates a Widgets ricos, passando por MVC no lado cliente. Analisaremos alguns Cases e situações.</em></td>
</tr>
</tbody>
</table>
<p>Recomendo que viajem até João Pessoa, o evento está prometendo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2011/06/25/n-esimo-encontro-do-pbjug/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaCE Social</title>
		<link>http://www.milfont.org/tech/2010/10/27/javace-social/</link>
		<comments>http://www.milfont.org/tech/2010/10/27/javace-social/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 16:24:31 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[javace]]></category>
		<category><![CDATA[JavaCE Social]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1094</guid>
		<description><![CDATA[Já há tempos eu venho afirmando que eventos gratuitos estão com os dias contados, não vale a pena realizar/organizar/participar de grandes eventos quando não cobramos pelo menos uma taxa simbólica, é impressionante como não é valorizado. Eu e o Handerson Frota da TriadWorks ministramos diversos eventos gratuitos na célula Java da faculdade Lourenço Filho há [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-vertical"><script type="text/javascript">
			<!-- 
				tweetmeme_url = "http://www.milfont.org/tech/2010/10/27/javace-social/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><p><a href="http://www.javace.org/javace-social/"><img class="alignleft" style="margin-right: 5px; margin-left: 5px; margin-top: 1px; margin-bottom: 1px;" src="http://www.javace.org/wp-content/uploads/2010/08/JavaCE.horizontalbrancoThumbs.png" alt="" width="150" height="68" /></a></p>
<p>Já há tempos eu venho afirmando que eventos gratuitos estão com os dias contados, não vale a pena realizar/organizar/participar de grandes eventos quando não cobramos pelo menos uma taxa simbólica, é impressionante como não é valorizado.</p>
<p>Eu e o <a href="http://www.handersonfrota.com.br/">Handerson Frota</a> da <a href="http://www.triadworks.com.br/">TriadWorks</a> ministramos diversos eventos gratuitos na célula Java da faculdade Lourenço Filho há uns anos, entre esses eventos alguns cursos e pela experiência o curso sempre tende a se deteriorar se for gratuito.</p>
<p>Eis que a <a href="http://www.javace.org/">JavaCE</a> surge com o projeto <a href="http://www.javace.org/javace-social/">JavaCE Social</a> que visa destinar os valores cobrados em cursos para <a href="http://www.javace.org/1o-javace-social-iprede/">instituições de caridade</a>. Esse tipo de ação a Milfont Consulting faz questão de patrocinar,  além disso vou preparar uns cursos para doar ao projeto.</p>
<p>Ajude a melhorar e aperfeiçoar o projeto doando, participando, ministrando e divulgando entre seus amigos, empresas e comunidades que participa.</p>
<p>Já tem uma grade inicial, confira a lista abaixo:</p>
<p><strong>Cursos</strong></p>
<p><strong>Uma Introdução ao SQL + JDBC</strong><br />
30/10/2010 (Sábado, 13h) – <a href="https://spreadsheets.google.com/viewform?formkey=dE5sMEZldXRHbW91cWU2Q3BDUnBaQnc6MQ" target="_blank">Inscrições aqui!</a><br />
<strong>Nível</strong>: Iniciante<br />
<strong>Carga Horária</strong>: 4h<br />
<strong>Instrutor</strong>: <a href="http://www.leonardoeloy.com/" target="_blank">Leonardo Eloy</a> <em>(Participa na Coordenação da JavaCE)</em><br />
<strong>Vagas</strong>: 8<br />
<strong>Doação</strong>: 1 lata de Leite em pó + 2Kg de Arroz ou Feijão<br />
<strong>Pré-requisitos</strong>: Saber criar programas simples com Java.<br />
<strong>Softwares:</strong> JDK 6, Eclipse ou NetBeans e MySQL (qualquer versão).</p>
<p><strong>Iniciando no VRaptor: Framework Ágil para Web</strong><br />
06/11/2010 (Sábado, 9h) – <a href="https://spreadsheets.google.com/viewform?formkey=dEU2RVFvZUNKa2xjTk81S3Z2aVdRc3c6MA" target="_blank">Inscrições aqui!</a><br />
<strong>Nível</strong>: Iniciante<br />
<strong>Carga Horária</strong>: 6hs<br />
<strong>Instrutor</strong>: <a href="http://www.handersonfrota.com.br/" target="_blank">Handerson Frota</a> <em>(Referência em DWR no Brasil)</em><br />
<strong>Vagas</strong>: 8<br />
<strong>Doação</strong>: 2 latas de Leite em pó.<br />
<strong>Pré-requisitos</strong>: Conhecimentos em Java Web, HTML e Banco de Dados.</p>
<p><strong>Iniciando no JSF</strong><br />
20/11/2010 (Sábado, 9h) – <a href="https://spreadsheets.google.com/viewform?formkey=dFU3bFpLR0lYY0FnZ2RUcWJvQ2hIZ0E6MA" target="_blank">Inscrições aqui!</a><br />
<strong>Nível</strong>: Intermediário<br />
<strong>Carga Horária</strong>: 6 a 8h<br />
Instrutor: <a href="http://brunomaomeh.wordpress.com/" target="_blank">Bruno Soares</a> e <a href="http://www.rponte.com.br/" target="_blank">Rafael Ponte</a> <em>(Referências em JSF no Brasil)</em><br />
<strong>Vagas</strong>: 8<br />
<strong>Doação</strong>: 2 latas de Leite em pó.<br />
<strong>Pré-requisitos</strong>: Conhecimentos em Java Web, HTML e Banco de Dados.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2010/10/27/javace-social/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>QCONSP 2010, eu fui!</title>
		<link>http://www.milfont.org/tech/2010/09/16/qconsp-2010-eu-fui/</link>
		<comments>http://www.milfont.org/tech/2010/09/16/qconsp-2010-eu-fui/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 20:22:44 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[eventos]]></category>
		<category><![CDATA[javace]]></category>
		<category><![CDATA[caelum]]></category>
		<category><![CDATA[Douglas Crockford]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[qconsp]]></category>
		<category><![CDATA[qconsp2010]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[ruby rails]]></category>
		<category><![CDATA[RubyOnRails]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1051</guid>
		<description><![CDATA[Jornada Começamos essa aventura desde que o evento foi anunciado no início do ano, não lembro com precisão o mês, mas a coordenação do Jug JavaCE entrou em contato pela lista de discussões para criarmos uma caravana cearense. A idéia desde o início era juntarmos gente suficiente para fechar com alguma agência de viagens um [...]]]></description>
			<content:encoded><![CDATA[<div class="socialize-in-content" style="float:left;"><div class="socialize-in-button socialize-in-button-vertical"><script type="text/javascript">
			<!-- 
				tweetmeme_url = "http://www.milfont.org/tech/2010/09/16/qconsp-2010-eu-fui/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><h2>Jornada</h2>
<p>Começamos essa aventura desde que o evento foi anunciado no início do ano, não lembro com precisão o mês, mas a coordenação do Jug <a href="http://javace.org/">JavaCE</a> entrou em contato pela <a href="http://groups.google.com/group/javace">lista de discussões</a> para criarmos uma caravana cearense.</p>
<p>A idéia desde o início era juntarmos gente suficiente para fechar com alguma agência de viagens um desconto em passagens e hospedagem, não deu dessa vez, pelo menos conseguimos <a href="http://www.javace.org/caravanas-javace/caravana-javace-qcon-2010-sao-paulo/">mobilizar algumas pessoas</a> e negociar duas rodadas de descontos na inscrição do evento.</p>
<p><a href="http://picasaweb.google.com/handersonbf/QConSP2010CaravanaJavaCE#5516755725306909954"><img class="alignnone" title="Caravana JavaCE" src="http://lh3.ggpht.com/_ixVOzmHRw-A/TI90GmeFVQI/AAAAAAAAkyw/dlcnLMZsUmk/s640/DSC05955.JPG" alt="" width="533" height="399" /></a></p>
<h2>Caravana JavaCE</h2>
<p>A maioria chegou sexta de manhã [10/09] em São Paulo, a tarde fomos recepcionados pela Caelum em sua sede <a href="http://www.caelum.com.br/contato/">paulista</a>. O <a href="http://twitter.com/paulo_caelum">Paulo Silveira</a> preparou duas palestras para a caravana, além do pessoal da <a href="http://www.giran.com.br/">Giran</a> e o <a href="http://twitter.com/razenha">Rubem Azenha</a> que estavam lá.</p>
<p>O Paulo já sabia que iríamos lá para conhecer a empresa, afinal não chegaríamos de surpresa. Ele havia dado a sugestão de preparar algo, nem precisava, mas sabem como é, a Caelum não sabe fazer coisa pequena, então até uma visita informal virou um evento a tarde inteira com muita comida e bebida.</p>
<p><a title="10092010465 by chrismilfont, on Flickr" href="http://www.flickr.com/photos/cmilfont/4989999748/"><img class="alignleft" src="http://farm5.static.flickr.com/4109/4989999748_532f83ba35_m.jpg" alt="10092010465" width="240" height="180" /></a><br />
<a title="10092010466 by chrismilfont, on Flickr" href="http://www.flickr.com/photos/cmilfont/4989393055/"><img class="alignleft" src="http://farm5.static.flickr.com/4148/4989393055_f37cb506f7_m.jpg" alt="10092010466" width="240" height="180" /></a><br />
<a title="10092010462 by chrismilfont, on Flickr" href="http://www.flickr.com/photos/cmilfont/4990002520/"><img src="http://farm5.static.flickr.com/4111/4990002520_eeb0bb14b8_m.jpg" alt="10092010462" width="240" height="180" /></a></p>
<h2>QCON</h2>
<p>Minha avaliação do evento será muito parcial e específica, muito do que escreverei aqui tem a ver com o momento que vivo e portanto pode soar como irresponsável.</p>
<p>Tenho priorizado ultimamente palestras técnicas e mais avançadas em tecnologias que trabalho, não que isso seja errado, mas uma escolha que tomei esse ano para focar em código. Palestras de metodologias, métricas, filosofias ou algo diferente de código eu tento evitar. Não que eu tenha conseguido focar apenas em palestras técnicas, portanto não se assuste com o que vem.</p>
<h2>Palestras do Sábado</h2>
<p>O <a href="http://www.qconsp.com/palestra/nick-kallen/data-architecture-at-twitter-scale">Keynote do Nick Kallen</a> fui bacana, apesar de quase todas as informações mostradas já terem sido divulgadas em posts e outros eventos, de qualquer forma dá para sacar mais ou menos os problemas que é escalar um mundo gigante como o Twitter e os problemas que eles enfrentam. Foi muito bom.</p>
<p><a title="11092010468 by chrismilfont, on Flickr" href="http://www.flickr.com/photos/cmilfont/4989395329/"><img src="http://farm5.static.flickr.com/4110/4989395329_a92e2ddd47.jpg" alt="11092010468" width="500" height="375" /></a></p>
<p>O <a href="http://www.qconsp.com/palestra/guilherme-silveira/rest-semantica-e-o-futuro-da-arquitetura-web">Keynote do Guilherme Silveira</a>, que era para ser apenas no domingo,  foi trocado devido a um atraso no vôo do Randy Shoup, de qualquer forma ele deu seu show como sempre faz e demonstrou porque é o novo popstar da família Silveira. Apresentou algumas soluções de Rest e suas piadas infames, bom, pelo menos riram dessa vez <img src='http://www.milfont.org/tech/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p><a title="11092010467 by chrismilfont, on Flickr" href="http://www.flickr.com/photos/cmilfont/4989395645/"><img src="http://farm5.static.flickr.com/4107/4989395645_8b202faa55.jpg" alt="11092010467" width="500" height="375" /></a></p>
<p>O último Keynote do sábado foi meu ídolo <a href="http://www.qconsp.com/palestra/douglas-crockford/the-state-and-future-of-javascript">Douglas Crockford</a> que fez uma apresentação impecável. Demonstrou a história por trás da linguagem mais sofrida do mundo, falou sobre os comitês [confirmou minha opinião que comitê não funciona] e demonstrou código no final, apesar de pouco. Ouvi algumas críticas fora da palestra por pessoas que não entenderam qual o propósito desse Keynote, ou não leram o enunciado ou odeiam tanto javascript que não tiveram saco de ouvir de um dos pais da coisa toda aquela intrigante história.</p>
<p><a title="12092010480 by chrismilfont, on Flickr" href="http://www.flickr.com/photos/cmilfont/4990009760/"><img src="http://farm5.static.flickr.com/4145/4990009760_6acfe12d16.jpg" alt="12092010480" width="500" height="375" /></a></p>
<p>Era para termos saído para o almoço, mas a Caelum, como não gosta de gordinhos, nos entupiu de tanta comida que do nosso grupo ninguém foi almonçar, ficamos lá beliscando aquele banquete sem fim.</p>
<p>Risquei a <a href="http://www.qconsp.com/schedule/sabado">track .NET do sábado</a>, não por críticas à plataforma, mas como eu disse antes, querer focar na realidade que trabalho. Diante desse quadro restou dividir as duas outras tracks seguindo meu critério de ser mais próximo ao código. Até que no sábado eu tenha saído mais dessa linha do que no domingo, mas esse foi o meu objetivo.</p>
<p>Dividir-se em tracks sempre há prejuízo, não tem jeito, acabei ficando na <a href="http://www.qconsp.com/palestra/rodrigo-yoshima/a-guerra-dos-metodos-versao-2-0">track com o Yoshima</a> por curiosidade sobre o que ele falaria na guerra de métodos e acabei perdendo a do <a href="http://www.qconsp.com/palestra/paulo-silveira/java-como-plataforma-onipresente-apresentacao">Paulo</a> e a do <a href="http://www.qconsp.com/palestra/doug-clarke/toplink-grid-scaling-jpa-applications-with-coherence">Doug Clarke</a>. Não me arrependi, o Yoshima consegue cativar bastante e apresentou alguns pontos de vista muito interessantes. Como eu conheço o TopLink e sei que é muito inferior ao hibernate eu resolvi ignorar a palestra do Doug, contem nos comentários se o Doug falou sobre alguma novidade que o Hibernate não já tenha desde 2004 <img src='http://www.milfont.org/tech/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Houveram críticas ao Yoshima sobre um comentário dele, especificamente sobre o time priorizar ordem de entrega das features, eu entendi muito bem a mensagem, mas acho que deveria ter um post só sobre isso para esclarecer melhor.</p>
<p><a title="12092010484 by chrismilfont, on Flickr" href="http://www.flickr.com/photos/cmilfont/4990011710/"><img src="http://farm5.static.flickr.com/4090/4990011710_242714fc82.jpg" alt="12092010484" width="500" height="375" /></a></p>
<p>Logo em seguida fui assistir a palestra de um cara que admiro bastante, o <a href="http://www.qconsp.com/palestra/bruno-pereira/da-agua-ao-vinho-o-caminho-do-desenvolvimento-web">Bruno Pereira</a> da Concrete. O Bruno perdeu um bom tempo com histórico de Frameworks web e só demonstrou código da metade pro fim, o que me deixou com gostinho de quero mais. Acredito que o histórico seria suficiente em 5 minutos. De qualquer forma foi muito bom e principalmente para quem está começando agora foi excelente. Bruno é um nome que deve ser chamado próximo ano para apresentar coisas mais avançadas que ele domina bem.</p>
<p><a title="12092010501 by chrismilfont, on Flickr" href="http://www.flickr.com/photos/cmilfont/4990021152/"><img src="http://farm5.static.flickr.com/4092/4990021152_36caca7dbb.jpg" alt="12092010501" width="500" height="375" /></a></p>
<p>A partir dessa palestra eu notei um padrão que incomodou um pouco, o pessoal passou um bom tempo da palestra falando sobre coisas muito básicas e pormenores que acredito não serem necessários, depois eu tive uma informação que esclareceu tudo. Segundo um passarinho chinês [:D],  os palestrantes receberam um pedido da organização para cobrir o básico porque haveria pessoas de todos os níveis. Acredito que esse aspecto deve ser priorizado no próximo ano.</p>
<p>A palestra seguinte, <a href="http://www.qconsp.com/palestra/marcio-duarte/testes-unitarios-em-javascript-usar-ou-nao-usar-mock">Testes Unitários em javascript</a>, seguiu esse padrão de explicações exaustivas, os palestrantes demoraram muito tempo explicando o que era TDD e a importância de testes, acredito que isso deveria ser prerequisito para quem escolheu assistir essa palestra. Da mesma forma que a palestra do Bruno, o código foi enfatizado do meio para o fim, apresentaram algumas técnicas, ferramentas e conceitos bacanas. Foi muito boa também.</p>
<p>As duas palestras seguintes eu saltei, fui aumentar uns quilos e conversar um pouco com o pessoal. Conheci muita gente bacana que só conhecia pelas listas, fóruns e twitters da vida. Depois conto mais sobre isso.</p>
<p>Queria muito ter assistido a palestra do <a href="http://www.qconsp.com/palestra/sergio-lopes/mitos-e-verdades-do-cloud-do-google-1-ano-de-experiencias-no-appengine">Sérgio Lopes</a>, mas acabei escolhendo do <a href="http://www.qconsp.com/palestra/paulo-caroli/a-linha-de-montagem-de-sw-representada-como-cartoes-na-parede">Paulo Caroli</a>. Acabei escolhendo a do Caroli porque já li bastante material dele e havia ouvido falar muito bem, resolvi ver as idéias e gostei muito. A sacada da casca de banana foi a diversão do dia.</p>
<p><a title="12092010479 by chrismilfont, on Flickr" href="http://www.flickr.com/photos/cmilfont/4989401689/"><img src="http://farm5.static.flickr.com/4109/4989401689_4b31c18314.jpg" alt="12092010479" width="500" height="375" /></a></p>
<h2>Fim do Sábado</h2>
<p>Continua&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2010/09/16/qconsp-2010-eu-fui/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Transparência inédita na saúde pública</title>
		<link>http://www.milfont.org/tech/2010/03/07/transparencia-inedita-na-saude-publica/</link>
		<comments>http://www.milfont.org/tech/2010/03/07/transparencia-inedita-na-saude-publica/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 11:13:01 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[crowds]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Ext]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linguagens]]></category>
		<category><![CDATA[Melhores práticas]]></category>
		<category><![CDATA[Metodologia]]></category>
		<category><![CDATA[Métodos Ágeis]]></category>
		<category><![CDATA[Model 3]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[Test Driven]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[XP]]></category>
		<category><![CDATA[crowd]]></category>
		<category><![CDATA[governo]]></category>
		<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[reverse ajax]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=872</guid>
		<description><![CDATA[É com satisfação que vejo o trabalho da Milfont Consulting participando diretamente na transparência da saúde pública no estado do Ceará. O governo do estado inaugurou essa semana &#8220;A Conta do Paciente&#8220;, um projeto inédito no Brasil que vai informar ao paciente quanto foi sua despesa desde a entrada no hospital até sua alta. Esse [...]]]></description>
			<content:encoded><![CDATA[<p>É com satisfação que vejo o trabalho da Milfont Consulting participando diretamente na transparência da saúde pública no estado do Ceará.</p>
<p>O governo do estado <a href="http://diariodonordeste.globo.com/materia.asp?codigo=745869">inaugurou essa semana</a> &#8220;<a href="http://www.ceara.gov.br/noticias/pacientes-poderao-saber-custos-dos-tratamentos">A Conta do Paciente</a>&#8220;, um projeto inédito no Brasil que vai informar ao paciente quanto foi sua despesa desde a entrada no hospital até sua alta. Esse tipo de atuação aproxima o governo da agilidade que a sociedade cobra em relação à transparência nas contas públicas, antes era quase impossível saber o custo real por paciente. Fora que a secretaria vai saber precisamente e em tempo real os custos por unidade, além de facilitar a tomada de decisões que podem salvar vidas.</p>
<p>Esse formulário detalhado com a conta do paciente é possível graças ao <a href="http://pt.wikipedia.org/wiki/Erp">ERP</a> especialista em gestão hospitalar pública da empresa Insystem, nosso cliente e parceiro. A Insytem acreditou em nosso trabalho e é um dos maiores Cases, senão o melhor.</p>
<p>O ERP foi construído 100% com base em <a href="http://www.milfont.org/tech/tag/tdd/">TDD</a> em Java usando DWR, Hibernate e  Spring basicamente. Alguns requisitos necessários de usabilidade utilizam Reverse Ajax com DWR. O sistema é totalmente ajax e utiliza o <a href="http://www.milfont.org/tech/2009/06/29/introducao-ao-ext/">Extjs</a> seguindo a filosofia <a href="http://www.milfont.org/tech/2008/09/08/mvc-model-3-e-camadas/">model 3</a>. Fizemos <a href="http://www.milfont.org/tech/2009/07/02/extjs-e-dwr/">algumas customizações</a> no Extjs para se integrar ao DWR de forma transparente.</p>
<p>Fomos ágeis desde o primeiro momento, mas nunca nos preocupamos em implantação de processo, metodologia ou qualquer coisa que o foco não fosse software saudável. XP foi algo natural, valores e princípios foram assimilados desde o primeiro dia, mas foi e é o software funcionando e livre de erros [o mais livre possível] que nos moveu.</p>
<p>Destaque para o <a href="http://javaneses.wordpress.com/">Felipe Andrade</a>, funcionário da Insystem que se tornou especialista em Extjs com DWR e hoje domina e é talvez o maior conhecedor da união desses Frameworks no estado.</p>
<p>Agradecimentos especiais aos diretores Evando Chaves e Marcelo Meirelles que investiram nessa solução e tiveram a sagacidade de sair na frente da concorrência entendendo que software funcionando é mais importante do que processos bonitos e pomposos, afinal o barco não chega na frente por causa do tambor e sim dos remadores. A Insystem está de parabéns por ter enfrentado todas as correntes contrárias e ter chegado a essa vitória investindo e apostando no fator humano como responsável para a vitória.</p>
<p>Esse é um Case que entrou para a história, estamos procurando outra solução semelhante na saúde pública do Brasil e até agora não encontramos nada.</p>
<p>Orgulhoso por participar dessa conquista.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2010/03/07/transparencia-inedita-na-saude-publica/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Extjs e DWR</title>
		<link>http://www.milfont.org/tech/2009/07/02/extjs-e-dwr/</link>
		<comments>http://www.milfont.org/tech/2009/07/02/extjs-e-dwr/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 19:11:42 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Ext]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Model 3]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=705</guid>
		<description><![CDATA[Nesse artigo eu pretendo trabalhar dois conceitos principais de uso do Extjs, extensão/customização de componentes e acesso a dados server-side com base em experiência recente em um projeto que desenvolvemos. Esse projeto em questão é um ERP que tinha a necessidade de manter a usabilidade similar a sua versão antiga, feita em Delphi, para o [...]]]></description>
			<content:encoded><![CDATA[<p>Nesse artigo eu pretendo trabalhar dois conceitos principais de uso do <a href="http://www.milfont.org/tech/tag/extjs/">Extjs</a>, extensão/customização de componentes e acesso a dados server-side com base em experiência recente em um projeto que desenvolvemos. Esse projeto em questão é um ERP que tinha a necessidade de manter a usabilidade similar a sua versão antiga, feita em Delphi, para o desktop.</p>
<p>Para suprir essa necessidade de usabilidade tivemos que adotar alguns conceitos, como ser totalmente stateless e modificar a arquitetura MVC2 para o <a href="http://www.milfont.org/tech/2008/09/08/mvc-model-3-e-camadas/">MVC3</a>. No server-side trabalhamos com um domain model baseado em Hibernate, Spring e Facades e Services com DWR. Nada de frameworks MVC2, não nos preocupamos com renderização e sim com a API. No lado cliente usamos Extjs com algumas modificações que fiz para integrar de forma suave com o DWR.</p>
<p>Primeiro precisamos entender como o Extjs trabalha com herança. Basicamente há um método no objeto Ext que faz esse trabalho de extensão dos componentes, funciona da seguinte maneira:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//Formato:</span>
<span style="color: #003366; font-weight: bold;">var</span> NovoComponente <span style="color: #339933;">=</span> Ext.<span style="color: #660066;">extend</span><span style="color: #009900;">&#40;</span>velhoComponente<span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span> 
          <span style="color: #009966; font-style: italic;">/* metodos e propriedades que serão reescritas */</span> 
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #006600; font-style: italic;">//Exemplo:</span>
<span style="color: #003366; font-weight: bold;">var</span> MilfontGridPanel <span style="color: #339933;">=</span> Ext.<span style="color: #660066;">extend</span><span style="color: #009900;">&#40;</span>Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">GridPanel</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #006600; font-style: italic;">//novo construtor</span>
        constructor<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>config<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #006600; font-style: italic;">// Seu preprocessamento vai aqui</span>
        	MilfontGridPanel.<span style="color: #660066;">superclass</span>.<span style="color: #660066;">constructor</span>.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> arguments<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #006600; font-style: italic;">// Seu pos-processamento vai aqui</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
&nbsp;
        NovoMethod<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #006600; font-style: italic;">// algum novo método que você queira criar para o novo componente</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Para esse projeto, criei um Ext.data.DataProxy (<a href="http://www.milfont.org/tech/2009/06/29/introducao-ao-ext/">como visto no artigo passado</a>) especialista para o DWR, criativamente denominado DWRProxy. A idéia é modificar o comportamento de buscar os dados para usar um <a href="http://www.milfont.org/tech/tag/dwr/">Creator do DWR</a>.</p>
<p>Definimos primeiro o objeto e suas propriedades necessárias:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">Ext.<span style="color: #660066;">ux</span>.<span style="color: #660066;">data</span>.<span style="color: #660066;">DWRProxy</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>dwr_facade<span style="color: #339933;">,</span> dwr_filter<span style="color: #339933;">,</span> dwr_errorHandler<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
&nbsp;
    Ext.<span style="color: #660066;">ux</span>.<span style="color: #660066;">data</span>.<span style="color: #660066;">DWRProxy</span>.<span style="color: #660066;">superclass</span>.<span style="color: #660066;">constructor</span>.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #009966; font-style: italic;">/* Propriedade que receberá a classe Java configurada como Creator */</span>
    <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">data</span> <span style="color: #339933;">=</span> dwr_facade<span style="color: #339933;">;</span>
    <span style="color: #006600; font-style: italic;">/*
	 * Propriedade que receberá uma classe java configurada como converter
	 * que servirá como filtro de busca
	 */</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">dwr_filter</span> <span style="color: #339933;">=</span> dwr_filter<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">/**
	 *
	 * Propriedade para fazer paginação, indica que deve cachear a consulta de
	 * total de elementos o controlador [fachada] deve implementar a logica de
	 * negocios adequada, quando for false consulta o total, quando for true
	 * consulta apenas a listagem e repete o total
	 */</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">dwr_total_cache</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">dwr_errorHandler</span> <span style="color: #339933;">=</span> dwr_errorHandler<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Após isso extendemos do Ext.data.DataProxy :</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">Ext.<span style="color: #660066;">extend</span><span style="color: #009900;">&#40;</span>Ext.<span style="color: #660066;">ux</span>.<span style="color: #660066;">data</span>.<span style="color: #660066;">DWRProxy</span><span style="color: #339933;">,</span> Ext.<span style="color: #660066;">data</span>.<span style="color: #660066;">DataProxy</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #006600; font-style: italic;">/**
     * Método Load do Ext.data.DataProxy overrided
     */</span>
&nbsp;
    load <span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>params<span style="color: #339933;">,</span> reader<span style="color: #339933;">,</span> callback<span style="color: #339933;">,</span> scope<span style="color: #339933;">,</span> arg<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #006600; font-style: italic;">/**
	 * Escopo &quot;this&quot; mapeado para a variável &quot;s&quot; porque dentro do callback do
	 * DWR o escopo &quot;this&quot; não pertence ao objeto Ext.ux.data.DWRProxy.
	 */</span>
&nbsp;
	<span style="color: #003366; font-weight: bold;">var</span> s <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span>
&nbsp;
        params <span style="color: #339933;">=</span> params <span style="color: #339933;">||</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>params.<span style="color: #660066;">cache</span> <span style="color: #339933;">!=</span> undefined<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">dwr_total_cache</span> <span style="color: #339933;">=</span> params.<span style="color: #660066;">cache</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>params.<span style="color: #660066;">filter</span> <span style="color: #339933;">!=</span> undefined<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">dwr_filter</span> <span style="color: #339933;">=</span> params.<span style="color: #660066;">filter</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #003366; font-weight: bold;">var</span> result<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">data</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">dwr_filter</span><span style="color: #339933;">,</span> params.<span style="color: #660066;">start</span><span style="color: #339933;">,</span> params.<span style="color: #660066;">limit</span><span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">dwr_total_cache</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
			callback<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>response<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                <span style="color: #006600; font-style: italic;">//aqui passamos o retorno do DWR </span>
                               <span style="color: #006600; font-style: italic;">// que chamei de response,  para o extjs</span>
				result <span style="color: #339933;">=</span> reader.<span style="color: #660066;">readRecords</span><span style="color: #009900;">&#40;</span>response<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				callback.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span>scope<span style="color: #339933;">,</span> result<span style="color: #339933;">,</span> arg<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
			errorHandler<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>a<span style="color: #339933;">,</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				scope.<span style="color: #660066;">fireEvent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;loadexception&quot;</span><span style="color: #339933;">,</span> s<span style="color: #339933;">,</span> arg<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span> e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				s.<span style="color: #660066;">dwr_errorHandler</span><span style="color: #009900;">&#40;</span>a<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
			timeout<span style="color: #339933;">:</span><span style="color: #CC0000;">100000</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">dwr_total_cache</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">fireEvent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;loadexception&quot;</span><span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> arg<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span> e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            callback.<span style="color: #660066;">call</span><span style="color: #009900;">&#40;</span>scope<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span> arg<span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>A fachada DWR é uma classe comum, segue um exemplo de uso com Hibernate:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//classe para satisfazer o transporte para o Extjs</span>
<span style="color: #003366; font-weight: bold;">public</span> final <span style="color: #003366; font-weight: bold;">class</span> DataTransferObject <span style="color: #009900;">&#123;</span>
    <span style="color: #003366; font-weight: bold;">private</span> int total<span style="color: #339933;">;</span>
    <span style="color: #003366; font-weight: bold;">private</span> List<span style="color: #339933;">&lt;?</span> <span style="color: #003366; font-weight: bold;">extends</span> Object<span style="color: #339933;">&gt;</span> results<span style="color: #339933;">;</span>
    <span style="color: #006600; font-style: italic;">//sets e gets</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">public</span> <span style="color: #003366; font-weight: bold;">class</span> AjaxFacade <span style="color: #009900;">&#123;</span>
    <span style="color: #006600; font-style: italic;">//injeta um repositorio, whatever</span>
    <span style="color: #003366; font-weight: bold;">private</span> Repository repository <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #003366; font-weight: bold;">public</span> DataTransferObject find<span style="color: #009900;">&#40;</span>Object filter<span style="color: #339933;">,</span> int start<span style="color: #339933;">,</span> int limit<span style="color: #339933;">,</span> boolean cache<span style="color: #339933;">,</span> HttpSession session<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        DataTransferObject dto <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> DataTransferObject<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #006600; font-style: italic;">//verifica se o Proxy está passando true </span>
        <span style="color: #006600; font-style: italic;">// indicando que está paginando</span>
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>cache<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            Integer total <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>Integer<span style="color: #009900;">&#41;</span> session.<span style="color: #660066;">getAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;totalObject&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            dto.<span style="color: #660066;">setTotal</span><span style="color: #009900;">&#40;</span>total<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
            session.<span style="color: #660066;">removeAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;totalObject&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            Integer total <span style="color: #339933;">=</span> repository.<span style="color: #660066;">count</span><span style="color: #009900;">&#40;</span>filter<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            dto.<span style="color: #660066;">setTotal</span><span style="color: #009900;">&#40;</span>total<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            session.<span style="color: #660066;">setAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;totalObject&quot;</span><span style="color: #339933;">,</span> total<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        List<span style="color: #339933;">&lt;</span>Object<span style="color: #339933;">&gt;</span> retorno <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>List<span style="color: #339933;">&lt;</span>Object<span style="color: #339933;">&gt;</span><span style="color: #009900;">&#41;</span> repository.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span>filter<span style="color: #339933;">,</span> start<span style="color: #339933;">,</span> limit<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        dto.<span style="color: #660066;">setResults</span><span style="color: #009900;">&#40;</span>retorno<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">return</span> dto<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Para o Grid visto no artigo passado, basta instanciar assim no javscript:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> store <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">data</span>.<span style="color: #660066;">Store</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    proxy<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">ux</span>.<span style="color: #660066;">data</span>.<span style="color: #660066;">DWRProxy</span><span style="color: #009900;">&#40;</span>
        AjaxFacade.<span style="color: #660066;">find</span><span style="color: #339933;">,</span> 
        <span style="color: #009900;">&#123;</span>$dwrClassName<span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;Project&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
        errorHandler
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    reader<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">data</span>.<span style="color: #660066;">JsonReader</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
            root<span style="color: #339933;">:</span> <span style="color: #3366CC;">'results'</span><span style="color: #339933;">,</span>totalProperty<span style="color: #339933;">:</span> <span style="color: #3366CC;">'total'</span><span style="color: #339933;">,</span>id<span style="color: #339933;">:</span> <span style="color: #3366CC;">'id'</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
        <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'id'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'name'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'manager.name'</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">'manager.address.country'</span><span style="color: #009900;">&#93;</span>
    <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Para entender o<em> {$dwrClassName:&#8221;Project&#8221;}</em> <a href="http://www.milfont.org/tech/2008/12/24/dwr-3-release-candidate-1/">visite esse post</a>.</p>
<p>Dessa forma o DWR se torna um proxy para todos os componentes do Extjs.</p>
<p>Código fonte da modificação do javascript eu <a href="http://github.com/cmilfont/MilfontExtjs/tree/master">coloquei aqui no github</a> e uma <a href="https://github.com/cmilfont/example-dwr-extjs/tree">aplicação demo aqui</a>. No próximo vou integrar o DWR com o Rails, aguardem que sai logo&#8230; ou não.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2009/07/02/extjs-e-dwr/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>DWR 3 Release Candidate 1</title>
		<link>http://www.milfont.org/tech/2008/12/24/dwr-3-release-candidate-1/</link>
		<comments>http://www.milfont.org/tech/2008/12/24/dwr-3-release-candidate-1/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 15:33:43 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[DWR]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Joe Walker]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=481</guid>
		<description><![CDATA[Joe Walker anunciou que saiu a RC1 do DWR3 com pequeno atraso com novidades interessantes como suporte a Varargs, Method Overloading, entre outras coisas. Mas destaco algo que deveria ter há tempos e sentíamos falta para construções repetitivas como CRUD (principalmente) que é o que chamou de &#8220;Lightweight typed parameters&#8220;. Até a versão 2 temos [...]]]></description>
			<content:encoded><![CDATA[<p>Joe Walker <a href="http://directwebremoting.org/blog/joe/2008/12/16/dwr_version_3_0_release_candidate_1.html">anunciou</a> que saiu a <a href="http://directwebremoting.org/dwr/download">RC1</a> do <a href="http://directwebremoting.org/dwr">DWR3</a> com <a href="http://www.milfont.org/tech/2008/03/11/dwr-3-em-junho/">pequeno atraso</a> com novidades interessantes como suporte a Varargs, Method Overloading, entre outras coisas. Mas destaco algo que deveria ter há tempos e sentíamos falta para construções repetitivas como CRUD (principalmente) que é o que chamou de &#8220;<strong>Lightweight typed parameters</strong>&#8220;.</p>
<p>Até a versão 2 temos que construir métodos no <a href="http://directwebremoting.org/dwr/server/dwrxml/creators">Creator</a> com implementação nos argumentos devido ao DWR não ter como fazer o binding entre o Javascript e o Java sem saber quem é o objeto. Algo assim:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> AjaxFacade <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> User teste<span style="color: #009900;">&#40;</span>User param<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		param.<span style="color: #006633;">setDescription</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Teste funcionou&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">return</span> param<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>No javascript:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">AjaxFacade.<span style="color: #660066;">teste</span><span style="color: #009900;">&#40;</span>
	<span style="color: #009900;">&#123;</span>
		id<span style="color: #339933;">:</span><span style="color: #CC0000;">42</span> <span style="color: #006600; font-style: italic;">//JSON que representa o objeto User</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
	<span style="color: #009900;">&#123;</span>
		callback<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>retorno<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>retorno.<span style="color: #660066;">toSource</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		errorHandler<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>error<span style="color: #339933;">,</span> message<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
		timeout<span style="color: #339933;">:</span><span style="color: #CC0000;">5000</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Agora foi adicionado a propriedade <strong><em>$dwrClassName</em></strong> no <a href="http://directwebremoting.org/dwr/server/dwrxml/converters">Converter</a> onde você pode trabalhar com a interface ao invés da implementação. Vejamos com o Object como argumento no mesmo método:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> AjaxFacade <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Object</span> teste<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> param<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">//puramente ilustrativo não peça fundamentação lógica :)</span>
		<span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>param <span style="color: #000000; font-weight: bold;">instanceof</span> User<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
			<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>User<span style="color: #009900;">&#41;</span> param<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">setDescription</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Teste funcionou&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000000; font-weight: bold;">return</span> param<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>No javascript:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">AjaxFacade.<span style="color: #660066;">teste</span><span style="color: #009900;">&#40;</span>
	<span style="color: #009900;">&#123;</span>
		id<span style="color: #339933;">:</span><span style="color: #CC0000;">42</span> <span style="color: #006600; font-style: italic;">//JSON que representa o objeto User,</span>
		$dwrClassName<span style="color: #339933;">:</span><span style="color: #3366CC;">&quot;User&quot;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
	<span style="color: #009900;">&#123;</span>
		callback<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>retorno<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>retorno.<span style="color: #660066;">toSource</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
		errorHandler<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>error<span style="color: #339933;">,</span> message<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span>message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> 
		timeout<span style="color: #339933;">:</span><span style="color: #CC0000;">5000</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Agora aquelas centenas de classes que fazem a mesma coisa [CRUDzão velho de guerra] podem ser resumidas em uma única Facade que faz suas validações e aciona um Repository ou sua estrutura de persistência.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> AjaxFacade <span style="color: #009900;">&#123;</span>
	@Autowired <span style="color: #003399;">Repository</span> repository<span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Object</span> persistir<span style="color: #009900;">&#40;</span><span style="color: #003399;">Object</span> param<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>param <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> ...
		<span style="color: #006633;">repository</span>.<span style="color: #006633;">persist</span><span style="color: #009900;">&#40;</span>param<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">return</span> param<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Agora não tem como não termos um Feliz Natal!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2008/12/24/dwr-3-release-candidate-1/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Minificação de Javascript com Ant Task</title>
		<link>http://www.milfont.org/tech/2008/12/16/minificacao-de-javascript-com-ant-task/</link>
		<comments>http://www.milfont.org/tech/2008/12/16/minificacao-de-javascript-com-ant-task/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 20:06:34 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[High Performance]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Melhores práticas]]></category>
		<category><![CDATA[Otimização]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[YUI]]></category>
		<category><![CDATA[ant]]></category>
		<category><![CDATA[ant task]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[minificação]]></category>
		<category><![CDATA[minified]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=459</guid>
		<description><![CDATA[Em um post passado eu falei da importância de unir e minificar arquivos js em determinados casos e discuti &#8220;quando&#8221; fazer isso, vou mostrar &#8220;como&#8221; minificar usando o YUI Compressor com tasks do Apache Ant montados por Viktor Lieskovsky do Javaflight. Esse pequeno tutorial-guia faz parte do material dos meus cursos de Javascript e Ajax [...]]]></description>
			<content:encoded><![CDATA[<p>Em um <a href="http://www.milfont.org/tech/2008/02/10/javascript-inline-e-external/">post passado</a> eu falei da importância de unir e minificar arquivos js em determinados casos e discuti &#8220;quando&#8221; fazer isso, vou mostrar &#8220;como&#8221; minificar usando o <a href="http://developer.yahoo.com/yui/compressor/">YUI Compressor</a> com tasks do <a href="http://ant.apache.org/">Apache Ant</a> <a href="http://code.google.com/p/javaflight-code/">montados por Viktor Lieskovsky</a> do <a href="http://javaflight.blogspot.com/">Javaflight</a>.</p>
<p>Esse pequeno tutorial-guia faz parte do material dos meus cursos de Javascript e Ajax e serve para deixar um histórico acessível aos alunos e fácil para leitores que por ventura precisem.</p>
<p>Preparei um ambiente de execução com todas as dependências no <a href="http://www.milfont.org/tech/projetos/">projeto</a> <a href="http://code.google.com/p/remendux/">Remendux</a> onde vocês podem fazer <a href="http://code.google.com/p/remendux/source/checkout">checkout</a> e rodar o build ant localmente como um projeto do eclipse &#8211; estou usando o plugin para o <a href="http://subclipse.tigris.org/">SVN Subclipse</a>.</p>
<p>Montei um script ant padrão bem simples de ser entendido por iniciantes:</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;project</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;jsmin&quot;</span> <span style="color: #000066;">default</span>=<span style="color: #ff0000;">&quot;main&quot;</span> <span style="color: #000066;">basedir</span>=<span style="color: #ff0000;">&quot;.&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #808080; font-style: italic;">&lt;!-- Propriedades para definir nomes de pastas que usaremos --&gt;</span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;js&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;js&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;build&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;build&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;lib&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;lib&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;output&quot;</span> <span style="color: #000066;">value</span>=<span style="color: #ff0000;">&quot;output&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #808080; font-style: italic;">&lt;!-- Propriedades para definir nomes os arquivos necessários --&gt;</span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;yui-compressor.jar&quot;</span></span>
<span style="color: #009900;">		<span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${lib}/yuicompressor-2.4.2.jar&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;property</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;yui-compressor-ant-task.jar&quot;</span> </span>
<span style="color: #009900;">		<span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${lib}/yui-compressor-ant-task-0.3.jar&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #808080; font-style: italic;">&lt;!-- Incluir as libs necessárias no classpath --&gt;</span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;path</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;task.classpath&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;pathelement</span> <span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${yui-compressor.jar}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;pathelement</span> <span style="color: #000066;">location</span>=<span style="color: #ff0000;">&quot;${yui-compressor-ant-task.jar}&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/path<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #808080; font-style: italic;">&lt;!-- Definição da task para o Ant reconhecer --&gt;</span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;taskdef</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;yui-compressor&quot;</span> </span>
<span style="color: #009900;"><span style="color: #000066;">classname</span>=<span style="color: #ff0000;">&quot;net.noha.tools.ant.yuicompressor.tasks.YuiCompressorTask&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;classpath</span> <span style="color: #000066;">refid</span>=<span style="color: #ff0000;">&quot;task.classpath&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/taskdef<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;clean&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;delete</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;build&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;delete</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;output&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mkdir</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;build&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;mkdir</span> <span style="color: #000066;">dir</span>=<span style="color: #ff0000;">&quot;output&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;target</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;main&quot;</span> <span style="color: #000066;">depends</span>=<span style="color: #ff0000;">&quot;clean&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #808080; font-style: italic;">&lt;!-- Tag do Ant para concatenar arquivos </span>
<span style="color: #808080; font-style: italic;">		[ http://ant.apache.org/manual/CoreTasks/concat.html] </span>
<span style="color: #808080; font-style: italic;">		os arquivos são unidos na sequência de definição </span>
<span style="color: #808080; font-style: italic;">		no fileset</span>
<span style="color: #808080; font-style: italic;">		--&gt;</span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;concat</span> <span style="color: #000066;">destfile</span>=<span style="color: #ff0000;">&quot;${output}/remendux.js&quot;</span> <span style="color: #000066;">force</span>=<span style="color: #ff0000;">&quot;no&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;fileset</span> <span style="color: #000066;">file</span>=<span style="color: #ff0000;">&quot;${js}/util.js&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
			<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;fileset</span> <span style="color: #000066;">file</span>=<span style="color: #ff0000;">&quot;${js}/remendux.js&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/concat<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
		<span style="color: #808080; font-style: italic;">&lt;!-- Task do yui-compressor --&gt;</span>
		 <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;yui-compressor</span> <span style="color: #000066;">warn</span>=<span style="color: #ff0000;">&quot;false&quot;</span>  <span style="color: #000066;">munge</span>=<span style="color: #ff0000;">&quot;true&quot;</span>  </span>
<span style="color: #009900;">				<span style="color: #000066;">preserveallsemicolons</span>=<span style="color: #ff0000;">&quot;false&quot;</span> </span>
<span style="color: #009900;">				<span style="color: #000066;">fromdir</span>=<span style="color: #ff0000;">&quot;${output}&quot;</span> <span style="color: #000066;">todir</span>=<span style="color: #ff0000;">&quot;${build}&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span>
		<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/yui-compressor<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/target<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/project<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>Após a importação, para executar o script &#8211; que chamei de build-yui.xml &#8211; basta apenas executar com o ant pelo eclipse &#8211; vide imagem abaixo &#8211; ou em linha de comando. Estou usando o Ant 7.1 com java 6u10 e Eclipse 3.4, portanto caso haja um erro atente para a versão das ferramentas usadas.</p>
<p><img src="http://www.milfont.org/tech/wp-content/uploads/2008/12/build.jpg" alt="" title="build"  class="aligncenter size-medium wp-image-464" /></p>
<p>Após executar, observe a redução de tamanho na versão minificada [../build/remendux-min.js] para a versão concatenada [../output/remendux.js ]. A versão final ficou com 30% do tamanho com documentação e identação.</p>

<div class="wp_syntax"><div class="code"><pre class="abap" style="font-family:monospace;">Buildfile<span style="color: #808080;">:</span> C<span style="color: #808080;">:</span>\workspace\remendux\build<span style="color: #808080;">-</span>yui<span style="color: #808080;">.</span>xml
     <span style="color: #808080;">&#91;</span>echo<span style="color: #808080;">&#93;</span> Building <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">output</span>
clean<span style="color: #808080;">:</span>
    <span style="color: #808080;">&#91;</span>mkdir<span style="color: #808080;">&#93;</span> Created dir<span style="color: #808080;">:</span> C<span style="color: #808080;">:</span>\workspace\remendux\build
    <span style="color: #808080;">&#91;</span>mkdir<span style="color: #808080;">&#93;</span> Created dir<span style="color: #808080;">:</span> C<span style="color: #808080;">:</span>\workspace\remendux\<span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">output</span>
main<span style="color: #808080;">:</span>
<span style="color: #808080;">&#91;</span>yui<span style="color: #808080;">-</span>compressor<span style="color: #808080;">&#93;</span>
 <span style="color: #808080;">&#91;</span><span style="color: #3399ff;">30</span><span style="color: #808080;">%</span><span style="color: #808080;">&#93;</span> remendux<span style="color: #808080;">.</span>js <span style="color: #808080;">&#91;</span><span style="color: #3399ff;">5775</span><span style="color: #808080;">&#93;</span> <span style="color: #808080;">---&gt;</span> <span style="color: #202020;">remendux</span><span style="color: #808080;">-</span><span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">min</span><span style="color: #808080;">.</span>js <span style="color: #808080;">&#91;</span><span style="color: #3399ff;">1734</span><span style="color: #808080;">&#93;</span>
<span style="color: #808080;">&#91;</span>yui<span style="color: #808080;">-</span>compressor<span style="color: #808080;">&#93;</span>
 <span style="color: #808080;">&#91;</span>JavaScript<span style="color: #808080;">&#93;</span> Compressed <span style="color: #3399ff;">1</span> files <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">to</span> <span style="color: #3399ff;">30</span><span style="color: #808080;">%</span> <span style="color: #808080;">&#40;</span>5KB <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">to</span> 1KB<span style="color: #808080;">,</span> saving 4KB<span style="color: #808080;">&#41;</span>
<span style="color: #808080;">&#91;</span>yui<span style="color: #808080;">-</span>compressor<span style="color: #808080;">&#93;</span>
 <span style="color: #808080;">&#91;</span>CSS<span style="color: #808080;">&#93;</span> <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">No</span> files <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">to</span> compress<span style="color: #808080;">,</span> <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">or</span> <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">all</span> files already <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">up to</span> <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">date</span>
<span style="color: #808080;">&#91;</span>yui<span style="color: #808080;">-</span>compressor<span style="color: #808080;">&#93;</span>
 Compressed <span style="color: #3399ff;">1</span> files <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">to</span> <span style="color: #3399ff;">30</span><span style="color: #808080;">%</span> <span style="color: #808080;">&#40;</span>5KB <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">to</span> 1KB<span style="color: #808080;">,</span> saving 4KB<span style="color: #808080;">&#41;</span>
BUILD SUCCESSFUL
Total <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">time</span><span style="color: #808080;">:</span> <span style="color: #3399ff;">12</span> <span style="color: #500066; text-transform: uppercase; font-weight: bold; zzz:keyword;">seconds</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2008/12/16/minificacao-de-javascript-com-ant-task/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Videos e Fotos do IV Natal Java Day</title>
		<link>http://www.milfont.org/tech/2008/11/28/videos-do-iv-natal-java-day/</link>
		<comments>http://www.milfont.org/tech/2008/11/28/videos-do-iv-natal-java-day/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 17:44:57 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[palestras]]></category>
		<category><![CDATA[Redes sociais]]></category>
		<category><![CDATA[Tuangr]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[cejug]]></category>
		<category><![CDATA[Esquadrão de Elite Ceará]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Day]]></category>
		<category><![CDATA[Natal]]></category>
		<category><![CDATA[Open Social]]></category>
		<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[palestra]]></category>
		<category><![CDATA[Social Network]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[web 2.0]]></category>
		<category><![CDATA[WEB2]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=410</guid>
		<description><![CDATA[Videos da minha palestra, gravados pelo René: Fotos Album do JavaRN Album do Handerson Frota]]></description>
			<content:encoded><![CDATA[<p>Videos da minha <a href="http://www.milfont.org/tech/2008/11/24/material-iv-natal-java-day-2008/">palestra</a>, gravados pelo <a href="http://renearaujo.blogspot.com/">René</a>:</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/LD6HaVPL9Dk&amp;hl=pt-br&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/LD6HaVPL9Dk&amp;hl=pt-br&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></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/YlvCMfov11Q&amp;hl=pt-br&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/YlvCMfov11Q&amp;hl=pt-br&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></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/iJTbpHJa0CU&amp;hl=pt-br&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/iJTbpHJa0CU&amp;hl=pt-br&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></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/K8CrywEmnFo&amp;hl=pt-br&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/K8CrywEmnFo&amp;hl=pt-br&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<h2>Fotos</h2>
<p>Album do <a href="http://picasaweb.google.com/grupojavarn/IVNatalJavaDay">JavaRN</a><br />
Album do <a href="http://picasaweb.google.com/handersonbf/NatalJavaDay2008">Handerson Frota</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2008/11/28/videos-do-iv-natal-java-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Material IV Natal Java Day &#8211; 2008</title>
		<link>http://www.milfont.org/tech/2008/11/24/material-iv-natal-java-day-2008/</link>
		<comments>http://www.milfont.org/tech/2008/11/24/material-iv-natal-java-day-2008/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 13:02:48 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[cejug]]></category>
		<category><![CDATA[Cloud Computing]]></category>
		<category><![CDATA[palestras]]></category>
		<category><![CDATA[Redes sociais]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Natal]]></category>
		<category><![CDATA[Open Social]]></category>
		<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[palestra]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=402</guid>
		<description><![CDATA[Retornamos da viagem ao fantástico evento IV Natal Java Day, acompanhem o que rolou na cobertura que o Handerson Frota fez. Todas as palestras estavam em alto nível, mas o destaque desse evento na minha opinião foi a palestra do Rodrigo Rebouças, &#8220;Timing&#8221; perfeito e apresentação impecável. Vivemos em uma era muito fantástica na história [...]]]></description>
			<content:encoded><![CDATA[<p>Retornamos da viagem ao fantástico evento <a href="http://www.milfont.org/tech/2008/11/19/iv-natal-java-day-2008/">IV Natal Java Day</a>, acompanhem o que rolou na cobertura que o <a href="http://www.handersonfrota.com.br/">Handerson Frota fez</a>.</p>
<p>Todas as palestras estavam em alto nível, mas o destaque desse evento na minha opinião foi a palestra do <a href="http://rodrigor.com/">Rodrigo Rebouças</a>, &#8220;<em>Timing</em>&#8221; perfeito e apresentação impecável.</p>
<p>Vivemos em uma era muito fantástica na história da humanidade, conheci o <a href="http://twitter.com/karlisson">@Karlisson</a> [autor das tirinhas mais bacanas do Brasil no "<a href="http://nerdson.com/blog/">Nerdson não vai à escola</a>" ] porque estávamos &#8220;<em>twitando</em>&#8221; na mesma sala lá no evento. Ele <a href="http://twitter.com/karlisson/status/1018119406">postou</a> e eu o <a href="http://twitter.com/cmilfont/status/1018175942">encontrei</a>.</p>
<p>Por coincidência, no final da minha palestra eu fiz um sorteio de uma camisa e foi o Karlisson quem acertou a resposta, para os <a href="http://twitter.com/elomar/status/1018527014">protestos</a> da <a href="http://twitter.com/karlisson/status/1018550271">Twittosfera</a> que <a href="http://twitter.com/marcosbarbosa/status/1018556454">afirmou</a> que o <a href="http://twitter.com/elomar">@Elomar</a> respondeu primeiro. Desculpem caras, realmente não ouvi <img src='http://www.milfont.org/tech/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Material da minha palestra.</p>
<div id="__ss_778657" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Opensocial" href="http://www.slideshare.net/cmilfont/opensocial-presentation-778657?type=powerpoint">Opensocial</a><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" 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://static.slideshare.net/swf/ssplayer2.swf?doc=opensocialtemplateivia-1227387039375385-9&amp;stripped_title=opensocial-presentation-778657" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=opensocialtemplateivia-1227387039375385-9&amp;stripped_title=opensocial-presentation-778657" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View SlideShare <a style="text-decoration:underline;" title="View Opensocial on SlideShare" href="http://www.slideshare.net/cmilfont/opensocial-presentation-778657?type=powerpoint">presentation</a> or <a style="text-decoration:underline;" href="http://www.slideshare.net/upload?type=powerpoint">Upload</a> your own. (tags: <a style="text-decoration:underline;" href="http://slideshare.net/tag/opensocial">opensocial</a>)</div>
</div>
<p>Links importantes:</p>
<p><a href="http://code.google.com/apis/opensocial/">API da especificação Opensocial.</a></p>
<p><a href="http://incubator.apache.org/shindig/">Shindig</a>, projeto opensource e implementação de referência da API.</p>
<p><a href="https://socialsite.dev.java.net/">SocialSite</a>, um container OpenSocial em Java com implementação funcional total, inclusive de banco de dados.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2008/11/24/material-iv-natal-java-day-2008/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>IV Natal Java Day 2008</title>
		<link>http://www.milfont.org/tech/2008/11/19/iv-natal-java-day-2008/</link>
		<comments>http://www.milfont.org/tech/2008/11/19/iv-natal-java-day-2008/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 12:22:43 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[cejug]]></category>
		<category><![CDATA[palestras]]></category>
		<category><![CDATA[Redes sociais]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java Day]]></category>
		<category><![CDATA[Natal]]></category>
		<category><![CDATA[palestra]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=394</guid>
		<description><![CDATA[No dia 22 de Novembro de 2008 acontecerá o IV Natal Java Day em  Natal-RN organizado pelo Grupo de Usuário JavaRN. Faça sua inscrição. Volto a essa cidade maravilhosa e acolhedora para palestrar sobre OpenSocial, alguns amigos irão palestrar também, confira as palestras que serão ministradas por cearenses: Handerson Frota (http://www.handersonfrota.com.br/) Palestra: DWR: Utilizando o [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-275" title="cabecalho_novojavaday" src="http://www.handersonfrota.com.br/blog/wp-content/uploads/2008/11/cabecalho_novojavaday.jpg" alt="" width="498" height="106" /></p>
<p>No dia 22 de Novembro de 2008 acontecerá o <a href="http://www.jeebrasil.com.br/nataljavaday/index.jsp" target="_blank">IV Natal Java Day</a> em  Natal-RN organizado pelo <a href="http://javarn.dev.java.net/" target="_blank">Grupo de Usuário JavaRN</a>. Faça sua <a href="http://www.jeebrasil.com.br/inscricao/24">inscrição</a>.</p>
<p><a href="http://www.milfont.org/tech/2007/10/09/iii-natal-java-day/">Volto</a> a essa cidade maravilhosa e acolhedora para palestrar sobre <a href="http://code.google.com/apis/opensocial/">OpenSocial</a>, <a href="http://www.handersonfrota.com.br/iv-natal-java-day/">alguns</a> <a href="http://www.rponte.com.br/">amigos</a> irão palestrar também, <a href="http://www.jeebrasil.com.br/nataljavaday/programacao.jsp">confira as palestras</a> que serão ministradas por cearenses:</p>
<p><strong>Handerson Frota (<a href="http://www.handersonfrota.com.br/">http://www.handersonfrota.com.br/</a>)<br />
<a href="http://www.jeebrasil.com.br/nataljavaday/resumos/palestraHanderson.jsp">Palestra</a>:</strong> <strong>DWR: Utilizando o COMET/ReverseAjax do DWR</strong><br />
<em>Nesta palestra apresentaremos uma visão prática de como utilizar o ReverserAjax do DWR. Uma pequena introdução ao conceito de COMET e veremos como funciona a comunicação do DWR para efetuar chamadas utilizando ReverseAjax. Como configurar o DWR para cada tipo de conexão do Reverse Ajax aceito por ele. Serão mostrados exemplos como prova de conceito.</em></p>
<p><strong>Rafael Ponte</strong> (<a href="http://www.rponte.com.br/" target="_blank">www.rponte.com.br</a>)<br />
<strong><a href="http://www.jeebrasil.com.br/nataljavaday/resumos/palestraRafael.jsp">Palestra</a>: Os 10 maus hábitos dos desenvolvedores JSF</strong><br />
<em>Toda tecnologia tende a trazer consigo um novo paradigma de como desenvolver partes específicas de software, contudo, algumas novas práticas nem sempre são entendidas, e algumas vezes antigas práticas permanecem dentro do novo paradigma tornando-se assim maus hábitos, e com JSF não seria diferente.<br />
Aqui será apresentado 10 discussões sobre os maus hábitos mais comuns entre os desenvolvedores JSF, hábitos encontrados não somente entre iniciantes, mas também entre alguns desenvolvedores mais experientes, e por sua vez será apresentado soluções para cada um deles.</em></p>
<p><strong>Christiano Milfont</strong><br />
<strong><a href="http://www.jeebrasil.com.br/nataljavaday/resumos/palestraChristiano.jsp">Palestra</a>:</strong> <strong>OpenSocial: Padronização das redes sociais</strong><br />
<em>OpenSocial é uma especificação aberta proposta pelo Google e adotada pela maioria das redes sociais como MySpace, Hi5, Ning, Orkut, Salesforce.com e Linkedin, entre outros.<br />
Composta de APIs comuns, permite que desenvolvedores possam escrever aplicações sociais que funcionam em qualquer um destes sites seguindo a filosofia do Java: “escreve uma vez, roda em todos os lugares”. Nesta palestra será demonstrado o que é o OpenSocial e em que se baseia uma rede social. Também veremos exemplos de aplicações em containers OpenSocial e como criar uma aplicação OpenSocial.</em></p>
<p><strong>Rodrigo Rebouças [PBJUG]</strong> (<a href="http://rodrigor.com/"><strong>http://rodrigor.com/</strong></a>)<br />
<strong><a href="http://www.jeebrasil.com.br/nataljavaday/resumos/palestraRodrigo.jsp">Palestra</a>:</strong> <strong>A Tempestade por trás da computação nas nuvens</strong><br />
<em>O que é a computação nas nuvens (Cloud Computing)? Quais são os desafios que este conceito trás para nós que desenvolvemos software? Nesta palestra conversaremos sobre estas questões e sobre problemas e soluções no desenvolvimento de aplicações de larga escala.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2008/11/19/iv-natal-java-day-2008/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

