<?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>marcuscavalcanti.net &#187; Web</title>
	<atom:link href="http://www.marcuscavalcanti.net/blog/category/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.marcuscavalcanti.net/blog</link>
	<description>Software, tecnologia e etc.</description>
	<lastBuildDate>Sun, 22 Jan 2012 21:18:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Wizard de formulários com JS sem bibliotecas</title>
		<link>http://www.marcuscavalcanti.net/blog/2009/04/28/wizard-de-formularios-com-js-sem-bibliotecas/</link>
		<comments>http://www.marcuscavalcanti.net/blog/2009/04/28/wizard-de-formularios-com-js-sem-bibliotecas/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 16:41:57 +0000</pubDate>
		<dc:creator>Marcus Cavalcanti</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[formulário wizard]]></category>
		<category><![CDATA[Java Script]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[wizard]]></category>

		<guid isPermaLink="false">http://www.marcuscavalcanti.net/blog/?p=942</guid>
		<description><![CDATA[Em um projeto que estou participando, temos um formulário para lá de grande, são 5 passos, ou seja, um wizard e sendo que em um dos passos existe uma tela com mais de 100 inputs, sendo que esse valor é dinâmico, mas dificilmente tem menos que 100 inputs, é mais normal ter mais do que [...]]]></description>
			<content:encoded><![CDATA[<p>Em um projeto que estou participando, temos um formulário para lá de grande, são 5 passos, ou seja, um <em>wizard</em> e sendo que em um dos passos existe uma tela com mais de 100 <em>inputs</em>, sendo que esse valor é dinâmico, mas dificilmente tem menos que 100 <em>inputs</em>, é mais normal ter mais do que isso.</p>
<p>Estávamos usando o <a href="http://www.jquery.com"  target="_blank" style="text-decoration: underline">jQuery</a> até então, que é uma biblioteca JS, que contém inúmeros <em>plugins</em>, além de vários facilitadores para construção de aplicações mais interativas. Acho bacana terem surgidos várias bibliotecas JS, onde o jQuery talvez seja a principal dessas, pois com isso o nível de interatividade entre o usuário e as aplicações aumentaram consideravelmente e isso trás (ou pelo menos deveria) outros prós, como: facilidade de navegação e usabilidade mais intuitiva nas interfaces que fazem o bom uso desses recursos. Para os desenvolvedores sem dúvidas também foi algo positivo, pois é bem tranquilo hoje fazer uma requisição ajax com uma linha de <em>script</em>, além de termos também um código mais organizado e estruturado.</p>
<p>Só que eu sempre tive um certo receio em relação a essas bibliotecas, não com as bibliotecas em si, mas da forma que alguns desenvolvedores as usam, principalmente em caso de aplicações para um grande número de acessos em um ambiente mais &#8220;pesado&#8221;, já vi alguns casos em que o uso dessas bibliotecas atrapalhou mais do que ajudou e recentemente isso aconteceu comigo.</p>
<p>Utilizei um <em>plugin</em> do jQuery pronto para criar <em>wizards</em> de formulário, ou formulário no formato de <em>wizard</em>, como preferir. Esse <em>plugin</em>, além de ser pouco flexível, causou um problema na minha aplicação justamente no <em>wizard</em> que possui vários <em>inputs</em>. O problema é que ao entrar nesse <em>wizard</em>, o <em>browser</em> simplesmente para durante uns 3s, respira, e depois mostra o <em>wizard</em>, e vamos combinar que isso é muito esquisito, não é um comportamento normal. Para ser sincero não consegui identificar a causa principal, mas desconfio de várias coisas, primeiro é que no geral essas bibliotecas são muito pesadas, só para esse <em>wizard</em> de form eram mais de 50kb de arquivo, algo desnecessário, ainda mais considerando um ambiente com MUITO VOLUME de acessos, pois isso acaba causando um <em>overhead</em>. O segundo é em relação ao código da função para geração do <em>wizard</em>, achei o mesmo extenso demais para fazer algo que funciona, mas que é pouco flexível. O terceiro é que essas bibliotecas JS já são uma abstração de N componentes nativos do JS e por mais que seja ínfimo, isso também pode ajudar a causar um <em>overhead</em>.</p>
<p>Mediante a esses percalços e também a falta de flexibilidade do <em>script</em> que eu utilizei, resolvi criar o meu próprio <em>script</em> para fazer o <em>wizard</em> do formulário, esse <em>script</em> é bem simples, não utiliza nenhuma biblioteca JS, é bem fácil de entender e extender, além de ser flexível. Falando assim parece até uma maravilha do mundo moderno hehe, mas realmente o <em>script</em> resolveu meus problemas de performance e me deu a flexibilidade que eu queria. Testei o mesmo no Firefox 3, Opera 9 e IE 7 e funcionou perfeitamente e da mesma maneira em ambos.</p>
<p>Para <strong>visualizar o <em>script</em> funcionando</strong>, basta <a href="http://www.marcuscavalcanti.net/blog/wp-content/uploads/wizard/wizard.html" target="_blank" style="text-decoration: underline">clicar aqui</a>, para fazer o <strong><em>download</em></strong> do mesmo, é só <a href="http://www.marcuscavalcanti.net/blog/wp-content/uploads/wizard/wizard.rar"  target="_blank" style="text-decoration: underline">clicar aqui</a>.</p>
<p>Se surgirem dúvidas ou problemas, sugiro criar um comentário que responderei somente por aqui, até porque caso outras pessoas que venham a utilizar o <em>script</em> tenham a mesma dúvida, já fico mais fácil de achar e procurar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcuscavalcanti.net/blog/2009/04/28/wizard-de-formularios-com-js-sem-bibliotecas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usando GET e POST corretamente</title>
		<link>http://www.marcuscavalcanti.net/blog/2009/04/22/usando-get-e-post-corretamente/</link>
		<comments>http://www.marcuscavalcanti.net/blog/2009/04/22/usando-get-e-post-corretamente/#comments</comments>
		<pubDate>Wed, 22 Apr 2009 17:19:22 +0000</pubDate>
		<dc:creator>Marcus Cavalcanti</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[GET]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[POST]]></category>

		<guid isPermaLink="false">http://www.marcuscavalcanti.net/blog/?p=925</guid>
		<description><![CDATA[Pelo título do tópico parece um assunto básico, correto? E realmente é, mas infelizmente ainda vejo muitos desenvolvedores fazendo o mal uso dos métodos GET e POST do protocolo HTTP. Principalmente no caso de desenvolvedores Web, esse assunto deveria ser pré-requisito antes mesmo de aprender qualquer linguagem de programação, ou então, até antes mesmo de [...]]]></description>
			<content:encoded><![CDATA[<p>Pelo título do tópico parece um assunto básico, correto? E realmente é, mas infelizmente ainda vejo muitos desenvolvedores fazendo o mal uso dos métodos GET e POST do protocolo HTTP. Principalmente no caso de desenvolvedores Web, esse assunto deveria ser pré-requisito antes mesmo de aprender qualquer linguagem de programação, ou então, até antes mesmo de aprender HTML.</p>
<p>A especificação do protocolo HTTP diz, que o mesmo <a href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html" style="text-decoration: underline" target="_blank">possui 8 métodos</a>, porém os métodos geralmente mais usados são GET e POST. Quando aprendemos a desenvolver para Web, é comum lermos ou sermos informados, que o método POST deve ser usado em formulários e que o método GET deve ser usado através de links. Isso é uma inverdade.</p>
<p>Tanto o método GET, como o método POST, podem ser usados de várias maneiras, contudo existem boas práticas que indicam as melhores maneiras de fazer o uso desses métodos, a seguir explicarei melhor quais são essas maneiras.</p>
<h3>Explicando GET e POST</h3>
<p>O método GET faz a passagem de parâmetros para o servidor HTTP através de uma URL, enquanto o método POST envia um documento ao servidor HTTP com o conteúdo contido nesse documento (<em>message body</em>).</p>
<h3>Quando usar GET e quando usar POST?</h3>
<p>O método GET deve ser usado para acessar recursos, ou seja, para recuperar informações (dados), enquanto o método POST deve ser usado em ações que modifiquem essas informações.</p>
<p>Sendo mais claro, o método POST é usado em ações destrutivas, como: inscrição em algum serviço, modificação do estado de algum recurso no banco de dados, etc. Enquanto o método GET é usado em ações não destrutivas, como: buscas, listagens, etc.</p>
<h3>Na prática</h3>
<p>GET deve ser usado em operações seguras, justamente por ser indicado em ações que não modifiquem o estado de um recurso, pois imagine que você tenha em sua aplicação um link (GET) que leve a remoção de um determinado ítem, o que poderia acontecer no caso desse link ser indexado por algum <em>web crawler</em>? Pois bem, esse é um dos casos no qual o método POST seria indicado (operações não-seguras).</p>
<h3>Exemplos reais</h3>
<p><strong>GET</strong>: query, buscas, filtros, listagem.</p>
<p><strong>POST</strong>: inscrição em serviços (newsletter, por exemplo), alteração/edição/remoção de  recursos em banco de dados, envio de email.</p>
<h3>Referências</h3>
<p><a href="http://www.w3.org/TR/webarch/" style="text-decoration: underline" target="_blank">Architecture of the World Wide Web</a></p>
<p><a href="http://www.cs.tut.fi/~jkorpela/forms/methods.html#fund" style="text-decoration: underline" target="_blank">The fundamental differences between &#8220;GET&#8221; and &#8220;POST&#8221;</a></p>
<p><a href="http://www.w3.org/2001/tag/doc/whenToUseGet.html" style="text-decoration: underline" target="_blank">URIs, Addressability, and the use of HTTP GET and POST</a></p>
<p><a href="http://www.w3.org/MarkUp/html-spec/html-spec_toc.html#SEC8.2" style="text-decoration: underline" target="_blank">Form Submission</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcuscavalcanti.net/blog/2009/04/22/usando-get-e-post-corretamente/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Como usar jQuery sem conflito com outras bibliotecas JavaScript</title>
		<link>http://www.marcuscavalcanti.net/blog/2009/02/17/como-usar-jquery-sem-conflito-com-outras-bibliotecas-javascript/</link>
		<comments>http://www.marcuscavalcanti.net/blog/2009/02/17/como-usar-jquery-sem-conflito-com-outras-bibliotecas-javascript/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 04:47:30 +0000</pubDate>
		<dc:creator>Marcus Cavalcanti</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Prototype]]></category>

		<guid isPermaLink="false">http://www.marcuscavalcanti.net/blog/?p=324</guid>
		<description><![CDATA[Estava trabalhando em uma página que já fazia o uso da biblioteca jQuery para apresentação de alguns componentes, contudo surgiu a necessidade de usar ajax nessa mesma página. Apesar da jQuery possuir um bom suporte para ajax, eu gosto muito também da prototype, pois além de ter mais prática (com ajax), também já tenho algumas [...]]]></description>
			<content:encoded><![CDATA[<p>Estava trabalhando em uma página que já fazia o uso da biblioteca <a href="http://www.jquery.com" target="_blank" style="text-decoration: underline">jQuery</a> para apresentação de alguns componentes, contudo surgiu a necessidade de usar ajax nessa mesma página. Apesar da jQuery possuir um <a href="http://docs.jquery.com/Ajax" target="_blank" style="text-decoration: underline">bom suporte para ajax</a>, eu gosto muito também da <a href="http://www.prototypejs.org/" target="_blank" style="text-decoration: underline">prototype</a>, pois além de ter mais prática (com ajax), também já tenho algumas customizações prontas.</p>
<p>Após incluir a prototype e testar a página, percebi que um erro de JavaScript estava ocorrendo, no começo achei que a causa do erro era em razão de uma função &#8211; usando a prototype &#8211; que eu tinha acabado de fazer, mas depois usando o bem dito <a href="http://getfirebug.com/" target="_blank" style="text-decoration: underline">firebug</a> e fazendo alguns <em>debugs</em>, percebi que o erro era mesmo em um conflito entre a jQuery e a prototype.</p>
<p>O problema ocorre, pois as duas bibliotecas fazem o uso da função &#8220;$()&#8221; para acessar as suas funções, o que acaba gerando o conflito.</p>
<p>A biblioteca jQuery fornece algumas maneiras de resolver isso, mas todas giram em torno da função <a href="http://docs.jquery.com/Core/jQuery.noConflict" target="_blank" style="text-decoration: underline">jQuery.noConflict()</a>. A solução que oferece o maior custo x benefício na minha opinião, é a que eu não preciso alterar os meus métodos já existentes, ou seja, não precisaria ter que fazer isso:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol><li class="li1"><pre class="de1"><span class="kw2">var</span> $j <span class="sy0">=</span> jQuery.<span class="me1">noConflict</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">$j<span class="br0">&#40;</span><span class="st0">&quot;div&quot;</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>No caso acima, se eu já tivesse N funções usando jQuery, eu precisaria fazer uma <a href="http://pt.wikipedia.org/wiki/Refatora%C3%A7%C3%A3o" target="_blank" style="text-decoration: underline">refatoração</a> do meu código para mudar o método &#8220;chamador&#8221; das minhas funções de $() para $j(), isso geraria algum tempo perdido com muitas mudanças e muitos testes. A solução que encontrei pede apenas para que as funções fiquem dentro da <em>document ready area </em> da jQuery, então ficaria mais ou menos assim:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><ol><li class="li1"><pre class="de1">   <span class="sy0">&lt;</span>script src<span class="sy0">=</span><span class="st0">&quot;prototype.js&quot;</span><span class="sy0">&gt;&lt;/</span>script<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">   <span class="sy0">&lt;</span>script src<span class="sy0">=</span><span class="st0">&quot;jquery.js&quot;</span><span class="sy0">&gt;&lt;/</span>script<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">   <span class="sy0">&lt;</span>script<span class="sy0">&gt;</span></pre></li><li class="li1"><pre class="de1">     jQuery.<span class="me1">noConflict</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">     <span class="co1">// Put all your code in your document ready area</span></pre></li><li class="li1"><pre class="de1">     jQuery<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></pre></li><li class="li1"><pre class="de1">       <span class="co1">// Do jQuery stuff using $</span></pre></li><li class="li1"><pre class="de1">       $<span class="br0">&#40;</span><span class="st0">&quot;div&quot;</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">     <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1">&nbsp;</pre></li><li class="li1"><pre class="de1">     <span class="co1">// Use Prototype with $(...), etc.</span></pre></li><li class="li1"><pre class="de1">     $<span class="br0">&#40;</span><span class="st0">'someid'</span><span class="br0">&#41;</span>.<span class="me1">hide</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></li><li class="li1"><pre class="de1"> <span class="sy0">&lt;/</span>script<span class="sy0">&gt;</span></pre></li></ol></div></div></div></div></div></div></div>


<p>Da maneira acima eu não precisaria mudar nenhuma função já existente, bastaria apenas incluí-las dentro do bloco indicado.</p>
<p>Segundo a <a href="http://docs.jquery.com/Using_jQuery_with_Other_Libraries" target="_blank" style="text-decoration: underline">documentação</a>, essa seria a solução mais adequada na maioria dos casos.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.marcuscavalcanti.net/blog/2009/02/17/como-usar-jquery-sem-conflito-com-outras-bibliotecas-javascript/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
	</channel>
</rss>

