<?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>Ivan Quirino</title>
	<atom:link href="http://www.ivanquirino.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://www.ivanquirino.com/blog</link>
	<description>Ivan Quirino Professional Edition</description>
	<lastBuildDate>Tue, 27 Apr 2010 11:35:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Transformando o Ubuntu em Mac OS X: Etapa final</title>
		<link>http://www.ivanquirino.com/blog/?p=103</link>
		<comments>http://www.ivanquirino.com/blog/?p=103#comments</comments>
		<pubDate>Tue, 27 Apr 2010 03:54:54 +0000</pubDate>
		<dc:creator>Ivan Quirino</dc:creator>
				<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.ivanquirino.com/blog/?p=103</guid>
		<description><![CDATA[A última etapa da transformação da interface do Ubuntu na interface do Mac OS X: Globalmenu]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Creio que seja de conhecimento dos geeks que usam linux, o &#8216;desktop-mod&#8217;, a customização e modificação do desktop ao seu gosto, ou então, como muitos fazem, imitar a interface de outros sitemas operacionais.</p>
<p style="text-align: justify;">De todas as interfaces, a mais desejada é a do Mac OS X, com o incrível dock na parte inferior do desktop etc. A próxima versão do Ubuntu, saindo do forno dia 29 de Abril, tornou o sonho de imitar o Mac OS X mais próximo, mudando a localização dos botões das janelas para o lado esquerdo. Mas o que eu não tinha visto ainda era imitar o painel superior do Mac, que muda seus menus conforme a aplicação que está em foco no momento. Foi então que eu descobri o <a href="http://code.google.com/p/gnome2-globalmenu/" target="_blank">Globalmenu</a>, um applet do gnome que retira os menus das janelas e os coloca no painel onde o applet encontra-se. Instalei-o e eis o resultado:</p>
<p style="text-align: justify;">
<div id="attachment_104" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.ivanquirino.com/blog/wp-content/uploads/2010/04/globalmenu.png"><img class="size-medium wp-image-104" title="globalmenu" src="http://www.ivanquirino.com/blog/wp-content/uploads/2010/04/globalmenu-300x168.png" alt="globalmenu" width="300" height="168" /></a><p class="wp-caption-text">Globalmenu</p></div>
<p style="text-align: justify;">Para instalar o globalmenu no Ubuntu, o caminho mais fácil é instalar o <a href="http://ubuntu-tweak.com/" target="_blank">Ubuntu Tweak</a>, na barra lateral do Ubuntu Tweak, vá em &#8216;Source Center&#8217;, e na seção Desktop você encontra o <a href="https://launchpad.net/ubuntu/+ppas" target="_blank">PPA</a> do Globalmenu (aproveite e dê uma olhada nos outros PPAs). Adicione o PPA e atualize a lista de pacotes, vá no Ubuntu Software Center e você encontrará a seção &#8216;PPA for Globalmenu Team&#8217;. Instale o pacote &#8216;gnome-applet-globalmenu&#8217; e em seguida adcione o applet do Globalmenu no painel superior do Gnome. Pode ocorrer os menus das janelas não aparecerem, para resolver o problema reinicie a sessão. Para que não fique uma confusão no painel superior, recomendo trocá-lo pelo applet &#8216;Main Menu&#8217;. Para completar a interface do Mac OS X, remova o painel inferior e adicione uma &#8216;dock&#8217;, existem várias: AWN, Docky, SimDock, Cairo Dock etc. Recomendo o <a href="https://launchpad.net/awn" target="_blank">AWN</a> ou o <a href="https://launchpad.net/docky" target="_blank">Docky</a>. Por último, em menção honrosa, completamos nosso desktop Mac OS X com um sistema de buscas para o desktop, instalando o &#8216;tracker&#8217; e o &#8216;deskbar-applet&#8217;, você tem um sistema de indexação e busca adicionando o deskbar-applet no painel do gnome. Não chega aos pés do Spotlight da Apple, mas ajuda no look &amp; feel.</p>
<p style="text-align: justify;">E finalmente (quase) clonamos a interface do Mac OS X.</p>
<p style="text-align: justify;">
<p><script type="text/javascript"><!--
google_ad_client = "pub-2856590512425186";
/* 728x90, criado 30/12/09 */
google_ad_slot = "2643267027";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ivanquirino.com/blog/?feed=rss2&amp;p=103</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX básico com JQuery e PHP</title>
		<link>http://www.ivanquirino.com/blog/?p=29</link>
		<comments>http://www.ivanquirino.com/blog/?p=29#comments</comments>
		<pubDate>Wed, 17 Feb 2010 05:41:49 +0000</pubDate>
		<dc:creator>Ivan Quirino</dc:creator>
				<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://www.ivanquirino.com/blog/?p=29</guid>
		<description><![CDATA[Neste tutorial eu vou explicar de forma bem simples um exemplo de AJAX com JQuery e PHP. O exemplo consiste em um formulário, que pede nome e idade do usuário, e ao clicar no botão &#8216;Enviar&#8217;, é feita uma requisição HTTP ao Servidor. Ao receber a resposta, o formulário desaparecerá com um &#8216;Fade Out&#8217; e [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Neste tutorial eu vou explicar de forma bem simples um exemplo de AJAX com JQuery e PHP. O exemplo consiste em um formulário, que pede nome e idade do usuário, e ao clicar no botão &#8216;Enviar&#8217;, é feita uma requisição HTTP ao Servidor. Ao receber a resposta, o formulário desaparecerá com um &#8216;Fade Out&#8217; e será mostrada a resposta com um &#8216;Fade In&#8217;.</p>
<p style="text-align: justify;"><a title="Exemplo Online" href="http://www.ivanquirino.com/ajax" target="_blank">Veja aqui o exemplo online</a></p>
<p style="text-align: justify;">Precisaremos de 4 arquivos no nosso exemplo: <strong>index.html</strong>, <strong>ajax.php</strong>, <strong>jquery.js</strong>, <strong>exemplo.js</strong>. Você pode baixar os arquivos prontos do exemplo: <a href="http://www.ivanquirino.com/blog/wp-content/uploads/2010/02/exemploAjax1.zip">exemploAjax1.zip</a>. No &#8216;index.html&#8217; ficará o nosso formulário. No &#8216;ajax.php&#8217; está o script que vai interpretar a requisição para devolver uma resposta. &#8216;jquery.js&#8217; é o arquivo do Framework Javascript JQuery, que usaremos no nosso exemplo. Finalmente &#8216;exemplo.js&#8217; é o arquivo onde ficará nosso código JQuery para interagir com o servidor.</p>
<p style="text-align: justify;">Começamos com o &#8216;index.html&#8217;, fazendo referência aos arquivos &#8216;.js&#8217; e contendo o formulário:</p>
<pre>
<div class="codesnip-container" >
<div class="html4strict codesnip" style="font-family:monospace;"><span class="sc0">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;&gt;</span>
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;jquery.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;exemplo.js&quot;</span>&gt;&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/script.html"><span class="kw2">script</span></a>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>Javascript Test<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>
&nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/meta.html"><span class="kw2">meta</span></a> <span class="kw3">http-equiv</span><span class="sy0">=</span><span class="st0">&quot;Content-Type&quot;</span> <span class="kw3">content</span><span class="sy0">=</span><span class="st0">&quot;text/html; charset=UTF-8&quot;</span>&gt;</span>
&nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/head.html"><span class="kw2">head</span></a>&gt;</span>
&nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/form.html"><span class="kw2">form</span></a> <span class="kw3">style</span><span class="sy0">=</span><span class="st0">&quot;font-family: sans-serif; display: none&quot;</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;form1&quot;</span>&gt;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Nome: <span class="sc2">&lt;<a href="http://december.com/html/4/element/input.html"><span class="kw2">input</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;nome&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;nome&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text&quot;</span><span class="sy0">/</span>&gt;&lt;<a href="http://december.com/html/4/element/br.html"><span class="kw2">br</span></a> <span class="sy0">/</span>&gt;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Idade: <span class="sc2">&lt;<a href="http://december.com/html/4/element/input.html"><span class="kw2">input</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;idade&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;idade&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text&quot;</span><span class="sy0">/</span>&gt;&lt;<a href="http://december.com/html/4/element/br.html"><span class="kw2">br</span></a> <span class="sy0">/</span>&gt;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<a href="http://december.com/html/4/element/input.html"><span class="kw2">input</span></a> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;enviar&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;enviar&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;submit&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;Enviar&quot;</span><span class="sy0">/</span>&gt;</span>
&nbsp; &nbsp; &nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/form.html"><span class="kw2">form</span></a>&gt;</span>
&nbsp; <span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/body.html"><span class="kw2">body</span></a>&gt;</span>
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></div>
</div>
</pre>
<p style="text-align: justify;">Vejam que eu não determinei o &#8216;action&#8217;, nem o &#8216;method&#8217; do formulário. Ao usar AJAX, estes dois parâmetros não serão necessários, já que a requisição é feita pelo &#8216;exemplo.js&#8217;. O que será necessário é pegar os valores contidos nos &#8216;input&#8217; do formulário para podermos formar nossa requisição. Então vamos agora para o &#8216;exemplo.js&#8217;. Vamos acrescentar primeiro um pouco de &#8216;estilo&#8217; ao exemplo:</p>
<pre>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#form1&quot;</span><span class="br0">&#41;</span>.<span class="me1">fadeIn</span><span class="br0">&#40;</span>1000<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
</pre>
<p style="text-align: justify;">Adicione o código acima no seu &#8216;exemplo.js&#8217;. Esse &#8216;$&#8217; pode parecer estranho, mas é um alias para a classe/objeto JQuery. Primeiramente, o documento HTML precisa estar pronto para poder ser manipulado pelo script. &#8216;$(document).ready()&#8217; significa que o objeto &#8216;document&#8217; está sendo passado como argumento para o JQuery, e o método &#8216;.ready()&#8217; indica que o documento está pronto. Vejam que foi passada uma função como argumento do método &#8216;.ready()&#8217;. Isto é chamado de <strong>&#8216;Callback&#8217;</strong>. &#8216;Callback&#8217; é uma função que foi passada como parâmetro e é executada após a função que a chamou, o &#8216;Callback&#8217; é especialmente útil quando queremos fazer uma cadeia de funções. Como parâmetro para &#8216;.ready()&#8217;, eu chamo uma função anônima: &#8216;function() {}&#8217;. Juntos, o &#8216;Callback&#8217; e as funções anônimas criam uma cadeia de funções, onde cada função passada como parâmetro depende da função que a recebeu como argumento, podendo usar objetos e variáveis da função pai.</p>
<p style="text-align: justify;">Vejam que coloquei no formulário a propriedade CSS &#8216;display:none&#8217;. Isto é necessário para não mostrar o fomulário, pois iremos usar um efeito de &#8216;Fade In&#8217; para mostrá-lo. Sem esconder o formulário, este apareceria na tela e em seguida teria início o &#8216;Fade In&#8217;. Faça o teste: retire a propriedade e veja como ficaria estranho sem esconder o formulário primeiro. Na próxima linha executamos no formulário o método &#8216;.fadeIn()&#8217;, este recebe como argumento a duração da animação em milissegundos, e ainda por padrão o método aceita como argumento &#8220;slow&#8221; e &#8220;fast&#8221;. Execute o código acima e veja como fica o efeito.</p>
<p style="text-align: justify;">O próximo passo será ler os valores inseridos no formulário. Teremos de ler os valores após o usuário clicar no botão enviar, segue o código:</p>
<pre>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#form1&quot;</span><span class="br0">&#41;</span>.<span class="me1">fadeIn</span><span class="br0">&#40;</span>1000<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#form1&quot;</span><span class="br0">&#41;</span>.<span class="me1">submit</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>event<span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; event.<span class="me1">preventDefault</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> username <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#nome&quot;</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;value&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> userage <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#idade&quot;</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;value&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'&lt;br /&gt;&lt;span&gt;Loading...&lt;/span&gt;'</span><span class="br0">&#41;</span>.<span class="me1">appendTo</span><span class="br0">&#40;</span><span class="st0">'#form1'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
</pre>
<p style="text-align: justify;">Selecionando o formulário, executamos o método &#8216;.submit()&#8217; que recebe um &#8216;Callback&#8217;. Como argumento para &#8216;.submit()&#8217; escreveremos a função que executará após o envio do formulário. Vejam que na função foi passada um argumento &#8216;event&#8217;, este é um objeto JQuery que usaremos para controlar o comportamento normal do formulário, que faria o browser fazer uma requisição ao servidor, recarregando a página (podemos dar qualquer nome para o argumento &#8216;event&#8217;). Para não recarregar a página, cancelaremos o comportamento normal com &#8216;.preventDefault&#8217;. Em seguida, selecionamos os nossos &#8216;input&#8217; marcados com &#8216;id&#8217;, pegamos o valor do seu atributo &#8216;value&#8217; com o método &#8216;.attr()&#8217;, e atribuimos às variáveis (OBS: é recomendado sempre usar &#8216;var&#8217; antes da variável ao declará-la, senão a variável torna-se global, o que não é bom). O atributo &#8216;value&#8217; é gerado pelo browser após o usuário digitar algo no formulário. Para dar um feedback para o usuário criamos um trecho HTML e colocamos dentro do formulário. Ao colocar uma string com código HTML dentro de um seletor do JQuery, este cria o elemento passado no código, e com o método .appendTo(&#8216;#form1&#8242;) adicionamos o elemento criado no formulário. Este método recebe como argumento um seletor, que no caso é o id do formulário.</p>
<p style="text-align: justify;">Antes de vermos como é feita a requisição AJAX, vamos olhar o código no servidor, <strong>ajax.php</strong>:</p>
<pre>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">&lt;?php</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$idade</span> <span class="sy0">=</span> <span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st_h">'idade'</span><span class="br0">&#93;</span> <span class="sy0">+</span> <span class="nu0">30</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$nome</span> <span class="sy0">=</span> <span class="re0">$nome</span> <span class="sy0">.</span> <span class="st0">&quot; Envelhecido(a)&quot;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="kw1">else</span>
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$idade</span> <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$nome</span> <span class="sy0">=</span> <span class="re0">$nome</span> <span class="sy0">.</span> <span class="st0">&quot; Bebê&quot;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="re0">$resposta</span> <span class="sy0">=</span> <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&quot;nome&quot;</span> <span class="sy0">=&amp;</span>gt<span class="sy0">;</span> <span class="re0">$nome</span><span class="sy0">,</span> <span class="st0">&quot;idade&quot;</span> <span class="sy0">=&amp;</span>gt<span class="sy0">;</span> <span class="re0">$idade</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="re0">$resposta</span> <span class="sy0">=</span> <a href="http://www.php.net/json_encode"><span class="kw3">json_encode</span></a><span class="br0">&#40;</span><span class="re0">$resposta</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="kw1">echo</span> <span class="re0">$resposta</span><span class="sy0">;</span>
<span class="sy1">?&gt;</span>;</div>
</div>
</pre>
<p style="text-align: justify;">O servidor é bastante simples, feito com PHP puro: ele recebe os dados do &#8216;POST&#8217;, avalia se a idade passada é maior que 1, se sim, envelhece o usuário. Se não, se o usuário não digitou idade assume-se que ele é um bebê com 0 anos de vida (não é muito inteligente, mas serve para o propósito deste tutorial). Então o servidor cria um array associativo com os dados processados, codifica no formato JSON, e envia a resposta. Atenção é dada ao formato JSON e ao envio da resposta. Sabemos que AJAX significa &#8216;Asynchronous Javascript and XML&#8217;, e que precisamos de um formato de dados para trocar informações entre o cliente Javascript e o servidor. Porque o formato JSON? É mais leve, simples de enteder, e mais fácil de gerar interpretadores. Nossa resposta ao cliente Javascript será uma string desse tipo: {&#8220;nome&#8221;:&#8221;Ivan Envelhecido&#8221;,&#8221;idade&#8221;:&#8221;51&#8243;}. Veja uma comparação entre JSON e XML neste link: <a title="JSON - Wikipedia" href="http://en.wikipedia.org/wiki/JSON" target="_blank">JSON &#8211; Wikipedia</a> .</p>
<p style="text-align: justify;">Hora de fazer a requisição AJAX! utilizaremos o método &#8216;.post()&#8217; do JQuery para isso (acho mais seguro e organizado enviar dados sempre pelo POST). Veja a assinatura do método:</p>
<pre>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;">JQuery.<span class="me1">post</span><span class="br0">&#40;</span>url<span class="sy0">,</span> data<span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>response<span class="br0">&#41;</span><span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">,</span> dataType<span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
</pre>
<p style="text-align: justify;">O primeiro parâmetro, &#8216;url&#8217;, indica a URL para qual será feita a requisição, no nosso caso: <strong>ajax.php</strong>. &#8216;data&#8217; são os parâmetros a serem passados para o POST, deve obedecer o formato: {variavel : outra_variavel, variavel2 : &#8220;string&#8221;}. o terceiro parâmetro é a função que será executada após receber a resposta. O argumento &#8216;response&#8217; vai receber a resposta do servidor, e pode receber qualquer nome, assim como &#8216;event&#8217;. O quarto parâmetro é o tipo de resposta esperada, e pode ser &#8220;json&#8221; ou &#8220;xml&#8221;, vamos escolher o &#8220;json&#8221;. Vejam como vai ficar a requisição, e o resto do script após receber a resposta:</p>
<pre>
<div class="codesnip-container" >
<div class="javascript codesnip" style="font-family:monospace;">$<span class="br0">&#40;</span>document<span class="br0">&#41;</span>.<span class="me1">ready</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#form1&quot;</span><span class="br0">&#41;</span>.<span class="me1">fadeIn</span><span class="br0">&#40;</span>1000<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#form1&quot;</span><span class="br0">&#41;</span>.<span class="me1">submit</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>event<span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; event.<span class="me1">preventDefault</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> username <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#nome&quot;</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;value&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> userage <span class="sy0">=</span> $<span class="br0">&#40;</span><span class="st0">&quot;#idade&quot;</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;value&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; $.<span class="me1">post</span><span class="br0">&#40;</span><span class="st0">'ajax.php'</span><span class="sy0">,</span> <span class="br0">&#123;</span>nome<span class="sy0">:</span> username<span class="sy0">,</span> idade<span class="sy0">:</span> userage<span class="br0">&#125;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>json<span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&quot;#form1&quot;</span><span class="br0">&#41;</span>.<span class="me1">fadeOut</span><span class="br0">&#40;</span><span class="st0">&quot;slow&quot;</span><span class="sy0">,</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">'&lt;div&gt;&lt;/div&gt;'</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><span class="st0">&quot;id&quot;</span><span class="sy0">:</span><span class="st0">&quot;para&quot;</span><span class="sy0">,</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; text<span class="sy0">:</span> <span class="st0">&quot;Seu nome é &quot;</span><span class="sy0">+</span>json.<span class="me1">nome</span><span class="sy0">+</span><span class="st0">&quot; e você tem &quot;</span><span class="sy0">+</span>json.<span class="me1">idade</span><span class="sy0">+</span><span class="st0">&quot; anos.&quot;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .<span class="me1">css</span><span class="br0">&#40;</span><span class="br0">&#123;</span>backgroundColor<span class="sy0">:</span> <span class="st0">&quot;yellow&quot;</span><span class="sy0">,</span> fontFamily<span class="sy0">:</span> <span class="st0">&quot;sans-serif&quot;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .<span class="me1">fadeIn</span><span class="br0">&#40;</span><span class="st0">&quot;slow&quot;</span><span class="br0">&#41;</span>.<span class="me1">appendTo</span><span class="br0">&#40;</span><span class="st0">'body'</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><span class="sy0">,</span> <span class="st0">&quot;json&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
</pre>
<p style="text-align: justify;">Chamamos o método &#8216;$.post(&#8216;ajax.php&#8217;, {nome : username, idade : userage}, function(json){}, &#8220;json&#8221;). É feita uma requisição POST com os dados passados para o método e esperamos receber uma resposta JSON. O JQuery automaticamente transforma a resposta JSON válida em um objeto Javascript e nos entrega este objeto no argumento &#8216;json&#8217;, que iremos usar para dar o feedback ao usuário. Se houver qualquer texto antes ou depois do JSON, o método do JQuery não vai transformar a resposta em objeto, nesse caso vai ser necessário fazer o parsing da resposta (dá um pouco de trabalho). A primeira coisa que é feita após receber a resposta é esconder o formulário, já não precisamos mais dele. Então é selecionado o formulário e executamos o método &#8216;.fadeOut()&#8217;. O primeiro argumento é a velocidade &#8220;slow&#8221;, o segundo é uma função, que usaremos para dar a resposta ao usuário depois que o formulário desaparecer. Para criar um elemento na página, usamos &#8216;$(&#8216;</p>
<p>)&#8217;. Podemos escrever todo um documento HTML para o JQuery criar o elemento. Mas vamos usar uma abordagem mais interessante e passar o conteúdo e atributos do parágrafo usando um segundo argumento: &#8216;$(&#8216;
<div></div>
<p>&#8216;, {&#8220;id&#8221;:&#8221;para&#8221;, text: &#8220;Texto&#8221;})&#8217;, poderíamos passar também o CSS escrevendo um atributo &#8216;&#8221;style&#8221;:&#8221;color:yellow&#8221;&#8216;, mas optei por usar o método &#8216;.css()&#8217; para aplicar o CSS. Após o CSS, aplico o efeito &#8216;.fadeIn()&#8217;, &#8220;slow&#8221;, para que ele apareça devagar. Por fim, mando acrescentar o elemento ao &#8216;body&#8217; do documento com o método &#8216;.appendTo()&#8217;. Lembre-se que a cada método chamado sobre um objeto JQuery, é retornado um objeto JQuery, e você pode chamar mais um método e assim por diante.</p>
<p style="text-align: justify;">Terminamos por aqui este simples tutorial sobre AJAX com JQuery e PHP, usando JSON para troca de dados entre cliente e servidor. Lembrem-se de validar os dados vindos de formulários, e usar &#8216;htmlstriptags()&#8217; para sanar as strings recebidas no PHP. Quaisquer dúvidas, correções e sugestões, por favor, comentem.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-2856590512425186";
/* 728x90, criado 30/12/09 */
google_ad_slot = "2643267027";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ivanquirino.com/blog/?feed=rss2&amp;p=29</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Inclusão social: Ônibus eficientes</title>
		<link>http://www.ivanquirino.com/blog/?p=21</link>
		<comments>http://www.ivanquirino.com/blog/?p=21#comments</comments>
		<pubDate>Tue, 02 Feb 2010 01:54:45 +0000</pubDate>
		<dc:creator>Ivan Quirino</dc:creator>
				<category><![CDATA[Inclusão Social]]></category>
		<category><![CDATA[bolsa]]></category>
		<category><![CDATA[inclusão]]></category>
		<category><![CDATA[ônibus]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://www.ivanquirino.com/blog/?p=21</guid>
		<description><![CDATA[Hoje quando estava indo para o trabalho observei um fato bem interessante. Nunca tinha visto um ônibus eficiente funcionando. Dei sorte hoje.
O cobrador levanta, vai até a porta do meio. Meio desajeitado com os botões, demora um pouco para a plataforma descer. Eu observei atentamente tudo isso, desde como a plataforma funcionava, os movimentos mecânicos, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Hoje quando estava indo para o trabalho observei um fato bem interessante. Nunca tinha visto um ônibus eficiente funcionando. Dei sorte hoje.</p>
<p style="text-align: justify;">O cobrador levanta, vai até a porta do meio. Meio desajeitado com os botões, demora um pouco para a plataforma descer. Eu observei atentamente tudo isso, desde como a plataforma funcionava, os movimentos mecânicos, prestei atenção na expressão do cobrador, do cadeirante, e das pessoas em volta. As pessoas parecem surpresas, em um misto de não entenderem como aquilo funciona e a surpresa de &#8216;isso realmente fuciona&#8217;. O cobrador mostra-se bem atento e cuidadoso. Mas no rosto do cadeirante, via-se só uma expressão: Satisfação.</p>
<p style="text-align: justify;">
<p style="text-align: justify;">E eu também fiquei satisfeito, pois vi um desejo de liberdade, de poder ir e vir, sendo realizado. Poder ir de um lugar a outro sem ter alguém cuidando de você,  deve ser a liberdade mais cobiçada por essas pessoas.</p>
<p style="text-align: justify;">Ter ônibus eficientes na rua não sai barato. Cadeirantes não pagam, e o equipamento é caro. Isso para mim é inclusão social. Diferente do governo que cria bolsa família, bolsa escola, bolsa camisinha, esse tipo de inclusão não é dar algo para pessoas, mas sim permitir que as pessoas realizem aquilo que desejam. Ao dar uma &#8216;bolsa&#8217; para as pessoas está sendo criada uma situação de dependência. O cidadão acostuma-se com a esmola do governo.</p>
<p style="text-align: justify;">O que deve ser feito é permitir e dar meios para que as pessoas se realizem.</p>
<p style="text-align: justify;">Apesar de termos ônibus eficientes na cidade, a situação está longe da ideal. Outro dia havia um cadeirante na parada de ônibus, e o ônibus que veio não era equipado, então eu fui e ele ficou. Então acho justo que todos os ônibus tenham o equipamento de apoio a cadeirantes, já é difícil para quem pega ônibus, imagine quem espera o dobro, o triplo do tempo, aguardando um ônibus eficiente.</p>
<p style="text-align: justify;"><script type="text/javascript"><!--
google_ad_client = "pub-2856590512425186";
/* 728x90, criado 30/12/09 */
google_ad_slot = "2643267027";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ivanquirino.com/blog/?feed=rss2&amp;p=21</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Feliz ano novo!</title>
		<link>http://www.ivanquirino.com/blog/?p=10</link>
		<comments>http://www.ivanquirino.com/blog/?p=10#comments</comments>
		<pubDate>Wed, 30 Dec 2009 17:02:51 +0000</pubDate>
		<dc:creator>Ivan Quirino</dc:creator>
				<category><![CDATA[Feliz Ano Novo]]></category>

		<guid isPermaLink="false">http://www.ivanquirino.com/blog/?p=10</guid>
		<description><![CDATA[Hoje é o penúltimo dia do ano, amanhã é o último! Desejo um Feliz Ano Novo para todos!
Mas para matar todo mundo de inveja, o reveillon de João Pessoa será um dos melhores do Brasil! Teremos Buena Vista Social Club Stars! Os lendários músicos cubanos que espalharam a música de Cuba para o resto do [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje é o penúltimo dia do ano, amanhã é o último! Desejo um Feliz Ano Novo para todos!</p>
<p>Mas para matar todo mundo de inveja, o reveillon de João Pessoa será um dos melhores do Brasil! Teremos Buena Vista Social Club Stars! Os lendários músicos cubanos que espalharam a música de Cuba para o resto do mundo. É sensacional!</p>
<p>Esse post é especial para minha amiga Vanessa, que não estará em João Pessoa no reveillon! =**</p>
<p>Fiquem com um gostinho de amargo na boca quem não estará em aqui, pois só em João Pessoa você terá isso:</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/8c6u4PFKg_o&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/8c6u4PFKg_o&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en_US&amp;feature=player_embedded&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-2856590512425186";
/* 728x90, criado 30/12/09 */
google_ad_slot = "2643267027";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ivanquirino.com/blog/?feed=rss2&amp;p=10</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I Jornada Paraibana de Educação a Distância</title>
		<link>http://www.ivanquirino.com/blog/?p=5</link>
		<comments>http://www.ivanquirino.com/blog/?p=5#comments</comments>
		<pubDate>Sat, 17 Oct 2009 15:47:42 +0000</pubDate>
		<dc:creator>Ivan Quirino</dc:creator>
				<category><![CDATA[Educação a Distância]]></category>

		<guid isPermaLink="false">http://www.ivanquirino.com/blog/?p=5</guid>
		<description><![CDATA[Nos dias 27, 28 e 29 de Outubro, João Pessoa receberá sua I Jornada Paraibana de Educação a Distância. Acontecerá na Estação Ciência, Cultura e Artes Cabo Branco.
Nos três dias o evento contará com palestras, mesa-redondas, minicursos e apresentações de trabalhos dos participantes.
E eu estarei lá trabalhando na Comissão Organizadora, fiz o site http://moodle.virtual.ufpb.br/jornadaead, e [...]]]></description>
			<content:encoded><![CDATA[<p>Nos dias 27, 28 e 29 de Outubro, João Pessoa receberá sua I Jornada Paraibana de Educação a Distância. Acontecerá na Estação Ciência, Cultura e Artes Cabo Branco.</p>
<p>Nos três dias o evento contará com palestras, mesa-redondas, minicursos e apresentações de trabalhos dos participantes.</p>
<p>E eu estarei lá trabalhando na Comissão Organizadora, fiz o site <a href="http://moodle.virtual.ufpb.br/jornadaead">http://moodle.virtual.ufpb.br/jornadaead</a>, e estou carregando nas costas a responsabilidade técnica para este evento. =)</p>
<p>Infelizmentevenho postar isso tardiamente, pois as inscrições já encerraram&#8230;</p>
<p>Até a próxima!<br />
<script type="text/javascript"><!--
google_ad_client = "pub-2856590512425186";
/* 728x90, criado 30/12/09 */
google_ad_slot = "2643267027";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ivanquirino.com/blog/?feed=rss2&amp;p=5</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Speed Kart Indoor!</title>
		<link>http://www.ivanquirino.com/blog/?p=3</link>
		<comments>http://www.ivanquirino.com/blog/?p=3#comments</comments>
		<pubDate>Sat, 30 May 2009 16:05:38 +0000</pubDate>
		<dc:creator>Ivan Quirino</dc:creator>
				<category><![CDATA[Automobilismo]]></category>
		<category><![CDATA[corrida]]></category>
		<category><![CDATA[indoor]]></category>
		<category><![CDATA[kart]]></category>

		<guid isPermaLink="false">http://www.ivanquirino.com/blog/?p=3</guid>
		<description><![CDATA[Meu amigo, correr de kart é uma das melhores coisas que existem! É irado demais!
Quando chegamos lá estava tendo uma corrida, é um barulho infernal no galpão. Fiz meu cadastro e moça da recepção me deu o macacão, o capacete, o capuz e a luva. Me troquei, quando eu botei as luvas já estava me [...]]]></description>
			<content:encoded><![CDATA[<p>Meu amigo, correr de kart é uma das melhores coisas que existem! É irado demais!</p>
<p>Quando chegamos lá estava tendo uma corrida, é um barulho infernal no galpão. Fiz meu cadastro e moça da recepção me deu o macacão, o capacete, o capuz e a luva. Me troquei, quando eu botei as luvas já estava me achando um piloto! Fomos para o briefing onde foram explicadas as regras de corrida. Após isso, peguei meu capacete e me dirigi ao kart que iria pilotar. O kart é um pouco apertado e nada confortável, mas assim que você senta no banco e coloca os pés nos pedais, já dá vontade de sair andando.</p>
<p>O carinha veio e ligou meu motor, se você não deixar um pouco o pé no acelerador o motor morre, tem que segurar o bixo com o freio p ele não sair atropelando a galera. Tínhamos 5 minutos de treino para a classificação. Saí devagar, para sentir o carro, como eu nunca tinha dirigido nada na vida, fui bem cauteloso mesmo. Depois de uma volta bem devagar, resolvi acelerar na segunda. Caramba! A primeira sensação de velocidade deu medo! No final da primeira reta tem uma curva em alta velocidade que eu vi a hora eu perder o controle e bater nos pneus, mas tirei o pé e controlei o carro.</p>
<p>Com o tempo fui me acostumando e comecei a andar rápido, mas ainda com muito cuidado, acabei girando duas vezes, a galera me ultrapassava, levei uma batida e muitas vezes tocaram no meu kart, dá um medo danado!</p>
<p>Por mais que eu me esforçasse, não estava conseguindo ser rápido, terminei em último, com a pior volta da corrida, 32 segundos, enquanto os líderes fizeram em 24 segundos a melhor volta.</p>
<p>Mesmo perdendo, gostei muito, muito mesmo,  e não foi nada fácil aprender a dirigir num kart, foi uma luta o tempo todo para domar o carro. Vou voltar lá, e da próxima, vou dar o máximo que posso, para ver se faço uma volta de pelo menos 25 segundos.</p>
<p><script type="text/javascript"><!--
google_ad_client = "pub-2856590512425186";
/* 728x90, criado 30/12/09 */
google_ad_slot = "2643267027";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.ivanquirino.com/blog/?feed=rss2&amp;p=3</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- www.000webhost.com Analytics Code -->
<script type="text/javascript" src="http://analytics.hosting24.com/count.php"></script>
<noscript><a href="http://www.hosting24.com/"><img src="http://analytics.hosting24.com/count.php" alt="web hosting" /></a></noscript>
<!-- End Of Analytics Code -->
