<?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>SpotGeek.net &#187; Dojo</title>
	<atom:link href="http://spotgeek.net/tag/dojo/feed/" rel="self" type="application/rss+xml" />
	<link>http://spotgeek.net</link>
	<description>Tecnologia , Programação , web , internet, php</description>
	<lastBuildDate>Sat, 04 Feb 2012 14:42:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Bibliotecas JavaScript</title>
		<link>http://spotgeek.net/bibliotecas-javascript/</link>
		<comments>http://spotgeek.net/bibliotecas-javascript/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 13:04:51 +0000</pubDate>
		<dc:creator>Filipe Teixeira</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[Mochikit]]></category>
		<category><![CDATA[Yahoo]]></category>

		<guid isPermaLink="false">http://spotgeek.net/?p=111</guid>
		<description><![CDATA[Mochikit O Mochikit é o]]></description>
			<content:encoded><![CDATA[<h2>Mochikit</h2>
<p><img src="http://cirofeitosa.com.br/img/artigo-js-mochikit.png" alt="Mochikit" /></p>
<p>O Mochikit é o filho caçula de Bob Ippolito (o participante principal) e está disponível no <a rel="external" href="http://mochikit.com/">site do Mochikit</a>. O pacote principal tem aproximadamente 90 Kb (compactado), mas você pode carregá-lo em módulos separados. A biblioteca também é distribuída com a versão do framework do Python para web, chamada de <a rel="external" href="http://www.turbogears.com/">TurboGears</a>.</p>
<p>Nas palavras do Bob:</p>
<blockquote><p>“Nós analisamos todas as idéias que poderíamos encontrar apartir da nossa experiência com Python e foram adaptadas ao mundo louco do JavaScript”</p>
</blockquote>
<p>Assim, em uma visão macro, o Mochikit extrai algumas funcionalidades do Python para sua <acronym title="Application Programming Interface">API</acronym>. Se você é familiar com o Python, você terá um aprendizado imediato com o Mochikit, embora tenha uma <acronym title="Application Programming Interface">API</acronym> simples que seja razoavelmente fácil de utilizar. De todas as bibliotecas ressaltadas neste artigo, a <acronym title="Application Programming Interface">API</acronym> do Mochikit transmite ser a mais “preparada”.</p>
<p>Quando estiver começando com o Mochikit, você precisará:</p>
<ol>
<li>Assistir ao <a rel="external" href="http://mochikit.com/screencasts/MochiKit_Intro-1.html">screencast</a> do Bob.</li>
<li>Começar utilizando o <a rel="external" href="http://mochikit.com/examples/interpreter/">interpretador interativo</a> excelente do Mochikit. Esta é uma boa maneira de entender a biblioteca e ter uma compreensão básica de como Mochikit trabalha.</li>
</ol>
<h3>O básico sobre Mochikit</h3>
<p>Ao trabalhar com o <acronym title="Document Object Model">DOM</acronym>, o Mochikit traz alguns truques na luva:</p>
<pre>var warning = P(
 { 'class' : 'warning' },
 "Por favor insira um ", STRONG(null, "endereço de e-mail válido")
);
swapDOM(document.getElementById("notificacoes"), warning);</pre>
<p>Este código usará os métodos W3C <acronym title="Document Object Model">DOM</acronym> relevantes para os nós da árvore equivalentes ao código HTML seguinte:</p>
<pre>&lt;p class="warning"&gt;Please provide a &lt;strong&gt;valid email address&lt;/strong&gt;&lt;/p&gt;</pre>
<p>O código do Mochikit está quase mais limpo do que a sintaxe do HTML!</p>
<p>O módulo do Mochikit.DOM contem também outros métodos para a manipulação fácil do <acronym title="Document Object Model">DOM</acronym>, tal como o método do swapDOM mencionado acima e toHTML (que converte um nó de <acronym title="Document Object Model">DOM</acronym> ao HTML que representa).</p>
<p>Assim como na manipulação de eventos, o Mochikit foi projetado para que seja implementado no módulo de Mochikit.Signal. Foi baseado em torno do conceito de conectar um ouvinte a um sinal que fosse emitido por um objeto. Todos os eventos regulares do <acronym title="Document Object Model">DOM</acronym> são sinais, mas você pode criar seus próprios também. O método conectar faz todo o trabalho aqui:</p>
<pre>// conecta o sinal do onclick no elemento com id="thing"
// para a função showDialog, com pontos para este elemento.
connect($('thing'), 'onclick', showDialog);

// conecta o sinal do onsubmit para o elemento id="form" para
// o formController.checkSubmit, com pontos para o objeto formController.
connect($('form'), 'onsubmit', formController, 'checkSubmit');</pre>
<p>Você pode fazer seus próprios objetos enviar sinais com o método do sinal:</p>
<pre>signal(anObject, 'a_signal');</pre>
<p>O material de <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> é segurado pelo módulo Mochit.Async, e pelos objetos auxiliares que se encontram no núcleo de sua implementação. Para executar uma chamada básica de <acronym title="Asynchronous JavaScript and XML">AJAX</acronym>, use o <strong>loadJSONDoc</strong> ou  <strong>doSimpleXMLHttpRequest</strong>:</p>
<pre>var request = doSimpleXMLHttpRequest('opcoes.php',
   { q : 'desenvolvedor web'}
);</pre>
<p>Esta função retorna um objeto auxiliar, em que você pode fazer novas chamadas:</p>
<pre>request.addCallbacks(mySuccessFunction, myErrorFunction);</pre>
<p>Quando o <strong>XMLHttpRequest</strong> se executa, a função passada na chamada acima (mySuccessFunction) passa o objeto do <strong>XMLHttpRequest</strong> como o argumento:</p>
<pre>function mySuccessFunction(req) {
 alert(req.responseText);
}</pre>
<p>Os objetos auxiliares são úteis para a programação assíncrona e são uma grande idéia. Leia mais <a rel="external" href="http://mochikit.com/doc/html/MochiKit/Async.html">sobre o assunto</a>, ou veja o screencast para mais detalhes.</p>
<h3>Prós e contras</h3>
<p>Primeiramente, a estrutura de log do Mochikit é excelente. Adicionar indicações simplesmente utilizando:</p>
<pre>log("Bem melhor que o alert");
log("ERRO Esta coisa está quebrada");</pre>
<p>O Mochikit faz uso também de características da programação funcional do Javascript para realçar e simplificar sua biblioteca <acronym title="Application Programming Interface">API</acronym>. Por exemplo, se você quiser classificar um grupo dos objetos por seus nomes de propriedades, você pode usar o <strong>keyComparator</strong> criar a função de classificação para você:</p>
<pre>var sortedByName = people.sort(keyComparator("name"));</pre>
<p>Há também a função <strong>counter</strong>. Ela cria uma função que retorna um valor que seja incrementado toda vez que for chamada:</p>
<pre>var nextId = counter();
nextId(); //=&gt; 1
nextId(); //=&gt; 2
nextId(); //=&gt; 3</pre>
<p>Há também várias funções de iteração do estilo-Python, tais como <strong>forEach</strong>, <strong>map</strong> e <strong>filter</strong>.</p>
<p>Quanto a documentação, o Mochikit tem uma documentação boa da <acronym title="Application Programming Interface">API</acronym>, mas os detalhes em algumas partes muito básicas da biblioteca deixam a desejar. No detalhe, após ter lido toda a documentação, ter prestado atenção no screencast e ter escrito alguns scripts Mochikit, ainda sou incerto sobre qual a melhor versão da biblioteca para toda finalidade. Eu uso a versão compactada ou o <strong>Mochikit.js</strong> principal? Como posso carregar as partes individuais da biblioteca?</p>
<p>Entretanto, Mochikit tem uma lista de discussão que responde a estes tipos de perguntas.</p>
<h2>Yahoo! <acronym title="User Interface">UI</acronym></h2>
<p><img src="http://cirofeitosa.com.br/img/artigo-js-yui.png" alt="Yahoo! UI Library" /></p>
<p>A biblioteca Yahoo! <acronym title="User Interface">UI</acronym> (YUI, como é apelidada) foi desenvolvida pelo Yahoo! para o uso interno, mas teve seu código aberto recentemente junto com uma gama de recursos <a style="border-bottom: 1px dotted; color: #006600; text-decoration: underline;" onclick="hwClick4747413531897(717614894);return false;" onmouseover="hw4747413531897(event, this, '717614894'); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='solid';" onmouseout="hideMaybe(event, this); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='dotted 1px'; " href="http://cirofeitosa.com.br/post/bibliotecas-javascript-2#">excelentes</a> para desenvolvedores em <a rel="external" href="http://www.developer.yahoo.com/">developer.yahoo.com</a>.</p>
<p>O YUI é mais uma coleção distinta de “utilidades” do que uma biblioteca (como as que foram tratadas aqui), com cinco scripts principais que tratam de:</p>
<ul>
<li>animação</li>
<li><acronym title="Asynchronous JavaScript and XML">AJAX</acronym></li>
<li>manipulação <acronym title="Document Object Model">DOM</acronym></li>
<li><em>drag-and-drop</em></li>
<li>tratamento de eventos</li>
</ul>
<p>E há seis controles, chamados de:</p>
<ul>
<li>Calendar</li>
<li>Slider</li>
<li>Menu</li>
<li>AutoComplete</li>
<li>Tree View</li>
<li>Container classes (com o qual você pode executar janelas no estilo de widgets)</li>
</ul>
<p>Você pode fazer download de cada um destes scripts separadamente no site <a rel="external" href="http://developer.yahoo.com/yui/index.html">developer.yahoo.com</a>.</p>
<p>Cada uma das bibliotecas do Yahoo! dependem somente do arquivo <strong>yahoo.js</strong>. Por outro lado, esta aproximação oferece uma experiência ligeiramente mais menos coerente para o desenvolvedor e poderia possivelmente introduzir uma determinada quantidade de repetição dentro das bibliotecas.</p>
<p>Uma coisa ineficaz sobre o YUI é o fato de que usa muito espaço inútil de strings. Cada chamada que você faz à biblioteca necessita ser prefixada com uma string do pacote:</p>
<pre>var myAnim = new YAHOO.util.Anim(
 'test',
 { height: {to: 10} },
 1,
 YAHOO.util.Easing.easeOut
);
myAnim.animate();</pre>
<h3>O básico sobre YUI</h3>
<p>A biblioteca de tratamento de eventos do YUI tem uma <acronym title="Application Programming Interface">API</acronym> muito familiar daquelas que são usadas nativamente no browser. Entretanto, tem algumas surpresas agradáveis que o desenvolvedor do Yahoo!, Dustin Diaz, explicou em detalhes <a rel="external" href="http://www.dustindiaz.com/yahoo-event-utility/">neste site</a>. Você pode adicionar um simples “ouvinte” como este:</p>
<pre>YAHOO.util.event.addListener('object_id', 'click', callBackFunction);</pre>
<p>Uma característica muito poderosa da biblioteca de eventos é seu chamado ouvintes de evento. Essencialmente, se você tentar unir um “ouvinte” a um elemento que não exista porque a página não carregou ainda, esperará essa página para tornar-se disponível antes de unir ao evento. Esta é uma solução que talvez confunda e frustre muitos novatos de <acronym title="Dynamic HTML">DHTML</acronym>.</p>
<p>A biblioteca de DOM resume as inconsistências do browser, permitindo o ajuste de estilos das propriedades do elemento. Entretanto, enquanto toma cuidado das tarefas comuns, existem algumas surpresas aqui:</p>
<ul>
<li><strong>get</strong> é versão da função <strong>$</strong> no YUI.</li>
<li>Um método  <a style="border-bottom: 1px dotted; color: #006600; text-decoration: underline;" onclick="hwClick19137951432897(717614894);return false;" onmouseover="hw19137951432897(event, this, '717614894'); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='solid';" onmouseout="hideMaybe(event, this); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='dotted 1px'; " href="http://cirofeitosa.com.br/post/bibliotecas-javascript-2#">interessante</a> é o <strong>generateId</strong>, que pode ser usado gerar IDs para elementos para que você possa rapidamente acessá-los em outros pontos do script.</li>
</ul>
<p>O Gerenciador de Conexão contem toda a mágica do <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> no YUI, e seguindo a linha das outras bibliotecas, escolhe não fazer exame de uma aproximação alto-nível. Não faz nada mais do que fornecer uma relação <em>cross browser</em> ao <strong>XMLHttpRequest</strong>:</p>
<pre>YAHOO.util.Connect.asyncRequest(
 'GET',
 'http://www.yahoo.com',
 callback
);</pre>
<p>Um destaque é a rica interface <strong>callback</strong>, que permite que você defina um objeto que envolva suas funções <strong>callback</strong> com alguma configuração extra. Veja um exemplo de objeto <strong>callback</strong>:</p>
<pre>var callback = {
 success: function(resp) { alert('WOO!!'); }, // called on success
 failure: function(resp) { alert('BOO!'); }, // called on error
 argument: arguments, // user defined arguments
 scope: formController // scope the callbacks are called within
}</pre>
<h3>Prós e contras</h3>
<p>A documentação fornecida pelo Yahoo! para a biblioteca é excelente. O site tem a documentação formal da <acronym title="Application Programming Interface">API</acronym>, vários exemplos, uma lista de discussão e algumas explicações breves das características principais de cada parte da biblioteca. O melhor lugar para verificar para ver se há artigos sobre YUI é no <a rel="external" href="http://www.dustindiaz.com/">site de Dustin Diaz</a>, desenvolvedor do Yahoo!.</p>
<p>Como eu citei acima, a implementação do controle de eventos é um dos atrativos do YUI. Entretanto, o restante da biblioteca, ao ser muito funcional, não contem tantas características <a style="border-bottom: 1px dotted; color: #006600; text-decoration: underline;" onclick="hwClick13792706930897(717614894);return false;" onmouseover="hw13792706930897(event, this, '717614894'); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='solid';" onmouseout="hideMaybe(event, this); this.style.cursor='hand'; this.style.textDecoration='underline'; this.style.borderBottom='dotted 1px'; " href="http://cirofeitosa.com.br/post/bibliotecas-javascript-2#">inovadoras</a> como no Mochikit, Dojo e Prototype, e por causa dos longos nomes de pacotes, desenvolver com o YUI se torna, às vezes, uma tarefa longa.</p>
<p>Contudo a lista crescente dos componentes é muito rica. Por exemplo, o componente de calendário (Calendar) suporta diversas línguas e múltiplas seleções da data, e as classes do Container dão-lhe o poder de implementar todos os tipos interface com janelas. Um ponto ruim de usar estes componentes é que tendem a ser muito dependente de outras bibliotecas; <a rel="external" href="http://dean.edwards.name/weblog/2006/05/das-bloat/">neste discurso, Dean Edwards</a> destaca como exemplo o controle do treeview, que se usa em torno de 260 Kb do Javascript.</p>
<h2>Conclusão: Qual a melhor?</h2>
<p>Bem, uma resposta curta a esta pergunta é que não há nenhuma solução pronta que preencha todas as situações.</p>
<p>A biblioteca Prototype é a que possui uma documentação mais detalhada. É também a biblioteca mais difundida neste momento. Naturalmente, caminha para ser a escolha natural dos desenvolvedores Ruby porque abstrai várias características do Ruby on Rails. Outra coisa importante sobre o Prototype é que tem um peso dos Rails por trás e, em conseqüência, há muitos desenvolvedores que fornecem reparos e remendos do erro ao Prototype. Finalmente, oferece uma riqueza de bibliotecas adicionais tais como scriptaculous, Rico, e Behaviour que o faz uma boa e sólida escolha para muitos desenvolvedores.</p>
<p>Por outro lado, o Prototype tem um framework de tratamento de eventos <em>em-desenvolvimento</em>, que é o problema principal para uma biblioteca tão poderosa. Também – e esta é exclusivamente uma questão de gosto – a aproximação pragmática do Prototype às coisas (como o uso excessivo da propriedade do innerHTML) pode parecer um pouco “suja” às vezes.</p>
<p>Para projetos menores, a forma que foi projetada e seus componentes, fazem do YUI um grande atrativo. É muito fácil de excluir um Gerenciador de Conexão ou a biblioteca de Eventos e começar fazendo algumas tarefas básicas sem ter que atravessar uma curva de aprendizagem demasiada. No geral, contudo, não tem muito a oferecer nos termos de características poderosas.</p>
<p>O Dojo é definitivamente destaque deste grupo. E o foco do Dojo no desempenho é um fator absoluto se você estiver planeando uma aplicação com uso intensivo de Javascript. A implementação de widget tem também um potencial enorme para a construção de complexos <acronym title="User Interfaces">UIs</acronym>. Entretanto é realmente grande – ambos nos termos de tamanho de arquivo e do tamanho da <acronym title="Application Programming Interface">API</acronym> – assim eu não o recomendaria para projetos menores.</p>
<p>Na minha opinião, o Mochikit é muito bem projetado e o melhor dos quatro, e desenvolvedores do Python/Twisted/Nevow acharão sua <acronym title="Application Programming Interface">API</acronym> muito familiar. Entretanto, sua documentação é escassa em alguns lugares (por exemplo, eu ainda tenho dúvida a respeito de qual versão do Mochikit inserir no script). Também, algumas das técnicas funcionais que usa podem ser confusas para os novatos ou aqueles que não tem tanta prática em em técnicas de programação. Entretanto, vale a pena dar olha olhada. As funcionalidades do Mochikit provavelmente surpreenderão você – a função <strong>createDOM</strong>, as ferramentas da iteração e a arquitetura assíncrona são um trabalho de arte.<br />
Fonte:<a href="http://cirofeitosa.com.br/post/bibliotecas-javascript-2" target="_blank">cirofeitosa</a></p>
]]></content:encoded>
			<wfw:commentRss>http://spotgeek.net/bibliotecas-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dojo @ sapo codebits 2008</title>
		<link>http://spotgeek.net/dojo-sapo-codebits-2008/</link>
		<comments>http://spotgeek.net/dojo-sapo-codebits-2008/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 01:55:00 +0000</pubDate>
		<dc:creator>Filipe Teixeira</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Dojo]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://spotgeek.net/?p=60</guid>
		<description><![CDATA[Practical Thin Server Architecture with]]></description>
			<content:encoded><![CDATA[<p>Practical Thin Server Architecture with Dojo</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="322" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://videos.sapo.pt/play?file=http://videos.sapo.pt/k5F0bKWZ2MQIokC1GENH/mov/1" /><embed type="application/x-shockwave-flash" width="400" height="322" src="http://videos.sapo.pt/play?file=http://videos.sapo.pt/k5F0bKWZ2MQIokC1GENH/mov/1"></embed></object></p>
<p>Fonte:<a href="http://codebits.sapo.pt/intra/s/speaker/10" target="_blank">sapo codebits 2008</a></p>
]]></content:encoded>
			<wfw:commentRss>http://spotgeek.net/dojo-sapo-codebits-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

