<?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; web2.0</title>
	<atom:link href="http://www.milfont.org/tech/category/web20/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>Pirataria e o caso Megaupload</title>
		<link>http://www.milfont.org/tech/2012/01/26/pirataria-e-o-caso-megaupload/</link>
		<comments>http://www.milfont.org/tech/2012/01/26/pirataria-e-o-caso-megaupload/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 11:29:52 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[web2.0]]></category>
		<category><![CDATA[compartilhamento]]></category>
		<category><![CDATA[Livre Circulação]]></category>
		<category><![CDATA[Pirataria]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=1586</guid>
		<description><![CDATA[Considero o finado Megaupload e similares iguais a um camelô que vende DVD pirata no centro da cidade. Ambos representam a mesma filosofia, copiam obras sob leis de copyright e faturam sem pagar royalties. Isso é pirataria ☠, Don Vito Corleone disse uma vez: Não me importa como um homem ganha sua vida, desde que [...]]]></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/2012/01/26/pirataria-e-o-caso-megaupload/";
				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.milfont.org/tech/wp-content/uploads/2012/01/Captura-de-tela-2012-01-26-às-08.25.50.png"><img class="alignleft size-medium wp-image-1593" style="margin-left: 10px; margin-right: 10px;" title="megaupload" src="http://www.milfont.org/tech/wp-content/uploads/2012/01/Captura-de-tela-2012-01-26-às-08.25.50-300x234.png" alt="" width="300" height="234" /></a></p>
<p>Considero o finado Megaupload e similares iguais a um camelô que vende DVD pirata no centro da cidade. Ambos representam a mesma filosofia, copiam obras sob leis de copyright e faturam sem pagar royalties.</p>
<p>Isso é pirataria ☠, Don Vito Corleone disse uma vez:</p>
<blockquote><p>Não me importa como um homem ganha sua vida, desde que não atrapalhe meus negócios.</p></blockquote>
<p>Logo depois ele levou tiros e foi parar no hospital, mensagem de vida para demonstrar que mesmo no crime existe ética e posicionamento. Quando você relega a defesa de seus princípios essa omissão retorna contra você.</p>
<p>Eu não vou exaltar o que o grupo #anonymous fez, estão defendendo quem não merece e isso ajuda a atrapalhar o entendimento já confuso sobre a diferença entre pirataria e compartilhamento.</p>
<p>Sobre o que penso sobre compartilhamento está resumido numa <a href="http://www.milfont.org/tech/2008/05/20/livre-circulacao-de-informacao-ou-pirataria/">entrevista que dei para o Uol</a> em 2007. Tem quase tudo lá.</p>
<h2>Pirataria vs Compartilhamento</h2>
<p>Eu como anarco, considero o compartilhamento justo e salutar, ninguém tem dinheiro ou disposição suficiente de comprar todas as obras que existem sejam de que campo de conhecimento for, isso é até impossível. O problema com o digital é a tênue fronteira entre  &#8221;emprestar&#8221; a cópia que comprei legalmente com um amigo e espalhar uma obra fazendo que ninguém precise comprar.</p>
<p>Corrijo-me, o problema não é com o digital, é com a distribuição. Vejamos:</p>
<p>Na época da fita cassete a indústria até mantinha incentivos para que as pessoas compartilhassem suas cópias, o mesmo aconteceu com o cd facilitando a cópias e barateando o custo de copiar, ainda assim isso não ameaçou os negócios. Era muito trabalhoso, voce fazia cópias e teria que se encontrar com o amigo para entregar, o boca-a-boca necessário para ajudar no marketing era lento. Nosso P2P da época.</p>
<p>Com a internet a distribuição ficou gratuita, não temos mais necessidade de encontro físico, Era do napster e depois kazaa. Aí a indústria começou a amargar diminuição de vendas.</p>
<p>Depois surgiram tecnologias que facilitariam o P2P como o torrent, utopia anarquista.</p>
<h2>Atravessadores?</h2>
<p>Hoje eu considero as empresas tradicionais da indústria do entretenimento como atravessadores modernos, talvez caixeiros-viajantes. O problema que acontece em qualquer Era é substituir um modelo já estabelecido com ruptura brusca sem uma alternativa viável para os antigos donos do dinheiro. A mesma internet que facilita novos modelos de  negócios destrói os antigos como as carroças que desapareceram ou profissões como acendedor de lampião do século 19.</p>
<p>Qual a solução? Até lá muitos processos acontecerão, mas defender estruturas atravessadoras como o Megaupload não é a solução.</p>
<h2>tl;dr</h2>
<p>Eu defendo compartilhamento e que se criem leis para  legislar os limites do que seja compartilhar, não defendo pirataria, que se prenda aqueles que desobedecem as leis. Sou anarco, não <a href="http://pt.wikipedia.org/wiki/Anomia">anomista</a>.</p>
<p><a href="https://twitter.com/#!/cmilfont/status/162167850633662464">https://twitter.com/#!/cmilfont/status/162167850633662464</a></p>
<p><a href="http://www.milfont.org/tech/wp-content/uploads/2012/01/Captura-de-tela-2012-01-26-às-08.18.14.png"><img class="alignnone size-medium wp-image-1591" title="Twitter sobre compartilhamento e megaupload" src="http://www.milfont.org/tech/wp-content/uploads/2012/01/Captura-de-tela-2012-01-26-às-08.18.14-300x201.png" alt="" width="300" height="201" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2012/01/26/pirataria-e-o-caso-megaupload/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>[Resenha] O Culto do Amador</title>
		<link>http://www.milfont.org/tech/2010/04/09/resenha-o-culto-do-amador/</link>
		<comments>http://www.milfont.org/tech/2010/04/09/resenha-o-culto-do-amador/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 13:39:54 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[crowds]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[crowd]]></category>
		<category><![CDATA[crowdsourcing]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/2010/04/09/resenha-o-culto-do-amador/</guid>
		<description><![CDATA[O livro O Culto do Amador de Andrew Keen é um ótimo e péssimo livro dependendo da visão de quem ler, na minha opinião. Ótimo livro para entendermos como pensa uma pessoa da segunda onda sobre choque de ondas e péssimo para quem tem mentalidade de segunda onda e quer entender os fenômenos que nos [...]]]></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/04/09/resenha-o-culto-do-amador/";
				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.submarino.com.br/produto/1/21500994/?franq=170940"><img class="alignleft" title="Culto do Amador" src="http://i.s8.com.br/images/books/cover/img4/21500994.jpg" alt="Culto do Amador" width="180" height="180" /></a>O livro <a href="http://www.submarino.com.br/produto/1/21500994/?franq=170940">O Culto do Amador</a> de <a href="http://en.wikipedia.org/wiki/Andrew_Keen">Andrew Keen</a> é um ótimo e péssimo livro dependendo da visão de quem ler, na minha opinião. Ótimo livro para entendermos como pensa uma pessoa da segunda onda sobre <a href="http://www.milfont.org/tech/2010/04/07/o-mundo-em-que-vivemos/">choque de ondas</a> e péssimo para quem tem mentalidade de segunda onda e quer entender os fenômenos que nos assolam.</p>
<p>Como um defensor da Terceira Onda eu não considero certo ou errado a concepção que as pessoas tem do mundo e de eventos e ações que parecem ser erradas para elas. O problema é que essas mesmas pessoas considerem erradas a visão das outras culturas e é isso o cerne desse livro.</p>
<p><a href="http://www.amazon.com/gp/product/0385520808?ie=UTF8&amp;tag=milftech-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0385520808"><img class="alignright" title="The Cult of the Amateur" src="http://ecx.images-amazon.com/images/I/4172WzXNPrL._SL160_.jpg" alt="The Cult of the Amateur" width="107" height="160" /></a>Quando o autor trata sobre a morte da música em dois capítulos por causa do compartilhamento, praticamente é a idéia geral em todo o livro, ele esquece que a música já existia antes da revolução industrial, modelo que ele defende e acha correto.</p>
<p>Se perceberem, as pessoas com mentalidade de primeira onda acham que a música morreu e foi pasteurizada após o surgimento da rev. industrial. Esse choque de culturas é natural e esperado.</p>
<p>O autor não considera é que a troca de arquivos ou de &#8220;músicas&#8221; não está matando a música, está matando aquilo que entendemos como indústria musical, que para ele é o formato que dá sustentação para que surjam artistas, como foi educado a compreender.</p>
<p>O autor não investiga os fatos que estão destruindo modelos de negócios típicos da segunda onda, ele está preocupado como mantê-los. O modelo de negócios nessa onda são baseados em Hits. Como o custo de distribuição e produção é enorme, só existem duas classes: O astro e o desconhecido não-publicado.</p>
<p>A nova onda permite agora, por causa da<a href="http://www.submarino.com.br/produto/1/1644179/cauda+longa,+a?franq=170940"> cauda longa</a>, que pessoas antes impedidas pela limitação de recursos sejam publicadas num <a href="http://www.lulu.com/">Lulu.com</a> ou Youtube.</p>
<p>O conceito de <a href="http://en.wikipedia.org/wiki/Amateur_professionalism">ProAm</a> ou <a href="http://pt.wikipedia.org/wiki/Prosumer">Prosumidor</a> é virulamente atacado no livro por considerar que isso vai afastar ou denigrir o trabalho profissional quando na verdade o que ocorre é que agora qualquer pessoas tem o direito &#8211; ou privilégio &#8211; de poder exercitar ou praticar determinada ação  e não que o profissional esteja impedido de exercer.</p>
<p>A visão de segunda onda é baseada no comando-controle e na concepção de que existem entidades ou departamentos, como governos e universidades, que controlam e decidem quem pode exercer determinado conhecimento após um processo burocrático de investigação. A idéia de que as pessoas tem liberdade de praticarem livremente e que o indivíduo tem escolhas é um desses fatores de choque que são defendidos no livro em favor da onda anterior.</p>
<p>A premissa de credibilidade que antes era imposta por um terceiro agente agora é dado ao indivíduo e a multidão que ele participa. Antes você tinha que ser escolhido por uma editora para publicar um livro e isso definia o conceito de sucesso per si, agora você pode simplesmente escrever o que bem entender, publicar e &#8220;ineditamente&#8221; ser comprado sem ter gasto 1 centavo em marketing. Essa concepção de valor também é criticada no livro.</p>
<p>Agora o que mais é sacrificado na visão do autor é o conceito de <a href="http://pt.wikipedia.org/wiki/Crowdsourcing">Crowdsourcing</a>. Sabemos que uma multidão pode ser <a href="http://www.submarino.com.br/produto/1/1313125/?franq=170940">facilmente controlada</a>, isso existe em todas as ondas e não será maior porque a credibilidade de algo é definido por essa multidão. O que investigamos é que <a href="http://www.submarino.com.br/produto/1/1955787?franq=170940">modelos de negócios com base em Crowdsourcing</a> vão surgir invariavelmente, quer queiramos ou não. Nada do que fizermos vai evitar, apenas &#8211; no máximo &#8211; retardar, como foram todas as ações que a primeira onda tentou nesses últimos 300 ou 400 anos.</p>
<p>Eu acho um livro válido para se ter em minha biblioteca para ser a antítese de outras obras e explicação de ações que surgirão e se intensificarão nos próximos anos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2010/04/09/resenha-o-culto-do-amador/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>O Mundo Em Que Vivemos</title>
		<link>http://www.milfont.org/tech/2010/04/07/o-mundo-em-que-vivemos/</link>
		<comments>http://www.milfont.org/tech/2010/04/07/o-mundo-em-que-vivemos/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 15:30:08 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[crowds]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[crowd]]></category>
		<category><![CDATA[crowdsourcing]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=897</guid>
		<description><![CDATA[Vocês já devem ter notado que estamos vivendo em um momento de transição na história da humanidade com profundas mudanças da sociedade, ao mesmo tempo e em todos os campos de conhecimento. Proliferam-se Buzzwords como Marketing 2.0, gestão 2.0, Governo 2.0 e outras pseudas-definições em determinados campos culturais para representar as mudanças sociais que teoricamente [...]]]></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/04/07/o-mundo-em-que-vivemos/";
				tweetmeme_source = "tweetmeme";
				tweetmeme_style = "";
				
			//-->
			</script>
                        <script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div></div><p>Vocês já devem ter notado que estamos vivendo em um momento de transição na história da humanidade com profundas mudanças da sociedade, ao mesmo tempo e em todos os campos de conhecimento.</p>
<p>Proliferam-se <a href="http://en.wikipedia.org/wiki/Buzzword">Buzzwords</a> como Marketing 2.0, gestão 2.0, Governo 2.0 e outras <a href="http://en.wikipedia.org/wiki/List_of_buzzwords">pseudas-definições</a> em determinados campos culturais para representar as mudanças sociais que teoricamente foram influenciadas pelas melhorias das comunicações, em especial as facilidades da internet e no que se convencionou de chamar <a href="http://en.wikipedia.org/wiki/Web_2.0">Web 2.0</a>.</p>
<p><a href="http://www.submarino.com.br/produto/1/21500460/mundo+e+plano,+o?franq=170940"><img class="alignleft" title="O Mundo é Plano" src="http://i.s8.com.br/images/books/cover/img0/21500460.jpg" alt="O Mundo é Plano" width="180" height="180" /></a>Alguns autores já tentaram descrever esses fenômenos mas não chegaram a uma explicação homogênia, um exemplo poderia citar <a href="http://www.submarino.com.br/produto/1/21500460/mundo+e+plano,+o?franq=170940">O Mundo é Plano</a> do jornalista <a href="http://www.thomaslfriedman.com/about-the-author">Thomas L. Friedman</a> que não conseguiu ser coeso em sua explicação e dá muitas voltas com algumas passagens confusas, apesar de coletar casos interessantes que ele identificou como sendo um fenômeno de achatamento do globo pelas facilidades das comunicações.</p>
<p>Talvez para compreendermos esse momento atual precisaremos de um conjunto de obras que juntas possam conseguir expor de forma clara os princípios e valores que moldam essas mudanças.</p>
<p><a href="http://www.submarino.com.br/produto/1/12634?franq=170940"><img class="alignnone" title="Choque do Futuro" src="http://i.s8.com.br/images/books/cover/img4/12634.jpg" alt="Choque do Futuro" width="180" height="180" /></a><a href="http://www.submarino.com.br/produto/1/62618/terceira+onda,+a?franq=170940"><img class="alignnone" title="A Terceira Onda" src="http://i.s8.com.br/images/books/cover/img8/62618.jpg" alt="A Terceira Onda" width="180" height="180" /></a></p>
<p>Antes de tudo temos que falar no casal <a href="http://en.wikipedia.org/wiki/Alvin_Toffler">Alvin</a> e Heidi Toffler. Foram eles que formataram as bases dessa transição em suas obras, com destaque para o livro <a href="http://www.submarino.com.br/produto/1/62618/terceira+onda,+a?franq=170940">A Terceira Onda</a> que é um aperfeiçoamento do pensamento de outra obra do casal chamada <a href="http://www.submarino.com.br/produto/1/12634?franq=170940">O Choque do Futuro</a>.</p>
<p>No livro <a href="http://www.submarino.com.br/produto/1/62618/terceira+onda,+a?franq=170940">A Terceira Onda</a> o casal Toffler definiu conceitos como <a href="http://pt.wikipedia.org/wiki/Prosumer">Prosumer</a> que explicam porque a <a href="http://www.time.com/time/magazine/article/0,9171,1569514,00.html">Time elegeu &#8220;You&#8221; como a pessoa do ano em 2006</a>. Nessa obra os autores explicam as diferenças entre essas ondas culturais e porque estamos vivendo em um momento de transição pós-industrial.</p>
<p>As 3 ondas são identificadas como a sociedade agricultural, industrial e revolução pós-industrial.</p>
<h2>Primeira Onda</h2>
<p>A primeira onda é formada por agricultura e extrativismo, vindo desde a época posterior ao neolítico, quando o homem era caçador-coletor, passando por medievalismo até a renascença.</p>
<p>Basicamente é uma sociedade centrada no campo e na agricultura, até pode encontrar esporadicamente obras e casos típicos das outras ondas, mas não passa de capricho ou excentricidade e não forma da cultura. A idéia aqui é sobrevivência.</p>
<h2>A Segunda Onda</h2>
<p><a href="http://www.submarino.com.br/produto/1/1764324/magnatas,+os?franq=170940"><img class="alignleft" title="Os Magnatas" src="http://i.s8.com.br/images/books/cover/img4/1764324.jpg" alt="Os Magnatas" width="180" height="180" /></a>A segunda onda é baseada no industrialismo, iluminismo, na dicotomia burguesia vs proletário até meados da década de 50 do século 20 &#8211; quando os serviços ultrapassaram a indústria na geração de valor.</p>
<p>Antes de avançarmos na terceira onda é importante o entendimento das ondas anteriores e compreender como esse pensamento foi solidificado na cultura em geral.</p>
<p>A segunda onda é basicamente o período industrial e não há obra melhor para entender essa onda do que <a href="http://www.submarino.com.br/produto/1/1764324/magnatas,+os?franq=170940">Os Magnatas</a>. Aqui verificamos que a a <a href="http://www.americanprecision.org/kit/Mod_1_Introductory_essay.pdf">revolução industrial foi impulsionado no Vale do rio Connecticut</a> com base na intercambialidade de peças na fabricação de armas, descobrimos que o pai da administração moderna, <a href="http://pt.wikipedia.org/wiki/Taylorismo">Frederick W. Taylor</a>, obteve sucesso profissional como engenheiro e não por suas teorias administrativas, que não passavam de pseudo-ciência.</p>
<p><a href="http://www.amazon.com/gp/product/1897597320?ie=UTF8&amp;tag=milftech-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1897597320"><img title="Charles Mackay" src="http://ecx.images-amazon.com/images/I/51c9cFoyKgL._SL160_.jpg" alt="Charles Mackay" width="99" height="160" /></a><a href="http://www.amazon.com/gp/product/0486419568?ie=UTF8&amp;tag=milftech-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0486419568"><img title="Gustave Le Bon" src="http://ecx.images-amazon.com/images/I/51Q012WY6RL._SL160_.jpg" alt="Gustave Le Bon" width="102" height="160" /></a><a href="http://www.submarino.com.br/produto/1/1313125/?franq=170940"><img title="Sabedoria das multidões" src="http://i.s8.com.br/images/books/cover/img5/1313125.jpg" alt="Sabedoria das multidões" width="180" height="180" /></a></p>
<p>A segunda onda foi basicamente a onda da massificação em todos os sentidos: produção, distribuição, consumação, educação, recreação, entretenimento baseado em Hits, entre outras coisas. O próprio modelo exigiu uma estrutura de comando-controle para organizar toda a infraestrutura necessária de &#8211; principalmente &#8211; atravessadores que eram necessários para fazer a máquina funcionar. Uma palavra que resume a geração é: &#8220;Burocracia&#8221;.</p>
<p>Essa massificação no cerne da segunda onda produziu regimes totalitários como o marxismo, fascismo, nazismo e variações como as ditaduras da América Latina, de Liberais [Chile] a conservadoras [Argentina e Brasil]. Não importa o sinal ideológico, no final todos acabam defendendo medidas semelhantes mas com propósitos diferentes.</p>
<p>Descobrimos em obras como<a href="http://www.amazon.com/gp/product/1897597320?ie=UTF8&amp;tag=milftech-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1897597320"> Extraordinary Popular Delusions and the Madness of Crowds</a> e <a href="http://www.amazon.com/gp/product/0486419568?ie=UTF8&amp;tag=milftech-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=0486419568">The Crowd: A Study of the Popular Mind</a> [não sei se esses livros possuem traduções] que as multidões são facilmente manipuláveis e quando o homem faz parte de um grupo deixa de raciocinar como indivíduo e passa a considerar opiniões alheias como verdadeiras por pressão social, mesmo que contradigam o que pensa.</p>
<h2>A Terceira Onda</h2>
<p>A terceira onda é justamente a era que vivemos com novidades como o <a href="http://pt.wikipedia.org/wiki/Terceiro_setor">Terceiro setor</a>, foco em  serviços, tecnologia altamente desenvolvida, geração digital, compartilhamento sem imposição e conceito de liberdade nunca antes imaginado ou tolerado pela humanidade.</p>
<p><a href="http://www.submarino.com.br/produto/1/32162/guerra+e+anti-guerra:+sobrevivencia+na+aurora+do+terceiro+milenio?franq=170940"><img class="alignnone" title="Guerra e Anti-Guerra" src="http://i.s8.com.br/images/books/cover/img2/32162.jpg" alt="Guerra e Anti-Guerra" width="180" height="180" /></a><a href="http://www.submarino.com.br/produto/1/52331/powershift:+as+mudancas+do+poder?franq=170940"><img class="alignnone" title="Powershift: as Mudanças do Poder" src="http://i.s8.com.br/images/books/cover/img1/52331.jpg" alt="Powershift: as Mudanças do Poder" width="180" height="180" /></a><a href="http://www.submarino.com.br/produto/1/19077/criando+uma+nova+civilizacao?franq=170940"><img class="alignnone" title="Criando uma Nova Civilização" src="http://i.s8.com.br/images/books/cover/img7/19077.jpg" alt="Criando uma Nova Civilização" width="180" height="180" /></a><a href="http://www.submarino.com.br/produto/1/21213151/riqueza+revolucionaria+:+o+significado+da+riqueza+no+futuro?franq=170940"><img class="alignnone" title="Riqueza Revolucionária : o Significado da Riqueza no Futuro" src="http://i.s8.com.br/images/books/cover/img1/21213151.jpg" alt="Riqueza Revolucionária : o Significado da Riqueza no Futuro" width="180" height="180" /></a></p>
<p>O casal Toffler, nas obras seguintes, destilam argumentos e teorias em determinados campos de conhecimento com base no pensamento da <a href="http://en.wikipedia.org/wiki/The_Third_Wave_(book)">Terceira Onda</a>, o qual aconselho lerem primeiro para estabelecer a base necessária para melhor aproveitar e entender os outros livros como <a href="http://www.submarino.com.br/produto/1/32162/guerra+e+anti-guerra:+sobrevivencia+na+aurora+do+terceiro+milenio?franq=170940">Guerra e Anti-guerra</a>, <a href="http://www.submarino.com.br/produto/1/52331/powershift:+as+mudancas+do+poder?franq=170940">Powershift: as Mudanças do Poder</a>, <a href="http://www.submarino.com.br/produto/1/19077/criando+uma+nova+civilizacao?franq=170940">Criando uma Nova Civilização</a> e <a href="http://www.submarino.com.br/produto/1/21213151/riqueza+revolucionaria+:+o+significado+da+riqueza+no+futuro?franq=170940">Riqueza Revolucionária: o Significado da Riqueza no Futuro</a>.</p>
<p>Avançando na Terceira Onda, analisamos que <a href="http://en.wikipedia.org/wiki/James_Surowiecki">James Surowiecki</a> em <a href="http://www.submarino.com.br/produto/1/1313125/?franq=170940">A Sabedoria das Multidões</a> considera que há decisões sábias a partir de uma massa de pessoas quando é satisfeita a fórmula: diversidade de opinião + independência + descentralização + agregação. Essa teoria é a base de modelos como <a href="http://pt.wikipedia.org/wiki/Crowdsourcing">Crowdsourcing</a>.</p>
<p><a href="http://www.submarino.com.br/produto/1/1955787?franq=170940"><img title="Wikinomics" src="http://i.s8.com.br/images/books/cover/img7/1955787.jpg" alt="Wikinomics" width="180" height="180" /></a><a href="http://www.submarino.com.br/produto/1/1644179/cauda+longa,+a?franq=170940"><img title="A Cauda Longa" src="http://i.s8.com.br/images/books/cover/img9/1644179.jpg" alt="A Cauda Longa" width="180" height="180" /></a></p>
<p>A massificação não é combatida na terceira onda, mas transformada em compartilhamento e identificação de nichos que era inviáveis nas ondas anteriores.</p>
<p>A idéia de compartilhamento na terceira onda- como visto em <a href="http://www.submarino.com.br/produto/1/1955787?franq=170940">Wikinomics</a> de <a href="http://dontapscott.com/">Don Tapscott</a> &#8211; é contrária aos princípios da segunda onda, o controle sobre os ativos da empresa não deve ser o foco dos negócios e sim extrair ativos de bens que teoricamente não estão sendo bem aproveitados. Entender que os melhores nem sempre estão dentro da sua organização e se beneficiar com o trabalho de interessados fora da empresa.</p>
<p>Aqui vale salientar que o compartilhamento da nova onda sofre interferência dos <a href="http://en.wikipedia.org/wiki/Amateur_professionalism">amadores</a> na produção que antes era exclusividade e reconhecimento dos profissionais. Lembram do Prosumer dito no início desse artigo?</p>
<p>Em <a href="http://www.submarino.com.br/produto/1/1644179/cauda+longa,+a?franq=170940">A Cauda Longa</a>, Chris Anderson demonstra na economia que a Terceira Onda é a era dos nichos com o poder da massificação aliado a facilidade de comunicação, antes o que era inviável economicamente agora é possível. A segunda onda foi marcada pela cultura de Hits, ou seja, como era inviável produzir e distribuir todo mundo, apenas os melhores recebiam investimento.</p>
<p>O que era melhor era definido pelo filtro da indústria, esse filtro era baseado no que agradava a maioria, onde vimos em Sabedoria das Multidões que sempre é a média da massa.  Essa média poderia significar algo bom quando respeita a fórmula de decisões sábias ou algo desastroso quando saisfaz as condições como ditas por Le Bon ou Mackay.</p>
<p><a href="http://www.submarino.com.br/produto/1/21593238/free:+gratis+-+o+futuro+dos+precos?franq=170940"><img title="Free" src="http://i.s8.com.br/images/books/cover/img8/21593238.jpg" alt="Free" width="180" height="180" /></a><a href="http://www.amazon.com/gp/product/1594201536?ie=UTF8&amp;tag=milftech-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1594201536"><img title="Here Comes Everybody: The Power of Organizing Without Organizations" src="http://ecx.images-amazon.com/images/I/51ITaUSGL%2BL._SL160_.jpg" alt="Here Comes Everybody: The Power of Organizing Without Organizations" width="102" height="160" /></a></p>
<p>Obras como <a href="http://www.amazon.com/gp/product/1594201536?ie=UTF8&amp;tag=milftech-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=1594201536">Here Comes Everybody: The Power of Organizing Without Organizations</a> de <a href="http://www.shirky.com/">Clay Shirky</a> e <a href="http://www.submarino.com.br/produto/1/21593238/free:+gratis+-+o+futuro+dos+precos?franq=170940">Free</a> do <a href="http://www.thelongtail.com/">Chris Anderson</a> vem elucidar porque empresas como Facebook que são praticamente virtuais valem mais do que uma fábrica da Coca-cola com seus operários e coisas palpáveis, pelo menos para nós que somos &#8220;contaminados&#8221; com a visão da segunda onda.</p>
<p>A idéia do grátis hoje se contrapõe ao &#8220;não existe cafezinho grátis&#8221; da segunda onda por causa da distribuição. Produtos antes não interessantes agora são facilmente distriuídos e encontrados sem a necessidade de gastos com marketing e distribuição típicos da segunda onda e da cultura de Hits.</p>
<h2>O Choque de Gerações</h2>
<p>Os Toffler identificaram em suas obras que a geração de uma onda domina o mundo economicamente, mas não domina politicamente até que a onda se torne madura.</p>
<p>Verificamos que a burguesia (2ª onda) dominou o poder econômico mas não o poder político que continuou nas mãos da aristocracia (1ª onda) por muito tempo, da mesma forma que a geração digital (3ª onda) domina o poder econômico mas não o poder político que continua nas mãos da geração analógica (2ª onda) até esse momento.</p>
<p>Se você se sente cada vez mais não representado nas eleições, entenda que a política atual é para escolher candidatos com propostas e formas de governos preparados para a onda anterior.</p>
<p>O objetivo desse artigo não foi realizar um review de livros, mas identificar que a matriz tecnológica do que entendemos como Web 2.0 é consequência, e não causa, de movimentos culturais que interagem entre si moldando a sociedade.</p>
<p>Essa estrutura de produzir/consumir feito por todos envolve toda a concepção dessa nova onda, claro que respeitando formas de<a href="http://www.milfont.org/tech/2008/05/11/extrair-relevancia-da-cultura-do-inutil/"> extrair cultura útil ou não</a>. Evidente que o foco passa do grupo para o indivíduo, daquilo de que se considera algo útil ou não.</p>
<p>O objetivo principal para entender a nova onda que vivemos é compreender que a perspectiva não é mais do grupo e sim do indivíduo e que o choque dessas duas visões é o que molda os novos negócios.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2010/04/07/o-mundo-em-que-vivemos/feed/</wfw:commentRss>
		<slash:comments>4</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>Introdução ao Ext</title>
		<link>http://www.milfont.org/tech/2009/06/29/introducao-ao-ext/</link>
		<comments>http://www.milfont.org/tech/2009/06/29/introducao-ao-ext/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 13:38:32 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[(X)HTML]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Ext]]></category>
		<category><![CDATA[Frameworks]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[XMLHttpRequest]]></category>
		<category><![CDATA[ECMAScript]]></category>
		<category><![CDATA[ExtJS]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[widget]]></category>
		<category><![CDATA[YUI]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=24</guid>
		<description><![CDATA[Eu trabalho com Extjs desde que ele era uma extensão para o YUI, ainda hoje há aplicação no ar usando essa antiga tecnologia [por problema causado por algum idiota, você provavelmente será redirecionado para outro site do governo, dá uma olhada no canto esquerdo superior e clique em "IR PARA A SEPLAG"]. Para ver o [...]]]></description>
			<content:encoded><![CDATA[<p>Eu trabalho com <a href="http://www.extjs.com/products/extjs/">Extjs</a> desde que ele era uma extensão para o <a href="http://developer.yahoo.com/yui/">YUI</a>, ainda hoje <a href="http://www.seplag.ce.gov.br/seplag/categoria2/diario-oficial">há aplicação no ar</a> usando essa antiga tecnologia [por problema <a href="http://www.milfont.org/tech/2009/03/25/como-simular-trabalho-no-estado/">causado por algum idiota</a>, você provavelmente será redirecionado para outro site do governo, dá uma olhada no canto esquerdo superior e clique em "<strong>IR PARA A SEPLAG</strong>"]. Para ver o Extjs no tempo que ele se chamava ext-yui, vá no link de pesquisa avançada, preencha o input descrição em &#8220;dados da matéria&#8221; com &#8220;secretaria de cultura&#8221; por exemplo e clique no botão pesquisar.</p>
<p>Esse tutorial tem o objetivo de preparar o conhecimento para outros posts que estou escrevendo e achei necessário uma introdução apenas nos conceitos do Extjs para não confundir com as tecnologias que uso em conjunto como <a href="http://www.milfont.org/tech/tag/dwr/">DWR</a> ou no modelo <a href="http://www.milfont.org/tech/tag/rest/">REST</a> com o <a href="http://www.milfont.org/tech/tag/rails/">RubyOnRails</a>.</p>
<p>O Extjs é um <a href="http://www.milfont.org/tech/2007/10/11/frameworks-ajax/">framework javascript de propósito geral</a>, ou seja, tem um conjunto de funcionalidades que tratam <a href="http://www.milfont.org/tech/tag/ajax/">Ajax</a>, um conjunto de Widgets bem elaborados [componentes visuais como Grid e TabPanel], manipulação de DOM [Document Object Model] e BOM [Browser Object Model], tratamento de eventos, animações como Fade In e Fade Out, parser de <a href="http://www.milfont.org/tech/2007/11/04/o-que-e-json/">JSON</a>, entre outras coisas. Seus componentes são construídos com técnicas modernas de<a href="http://www.milfont.org/tech/2008/01/05/heranca-no-javascript/"> orientação</a> a <a href="http://www.milfont.org/tech/2007/10/01/overloading-e-overriding-no-javascript/">objetos</a> no javascript e manipulação de <a href="http://www.milfont.org/tech/2007/10/08/script-tag/">Scripttag</a> para recursos remotos que não suportam Ajax.</p>
<h2>Preparação</h2>
<p>Após <a href="http://www.extjs.com/products/extjs/download.php">baixar e descompactar</a> o framework [estou trabalhando na versão 2.x que é estável nessa data], recomendo que deixa a disposição das pastas conforme se encontra e coloque no seu projeto de forma que seja acessível via web, já vem com documentação e exemplos que você deve e vai usar durante o desenvolvimento. Temos a <a href="http://www.extjs.com/products/extjs/build/">opção de montar o Extjs</a> [marcando a opção "<em>Make build available via CacheFly</em>" ] no <a href="http://cachefly.com/">CacheFly</a> como um servidor <a href="http://en.wikipedia.org/wiki/Content_Delivery_Network">CDN</a> para <a href="http://www.milfont.org/tech/2007/10/10/otimizando-wordpress-com-yslow/">otimizar o tráfego</a> de sua aplicação principalmente se ela será disponibilizada na internet e não apenas na intranet.</p>
<p>É necessário importar o CSS global, o adapter e o Javascript global conforme mostrado abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/javascripts/ext-2.2.1/resources/css/ext-all.css&quot; /&gt;
&lt;script src=&quot;/javascripts/ext-2.2.1/adapter/ext/ext-base.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;/javascripts/ext-2.2.1/ext-all.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre></div></div>

<p>Pode usar outros temas para o Extjs, estarão na pasta &#8220;<em>resources/css</em>&#8220;, assim como podemos internacionalizar os componentes com arquivos que se encontram em &#8220;<em>build/locale</em>&#8220;. Exemplo com o tema &#8220;Gray&#8221; e <a href="http://en.wikipedia.org/wiki/Internationalization_and_localization">i18n</a> em português do Brasil:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/javascripts/ext-2.2.1/resources/css/ext-all.css&quot; /&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/javascripts/ext-2.2.1/resources/css/xtheme-gray.css&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;/javascripts/ext-2.2.1/adapter/ext/ext-base.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;/javascripts/ext-2.2.1/ext-all.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;/javascripts/ext-2.2.1/build/locale/ext-lang-pt_BR-min.js&quot;&gt;&lt;/script&gt;</pre></div></div>

<p>Internacionalização é algo pensado no Extjs de forma a facilitar a criação de arquivos de linguagem aproveitando a estrutura da linguagem [dinâmica e fracamente tipada], todas as propriedades de mensagens e textos são públicas para facilitar a reescrita como mostrado abaixo na i18n do componente de DataPicker:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>Ext.<span style="color: #660066;">DatePicker</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   Ext.<span style="color: #660066;">apply</span><span style="color: #009900;">&#40;</span>Ext.<span style="color: #660066;">DatePicker</span>.<span style="color: #660066;">prototype</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
      todayText         <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Hoje&quot;</span><span style="color: #339933;">,</span>
      minText           <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Esta data &amp;eacute; anterior a menor data&quot;</span><span style="color: #339933;">,</span>
      maxText           <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Esta data &amp;eacute; posterior a maior data&quot;</span><span style="color: #339933;">,</span>
      disabledDaysText  <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">,</span>
      disabledDatesText <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">,</span>
      monthNames        <span style="color: #339933;">:</span> Date.<span style="color: #660066;">monthNames</span><span style="color: #339933;">,</span>
      dayNames          <span style="color: #339933;">:</span> Date.<span style="color: #660066;">dayNames</span><span style="color: #339933;">,</span>
      nextText          <span style="color: #339933;">:</span> <span style="color: #3366CC;">'Pr&amp;oacute;ximo M&amp;ecirc;s (Control+Direita)'</span><span style="color: #339933;">,</span>
      prevText          <span style="color: #339933;">:</span> <span style="color: #3366CC;">'M&amp;ecirc;s Anterior (Control+Esquerda)'</span><span style="color: #339933;">,</span>
      monthYearText     <span style="color: #339933;">:</span> <span style="color: #3366CC;">'Escolha um M&amp;ecirc;s (Control+Cima/Baixo para mover entre os anos)'</span><span style="color: #339933;">,</span>
      todayTip          <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;{0} (Espa&amp;ccedil;o)&quot;</span><span style="color: #339933;">,</span>
      format            <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;d/m/Y&quot;</span><span style="color: #339933;">,</span>
      okText            <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;&amp;#160;OK&amp;#160;&quot;</span><span style="color: #339933;">,</span>
      cancelText        <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Cancelar&quot;</span><span style="color: #339933;">,</span>
      startDay          <span style="color: #339933;">:</span> <span style="color: #CC0000;">0</span>
   <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Se você usar o CacheFly gerado pela página do Extjs, ele incluir o adapter e o global em um mesmo arquivo, vai ser algo como:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;http://extjs.cachefly.net/ext-2.2.1/resources/css/ext-all.css&quot;&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;http://extjs.cachefly.net/ext-2.2.1/resources/css/xtheme-gray.css&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://extjs.cachefly.net/builds/ext-cdn-771.js&quot;&gt;&lt;/script&gt;</pre></div></div>

<h2>Adapter</h2>
<p>Quando o Extjs passou a ser um framework independente do YUI, passou a adotar outros frameworks como base para funções básicas de manipulação de DOM e Ajax, hoje suporta trabalhar em conjunto com YUI, JQuery, Prototype e totalmente independente. Se o projeto já tem Jquery ou outro framework que trabalha com o Extjs, a utilização dos dois é muito fácil e indicada, principalmente para usar os widgets que são provavelmente os mais poderosos hoje em dia em um framework opensource.</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">//Exemplos de adapters permitidos
&lt;script type=&quot;text/javascript&quot; src=&quot;/javascripts/ext-2.2.1/adapter/ext/ext-base.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;/javascripts/ext-2.2.1/adapter/jquery/ext-jquery-adapter.js&quot;&gt;&lt;/script&gt;</pre></div></div>

<h2>Widgets</h2>
<p>O principal apelo do Extjs que conquista os desenvolvedores é o layout bem trabalhado dos componentes visuais que são de fácil parametrização. Basicamente todos os componentes funcionam da mesma forma, você o instancia passando um <a href="http://www.milfont.org/tech/2007/11/04/o-que-e-json/">objeto literal</a> de configuração com mostrado abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">//Exemplo do grid</span>
<span style="color: #003366; font-weight: bold;">var</span> grid  <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">GridPanel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
autoShow<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span><span style="color: #CC0000;">750</span><span style="color: #339933;">,</span>height<span style="color: #339933;">:</span><span style="color: #CC0000;">250</span> <span style="color: #006600; font-style: italic;">//mais parametros </span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//Exemplo de uma Window</span>
<span style="color: #003366; font-weight: bold;">var</span> window <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">Window</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
autoShow<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span><span style="color: #CC0000;">750</span><span style="color: #339933;">,</span>height<span style="color: #339933;">:</span><span style="color: #CC0000;">250</span> <span style="color: #006600; font-style: italic;">//mais parametros </span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #006600; font-style: italic;">//Exemplo de um Painel</span>
<span style="color: #003366; font-weight: bold;">var</span> panel <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">Panel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
autoShow<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span><span style="color: #CC0000;">750</span><span style="color: #339933;">,</span>height<span style="color: #339933;">:</span><span style="color: #CC0000;">250</span> <span style="color: #006600; font-style: italic;">//mais parametros </span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Vamos usar o GRID para exemplificar como trabalhamos com o Extjs, o mesmo comportamente se repete em todos os componentes.<br />
A <a href="http://www.extjs.com/deploy/dev/docs/">documentação do Extjs</a> é muito bem feita e praticamente vai ser a única coisa que você vai precisar depois de entender como os componentes são formados, afinal não vale a pena decorar todas as propriedades de todos os componentes, concentre-se apenas em entender os conceitos.</p>
<p>A GRID é o Widget mais famoso desse framework e é formado basicamente por um objeto &#8220;<strong>Ext.data.Store</strong>&#8221; [que é a fonte de dados da GRID] e um objeto &#8220;<strong>Ext.grid.ColumnModel</strong>&#8221; [que é a definição das colunas], como mostrado abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> grid  <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">GridPanel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    autoShow<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span><span style="color: #CC0000;">750</span><span style="color: #339933;">,</span>height<span style="color: #339933;">:</span><span style="color: #CC0000;">250</span><span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">//parametros de configuração de layout</span>
    cm<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">ColumnModel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><span style="color: #006600; font-style: italic;">/*configuração*/</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</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><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">//Ou especialização de um Store</span>
    sm<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">RowSelectionModel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>singleSelect<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">//ou outra especialização de um AbstractSelectionModel</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>O objeto ColumnModel é a definição de colunas do Grid, possui propriedades para definição de layout como largura e altura, título da coluna como vai ser exibida e formatação do texto:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> colModel <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">ColumnModel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>
    <span style="color: #009900;">&#123;</span> header<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Ticker&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span> <span style="color: #CC0000;">60</span><span style="color: #339933;">,</span> sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#123;</span> header<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Company Name&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span> <span style="color: #CC0000;">150</span><span style="color: #339933;">,</span> sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#123;</span> header<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Market Cap.&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">,</span> sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#123;</span> header<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;$ Sales&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">,</span> sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> renderer<span style="color: #339933;">:</span> money<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#123;</span> header<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Employees&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span> <span style="color: #CC0000;">100</span><span style="color: #339933;">,</span> sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> resizable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>A propriedade cm [ColumnModel] pode ser também substituída pela propriedade &#8220;columns&#8221; que funciona como um &#8220;alias&#8221;, dessa forma o Grid cria automaticamente um objeto ColumnModel:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> grid <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">GridPanel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    columns<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
        <span style="color: #009900;">&#123;</span>id<span style="color: #339933;">:</span><span style="color: #3366CC;">'id'</span><span style="color: #339933;">,</span> header<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;id&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span> <span style="color: #CC0000;">200</span><span style="color: #339933;">,</span> sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> dataIndex<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;">&#123;</span>header<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Nome&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span> <span style="color: #CC0000;">120</span><span style="color: #339933;">,</span> sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'name'</span><span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Caso haja necessidade de formatar o conteúdo da célula, você pode usar uma função como &#8220;renderer&#8221; para tratar esse conteúdo:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> grid <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">GridPanel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    columns<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
        <span style="color: #009900;">&#123;</span>id<span style="color: #339933;">:</span><span style="color: #3366CC;">'id'</span><span style="color: #339933;">,</span> header<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;id&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span> <span style="color: #CC0000;">200</span><span style="color: #339933;">,</span> sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> dataIndex<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;">&#123;</span>header<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Nome&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span> <span style="color: #CC0000;">120</span><span style="color: #339933;">,</span> sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'name'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#123;</span>header<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Criado em&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span> <span style="color: #CC0000;">135</span><span style="color: #339933;">,</span> sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> renderer<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                    <span style="color: #000066; font-weight: bold;">return</span> Date.<span style="color: #660066;">parseDate</span><span style="color: #009900;">&#40;</span>value<span style="color: #339933;">,</span> <span style="color: #3366CC;">'Y-m-d<span style="color: #000099; font-weight: bold;">\\</span>TH:i:s<span style="color: #000099; font-weight: bold;">\\</span>Z'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">format</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'d/m/Y H:i:s'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #006600; font-style: italic;">//2009-06-14T12:51:07Z</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'created_at'</span><span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>A propriedade &#8220;<strong>store</strong>&#8221; da GRID é uma especialização do componente &#8220;<strong>Ext.data.Store</strong>&#8221; que é formado basicamente por um &#8220;<strong>proxy</strong>&#8221; e um &#8220;<strong>reader</strong>&#8220;:</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;">data</span>.<span style="color: #660066;">DataProxy</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">//ou uma especialização</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;">DataReader</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">//ou uma especialização</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>O &#8220;<strong>proxy</strong>&#8221; é o componente que obterá os dados e o &#8220;<strong>reader</strong>&#8221; o componente que fará a leitura desses dados para um formato comum a todos os componentes do Extjs na forma de um objeto denominado &#8220;<strong>Ext.data.Record</strong>&#8220;. O objeto &#8220;Record&#8221; representa um registro de dados e é usado seja para GRID, para um Form ou qualquer componente que trabalhe com dados editáveis.</p>
<p>Dessa forma podemos usar uma combinação de Proxy e Reader como HttpProxy e JsonReader:</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;">data</span>.<span style="color: #660066;">HttpProxy</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'projects.json'</span>
    <span style="color: #009900;">&#125;</span><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>
        totalProperty<span style="color: #339933;">:</span><span style="color: #3366CC;">'total'</span><span style="color: #339933;">,</span>
        root<span style="color: #339933;">:</span><span style="color: #3366CC;">'results'</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> Ext.<span style="color: #660066;">data</span>.<span style="color: #660066;">Record</span>.<span style="color: #660066;">create</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>
        <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'id'</span><span style="color: #339933;">,</span> mapping<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;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'name'</span><span style="color: #339933;">,</span> mapping<span style="color: #339933;">:</span><span style="color: #3366CC;">'name'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'created_at'</span><span style="color: #339933;">,</span> mapping<span style="color: #339933;">:</span><span style="color: #3366CC;">'created_at'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'updated_at'</span><span style="color: #339933;">,</span> mapping<span style="color: #339933;">:</span><span style="color: #3366CC;">'updated_at'</span><span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</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>Devido o costume do uso do HttpProxy, o componente Store possui uma propriedade chamada &#8220;url&#8221; que estando presente cria um HttpProxy automaticamente como mostrado abaixo:</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>
    url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'projects.json'</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>
        totalProperty<span style="color: #339933;">:</span><span style="color: #3366CC;">'total'</span><span style="color: #339933;">,</span>
        root<span style="color: #339933;">:</span><span style="color: #3366CC;">'results'</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> Ext.<span style="color: #660066;">data</span>.<span style="color: #660066;">Record</span>.<span style="color: #660066;">create</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>
        <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'id'</span><span style="color: #339933;">,</span> mapping<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;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'name'</span><span style="color: #339933;">,</span> mapping<span style="color: #339933;">:</span><span style="color: #3366CC;">'name'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'created_at'</span><span style="color: #339933;">,</span> mapping<span style="color: #339933;">:</span><span style="color: #3366CC;">'created_at'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'updated_at'</span><span style="color: #339933;">,</span> mapping<span style="color: #339933;">:</span><span style="color: #3366CC;">'updated_at'</span><span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</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>O objeto &#8220;<strong>Reader</strong>&#8221; é o único que foge um pouco a regra de instanciação por receber dois parâmetros, um similar aos outros com um objeto literal de configuração e outro com o mapeamento dos dados. O objeto de configuração tem duas propriedades de que representam o total e a lista de dados. O objeto de mapeamento usa um método &#8220;estático&#8221; do objeto Record para criar um link entre a propriedade do json [com a propriedade "mapping"] e o índice interno do Record [pela propriedade "name"].</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"> <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>
        totalProperty<span style="color: #339933;">:</span><span style="color: #3366CC;">'total'</span><span style="color: #339933;">,</span>
        root<span style="color: #339933;">:</span><span style="color: #3366CC;">'results'</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> Ext.<span style="color: #660066;">data</span>.<span style="color: #660066;">Record</span>.<span style="color: #660066;">create</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>
        <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'id'</span><span style="color: #339933;">,</span> mapping<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;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'name'</span><span style="color: #339933;">,</span> mapping<span style="color: #339933;">:</span><span style="color: #3366CC;">'name'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'created_at'</span><span style="color: #339933;">,</span> mapping<span style="color: #339933;">:</span><span style="color: #3366CC;">'created_at'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'updated_at'</span><span style="color: #339933;">,</span> mapping<span style="color: #339933;">:</span><span style="color: #3366CC;">'updated_at'</span><span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>Dessa forma você tem um link entre o ColumnName pela propriedade dataIndex e o Store por meio do Reader, como abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">Ext.<span style="color: #660066;">data</span>.<span style="color: #660066;">Record</span>.<span style="color: #660066;">create</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>
         <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'nome_linkado'</span><span style="color: #339933;">,</span> mapping<span style="color: #339933;">:</span><span style="color: #3366CC;">'name'</span><span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>
<span style="color: #006600; font-style: italic;">//</span>
 columns<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span>
        <span style="color: #009900;">&#123;</span>header<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Nome&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span> <span style="color: #CC0000;">120</span><span style="color: #339933;">,</span> sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'nome_linkado'</span><span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#93;</span></pre></div></div>

<p>Para melhorar a navegação da GRID, você pode também acrescentar um componente de Toolbar no header ou no footer:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> grid  <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">GridPanel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    autoShow<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span><span style="color: #CC0000;">750</span><span style="color: #339933;">,</span>height<span style="color: #339933;">:</span><span style="color: #CC0000;">250</span><span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">//parametros de configuração de layout</span>
    cm<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">ColumnModel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span><span style="color: #006600; font-style: italic;">/*configuração*/</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</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><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">//Ou especialização de um Store</span>
    sm<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">RowSelectionModel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>singleSelect<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    bbar<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">Toolbar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">//Bottom Toolbar</span>
    tbar<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">Toolbar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">//Top Toolbar</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>A Toolbar mais usada é sua especialização com paginação, a Ext.PagingToolbar que necessita ser linkada com o Store:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">PagingToolbar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    pageSize<span style="color: #339933;">:</span><span style="color: #CC0000;">10</span><span style="color: #339933;">,</span> <span style="color: #006600; font-style: italic;">//propriedade opcional, default é 20</span>
    store<span style="color: #339933;">:</span> store
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>A PagingToolbar é I18n, mas se as mensagens não agradarem você pode mudá-las [eu sempre faço]:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">PagingToolbar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    pageSize<span style="color: #339933;">:</span><span style="color: #CC0000;">10</span><span style="color: #339933;">,</span>store<span style="color: #339933;">:</span> store<span style="color: #339933;">,</span>
    displayInfo<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>	
    displayMsg<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Exibindo o resultado: {0} a {1} de {2} registros'</span><span style="color: #339933;">,</span>
    emptyMsg<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Sem resultados a exibir&quot;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>Uma coisa bacana nesse componente é que você pode agrupar botões [já que é uma Toolbar] e até padronizar o layout:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">PagingToolbar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    pageSize<span style="color: #339933;">:</span><span style="color: #CC0000;">10</span><span style="color: #339933;">,</span>store<span style="color: #339933;">:</span> store<span style="color: #339933;">,</span>
    displayInfo<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>	
    displayMsg<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Exibindo o resultado: {0} a {1} de {2} registros'</span><span style="color: #339933;">,</span>
    emptyMsg<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Sem resultados a exibir&quot;</span><span style="color: #339933;">,</span>
    items<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'-'</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
        pressed<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>enableToggle<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>text<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Alterar'</span><span style="color: #339933;">,</span>
        toggleHandler<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: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
        pressed<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>enableToggle<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>text<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Excluir'</span><span style="color: #339933;">,</span>
        toggleHandler<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: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>Código da GRID inteira:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">&nbsp;
<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;">data</span>.<span style="color: #660066;">HttpProxy</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
        url<span style="color: #339933;">:</span> <span style="color: #3366CC;">'projects.json'</span>
    <span style="color: #009900;">&#125;</span><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>
        totalProperty<span style="color: #339933;">:</span><span style="color: #3366CC;">'total'</span><span style="color: #339933;">,</span>
        root<span style="color: #339933;">:</span><span style="color: #3366CC;">'results'</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> Ext.<span style="color: #660066;">data</span>.<span style="color: #660066;">Record</span>.<span style="color: #660066;">create</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>
        <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'id'</span><span style="color: #339933;">,</span> mapping<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;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'name'</span><span style="color: #339933;">,</span> mapping<span style="color: #339933;">:</span><span style="color: #3366CC;">'name'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'created_at'</span><span style="color: #339933;">,</span> mapping<span style="color: #339933;">:</span><span style="color: #3366CC;">'created_at'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
        <span style="color: #009900;">&#123;</span><span style="color: #000066;">name</span><span style="color: #339933;">:</span><span style="color: #3366CC;">'updated_at'</span><span style="color: #339933;">,</span> mapping<span style="color: #339933;">:</span><span style="color: #3366CC;">'updated_at'</span><span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> colModel <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">ColumnModel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#91;</span>
    <span style="color: #009900;">&#123;</span>id<span style="color: #339933;">:</span><span style="color: #3366CC;">'id'</span><span style="color: #339933;">,</span> header<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;id&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span> <span style="color: #CC0000;">200</span><span style="color: #339933;">,</span> sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> dataIndex<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;">&#123;</span>header<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Nome&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span> <span style="color: #CC0000;">120</span><span style="color: #339933;">,</span> sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'name'</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
    <span style="color: #009900;">&#123;</span>header<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Criado em&quot;</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span> <span style="color: #CC0000;">135</span><span style="color: #339933;">,</span> sortable<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> 
        renderer<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>value<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
          <span style="color: #000066; font-weight: bold;">return</span> Date.<span style="color: #660066;">parseDate</span><span style="color: #009900;">&#40;</span>value<span style="color: #339933;">,</span> <span style="color: #3366CC;">'Y-m-d<span style="color: #000099; font-weight: bold;">\\</span>TH:i:s<span style="color: #000099; font-weight: bold;">\\</span>Z'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">format</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'d/m/Y H:i:s'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> dataIndex<span style="color: #339933;">:</span> <span style="color: #3366CC;">'created_at'</span><span style="color: #009900;">&#125;</span>
 <span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> pagingToolbar <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">PagingToolbar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    pageSize<span style="color: #339933;">:</span><span style="color: #CC0000;">10</span><span style="color: #339933;">,</span>store<span style="color: #339933;">:</span> store<span style="color: #339933;">,</span>
    displayInfo<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>	
    displayMsg<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Exibindo o resultado: {0} a {1} de {2} registros'</span><span style="color: #339933;">,</span>
    emptyMsg<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Sem resultados a exibir&quot;</span><span style="color: #339933;">,</span>
    items<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'-'</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
        pressed<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>enableToggle<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>text<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Alterar'</span><span style="color: #339933;">,</span>
        toggleHandler<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: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#123;</span>
        pressed<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>enableToggle<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span>text<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Excluir'</span><span style="color: #339933;">,</span>
        toggleHandler<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: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#93;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #003366; font-weight: bold;">var</span> grid  <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">GridPanel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    autoShow<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> width<span style="color: #339933;">:</span><span style="color: #CC0000;">750</span><span style="color: #339933;">,</span>height<span style="color: #339933;">:</span><span style="color: #CC0000;">250</span><span style="color: #339933;">,</span>
    cm<span style="color: #339933;">:</span> colModel<span style="color: #339933;">,</span>
    store<span style="color: #339933;">:</span> store<span style="color: #339933;">,</span>
    sm<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Ext.<span style="color: #660066;">grid</span>.<span style="color: #660066;">RowSelectionModel</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>singleSelect<span style="color: #339933;">:</span><span style="color: #003366; font-weight: bold;">true</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    bbar<span style="color: #339933;">:</span> pagingToolbar
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Como eu falei, todos os componentes possuem o mesmo comportamento, notaram que dá para aproveitar esse código semelhante e reaproveitar em todos os CRUDs?<br />
Vou falando de um por um de acordo com os posts que forem saindo, aguardem que o próximo sai logo&#8230; ou não.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2009/06/29/introducao-ao-ext/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Campanha contra buracos em Fortaleza iniciada no Twitter</title>
		<link>http://www.milfont.org/tech/2009/05/01/campanha-contra-buracos-em-fortaleza-iniciada-no-twitter/</link>
		<comments>http://www.milfont.org/tech/2009/05/01/campanha-contra-buracos-em-fortaleza-iniciada-no-twitter/#comments</comments>
		<pubDate>Fri, 01 May 2009 14:01:12 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[blogosfera]]></category>
		<category><![CDATA[crowds]]></category>
		<category><![CDATA[Mashup]]></category>
		<category><![CDATA[protesto]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[#buracosfortaleza]]></category>
		<category><![CDATA[crowd]]></category>
		<category><![CDATA[crowdsourcing]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=606</guid>
		<description><![CDATA[Sem compromisso político e desesperados com a situação crítica que se encontra Fortaleza com a administração petista  [pela segunda vez] de Luizianne Lins, iniciamos um debate no Twitter propondo utilizarmos o Crowdsourcing &#8211; inicialmente da blogosfera cearense &#8211; como protesto social já que não temos oposição real a essa gestão. O resultado disso foi a [...]]]></description>
			<content:encoded><![CDATA[<p>Sem compromisso político e desesperados com a situação crítica que se encontra Fortaleza com a administração petista  [pela segunda vez] de <a href="http://pt.wikipedia.org/wiki/Luizianne_Lins">Luizianne Lins</a>, iniciamos um <a href="http://twitter.com/emiliomoreno/status/1639519105">debate no Twitter</a> propondo utilizarmos o <a href="http://pt.wikipedia.org/wiki/Crowdsourcing">Crowdsourcing</a> &#8211; inicialmente da blogosfera cearense &#8211; como protesto social já que não temos oposição real a essa gestão.</p>
<p>O resultado disso foi a <a href="http://maps.google.com/maps/ms?ie=UTF8&amp;hl=en&amp;msa=0&amp;msid=114434432094326506356.000468b42e61d4606e18c&amp;z=12">catalogação de todos os buracos no Google Maps</a> [como <a href="http://pt.wikipedia.org/wiki/Mashup">Mashup</a> da ação], um dos problemas e o mais sério que já causou até <a href="http://www.opovo.com.br/cidades/873433.html">capotamento de carro</a> e quebrou o <a href="http://liberdade.blogueisso.com/2009/04/27/fortaleza-carro-da-prefeita-cai-em-buraco-e-quebra/">próprio carro oficial da prefeita</a>. <a href="http://www.jangadeiroonline.com.br/?acao=noticias&amp;subacao=ler&amp;id=2326">Crateras</a> são algo comum em Fortaleza.</p>
<p><a href="http://tinyurl.com/buracosfortaleza"><img src="http://img515.imageshack.us/img515/9893/buracosfortaleza.png" alt="buracosfortaleza" width="500" /></a></p>
<p>Os problemas estão piorando com as <a href="http://tvverdesmares.com.br/cetv2aedicao/chuva-alaga-ruas-e-casas/">fortes chuvas</a> que <a href="http://liberdade.blogueisso.com/2009/04/27/chuva-fortaleza-tem-varios-pontos-alagados/">castigam Fortaleza</a>. Há uma cratera na avenida Leste-Oeste que a prefeitura já fechou várias vezes e vários carros já caírem nela, vide imagem abaixo que capturei na terça-feira quando um caminhão ficou com a roda presa e praticamente parou o trânsito.<br />
<a href="http://img208.imageshack.us/img208/9066/28042009x.jpg"><br />
<img class="alignnone" title="Buraco Leste-Oeste" src="http://img208.imageshack.us/img208/9066/28042009x.jpg" alt="buraco leste-oeste" width="500" height="380" /></a></p>
<p>Em poucas horas que iniciamos a campanha <a href="http://search.twitter.com/search?q=%23buracosfortaleza">#buracosfortaleza</a> no twitter, os jornais locais deram a notícia da campanha em seus portais, como <a href="http://www.opovo.com.br/cidades/874302.html">OPOVO</a>, <a href="http://www.jangadeiroonline.com.br/?acao=noticias&amp;subacao=ler&amp;id=9759">Jangadeiro [1]</a>, <a href="http://www.jangadeiroonline.com.br/?acao=noticias&amp;subacao=ler&amp;id=9747">Jangadeiro [2]</a> e <a href="http://blogs.diariodonordeste.com.br/zonacyber/fortaleza/mapeando-os-buracos-de-fortaleza/">Diario do Nordeste</a>.</p>
<p>O <a href="http://twitter.com/emiliomoreno">Emilio Moreno</a> está fazendo uma <a href="http://liberdade.blogueisso.com/2009/04/29/colaboracao-blogueiros-mapeam-trechos-com-buracos-em-fortaleza/">cobertura completa da campanha</a> que tenta sensibilizar todo mundo para esse sério problema.</p>
<p>[update 05/05/2009]</p>
<p>Rafael Carneiro <a href="http://www.rafaelcarneiro.net/blog/2009/05/02/o-poder-da-blogosfera/">postou sobre a campanha</a>.</p>
<p>Mário Aragão <a href="http://marioaragao.com.br/buracosfortaleza-agora-vai/">postou sobre a campanha</a>.</p>
<p>Natanael Pantoja <a href="http://www.natanaelpantoja.com/tech/?p=200">postou sobre a campanha</a>.</p>
<p>[/update]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2009/05/01/campanha-contra-buracos-em-fortaleza-iniciada-no-twitter/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Slides do evento Primeiro Dia Livre</title>
		<link>http://www.milfont.org/tech/2009/03/21/slides-do-evento-primeiro-dia-livre/</link>
		<comments>http://www.milfont.org/tech/2009/03/21/slides-do-evento-primeiro-dia-livre/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 18:12:20 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[palestras]]></category>
		<category><![CDATA[Redes sociais]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[Tuangr]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[debian-ce]]></category>
		<category><![CDATA[Open Social]]></category>
		<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[orkut]]></category>
		<category><![CDATA[palestra]]></category>
		<category><![CDATA[Social Network]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[tuang]]></category>
		<category><![CDATA[web 2.0]]></category>
		<category><![CDATA[WEB2]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=579</guid>
		<description><![CDATA[Primeiro Dia Livre Opensocial View more presentations from Christiano Milfont.]]></description>
			<content:encoded><![CDATA[<div id="__ss_1178206" 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="Primeiro Dia Livre Opensocial" href="http://www.slideshare.net/cmilfont/primeiro-dia-livre-opensocial?type=powerpoint">Primeiro Dia Livre 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=primeirodialivre-opensocial-090321124741-phpapp02&amp;stripped_title=primeiro-dia-livre-opensocial" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slideshare.net/swf/ssplayer2.swf?doc=primeirodialivre-opensocial-090321124741-phpapp02&amp;stripped_title=primeiro-dia-livre-opensocial" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/cmilfont">Christiano Milfont</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2009/03/21/slides-do-evento-primeiro-dia-livre/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Primeiro Dia Livre 2009</title>
		<link>http://www.milfont.org/tech/2009/03/18/primeiro-dia-livre-2009/</link>
		<comments>http://www.milfont.org/tech/2009/03/18/primeiro-dia-livre-2009/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 17:56:54 +0000</pubDate>
		<dc:creator>cmilfont</dc:creator>
				<category><![CDATA[palestras]]></category>
		<category><![CDATA[Redes sociais]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[debian-ce]]></category>
		<category><![CDATA[palestra]]></category>

		<guid isPermaLink="false">http://www.milfont.org/tech/?p=565</guid>
		<description><![CDATA[Neste sábado, 21 de março, ocorrerá o Primeiro Dia Livre na Faculdade Lourenço Filho. Nesta primeira edição, contaremos com três palestras envolvendo temas como comunidade, aplicações para web e redes sociais. Programação 09:00 &#8211; Como participar das comunidades de software livre? &#8211; Comunidades 10:00 &#8211; Desenvolvimento de aplicações sociais com a OpenSocial &#8211; Christiano Milfont [...]]]></description>
			<content:encoded><![CDATA[<p>Neste sábado, 21 de março, ocorrerá o <a href="http://www.debian-ce.org/node/28">Primeiro Dia Livre</a> na <a href="http://www.flf.edu.br/">Faculdade Lourenço Filho.</a> Nesta primeira edição, contaremos com três palestras envolvendo temas como comunidade, aplicações para web e redes sociais.</p>
<p><strong>Programação</strong></p>
<ul>
<li>09:00 &#8211; Como participar das comunidades de software livre? &#8211; Comunidades</li>
<li>10:00 &#8211; Desenvolvimento de aplicações sociais com a OpenSocial &#8211; Christiano Milfont</li>
<li>11:00 &#8211; Desenvolvimento de aplicações web com Ruby on Rails &#8211; <a href="http://www.mondriantecnologia.com/site/" target="_blank">Coutinho Costa</a></li>
</ul>
<p>Data: 21 de Março de 2009<br />
Local: Faculdade Lourenço Filho &#8211; Rua Barão do Rio Branco, 2101 Centro</p>
<p>Para saber mais: <a href="http://www.debian-ce.org/node/28">Debian-ce</a></p>
<p>Nota no <a href="http://br-linux.org/2009/primeiro-dia-livre-em-fortaleza/">BR-Linux</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.milfont.org/tech/2009/03/18/primeiro-dia-livre-2009/feed/</wfw:commentRss>
		<slash:comments>9</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>
	</channel>
</rss>

