<?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"
	>

<channel>
	<title>MouseOver Studio &#187; Ajax</title>
	<atom:link href="http://www.mouseoverstudio.com/blog/category/ajax/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.mouseoverstudio.com/blog</link>
	<description></description>
	<pubDate>Wed, 25 Aug 2010 02:03:38 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Adicionando um &#8216;Carregando&#8230;&#8217; em todas as requisições Ajax com uma linha de código</title>
		<link>http://www.mouseoverstudio.com/blog/2010/05/14/adicionando-um-carregando-em-todas-as-requisicoes-ajax-com-uma-linha-de-codigo/</link>
		<comments>http://www.mouseoverstudio.com/blog/2010/05/14/adicionando-um-carregando-em-todas-as-requisicoes-ajax-com-uma-linha-de-codigo/#comments</comments>
		<pubDate>Sat, 15 May 2010 01:14:53 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[jQuery]]></category>

		<category><![CDATA[plugin]]></category>

		<category><![CDATA[loading]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=196</guid>
		<description><![CDATA[Caso estejam trabalhando com jQuery e precisem de uma imagem/mensagem estilo &#8220;Carregando&#8230;&#8221; em todas suas requisições Ajax, o plugin jquery.loading fornece essa funcionalidade com somente um linha de código. No meu caso ficou assim:
$.loading({
  onAjax: true,
  text: 'Carregando...',
  mask: true
});
A opção mask serve para adicionar uma div transparente que impossibilite novas ações [...]]]></description>
			<content:encoded><![CDATA[<p>Caso estejam trabalhando com <a href="http://jquery.com/">jQuery</a> e precisem de uma imagem/mensagem estilo &#8220;Carregando&#8230;&#8221; em todas suas requisições <a href="http://en.wikipedia.org/wiki/Ajax_%28programming%29">Ajax</a>, o plugin <a href="http://plugins.jquery.com/project/loading">jquery.loading</a> fornece essa funcionalidade com somente um linha de código. No meu caso ficou assim:</p>
<pre class="prettyprint"><code>$.loading({
  onAjax: true,
  text: 'Carregando...',
  mask: true
});</code></pre>
<p>A opção <em>mask</em> serve para adicionar uma <em>div</em> transparente que impossibilite novas ações ate a requisição acabar.</p>
<p>Esse funcionalidade é possível devido que as requisições Ajax do jQuery disparam certos <a href="http://docs.jquery.com/Ajax_Events">eventos</a> ao longo do processo, o que nos permite fazer coisas muito legais.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2010/05/14/adicionando-um-carregando-em-todas-as-requisicoes-ajax-com-uma-linha-de-codigo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Recompilação dos últimos links interessantes</title>
		<link>http://www.mouseoverstudio.com/blog/2008/01/19/recompilacao-dos-ultimos-links-interessantes/</link>
		<comments>http://www.mouseoverstudio.com/blog/2008/01/19/recompilacao-dos-ultimos-links-interessantes/#comments</comments>
		<pubDate>Sat, 19 Jan 2008 14:24:15 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Tutoriales]]></category>

		<category><![CDATA[comunidade]]></category>

		<category><![CDATA[eclipse]]></category>

		<category><![CDATA[iphone]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[jboss]]></category>

		<category><![CDATA[livrarias]]></category>

		<category><![CDATA[programação]]></category>

		<category><![CDATA[qualidade]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=52</guid>
		<description><![CDATA[Nesses ultimos dias, a IBM publicou alguns artigos interessantes como os chamados Generar aplicações web Ajax J2EE com jpa2web, Criar aplicações ricas com JavaFX Script, a segunda parte da serie Aplicações Ajax sólidas: Construindo back ends ou Comezando com Grails: Construindo tua primeira aplicação Grails.
Também nesses últimos dias chegamos a conhecer alguns projetos interessantes como [...]]]></description>
			<content:encoded><![CDATA[<p>Nesses ultimos dias, a IBM publicou alguns artigos interessantes como os chamados <a href="http://www.ibm.com/developerworks/web/library/wa-aj-jpa2web/index.html?ca=drs-">Generar aplicações web Ajax J2EE com jpa2web</a>, <a href="http://www.ibm.com/developerworks/web/library/j-javafx/index.html?ca=drs-">Criar aplicações ricas com JavaFX Script</a>, a <a href="http://www.ibm.com/developerworks/web/library/wa-aj-backend/index.html?ca=drs-">segunda parte da serie Aplicações Ajax sólidas: Construindo back ends</a> ou <a href="http://www.ibm.com/developerworks/web/library/j-grails01158/index.html?ca=drs-">Comezando com Grails: Construindo tua primeira aplicação Grails</a>.</p>
<p>Também nesses últimos dias chegamos a conhecer alguns projetos interessantes como o <a href="http://josql.sourceforge.net/">JoSQL</a> que nos permite executar código SQL para selecionar coleções de objetos, similar ao LINQ da plataforma .NET e o <a href="http://www.trentrichardson.com/jsonsql/">JsonSQL</a> que funciona similar mas para objetos em JavaScript, notação Json. Outros trabalhos interessante são os feitos na livraria <a href="http://vikjavev.no/highslide/">Highslide JS</a> que nos ajuda a simular o efeito do conhecido lightbox nas nossas aplicações, o <a href="http://www.crap4j.org/">Crap4j</a> que se encarrega de qualificar nosso código Java em função a diferentes métricas, o <a href="http://www.creamtec.com/products/ajaxswing/">AjaxSwing</a>, que magicamente converte nossos projetos em Swing para aplicações web Ajax, o <a href="http://code.google.com/p/cajuscript/">CajuScript</a>, uma simples e poderosa implementação de script para usar com Java feito no território nacional, o <a href="http://www.mibbit.com/">Mibbit</a>, um chat que trabalha com o protocolo IRC e desenvolvido com Ajax e finalmente o <a href="http://jiggyapp.com/">Jiggy</a>, que nos permite criar aplicações para o iPhone de maneira muito simples e fácil. </p>
<p>Algumas leituras interessantes sobre Java e Design Patterns foram selecionadas também. Uma de elas é a conversação que se deu no forum GUJ chamada <a href="http://www.guj.com.br/posts/list/13316.java">Então você gostaria de saber sobre AOP?</a> que trata sobre a programação orientada a aspectos ou as que encontramos no site <a href="http://www.corej2eepatterns.com/Patterns2ndEd/index.htm">Core J2EE Patterns</a>, com muita informação sobre os diferentes design patterns da especificação J2EE. Outro site interessante é <a href="http://www.domaindrivendesign.org/">Domain Driven Design</a>, com muita informação sobre o tema que leva o mesmo nome.</p>
<p>Alguns tutoriais e artigos técnicos interessantes que chamaram nossa atenção foram aqueles chamados <a href="http://drnicwilliams.com/2008/01/04/autotesting-javascript-in-rails/">Autotestando JavaScript em Rails</a>, de Dr. Nic, que explica como testar nossos scripts em JavaScript desde um script em Rails, <a href="http://blog.morrisjohns.com/javascript_closures_for_dummies">Clousures do JavaScript para Dummies</a>, de Morris Johns, que ensina de maneira muito clara como funcionam os poderosos clousures em JavaScript, um excelente <a href="http://www.eustaquiorangel.com/downloads/tutorialruby.pdf">tutorial sobre Ruby</a> escrito por Eustaquio Rangel no seu periodo de aprendizagem da linguagem e <a href="http://www.jboss.org/?module=bb&#038;op=viewtopic&#038;t=75697">Ultimo tutorial JAAS para comunicação com a base de dados</a> que partiu de uma duvida no forum do JBoss sobre como implementar a especificação de seguridade e autenticação JAAS utilizando a base de dados num servidor de aplicação JBoss.</p>
<p>Também relacionado com JBoss, seguridade e autenticação são os wiki <a href="http://wiki.jboss.org/wiki/Wiki.jsp?page=SecureJBoss">SecureJBoss</a> que é uma fonte de conhecimento compartilhada sobre como configurar o JBoss para máxima seguridade e a definicação na Wikipedia de <a href="http://en.wikipedia.org/wiki/Single_sign_on">Single sign-on (SSO)</a> que consiste em criar um único sistema de autenticação para diferentes aplicações.</p>
<p>O software livre não ficou atrás e assim chegamos a conhecer o <a href="http://www.winlibre.com/en/">WinLibre</a>, um portal com muito software livre para o sistema operativo Windows. Os que deixaram Windows atrás ficaram contentes ao ver o post chamado <a href="http://www.vagabondodigitale.com/2008/01/10-sites-offering-free-linux-courses-online.html">10 sites oferecendo cursos de Linux online de graça</a>, do blog italiano Vagabondo Digitale, que recompilo alguns sites como o da IBM ou da Novell com excelentes cursos. Para os que gostam de especialmente Ubuntu, foi interessante conhecer a revista <a href="http://fullcirclemagazine.org/">Full Circle Magazine</a> que trata sobre tudo o relacionado com o sistema operativo Ubuntu e também o programa <a href="http://ubuntu-tweak.com/downloads">Ubuntu Tweak</a>, que oferece muitas opções para alterar o mesmo. Muita gente pode estar querendo instalar o Java 6 no Ubuntu para treinar para alguma prova e o processo fica muito fácil depois de ler o artigo do Mundo Hev chamado <a href="http://mundohev.com/2007/12/28/instalando-java-16-no-ubuntu/">Instalando Java 6 (1.6) no Ubuntu</a>. Uma vez o Java corretamente instalado, a <a href="http://www.javaranch.com/roundup.jsp">pagina sobre as certificações Java</a> no portal JavaRanch pode nos ajudar bastante.</p>
<p>Voltando aos browsers, foi muito legal ver a <a href="http://www.amaltas.org/svgapp/">aplicação de demonstração de SVG</a> criada por Amaltas, o <a href="http://docs.jquery.com/Release:jQuery_1.2.2">release 1.2.2 do jQuery</a>, a <a href="http://extjs.com/blog/2007/07/10/css-selectors-speed-myths/">comparação dos diferentes CSS Selectors</a> em torno a velocidade realizada pelo pessoal do Ext JS e também a enorme quantidade (perto de 1000) de exemplos sobre Ajax, JavaScript e Dhtml que encontramos no site <a href="http://www.ajaxrain.com/">AjaxRain</a>.</p>
<p>Finalmente, outros dois links interessantes foram o do <a href="http://www.redmonk.com/cote/2007/12/12/eclipse-rap-overview-and-demo-screencast/">Overview sobre Eclipse RAP e o Screencast de demostração</a> criado por Michael Coté e o artigo escrito por Daniel Tenner chamado <a href="http://www.inter-sections.net/2007/11/13/how-to-recognise-a-good-programmer/">Como reconhecer um bom programador</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2008/01/19/recompilacao-dos-ultimos-links-interessantes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>RPC muito muito fácil com dojo.rpc e Struts 2 JSON</title>
		<link>http://www.mouseoverstudio.com/blog/2008/01/01/rpc-muito-muito-facil-com-dojorpc-e-struts-2-json/</link>
		<comments>http://www.mouseoverstudio.com/blog/2008/01/01/rpc-muito-muito-facil-com-dojorpc-e-struts-2-json/#comments</comments>
		<pubDate>Tue, 01 Jan 2008 17:57:36 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[Dojo]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[Tutoriales]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[programação]]></category>

		<category><![CDATA[rpc]]></category>

		<category><![CDATA[struts]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=36</guid>
		<description><![CDATA[De acordo com a definição da Wikipedia, RPC ou Chamada de Procedimento Remoto é
 (&#8230;) o tipo de protocolo para chamada remota de procedimentos em qualquer lugar da rede ou uma chamada de função para o método de transferência de controle de parte de um processo para outra, permite a divisão de um software em [...]]]></description>
			<content:encoded><![CDATA[<p>De acordo com a <a href="http://pt.wikipedia.org/wiki/Chamada_de_procedimento_remoto">definição da Wikipedia</a>, RPC ou Chamada de Procedimento Remoto é</p>
<blockquote><p> (&#8230;) o tipo de protocolo para chamada remota de procedimentos em qualquer lugar da rede ou uma chamada de função para o método de transferência de controle de parte de um processo para outra, permite a divisão de um software em várias partes, (&#8230;)</p></blockquote>
<p>Em outras palavras, com o protocolo RPC podemos ter em distintas maquinas objetos com métodos que ao ser chamados vão ser executados num lugar remoto. </p>
<p>Quando trabalhamos com aplicações web, normalmente temos funções e métodos em JavaScript. Podemos querer executar aqueles métodos e funções no servidor por vários motivos, como por exemplo porque são muito custosos e no browser a execução vai ficar muito lenta, porque precisam de uma lógica de negocio e não queremos expor nossa lógica ao cliente ou porque o método ou função precisa de acesso a recursos que o browser não pode oferecer diretamente.</p>
<p>A solução mais comum seria implementar as funções para que quando sejam chamadas, elas se comuniquem com o servidor mediante Ajax e consigam o resultado. Teríamos algo assim:</p>
<pre class="prettyprint">
function x() {
    /* Ajax para chamar x no servidor */
}

function y() {
    /* Ajax para chamar y no servidor */
}
</pre>
<p>Rapidamente podemos perceber de vários problemas com esta solução. Primeiramente, o código fica muito repetitivo e muito sujeito a erros. Segundamente, precisamos definir uma função local para cada função remota que a gente tiver. Terceiramente, não tem como a gente saber se a função local que a gente esta chamando esta implementada no servidor ou não.</p>
<p>Felizmente com dojo.rpc podemos criar uma solução mais flexível e segura. dojo.rpc.JsonService é uma classe local que representa uma classe remota. O construtor de JsonService recebe uma definição da classe remota e a partir dela ira criar os diferentes métodos.</p>
<p>Struts 2 JSON é um plugin para o Struts que converte o resultado de uma Action em Struts em formato JSON. O resultado de uma Action que devolve um objeto com propriedades chamadas doubleValue do tipo Double, nestedBean do tipo Object, list do tipo List e array do tipo Array ficaria assim:</p>
<pre class="prettyprint">
{
   "doubleValue": 10.10,
   "nestedBean": {
      "name": "Mr Bean"
   },
   "list": ["A", 10, 20.20, {
      "firstName": "El Zorro"
   }],
   "array": [10, 20]
}
</pre>
<p>O mais legal do Struts 2 JSON é que ele foi feito pensando no dojo.rpc e cria uma url com a definição das nossas classes configuradas para trabalhar com ele, de modo que possam ser interpretadas pelo construtor de JsonService.</p>
<p>Vou aproveitar o projeto web criado <a href="http://www.mouseoverstudio.com/blog/?p=39">aqui</a> para implementar uma classe no servidor que possa ser representada no cliente, uma solução RPC.</p>
<p>O primeiro passo é descarregar o plugin e colocar ele na pasta WebContent/WEB-INF/lib . A versão 0.19 do plugin pode ser baixada de <a href="http://jsonplugin.googlecode.com/files/jsonplugin-0.19.jar">aqui</a>.</p>
<p>Seguidamente devemos criar nossa Action. Não sempre todos os métodos da nossa Action precisam estar também no cliente, pelo que colocamos a anotação @SMDMethod nos que efetivamente precisam. SMD é a abreviatura de Simple Method Definition, que seria nossa definição da classe remota. Nossa Action fica assim:</p>
<pre class="prettyprint">
package com.mouseoverstudio.action;

import com.googlecode.jsonplugin.annotations.SMDMethod;
import com.opensymphony.xwork2.Action;

public class TesteStruts2JSON {

	public String execute() {
		return Action.SUCCESS;
	}

	@SMDMethod
	public String getStringResult() {
		String result = new String("MouseOver Studio");
		return result;
	}

	@SMDMethod
	public Integer getIntegerResult(String i) {
		Integer result = new Integer(i);
		return result;
	}
}
</pre>
<p>Vamos mapear agora nossa nova Action. Para isso, adicionamos no arquivo struts.xml o seguinte código:</p>
<p><code class="prettyprint"><br />
&lt;package name=&quot;struts2json&quot; extends=&quot;json-default&quot;&gt;<br />
	&lt;action name=&quot;TesteRPC&quot;<br />
		class=&quot;com.mouseoverstudio.action.TesteStruts2JSON&quot;&gt;<br />
		&lt;interceptor -ref name=&quot;json&quot;&gt;<br />
			&lt;param name=&quot;enableSMD&quot;&gt;true&lt;/param&gt;<br />
		&lt;/interceptor&gt;<br />
		&lt;result type=&quot;json&quot;&gt;<br />
			&lt;param name=&quot;enableSMD&quot;&gt;true&lt;/param&gt;<br />
		&lt;/result&gt;<br />
	&lt;/action&gt;<br />
&lt;/package&gt;<br />
</code></p>
<p>A parte do servidor ja esta feita. Vamo agora trabalhar no cliente. Precisamos da livraria de JavaScript Dojo. Podem baixar ela de <a href="http://dojotoolkit.org/downloads">aqui</a>. Vamos criar uma página que crie uma instância da nossa classe definida no Action e execute os dois métodos dela. Seguidamente vamos utilizar o Firebug para validar a resposta do servidor.</p>
<p><code class="prettyprint"><br />
&lt;%@ taglib prefix=&quot;s&quot; uri=&quot;/struts-tags&quot; %&gt;<br />
&lt;html&gt;<br />
	&lt;head&gt;<br />
		&lt;script type=&quot;text/javascript&quot; src=&quot;./dojo-1.x/dojo/dojo.js&quot;<br />
				djConfig=&quot;isDebug:true&quot;&gt;&lt;/script&gt;<br />
		&lt;s :url id=&quot;url&quot; action=&quot;TesteRPC&quot; /&gt;<br />
		&lt;script type=&quot;text/javascript&quot;&gt;<br />
    		dojo.require(&quot;dojo.rpc.JsonService&quot;);<br />
    		var service = new dojo.rpc.JsonService(&quot;${url}&quot;);<br />
    		service.getStringResult().addCallback(console.log);<br />
    		service.getIntegerResult(&quot;1337&quot;).addCallback(console.log);<br />
		&lt;/script&gt;<br />
	&lt;/head&gt;<br />
	&lt;body&gt;&lt;/body&gt;<br />
&lt;/html&gt;<br />
</code></p>
<p>No resultado podemos apreciar como o Struts 2 JSON cria uma definição da nossa Action e também como o resultado de nossos métodos e convertido para formato JSON.</p>
<p><center><br />
<a class="imagelink" rel="lightbox" href="/blog/tutoriales/4/result.jpg"><br />
<img src="/blog/tutoriales/4/result_tn.jpg" alt="" /><br />
</a><br />
</center></p>
<p>Trabalhar com RPC utilizando dojo.rpc e Struts 2 JSON e um processo muito simples que facilita muito o desenvolvimento de aplicações web. Para mas informação, podem como sempre perguntar ou se desejar, se referir ao seguintes links:</p>
<p>http://cwiki.apache.org/S2PLUGINS/json-plugin.html</p>
<li>http://dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/ajax-transports/remote-procedure-call-rpc</li>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2008/01/01/rpc-muito-muito-facil-com-dojorpc-e-struts-2-json/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Novidades no Google AJAX Feed API: Feed Discovery API</title>
		<link>http://www.mouseoverstudio.com/blog/2007/07/21/novidades-no-google-ajax-feed-api-feed-discovery-api/</link>
		<comments>http://www.mouseoverstudio.com/blog/2007/07/21/novidades-no-google-ajax-feed-api-feed-discovery-api/#comments</comments>
		<pubDate>Sat, 21 Jul 2007 19:32:27 +0000</pubDate>
		<dc:creator>Diego Carrion</dc:creator>
		
		<category><![CDATA[Ajax]]></category>

		<category><![CDATA[Api]]></category>

		<category><![CDATA[Feed]]></category>

		<category><![CDATA[Google]]></category>

		<category><![CDATA[JavaScript]]></category>

		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://www.mouseoverstudio.com/blog/?p=6</guid>
		<description><![CDATA[Extraído e traduzido do blog AJAX Search API:
O AJAX Feed API facilita a visualização de RSS e feeds em qualquer site. Infortunadamente, não e sempre fácil encontrar o URL do feed que vocé quer. Para ajudar a descobrir e encontrar feeds, hoje lançamos dois métodos adicionais. O novo método findFeeds() procura feeds baseado numa simples [...]]]></description>
			<content:encoded><![CDATA[<p>Extraído e traduzido do <a href="http://googleajaxsearchapi.blogspot.com/">blog AJAX Search API</a>:</p>
<blockquote><p>O <a href="http://code.google.com/apis/ajaxfeeds/">AJAX Feed API</a> facilita a visualização de RSS e feeds em qualquer site. Infortunadamente, não e sempre fácil encontrar o URL do feed que vocé quer. Para ajudar a descobrir e encontrar feeds, hoje lançamos dois métodos adicionais. O novo método <a href="http://code.google.com/apis/ajaxfeeds/documentation/reference.html#findFeeds">findFeeds()</a> procura feeds baseado numa simples query.  O novo método <a href="http://code.google.com/apis/ajaxfeeds/documentation/reference.html#lookupFeed">lookupFeed()</a> aceita uma URL e retorna o primeiro feed associado a aquela URL. Temos juntado alguns <a href="http://code.google.com/apis/ajaxfeeds/documentation/#DISCOVERY">exemplos legais</a> (<a href="http://www.google.com/uds/samples/feedapidocs/findfeeds.html">exemplo de findFeeds</a> e <a href="http://www.google.com/uds/samples/feedapidocs/lookup.html">exemplo de lookupFeed</a>) para que você possa comezar.</p></blockquote>
<p>Segue o resultado do exemplo de lookupFeed:</p>
<p><iframe src="http://www.google.com/uds/samples/feedapidocs/lookup.html" style="height:300px;border:0px"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.mouseoverstudio.com/blog/2007/07/21/novidades-no-google-ajax-feed-api-feed-discovery-api/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
