<?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>A fronteira final &#187; javascript</title>
	<atom:link href="http://afronteirafinal.com/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://afronteirafinal.com</link>
	<description>Audaciosamente indo onde nenhum dev jamais esteve</description>
	<lastBuildDate>Thu, 15 Dec 2011 15:52:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Saiba mais sobre DOM e ECMAScript</title>
		<link>http://afronteirafinal.com/saiba-mais-sobre-dom-e-ecmascript/</link>
		<comments>http://afronteirafinal.com/saiba-mais-sobre-dom-e-ecmascript/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 03:41:46 +0000</pubDate>
		<dc:creator>lcameroon</dc:creator>
				<category><![CDATA[Cameroon]]></category>
		<category><![CDATA[Webmasters]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[ECMAScript]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[JScript]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://afronteirafinal.com/?p=290</guid>
		<description><![CDATA[Por muito tempo eu fingia saber exatamente o que era DOM, ECMAScript, JScript, DHTML, etc significava. Mas num final de semana desses eu peguei para ler sobre o que eles significam e como eles estão relacionados. Esta é a forma como a especificação DOM define um &#8220;DOM&#8221;: O Document Object Model (DOM) é um Application [...]]]></description>
			<content:encoded><![CDATA[<p>Por muito tempo eu fingia saber exatamente o que era DOM, ECMAScript, JScript, DHTML, etc significava. Mas num final de semana desses eu peguei para ler sobre o que eles significam e como eles estão relacionados.</p>
<p>Esta é a forma como a especificação DOM define um &#8220;DOM&#8221;:</p>
<blockquote><p><strong><em>O Document Object Model (DOM) é um Application Programming Interface (API) para HTML válido e documentos XML bem formatados. Ele define a estrutura lógica dos documentos e o modo como um documento é acessado e manipulado.</em></strong></p></blockquote>
<p><span id="more-290"></span>Em outras palavras, o DOM é uma forma padrão para permitir que as linguagens de programação interajam com documentos HTML / XML. O W3C fornece, o que é chamado de linguagem de vinculações, para o ECMAScript. Isto significa que as funcionalidades definidos na especificação DOM foram implementadas nessa linguagem.</p>
<p>ECMAScript é uma &#8220;uniformização&#8221; da língua (script) dos &#8220;homens das cavernas&#8221; &#8211; Netscape JavaScript e Microsoft JScript para que todos os browsers possam compreender instruções escritas usando o ECMAScript.</p>
<p>Agora, existem três grandes &#8220;dialetos&#8221; do ECMAScript: JavaScript (Firefox / Chrome / Safari), JScript (IE), e ActionScript (Adobe Flash / Flex). Estes são chamados dialetos como suporte a código escrito antes da normalização e fornecem alguns recursos não disponíveis no ECMAScript ou em outros dialetos.</p>
<p>Os navegadores fornecem uma implementação das interfaces do DOM que permite ECMAScript (ou dialetos suportados) interagirem com o DOM de um documento XML/HTML. Assim, a maioria dos browsers decentes, lançado conforme os padrões, dizem qual ECMAScript é suportado para cada versão do seu navegador.</p>
<p>O DOM de uma página HTML tem uma &#8220;árvore-como estrutura&#8221; quando visualizadas. É importante notar que o DOM não representa o conteúdo do HTML, mas representa apenas objetos através dos quais o conteúdo pode ser acessado. Esses objetos são modelados após a marcação que existe na página HTML. As relações, funções, comportamentos e atributos desses objetos são identificados pelo DOM.</p>
<p>Bom, é isso! Você normalmente não precisa de saber sobre interfaces DOM principalmente se você trabalhar com uma biblioteca JavaScript. Mas se você estiver interessado, Quirksmode (<a href="http://www.quirksmode.org" target="_blank">http://www.quirksmode.org</a>) tem uma excelente introdução ao DOM.</p>
]]></content:encoded>
			<wfw:commentRss>http://afronteirafinal.com/saiba-mais-sobre-dom-e-ecmascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>JSONP e o &#8220;Ajax Crossdomain&#8221;</title>
		<link>http://afronteirafinal.com/jsonp-e-o-ajax-crossdomain/</link>
		<comments>http://afronteirafinal.com/jsonp-e-o-ajax-crossdomain/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 02:02:10 +0000</pubDate>
		<dc:creator>Alexander Borges</dc:creator>
				<category><![CDATA[Alex]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[JSONP]]></category>

		<guid isPermaLink="false">http://afronteirafinal.com/?p=300</guid>
		<description><![CDATA[Os serviços para intercâmbio de dados entre aplicações via protocolo http alcançaram algum nível de maturidade nesses últimos anos. Hoje, já sabemos como disponibilizar serviços via web, já existem abordagens que funcionam, outras vão sendo experimentadas. O fato é que existem diversas APIs disponíveis na web para atender as mais variadas necessidades: Agenda, mapas, autenticação [...]]]></description>
			<content:encoded><![CDATA[<p>Os serviços para intercâmbio de dados entre aplicações via <a title="Http Protocol" href="http://pt.wikipedia.org/wiki/Hypertext_Transfer_Protocol">protocolo http</a> alcançaram algum nível de maturidade nesses últimos anos. Hoje, já sabemos como disponibilizar serviços via web, já existem abordagens que funcionam, outras vão sendo experimentadas. O fato é que existem diversas APIs disponíveis na web para atender as mais variadas necessidades: Agenda, mapas, autenticação de usuários, integração com redes sociais, enfim. Serviços públicos, serviços pagos, serviços com mais de um plano de licensiamento para atender mais de um tipo de consumidor. Hoje qualquer um pode criar sua api e colocar na web e ganhar (se quiser) seu dinheirinho com aquilo.</p>
<p>Em meio às tecnologias para troca de dados e comunicação entre aplicações pela web como REST, SOAP, WSDL etc, se destacam também as APIs que fornecem dados com simples requisições http diretamente do site via browser, sem a necessidade de processamento do lado do servidor pelo cliente do serviço. Para esses casos temos o JSONP como uma alternativa &#8220;bem em conta&#8221; para resolver problemas conhecidos. O objetivo desse post é dar uma introdução do que é e como usar o JSONP.</p>
<p><span id="more-300"></span></p>
<h2>AJAX vs JSONP</h2>
<p>Tecnicamente, JSONP não é AJAX, vamos a uma explicação bem breve da diferença:</p>
<p>AJAX se trata de requisições assíncronas por meio dos objetos XMLHttpRequest e XMLHttpResponse, que trafegam dados no formato XML ou texto puro. Esses dados são manipulados pelo programa javascript, que finalmente monta seus trechos de html sem a necessidade do recarregamento da página.</p>
<p>Já o JSONP requisita dados de forma assíncrona, assim como o AJAX, porém não utiliza os objetos XMLHttp e  só trabalha com objetos no formato JSON.</p>
<h2>JSON &#8211; JavaScript Object Notation</h2>
<p>Formato de dados que vem sendo fortemente utilizado para transporte de dados entre aplicações, principalmente web. Está ganhando seu espaço devido a sua simplicidade de implementação e leveza. É um subconjunto das notações de objetos javascript. Além disso, a manipulação dos dados em um objeto JSON requer um  parse simples (usando o método eval do javascript) e não se faz necessária a navegação por DOM entre os nós e atributos de um XML, e por isso a preferência pelo JSON ao invés de XML para ajax na web.</p>
<h2>Same Origin Policy</h2>
<p>Existe uma limitação para o uso do Objeto XMLHTTPRequest no que se trata de requisições entre diferentes sites. Existe um padrão de segurança, implementado por linguagens de programação, nesse caso o javascript, chamado <a title="Same Origin Policy" href="http://en.wikipedia.org/wiki/Same_origin_policy" target="_blank">Same Origin Policy</a>, ou Política de Mesma Origem. Essa recomendação de segurança impede que um documento leia ou envie informações para outra origem.</p>
<p>São considerados de origens diferentes quaisquer documentos que estejam em domínios diferentes, portas diferentes ou que utilizem protocolos de comunicação diferentes entre si.</p>
<p>Considerando a url: &#8220;http://www.afronteirafinal.com/&#8221;, podemos ter requisições que irão ter sucesso ou falhar nas seguintes situações:</p>
<div style="width:80%;background-color:#eee;padding:15px 15px">
<p><strong style="width:100%;background-color:#aaa;display:block;text-indent:20px;"> http://www.afronteirafinal.com/diretorio/pagina.html</strong><br />
<span style="color: #339966;">Funciona</span>, pois é uma requisição para o mesmo host usando o mesmo protocolo e pela mesma padrão, ou seja, dentro do mesmo site.</p>
<p><strong style="width:100%;background-color:#aaa;display:block;text-indent:20px;">https://www.afronteirafinal.com/pagina.html</strong><br />
<span style="color: #ff0000;">Não funciona</span>, pois protocolos diferentes representam origens diferentes (&#8220;http&#8221;,&#8221;https&#8221;);</p>
<p><strong style="width:100%;background-color:#aaa;display:block;text-indent:20px;">http://www.afronteirafinal.com:81/pagina.html</strong><br />
<span style="color: #ff0000;">Não funciona</span>, pois portas diferentes também representam origens diferentes (&#8220;porta 81&#8243;);</p>
<p><strong style="width:100%;background-color:#aaa;display:block;text-indent:20px;">http://www.outrosite.com/pagina.html</strong><br />
Também <span style="color: #ff0000;">não funciona</span>, pois se tratam de hosts diferentes;
</div>
<p></p>
<h2>JSONP – JSON with Padding</h2>
<p>JSONP é entendido como um “pseudo-protocolo” que permite realizar requisições http e trafegar dados no formato JSON entre documentos de origens diferentes.</p>
<h3>Como funciona:</h3>
<p>A implementação do JSONP e bastante simples, porém é necessário que o serviço responsável pela entrega os dados forneca a opção de entrega na estrutura necessária para que os dados possam ser manipulados.</p>
<p>Não existem restrições para o carregamento de imagens e scripts de outras origem, por meio do atributo “src” das tags. A técnica por tras do JSONP se aproveita dessa possibilidade para carregar scripts externos conforme a necessidade, manipulando o DOM da página.</p>
<p>O que faz acontecer o JSONP é a inclusão de uma TAG “script” no header “&lt;head&gt;” da página. Essa tag “script” recebe um atributo “src” apontando para o site externo, que responde objetos no formato JSON , esse resultado é “parseado” e fica disponível para manipulação via JavaScript.</p>
<h3>O que é o “padding”?</h3>
<p>Padding ou prefix é o nome passado na requisição ao serviço, para que na resposta o método envolva os dados em formato JSON após a resposta. Quando a requisição é feita dessa forma:</p>
<pre class="brush: html">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://domain1.com/getjson?jsonp=parseResponse&quot; target=&quot;_blank&quot;&gt;&lt;/script&gt;
</pre>
<p>A palavra “parseResponse” será a o nome da função que envolverá o json, como um callback. O resultado será algo parecido com isso:</p>
<pre class="brush: javascript">
parseResponse({“name”:”Jujuzinho”, ”idade”:10, brinquedos:[“bola”,”pipa”,”ioiô”]})
</pre>
<p>Você, como um esperto desevolvedor, já terá declarado esse método (parseResponse) em seu programa, e este saberá como sabiamente utilizar os dados recebidos.</p>
<h2>Suporte nos frameworks</h2>
<p>Os frameworks JavaScript geralmente dão um bom suporte às implementações do JSONP, resolvendo a maioria das questões que teríamos que nos preocupar fazendo tudo “na unha”.</p>
<p>No caso do jQuery, ele abstrai as particularidades entre jsonp e ajax e incorpora o JSONP com mais um formato de dados para o seu objeto Ajax.</p>
<p>Em caso de dúvidas, primeiro procure a documentação do framework porque certamente ele trará informações  de como implementar jsonp sem mais traumas.</p>
<h2>No próximo episódio&#8230;</h2>
<p>No próximo post sobre o assunto falaremos sobre o futuro. Como será feito o transporte de dados pela web. Protocolos de comunicação de verdade para rodar no browser. Que projetos já estão em andamento e como eles poderão resolver problemas que travam o avanço da comunicação entre apps web.</p>
]]></content:encoded>
			<wfw:commentRss>http://afronteirafinal.com/jsonp-e-o-ajax-crossdomain/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>SVG vs CANVAS</title>
		<link>http://afronteirafinal.com/svg-vs-canvas/</link>
		<comments>http://afronteirafinal.com/svg-vs-canvas/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 12:42:03 +0000</pubDate>
		<dc:creator>lcameroon</dc:creator>
				<category><![CDATA[Cameroon]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[DOM SVG]]></category>
		<category><![CDATA[explorecanvas]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[SVG]]></category>
		<category><![CDATA[SVG Web]]></category>
		<category><![CDATA[W3C]]></category>

		<guid isPermaLink="false">http://afronteirafinal.com/?p=211</guid>
		<description><![CDATA[Como você deve ter notado em meu post anterior sobre HTML5 (http://afronteirafinal.com/prepare-se-para-o-html-5), eu abordei sobre SVG e Canvas e nas últimas semanas os debates estão se aquecendo sobre os méritos de cada um, e muitos estão prevendo um &#8220;death match&#8221;. No entanto, minha pesquisa me convence de que cada um tem suas próprias finalidades, mas [...]]]></description>
			<content:encoded><![CDATA[<p>Como você deve ter notado em meu post anterior sobre HTML5 (<a href="http://afronteirafinal.com/prepare-se-para-o-html-5" target="_blank">http://afronteirafinal.com/prepare-se-para-o-html-5</a>), eu abordei sobre SVG e Canvas e nas últimas semanas os debates estão se aquecendo sobre os méritos de cada um, e muitos estão prevendo um &#8220;death match&#8221;. No entanto, minha pesquisa me convence de que cada um tem suas próprias finalidades, mas definitivamente chegou a hora de usá-los.</p>
<h2>O QUE É SVG?</h2>
<p>SVG é uma linguagem para descrever gráficos bidimensionais e aplicações gráficas em XML. Alguns exemplos de SVG são: o logo da Wikipedia (<a href="http://upload.wikimedia.org/wikipedia/commons/7/77/Wikipedia_svg_logo.svg">http://upload.wikimedia.org/wikipedia/commons/7/77/Wikipedia_svg_logo.svg</a>) e o &#8220;Hello World&#8221; do SVG chamado de &#8220;Tiger&#8221; (<a href="http://www.amplesdk.com/examples/svg/tiger">http://www.amplesdk.com/examples/svg/tiger</a>). Veja o fonte desses dois arquivos SVG para ver como SVG parece.<span id="more-211"></span></p>
<p><strong>Demo SVG:</strong></p>
<p><img src="http://afronteirafinal.com/imgs/posts/200911/svg.png" alt="SVG" /></p>
<pre>&lt;svg xmlns:svg="http://www.w3.org/2000/svg"
  xmlns="http://www.w3.org/2000/svg"
  viewBox="0 0 200 100"
  width="200px" height="100px"&gt;
  &lt;circle cx="50" cy="50" r="30"
  style="stroke:none; fill:#ff0000;"/&gt;
  &lt;g transform="translate(100, 20) scale(1.65)"&gt;
  &lt;polygon points="36 25, 25 36, 11 36, 0 25,
  0 11, 11 0, 25 0, 36 11"
  style="stroke:none; fill:#0000ff;" /&gt;
  &lt;/g&gt;
  &lt;rect x="60" y="20" height="60" width="60"
  style="stroke:none; fill:#00ff00;
  fill-opacity: 0.5;" /&gt;
&lt;/svg&gt;</pre>
<h2>O QUE É CANVAS?</h2>
<p>A especificação do HTML 5 define da seguinte forma: &#8220;Elemento de tela que representa um processamento gráficos &#8220;bitmap&#8221; para gerar imagens, gráficos, jogos através de JavaScript&#8221;.</p>
<p><em>Vladimir Vukićević</em> da Mozilla, em 2006, deu uma boa explicação sobre as diferenças entre o SVG e Canvas:</p>
<p>- SVG é baseado em XML. Isto significa que, cada elemento está disponível no DOM SVG (útil quando você deseja anexar os manipuladores de eventos javascript para um elemento). Canvas não é baseado em XML.</p>
<p>- Canvas é processado pixel por pixel. SVG é um monte de vetores e precisa ser manipulado como um grupo de formas. Uma analogia no mundo Photoshop seria, criar um retângulo usando a &#8220;ferramenta forma&#8221; contra usar o &#8220;PaintBrush&#8221;.</p>
<p><strong>Demo Canvas:</strong></p>
<p><img src="http://afronteirafinal.com/imgs/posts/200911/svg.png" alt="Canvas" /></p>
<p>E aqui está o JavaScript que o criou o desenho:</p>
<pre>function drawSimpleCanvas() {
 var canvas =
 document.getElementById("simpleCanvas");
  if (canvas.getContext) {
  var ctx = canvas.getContext("2d");
  ctx. (); // the circle
  ctx.fillStyle = "#ff0000";
  ctx.arc(50, 50, 30, 0, 2*Math.PI, true);
  ctx.closePath();
  ctx.fill();
  ctx.save();
  // move and resize the octagon
  ctx.translate(100, 20);
  ctx.scale(1.65, 1.65);
  ctx.fillStyle = "#0000ff";
  ctx.beginPath();
  ctx.moveTo(36, 25); ctx.lineTo(25, 36);
  ctx.lineTo(11, 36); ctx.lineTo(0, 25);
  ctx.lineTo(0, 11); ctx.lineTo(11, 0);
  ctx.lineTo(25, 0); ctx.lineTo(36, 11);
  ctx.closePath();
  ctx.fill();
  // restore graphics as they
  // were before move and resize
  ctx.restore();
  ctx.fillStyle = "#00ff00";
  ctx.globalAlpha = 0.5;
  ctx.beginPath();
  ctx.rect(60, 20, 60, 60);
  ctx.closePath();
  ctx.fill();
 }
}</pre>
<h2>QUEM VAI GANHAR?</h2>
<p>Mesmo que sejam completamente diferentes na sua natureza e finalidade, há várias coisas que pode ser feito usando &#8220;Canvas&#8221; e &#8220;SVG&#8221;. A recente popularização do elemento &#8220;Canvas&#8221; parecem para  algumas pessoas a morte do SVG. Mas pelo que notei está longe da verdade.</p>
<p>O &#8220;Canvas&#8221; é tão bom como uma imagem &#8211; mas ele não manipula pixel por pixel. Neste momento, elemento Canvas não suporta os &#8220;manipuladores&#8221; de eventos (por exemplo, ter um retângulo 20x60px dentro de um canvas que seja clicável). Já com o SVG isso é possível.</p>
<p>Canvas em seu estado &#8220;natural&#8221; não é acessível. O SVG, porém, é bastante acessível.</p>
<p>No entanto existe diferenças significativas de desempenho entre Canvas e SVG. O resultado do experimento descrito no link (<a href="http://www.borismus.com/canvas-vs-svg-performance" target="_blank">http://www.borismus.com/canvas-vs-svg-performance</a>) é que: Canvas é mais adequado para um &#8220;gráficos intensivos&#8221; onde o objeto são os redesenhos com freqüência (como um jogo), enquanto o SVG é melhor para aplicações que envolvem grandes áreas de processamento (como Google Maps).</p>
<h2>POSSO USÁ-LOS AGORA?</h2>
<p>Sim, pode. Existem muitas iniciativas para permitir que os navegadores que não suportam SVG ou Canvas tornarem-se &#8220;usáveis&#8221; por outros meios. O Google tem um impressionante projeto <strong>SVG Web</strong> (<a href="http://code.google.com/p/svgweb/" target="_blank">http://code.google.com/p/svgweb/</a>) que usa o Flash para renderizar SVG em navegadores que não suportam SVG nativamente. Para Canvas, o Google tem uma biblioteca &#8220;<strong>explorecanvas</strong>&#8221; (<a href="http://code.google.com/p/explorercanvas/" target="_blank">http://code.google.com/p/explorercanvas/</a>) que utiliza VML (ou Silverlight) para processar os elementos Canvas (basta incluir o arquivo excanvas.js, e ele deve funcionar) no Internet Explorer.</p>
<h2>ENTÃO&#8230; QUEM GANHA?</h2>
<p>Ambos. Estas é uma fase fantástica para SVG e Canvas. Finalmente temos uma alternativa natural para o &#8220;Flash&#8221; e animação de necessidade básica. Mantenha seus olhos abertos no &#8220;mailing list&#8221;  do &#8220;W3C HTML Working Group&#8221; (<a href="http://lists.w3.org/Archives/Public/public-html/" target="_blank">http://lists.w3.org/Archives/Public/public-html/</a>) para as últimas notícias.</p>
]]></content:encoded>
			<wfw:commentRss>http://afronteirafinal.com/svg-vs-canvas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Torne seu site acessível para cegos</title>
		<link>http://afronteirafinal.com/torne-seu-site-acessivel-para-cegos/</link>
		<comments>http://afronteirafinal.com/torne-seu-site-acessivel-para-cegos/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 13:08:43 +0000</pubDate>
		<dc:creator>D. Vespa</dc:creator>
				<category><![CDATA[Alex]]></category>
		<category><![CDATA[Vespa]]></category>
		<category><![CDATA[acessibilidade]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[microformat]]></category>
		<category><![CDATA[xhtml]]></category>

		<guid isPermaLink="false">http://afronteirafinal.com/?p=217</guid>
		<description><![CDATA[Um breve resumo com principais práticas para melhorar a acessibilidade de seu site.]]></description>
			<content:encoded><![CDATA[<p>Antes de começar preciso dar uma explicação: por que dizemos &#8220;cegos&#8221; e  não &#8220;deficientes visuais&#8221;, como manda o politicamente correto? Este  texto tratará de sites para pessoas totalmente desprovidas de visão ou  que estejam num nível comprometido demais desse sentido para usar a  internet da forma convencional.</p>
<p>A palavra &#8220;Deficiente  visual&#8221; é abrangente demais &#8211; podemos falar de daltônicos, míopes (que é  meu caso, por exemplo), hipermétropes, fotofóbicos e etc, e não é  objetivo falar sobre tudo isso nesse artigo. Logo, acho que usar a  palavra &#8220;cego&#8221; (que não vejo por onde possa ser ofensiva) define muito  bem o tipo de usuário com o qual estamos preocupados.</p>
<p>Por  que essa preocupação? Veja bem, isso não é &#8220;bondade&#8221;, diria até que está  mais para uma obrigação. Além, é claro, de permitir igual acesso ao  máximo de pessoas possível, lembre-se que é mais um recurso que pode  aumentar o número de usuários e, por consequência, fideliza-los.<span id="more-217"></span></p>
<h3>Internet acessível</h3>
<p>Há  toda uma gama de recursos atualmente que auxiliam pessoas com  necessidades especiais a ter acesso à internet. Estes aparatos podem  variar de simples varinha para auxiliar pessoas com movimentos restritos  até complexos hardwares para cegos-surdos que convertem textos para  braile.</p>
<p>No caso específico dos cegos, o recurso mais comum é  o Screen Reader &#8211; que nada mais é do que um programa que converte  palavras para áudio. Infelizmente, segundo um <a title="WebAIM: Web Accessibility In Mind" href="http://www.webaim.org/intro/video.php" target="_blank">vídeo no  Webaim</a>, percebe-se a grande  maioria dos websites não é escrito de forma que possa ser facilmente  compreendido por estas ferramentas.</p>
<h3>Acessibilidade: por onde começar?</h3>
<p>Acima  de tudo, acessibilidade tem em seu princípio a regra de ouro de  qualquer programa ou aplicação web, a regra KISS! (Keep it simple,  stupid! &#8211; ou em tradução livre &#8220;mantenha isso simples, estúpido!&#8221;).  Quanto mais robusto e simples o seu código, melhor a qualidade do texto  &#8220;narrado&#8221; pelo Screen Reader. Evite usar scripts complexos no corpo da  página, gambiarras que sujem o código (em especial POGs de crossbrowser)  e atributos desnecessários.</p>
<h3>Seu site precisa ser navegável via teclado</h3>
<p>Um  cego nunca usará o mouse para navegar uma vez que ele não teria como  saber onde posicionar o cursor, o que o  obriga a navegar basicamente  usando o TAB e enter do teclado. Pode parecer estúpido citar isso aqui  uma vez que, à primeira vista, parece  um pensamento óbvio &#8211; mas é fato que são poucos os desenvolvedores e  designers param e pensam a respeito das implicações que isso traz para a  interface, tanto no design quanto na construção html/css.</p>
<h3>Linearidade</h3>
<p>Quando  construir a página certifique-se que todo o conteúdo está disposto de  forma linear, de forma que com o css desabilitado o texto esteja  sequencial. Muitas vezes, por questão de facilitar o alinhamento  crossbrowser, é comum inverter dois boxes de posição e ajusta-los via  css. Isso faz com que o  Screen Reader leia boxes de forma invertida  também.</p>
<p>O melhor teste para ver se a linearidade está  correta é desabilitar o css do Browser e checar como  o texto se alinha  na página &#8211; o ideal é que os boxes fiquem um abaixo do outro.</p>
<h3>Vá  direto ao ponto</h3>
<p>Esta é a coisa mais simples que  pessoas poderiam fazer para melhorar a acessibilidade de um site e que  infelizmente não é difundida o suficiente: ao montar a página coloque no  topo um link &#8220;ir direto para o conteúdo&#8221; e linka-lo à uma ancora no  ponto que o texto começa. Este link não necessariamente precisa ter  visual, ele pode ser escondido de forma que só é acessivel pelo screen  reader. Dica: eu não tenho certeza se os screen readers mais modernos  entendem quando o bloco está com &#8220;display:none&#8221;, então, por via das  dúvidas, uma sugestão de código para esconder este link é o seguinte:</p>
<pre class="brush: css">
.escondeLink {

position:  absolute;

display:block;

margin-top:  -4000px;

}
</pre>
<p>Repare  que desta forma você não &#8220;apagou&#8221; o link da página, somente tirou-o da  área visual do browser.</p>
<p>O ideal para aplicação desta  ancora é que ela esteja logo após a abertura da tag BODY. Um exemplo de  como deve ser usado pode ser visto no próprio <a href="http://www.webaim.org/" target="_blank">http://www.webaim.org</a> .</p>
<p>Outra  preocupação para não ter problema com os robôs do google, é fazer uma  indicação explícita que esses links não devem ser indexados, já que as  âncoras podem ser interpretadas como uma nova URL:</p>
<pre class="brush: html">
&lt;a rel=&quot;nofollow&quot; href=&quot;http://afronteirafinal.com#conteudo&quot;&gt;
A Fronteira Final
&lt;/a&gt;
</pre>
<h3>Cuidado com chamadas nos links e comandos JavaScript</h3>
<p>Esta  regra é similar à aplicada a SEO: evite criar links que não deixem claro seu destino. Evite ao  máximo &#8220;clicando aqui&#8221;, &#8220;clique&#8221;, etc.</p>
<p>Sempre dê  preferência por ser específico, usando coisas como por exemplo &#8220;<a href="http://www.afronteirafinal.com/" target="_blank">Conheça o site A  Fronteira Final</a>&#8221; à &#8220;Conheça o site a fronteira Final <a href="http://www.afronteirafinal.com/" target="_blank">clicando</a><a href="http://www.afronteirafinal.com/" target="_blank"> aq</a><a href="http://www.afronteirafinal.com/" target="_blank">ui</a>&#8220;. Cegos e  buscadores agradecerão por este simples cuidado.</p>
<p>Outra  coisa a respeito dos links é que eles TEM QUE APONTAR PARA ALGUM LUGAR.  Evite chamar funções javascript nos links pois isso tende a confundir os  Screen Readers e outros softwares de interpretação. E lembrando:  dependendo da forma como o comando JS responde, pode ser que ele iniba a  navegação via teclado.</p>
<h3>Efeitos  OnMouseOver e OnMouseOut</h3>
<p>Só para enfatizar o tópico  anterior, eventos relacionados a ações do mouse estão entre os grandes  vilões da acessibilidade. Tenha sempre em mente que estes dois comandos  ou qualquer outro evento relacionado diretamente à captura de mouse  devem ser descartados se afetarem a navegação via teclado ou  proporcionarem qualquer tipo de informação que só possa ser assimilada  de forma visual.</p>
<h3>Alt nas imagens</h3>
<p>Outra regrinha que também vale  para SEO: sempre coloque a descrição correta nas imagens do seu site de  forma clara e concisa. Escrever &#8220;Circo&#8221; ao invés de &#8220;Foto do Cirque du  Soleil em apresentação no Morumbi&#8221; é algo que pode fazer muita diferença  quando você não tem a referência visual.</p>
<h3>Cor/imagem como informação</h3>
<p>Evite  ao máximo usar qualquer informação que dependa de cor, imagem ou  animação para compreensão plena do texto. Se não houver como escapar,  tente criar algum recurso textual (alt, legenda, um parágrafo falando o  que é o signo acima) que amenize ao máximo este problema. Tente usar  este tipo de recurso apenas no ambito da estética.</p>
<h3>Tabelas e formatos especiais</h3>
<p>Evite  a todo custo tabelas complexas. O Screen Reader vai tentar le-la da esquerda para a  direita, ficando difícil de compreender o tipo de conteúdo que ela  contém.</p>
<p>Outro cuidado é com formatos diferenciado como os  Microformatos. Pode usar sem medo, desde que os <a href="../microformats/" target="_blank">Mic</a><a href="../microformats/" target="_blank">roformatos  sejam aplicados de forma correta</a>.</p>
<p>Tabelas, quando  necessárias, devem ser escrita  de <a href="http://www.w3.org/TR/WCAG10-HTML-TECHS/#data-tables" target="_blank">forma  semanticamente correta</a> para que o Screen Reader, evitando qualquer  confusão para a interpretação de Screen Readers ou qualquer outro  recurso. Veja o exemplo abaixo:</p>
<pre class="brush: html">
&lt;table&gt;&lt;caption&gt;texto&lt;/caption&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt; texto&lt;/th&gt;
&lt;th&gt; texto&lt;/th&gt;
&lt;th&gt; texto&lt;/th&gt;
&lt;th&gt; texto&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tfoot&gt;
&lt;tr&gt;
&lt;th&gt; texto&lt;/th&gt;
&lt;th&gt; texto&lt;/th&gt;
&lt;th&gt; texto&lt;/th&gt;
&lt;th&gt; texto&lt;/th&gt;
&lt;/tr&gt;
&lt;/tfoot&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;th&gt; texto&lt;/th&gt;
&lt;td&gt;texto&lt;/td&gt;
&lt;td&gt;texto&lt;/td&gt;
&lt;td&gt;texto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt; texto&lt;/th&gt;
&lt;td&gt;texto&lt;/td&gt;
&lt;td&gt;texto&lt;/td&gt;
&lt;td&gt;texto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th&gt; texto&lt;/th&gt;
&lt;td&gt;texto&lt;/td&gt;
&lt;td&gt;texto&lt;/td&gt;
&lt;td&gt;texto&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</pre>
<p>Outro formato que merece cuidado é o <a href="http://www.w3.org/TR/WCAG10-HTML-TECHS/#forms" target="_blank">formulário</a>, que  deve ter todos os campos, labels  e teclas de acesso nos lugares corretos.</p>
<pre class="brush: html">

&lt;form id=&quot;form&quot; method=&quot;post&quot; action=&quot;#&quot;&gt;
&lt;fieldset&gt;

&lt;legend&gt;Dados pessoais&lt;/legend&gt;
&lt;label for=&quot;nome&quot;&gt;Nome&lt;/label&gt;
&lt;input id=&quot;nome&quot; name=&quot;nome&quot; type=&quot;text&quot; title=&quot;Nome&quot; alt=&quot;Nome&quot; tabindex=&quot;1&quot; accesskey=&quot;n&quot; /&gt;
&lt;label for=&quot;email&quot;&gt;E-mail&lt;/label&gt;
&lt;input id=&quot;email&quot; name=&quot;email&quot; type=&quot;text&quot; title=&quot;E-mail&quot; alt=&quot;E-mail&quot; tabindex=&quot;2&quot; accesskey=&quot;e&quot; /&gt;
&lt;/fieldset&gt;
&lt;fieldset&gt;

&lt;legend&gt;Destinatário&lt;/legend&gt;
&lt;label for=&quot;departamento&quot;&gt;Selecione o departamento&lt;/label&gt;
&lt;select id=&quot;departamento&quot; name=&quot;departamento&quot; title=&quot;Departamento&quot; tabindex=&quot;3&quot;&gt;
&lt;optgroup label=&quot;Departamento 01&quot;&gt;
&lt;option value=&quot;nomefunc01&quot; title=&quot;Nome do funcionário 01&quot;&gt;Nome do funcionário 01&lt;/option&gt;
&lt;option value=&quot;nomefunc02&quot; title=&quot;Nome do funcionário 02&quot;&gt;Nome do funcionário 02&lt;/option&gt;
&lt;/optgroup&gt;

&lt;optgroup label=&quot;Departamento 02&quot;&gt;
&lt;option value=&quot;nomefunc01&quot; title=&quot;Nome do funcionário 01&quot;&gt;Nome do funcionário 01&lt;/option&gt;
&lt;option value=&quot;nomefunc02&quot; title=&quot;Nome do funcionário 02&quot;&gt;Nome do funcionário 02&lt;/option&gt;
&lt;/optgroup&gt;
&lt;/select&gt;
&lt;/fieldset&gt;
&lt;fieldset&gt;
&lt;legend&gt;Mensagem&lt;/legend&gt;

&lt;label for=&quot;mensagem&quot;&gt;Escreva sua mensagem&lt;/label&gt;
&lt;textarea id=&quot;mensagem&quot; name=&quot;mensagem&quot; cols=&quot;100&quot; rows=&quot;10&quot; title=&quot;Escreva sua mensagem&quot; tabindex=&quot;4&quot; accesskey=&quot;m&quot;&gt;&lt;/textarea&gt;
&lt;input id=&quot;enviar&quot; name=&quot;enviar&quot; type=&quot;submit&quot; value=&quot;Enviar&quot; title=&quot;Enviar&quot; alt=&quot;Enviar&quot; tabindex=&quot;5&quot; accesskey=&quot;s&quot; /&gt;
&lt;/fieldset&gt;
&lt;/form&gt;
</pre>
<h3>Para saber mais</h3>
<p>Seguindo  essas regras simples a qualidade do seu site aumentará bastante mas,  como em tudo que se relaciona com internet, é um assunto &#8220;saco sem  fundo&#8221;, daqueles que quanto mais você estuda mais tem a estudar. Alguns  sites para procurar mais informação à respeito:</p>
<p><a href="http://www.webaim.org/" target="_blank">http://www.webaim.org/</a> &#8211; citado duas vezes no texto, é uma organização focada em  acessibilidade e possuí material vastíssimo sobre o assunto.</p>
<p><a href="http://brasilmedia.com/Acessibilidade-na-Web.html" target="_blank">http://brasilmedia.com/Acessibilidade-na-Web.html</a> &#8211; A Brasil Média pegou parte do material do Webaim  e verteu para o português.</p>
<p><a href="http://www.acessibilidadelegal.com/" target="_blank">http://www.acessibilidadelegal.com/</a> Um bom site em português também, mas  este com produção própria de artigos. Vai um pouco mais fundo nos  tópicos levantados neste artigo.</p>
<p><a href="http://www.w3c.br/index-3dez-1.htm#conteudo" target="_blank">http://www.w3c.br/index-3dez-1.htm</a> &#8211; Quer entender como um cego navega? A W3C lançou um hotsite que simula  esta experiência.</p>
<p><a href="http://imasters.uol.com.br/artigo/12814" target="_blank">http://imasters.uol.com.br/artigo/12814</a> &#8211; Ótimo artigo de Horácio Soares sobre como realizar os testes de  usabilidade, com  vários links e referências de programas, validadores e  sites com orientações valiosas.</p>
]]></content:encoded>
			<wfw:commentRss>http://afronteirafinal.com/torne-seu-site-acessivel-para-cegos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery 1.4 o que há de novo</title>
		<link>http://afronteirafinal.com/jquery-1-4-o-que-ha-de-novo/</link>
		<comments>http://afronteirafinal.com/jquery-1-4-o-que-ha-de-novo/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 11:59:46 +0000</pubDate>
		<dc:creator>Roberto Hiroshi</dc:creator>
				<category><![CDATA[Alex]]></category>
		<category><![CDATA[Hiro]]></category>
		<category><![CDATA[Vespa]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://afronteirafinal.com/?p=73</guid>
		<description><![CDATA[Gostaria de demonstrar aqui meu entusiasmo em relação a recém lançada versão do jQuery. A versão 1.4, lançada no dia 14 de Janeiro traz muitas novidades interessantes, além de aperfeiçoamentos que ainda precisavam ser feitos. Uma boa melhorada na performance dos scripts fazem essa versão ainda mais competitiva nos aspectos em que perdia para outros [...]]]></description>
			<content:encoded><![CDATA[<p>Gostaria de demonstrar aqui meu entusiasmo em relação a recém lançada versão do jQuery.</p>
<p>A versão 1.4, lançada no dia 14 de Janeiro traz muitas novidades interessantes, além de aperfeiçoamentos que ainda precisavam ser feitos. Uma boa melhorada na performance dos scripts fazem essa versão ainda mais competitiva nos aspectos em que perdia para outros grandes frameworks do mercado (ver comparativo de performance entre os frameroks js) <a href="http://dante.dojotoolkit.org/taskspeed/report/charts.html?exclude=defaultbrowser0" target="_blank">aqui</a> ou <a href="http://blog.creonfx.com/javascript/mootools-vs-jquery-vs-prototype-vs-yui-vs-dojo-comparison-revised:" target="_blank">aqui</a>.</p>
<p><span id="more-73"></span></p>
<p>Muitos metodos comuns tiveram melhorias consideráveis de performance nesta nova versão, entre esses estão: css(), attr(), addClass(), removeClass(), hasClass(), html(), remove(), empty() &#8230; e muitos outros.</p>
<p>Em varios casos eles citam aumentos de desempenho que chegam superam em até 4x a implementação da versão anterior, muito dessa melhora se obteve atraves da refatoração do código.</p>
<p>As mudanças de performance dos scripts foram muito consideráveis, alguns métodos ganharam &#8220;poderes&#8221; que antes não tinham, vale a pena dar uma olhada no <a href="http://api.jquery.com/category/version/1.4/" target="_blank">changelog</a> para conferir métodos que ganharam novas possibilidades de assinaturas.</p>
<p>O único aspecto negativo que encontramos até agora foi o peso da nova versão, agora com 23 kb (Minified,GZIP), contra os 19kb(Minified, GZIP) da sua versão antecessora (v 1.3.2). Acreditamos ser até uma mudança razoável se analizarmos o número de implementações e re-escritas que foram feitos para a nova versão.</p>
<p>Vale destacar algumas das muitas novidades dessa versão. Aos poucos vamos listando mais métodos interessantes:</p>
<p><strong>detach()</strong></p>
<p>O método &#8220;detach&#8221; armazena o elemento selecionado em uma variável para uso posterior, e o remove da árvore DOM. Funciona de maneira similar ao já existente método &#8220;remove&#8221;, porém mantendo uma referência para ele sem destruir. Resumidamente ele &#8220;recorta(destaca)&#8221; um fragmento de html para ser utilizado em outro ponto do código.</p>
<p>Ex:</p>
<pre>&lt;span class="origem"&gt;</pre>
<pre>    &lt;p&gt;Item 1&lt;/p&gt;</pre>
<pre>    &lt;p&gt;Item 2&lt;/p&gt;</pre>
<pre>    &lt;p&gt;Item 3&lt;/p&gt;</pre>
<pre>    &lt;p&gt;Item 4&lt;/p&gt;</pre>
<pre>    &lt;p&gt;Item 5&lt;/p&gt;</pre>
<pre>&lt;/span&gt;</pre>
<pre>&lt;span class="destino"&gt;&lt;/span&gt;</pre>
<pre>&lt;input type="button" value="Recortar" class="btnRetirar" /&gt;</pre>
<pre>&lt;input type="button" value="Colar" class="btnAdicionar" /&gt;</pre>
<pre>&lt;script src="jquery-1.4.js" type="text/javascript"&gt;&lt;/script&gt;</pre>
<pre>&lt;script type="text/javascript"&gt;</pre>
<pre>    $().ready(function() {</pre>
<pre>        var itens</pre>
<pre>        $(".origem p").click(function() {</pre>
<pre>            $(this).addClass("selecionado")</pre>
<pre>        })</pre>
<pre>        $(".btnRetirar").click(function() {</pre>
<pre>            itens = $(".origem .selecionado").detach();</pre>
<pre>       })</pre>
<pre>       $(".btnAdicionar").click(function() {</pre>
<pre>           itens.appendTo(".destino")</pre>
<pre>           itens = null</pre>
<pre>       })</pre>
<pre>    })</pre>
<pre>&lt;/script&gt;</pre>
<p><strong>isPlainObject()</strong></p>
<p>Verifica se o objeto foi criado utilizando &#8220;{}&#8221; ou &#8220;new Object&#8221;</p>
<p>Ex:</p>
<pre>&lt;div id="isPlainObject"&gt;&lt;/div&gt;</pre>
<pre>&lt;script src="jquery-1.4.js" type="text/javascript"&gt;&lt;/script&gt;</pre>
<pre>&lt;script type="text/javascript"&gt;</pre>
<pre>    $().ready(function() {</pre>
<pre>        obj1 = new Object</pre>
<pre>        obj2 = {}</pre>
<pre>        obj3 = {a:"asd", b:"asdfg"}</pre>
<pre>        obj4 = []</pre>
<pre>        obj5 = "asdfg"</pre>
<pre>        obj6 = function () {}</pre>
<pre>        $("#isPlainObject").html(</pre>
<pre>            "&lt;p&gt;jQuery.isPlainObject(new Object) -&gt; " + jQuery.isPlainObject(obj1) + "&lt;/p&gt;" +</pre>
<pre>            "&lt;p&gt;jQuery.isPlainObject({}) -&gt; " + jQuery.isPlainObject(obj2) + "&lt;/p&gt;" +</pre>
<pre>            '&lt;p&gt;jQuery.isPlainObject({a:"asd", b:"asdfg"}) -&gt; ' + jQuery.isPlainObject(obj3) + "&lt;/p&gt;" +</pre>
<pre>            "&lt;p&gt;jQuery.isPlainObject([]) -&gt; " + jQuery.isPlainObject(obj4) + "&lt;/p&gt;" +</pre>
<pre>            '&lt;p&gt;jQuery.isPlainObject("asdfg") -&gt; ' + jQuery.isPlainObject(obj5) + "&lt;/p&gt;" +</pre>
<pre>            "&lt;p&gt;jQuery.isPlainObject(function () {}) -&gt; " + jQuery.isPlainObject(obj6) + "&lt;/p&gt;"</pre>
<pre>        )</pre>
<pre>    })</pre>
<pre>&lt;/script&gt;</pre>
<p><strong>isEmptyObject()</strong></p>
<p>Verifica se o objeto está vazio</p>
<p>Ex:</p>
<pre>&lt;div id="isEmptyObject"&gt;&lt;/div&gt;</pre>
<pre>&lt;script src="jquery-1.4.js" type="text/javascript"&gt;&lt;/script&gt;</pre>
<pre>&lt;script type="text/javascript"&gt;</pre>
<pre>    $().ready(function() {</pre>
<pre>        obj1 = new Object</pre>
<pre>        obj2 = {}</pre>
<pre>        obj3 = {a:"asd", b:"asdfg"}</pre>
<pre>        obj4 = []</pre>
<pre>        obj5 = "asdfg"</pre>
<pre>        obj6 = function () {}</pre>
<pre>        $("#isEmptyObject").html(</pre>
<pre>            "&lt;p&gt;jQuery.isEmptyObject(new Object) -&gt; " + jQuery.isEmptyObject(obj1) + "&lt;/p&gt;" +</pre>
<pre>            "&lt;p&gt;jQuery.isEmptyObject({}) -&gt; " + jQuery.isEmptyObject(obj2) + "&lt;/p&gt;" +</pre>
<pre>            '&lt;p&gt;jQuery.isEmptyObject({a:"asd", b:"asdfg"}) -&gt; ' + jQuery.isEmptyObject(obj3) + "&lt;/p&gt;" +</pre>
<pre>            "&lt;p&gt;jQuery.isEmptyObject([]) -&gt; " + jQuery.isEmptyObject(obj4) + "&lt;/p&gt;" +</pre>
<pre>            '&lt;p&gt;jQuery.isEmptyObject("asdfg") -&gt; ' + jQuery.isEmptyObject(obj5) + "&lt;/p&gt;" +</pre>
<pre>            "&lt;p&gt;jQuery.isEmptyObject(function () {}) -&gt; " + jQuery.isEmptyObject(obj6) + "&lt;/p&gt;"</pre>
<pre>        )</pre>
<pre>    })</pre>
<pre>&lt;/script&gt;</pre>
<p>Para ver os exemplos em funcionamento, clique <a href="http://lab.afronteirafinal.com/jquery-lab/" target="_blank">aqui</a></p>
<p>Referencias:</p>
<p><a href="http://api.jquery.com" target="_blank">api.jquery.com</a></p>
<p><a href="http://jquery14.com" target="_blank">jquery14.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://afronteirafinal.com/jquery-1-4-o-que-ha-de-novo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

