<?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; Alex</title>
	<atom:link href="http://afronteirafinal.com/category/webmasters/alex/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>Google Wave &#8211; a onda que não pegou</title>
		<link>http://afronteirafinal.com/google-wave-a-onda-que-nao-pegou/</link>
		<comments>http://afronteirafinal.com/google-wave-a-onda-que-nao-pegou/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 19:28:09 +0000</pubDate>
		<dc:creator>D. Vespa</dc:creator>
				<category><![CDATA[Alex]]></category>
		<category><![CDATA[Hiro]]></category>
		<category><![CDATA[Vespa]]></category>
		<category><![CDATA[aplicações web]]></category>
		<category><![CDATA[Chrome]]></category>
		<category><![CDATA[google wave]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[problemas]]></category>

		<guid isPermaLink="false">http://afronteirafinal.com/?p=402</guid>
		<description><![CDATA[Hoje na hora do almoço conversamos a respeito da morte do Google Wave. Como uma coisa que era prometida como a próxima grande revolução da internet pôde dar tão errado? Há uma gama razoável de recursos úteis (aliás, este artigo, como outros do blog, foi escrito usando o Wave como editor), uma empresa forte por [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje na hora do almoço conversamos a respeito da morte do Google Wave. Como uma coisa que era prometida como a próxima grande revolução da internet pôde dar tão errado? Há uma gama razoável de recursos úteis (aliás, este artigo, como outros do blog, foi escrito usando o Wave como editor), uma empresa forte por trás e um grande potencial de expansão. Por que, então, ficou tão abaixo mesmo da pior das expectativas?</p>
<p><span id="more-402"></span>Os pontos que surgiram na conversa foram os seguintes:</p>
<h2>Falta de foco:</h2>
<p>Acreditamos que este seja o principal problema. Em nenhum momento falou-se claramente &#8220;isso serve pra aquilo&#8221; &#8211; só se falou que era um milhão de possibilidades, que as pessoas iam ter orgasmos com os recursos mágicos, só que&#8230; Não se falou como. Os exemplos apresentados do que fazer com a ferramenta foram pífios e, até onde eu sei, ninguém fez algo que fosse digno de nota usando o Wave.</p>
<h2>Interface diferente &#8220;Pero no mucho&#8221;:</h2>
<p>A idéia vendida foi de uma interface revolucionária. A estrutura ousa muito pouco (repare que a diagramação e distribuição, exceto pela caixa de texto, é quase a do Gmail) e, no pouco que ousou, ficou confuso e sem atrativos &#8211; caso do box de texto, que tem um monte de recursos mas nenhum exatamente novo.</p>
<p>Por exemplo pra que diabo fazer uma enquete se pode-se usar um Spreadsheet com o próprio Google Docs com mais recursos e sem todo o ruído visual do Wave ao redor?</p>
<h2>Excesso de expectativa</h2>
<p>Criou-se muita expectativa de revolução para uma ferramenta que foi lançada inacabada. Mesmo que tivesse uma proposta inovadora, a chance de causar uma boa impressão foi totalmente perdida &#8211; muitos usuários não dão segundas chances para ferramentas, especialmente se vierem a se sentir &#8220;burros&#8221; ao usar.</p>
<p>Alguém lembra do vídeo de uma hora e tra-la-lá apresentando o produto e das pessoas em extase assistindo à demonstração? Até a risada gravada do chaves parecia mais sinceras que aquilo.</p>
<h2>Ferramentas tardias</h2>
<p>Vários recursos desejáveis relacionados à usabilidade só surgiram muito depois do lançamento, como uma forma de aviso sobre novos waves ou a possibilidade de excluir-se de uma lista Wave (embora implementado é MUITO ruim a navegação e são vários cliques até conseguir).</p>
<p>Tudo bem que melhorias podem sempre ser feitas posteriormente, mas creio que a idéia deles que as pessoas querem ficar conectadas às outras para sempre em tudo que for compartilhável é bem errada &#8211; até porque, se verdade fosse, divórcio não existiria.</p>
<h2>O Wave não é uma onda, é uma ilha</h2>
<p>Na ânsia de tentar ser a nova ferramenta de comunicação da internet, rede social, messenger, email e chat tudo ao mesmo tempo, não foi criada forma alguma de interface com outras ferramentas já existentes. Sequer um RSS.</p>
<p>Entendemos que, de forma até prepotente, o Google tentou apresentar um novo paradigma e romper com todos os antigos &#8211; mas foi inocência demais acreditar que pessoas largariam ferramentas que usam há anos e começassem a focar tudo no Wave, e que elas não quereriam integração com mais nada. Por que não uma possibilidade de conectar algo ao Facebook? Por que, no começo, sequer com o próprio Gmail tinha conexão? Já foram adquiridos muitos hábitos nos últimos 15 anos, e uma cultura deste tipo não é jogada para o alto de uma hora pra outra.</p>
<p>Para saber da dificuldade de mudar um hábito é só pensar quanto tempo demorou pro e-mail substituir o fax. Para algumas empresas, aliás, isso ainda é uma realidade.</p>
<h2>Documentação ruim / falta de incentivo aos desenvolvedores</h2>
<p>Por conta talvez da já citada falta de foco, a documentação voltada a desenvolvedores (que poderiam ter sido umas das fontes de salvação) foi escrita de maneira péssima, tornando a possibilidade de que boas idéias vindas da comunidade minguasse muito.</p>
<p>Poucos heróis aventuraram-se a fazer algo para o Wave, mas a maioria resolveu esperar para ver no que dava antes de perder precioso tempo estudando algo que pudesse dar em água. E deu.</p>
<h2>Entrada por convite</h2>
<p>Outra coisa que frustrou pessoas: se você já tem Gmail, conta no Orkut, conta no Picasa, Gtalk e etc, por que cargas d&#8217;água precisa ser convidado para usar uma ferramenta que, em tese, já é parte das suas aplicações/contas Google? Convites são feitos para coisas que são extremamente desejáveis e, se feitos ao acaso, gera uma expectativa de &#8220;é bom valer a pena&#8221;. Dá sensação de pagar pra entrar num clube privado e descobrir lá dentro que é só um boteco comum.</p>
<h2>Tudo que se propôs a resolver já tinha solução</h2>
<p>Concordo, muita coisa até pode ser melhor solucionado no Wave, caso por exemplo da função de edição conjunta e compartilhamento de documentos. Mas&#8230; As pessoas já faziam isso no Google Docs há anos. E já eram familiares à estrutura &#8220;word-like&#8221; lá utilizada, afinal, todos já estão bem adestrados desde o win 3.11 a usar aquela estrutura. Não importa o quão mais simples seja a interface, para aquele tipo de solução de editor será, sempre, muito difícil propor algo novo.</p>
<h2>Integração demais = lentidão</h2>
<p>As possibilidade de juntar tudo e todos é tão grande que por vezes é insustentável manter um wave por muito tempo. Tantos são os aplicativos, replys, icones de participantes, referências internas, referências externas, etc, que só com muita memória RAM você consegue usar o Wave de forma decente.</p>
<h2>Puxando a Sardinha para o Chrome</h2>
<p>O Google pedia descaradamente para você usar o Wave no Chrome. Sim, é mais do que verdade que o Chrome é um tremendo de um browser, com o melhor &#8220;motor&#8221; para interpretação de Javascript feito até então, não só o Wave, mas tudo que usa Ajax como base para interface web.</p>
<p>O caso é que o usuário não sabe disso. Se o site está lento, para o usuário a culpa não será do IE6, será do site. Mesmo no Firefox, que é um browser bastante decente, fica insuportável de lento, forçando a usar o Chrome.</p>
<p>Não importa o quão verdadeiro é o fato de que o Chrome lida melhor com Javascript com os outros: a campanha/lavagem cerebral pelo browser da casa sempre vai deixar com aquele fundinho de que foi sabotagem nos outros navegadores (coisa que não foi MESMO). E como tem neurótico a rodo nessa terra, especialmente entre desenvolvedores (isso, aqueles mesmos que poderiam ter salvo aspectos da aplicação), é mais um motivo que afasta os potenciais usuários.</p>
<h2>O nome do produto não é &#8220;iWave&#8221;</h2>
<p>Se o google wave fosse produzido pela Apple ou fosse uma app para iPhone, os geeks <span style="text-decoration: line-through;">moderninhos</span> certamente ajudariam a vendê-lo como uma idéia de outro mundo.</p>
<p>Falando mais sério, essa foi outra falha na estratégia do Google: eles tentaram fazer algo que a Apple faz há anos, que é vender qualquer idéia como se fosse revolucionária (mesmo que seja só um iPod grandão com menos recursos que o original).</p>
<p>O lance é que a Apple assume essa postura e o risco do produto não dar certo. Eles perdem com o que não da certo, mas é um risco menor: a Apple conhece bem seu público e já percebeu qual é a forma que eles tendem a agir, então raramente dá uma bola fora (e quando dá sabe exatamente o que falar para o público continuar sentindo-se querido e feliz com o status de ser um possuidor de um produto deles).</p>
<h2>Conclusão</h2>
<p>De megalomania aos problemas de projeto, é realmente uma pena ver uma ferramenta morrer deste jeito, sem chegar a atingir todo seu potencial. Engraçado, pois uma das coisas que comentamos durante o papo é que, depois de algumas experiências, ela era um bom lugar para juntar material de pesquisa e pequenos Brainstorms (com direito até a descobrir nesse exato momento que há um novo recurso voltado para mind map,  que sempre foi um recurso do qual sentimos muita falta).</p>
<p>Quando finalmente achamos o que fazer com a ferramenta o Google decide enterra-la.</p>
]]></content:encoded>
			<wfw:commentRss>http://afronteirafinal.com/google-wave-a-onda-que-nao-pegou/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SEO Sem Crise – Parte 4 – Relevância por links</title>
		<link>http://afronteirafinal.com/seo-sem-crise-%e2%80%93-parte-4-%e2%80%93-relevancia-por-links/</link>
		<comments>http://afronteirafinal.com/seo-sem-crise-%e2%80%93-parte-4-%e2%80%93-relevancia-por-links/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 18:29:29 +0000</pubDate>
		<dc:creator>D. Vespa</dc:creator>
				<category><![CDATA[Alex]]></category>
		<category><![CDATA[Vespa]]></category>
		<category><![CDATA[meta-dados]]></category>
		<category><![CDATA[Relevância link]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://afronteirafinal.com/?p=381</guid>
		<description><![CDATA[Só pra recapitular: Na primeira parte dei uma visão simples e geral sobre o que é SEO. Na segunda, falei sobre o que é e pra que servem as Meta Keywords . No terceira, o por quê de ainda preocupar-se com Meta Description e o motivo de te-la bem feita. Nesta parte, a última desta [...]]]></description>
			<content:encoded><![CDATA[<p>Só pra recapitular:</p>
<p>Na primeira parte dei uma visão simples e geral sobre <a title="O que é SEO?" href="http://afronteirafinal.com/seo-sem-crise-uma-visao-simples-e-rapida/" target="_blank">o que é SEO</a>.</p>
<p>Na segunda, falei sobre o que é e pra que servem as <a href="http://afronteirafinal.com/seo-sem-crise-parte-2-meta-tags-keywords/" target="_blank">Meta Keywords</a> .</p>
<p>No terceira, o por quê de ainda preocupar-se com <a href="http://afronteirafinal.com/seo-sem-crise-parte-3-meta-description/" target="_blank">Meta Description</a> e o motivo de te-la bem feita.</p>
<p>Nesta parte, a última desta sequência, vou explicar como pode-se &#8220;pegar carona&#8221; na relevância de outros sites através de links.</p>
<h2>Aumentando a relevância por links</h2>
<p>Daí o cidadão vai lá e pergunta como fazer o texto dele &#8220;subir no <a href="http://google.com" target="_blank">Google</a>&#8221; e, alguém com um pouco mais de manha, sugere para selecionar as palavras chaves e nomes e linkar para sites externos. O cidadão olha torto e solta os cães, dizendo coisas como &#8220;que absurdo, colocar links para sites externos, isso vai tirar os leitores do nosso site e mimimi mimimim mimimim mimimim mimimimimi&#8221;.</p>
<p><span id="more-381"></span></p>
<p>Sim, eu já ouvi isso&#8230;</p>
<p>Em primeiro lugar, ponto de vista humano: as pessoas vão dar é muito mais valor para os textos do site pelo simples fato que a informação oferecida é mais completa &#8211; e se o site não tem em si mesmo a informação, o autor aponta, sem medo, pra algum outro que a tenha.</p>
<p>Segundo lugar, ponto de vista dos Search Engines: nossos camaradas buscadores aumentarão a sua importância em muito pelo mesmíssimo motivo citado no primeiro lugar. A lógica é: quanto mais referência para outras páginas/sites com assuntos relacionados, maior a chance do usuário encontrar um conteúdo satisfatório. Levando em conta que os buscadores tem os dados de relevância das páginas que você referenciou de seu texto, quanto maior a qualidade do link dado maior será a relevância emprestada para o seu texto. Entedeu?</p>
<p>Vamos a um exemplo prático que o <a href="http://twitter.com/alxpborges" target="_self">Alex Borges </a>me indicou: se voce digitar &#8220;Restaurante Italiano&#8221; no Google hoje, 4 de agosto de 2010, o primeiro resultado será <a href="http://www.emsampa.com.br/r_11.htm" target="_blank">http://www.emsampa.com.br/r_11.htm</a>.</p>
<p>Pelas regras básicas que o SEO sugere, veremos de cara 3 erros graves:</p>
<ul>
<li><strong>Erro 1</strong> : URL com link bizarro, que não quer dizer absolutamente nada, ao invés de uma url amigável;</li>
<li><strong>Erro 2</strong>:  Código &#8220;sujo&#8221; e confuso, inteiro feito em tabela, provavelmente feito com editor visual mal-configurado;</li>
<li><strong>Erro 3:</strong> Número de meta keywords muito alto.</li>
</ul>
<p>&#8230; E por aí vai.  Tem mais erros, mas estes já deveriam ser suficientes pra mandar o link lá pra nona página &#8211; mas isso não acontece, ele está em primeiro. Como? Sequer as palavras &#8220;Restaurante&#8221; e &#8220;Italiano&#8221; é repetida muitas vezes, qual o segredo pra justo este link estar no topo?</p>
<p>O motivo mais provável é que, pelo fato desta página ter um índice imenso de links para diversos sites de restaurantes italianos, possivelmente com a grande maioria com um pagerank razoável, isso é o suficiente para que o buscador acredite que é uma fonte confiável para a referência &#8220;restaurante italiano&#8221;.</p>
<p>Em outros casos você poderia, por exemplo, citar uma empresa e linkar diretamente para o site dela &#8211; especialmente se o site em questão vier em primeiro no resultado. Em geral, se o site-referência for muito ruim ou inexistente, você ainda pode apelar para a Wikipedia, que é sempre uma ótima saída para este fim.</p>
<p>Bom, acredito que seguindo estes passo, já é possível melhorar e muito a relação com os buscadores. Obvio que é mais extenso que isso e, por conta das regras mudarem todo dia, dá pra pirar muito mais dentro deste assunto.</p>
<p>Para saber mais:</p>
<p><a href="http://pt.wikipedia.org/wiki/SEO">SEO na Wikipedia</a> &#8211; história, teoria e mais algumas regras básicas.</p>
<p><a href="http://googleblog.blogspot.com/" target="_blank">Blog oficial do Google</a> &#8211; melhor referência de todas para aprofundar-se no assunto. Se qualquer regra muda, se há alguma boa prática a ser seguida, certamente sairá aqui.</p>
<p><a href="https://www.google.com/webmasters/tools/" target="_blank">Google Webmaster Tools</a> &#8211; Ferramentas para verificar qualidade de conteúdo do ponto de vista do buscador, diagnósticos de meta tags redundantes, etc.</p>
<p><a href="https://siteexplorer.search.yahoo.com/" target="_self">Yahoo Site Explorer</a> &#8211; mesma pegada do link anterior, mas nas regras do Yahoo.</p>
<p><a href="http://www.google.com/trends" target="_blank">Google Trends</a> &#8211; Mas e aí, as pessoas procuram mais pela palavra &#8220;Carro&#8221; ou por &#8220;Automóvel&#8221;? Qual delas trará mais acessos? O Google Trends te ajuda com isso.</p>
<p><a href="http://www.mestreseo.com.br/artigos-seo" target="_blank">Artigos Mestre SEO </a>- particularmente eu não gosto muito deste site, por vezes tenho a impressão que muito do material é só reescrito de tempos em tempos com palavras diferentes, tornando-o um pouco redundante &#8211; mas eu sou chato pra cacete com algumas coisas, então pode ser só cisma minha. De qualquer forma, mesmo com o porém que eu falei, tem bastante coisa legal e vale a consulta para tirar dúvidas.</p>
<p>E este é o final desta série, senhoras, senhores e crianças. Quem quiser debater o assunto pode entrar em contato comigo pelo próprio blog ou pelo <a href="http://twitter.com/dvespa" target="_blank">twitter</a>.</p>
<p>Até!</p>
]]></content:encoded>
			<wfw:commentRss>http://afronteirafinal.com/seo-sem-crise-%e2%80%93-parte-4-%e2%80%93-relevancia-por-links/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>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>Webmonster: Todo carnaval tem seu fim</title>
		<link>http://afronteirafinal.com/webmonster-todo-carnaval-tem-seu-fim/</link>
		<comments>http://afronteirafinal.com/webmonster-todo-carnaval-tem-seu-fim/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 02:11:42 +0000</pubDate>
		<dc:creator>D. Vespa</dc:creator>
				<category><![CDATA[Alex]]></category>
		<category><![CDATA[Hiro]]></category>
		<category><![CDATA[Vespa]]></category>
		<category><![CDATA[Webmonster]]></category>
		<category><![CDATA[carnaval]]></category>
		<category><![CDATA[folga]]></category>
		<category><![CDATA[quadrinhos]]></category>

		<guid isPermaLink="false">http://afronteirafinal.com/?p=141</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://afronteirafinal.com/wp-content/uploads/2010/02/webmonster31.png"><img class="aligncenter size-full wp-image-153" title="webmonster - todo carnaval tem seu fim" src="http://afronteirafinal.com/wp-content/uploads/2010/02/webmonster31.png" alt="webmonster - todo carnaval tem seu fim" width="597" height="1081" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://afronteirafinal.com/webmonster-todo-carnaval-tem-seu-fim/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Webmonster: A Night at the Opera</title>
		<link>http://afronteirafinal.com/webmonster-a-night-at-the-opera/</link>
		<comments>http://afronteirafinal.com/webmonster-a-night-at-the-opera/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 12:00:30 +0000</pubDate>
		<dc:creator>D. Vespa</dc:creator>
				<category><![CDATA[Alex]]></category>
		<category><![CDATA[Vespa]]></category>
		<category><![CDATA[Webmonster]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[quadrinhos]]></category>

		<guid isPermaLink="false">http://afronteirafinal.com/?p=113</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<p><a href="http://afronteirafinal.com/wp-content/uploads/2010/02/webmonster-2.png"><img class="aligncenter size-full wp-image-114" title="Webmonster: A Night at the Opera " src="http://afronteirafinal.com/wp-content/uploads/2010/02/webmonster-2.png" alt="Webmonster: A Night at the Opera " width="590" height="1056" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://afronteirafinal.com/webmonster-a-night-at-the-opera/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>O que perdemos com o IE6</title>
		<link>http://afronteirafinal.com/o-que-perdemos-com-o-ie6/</link>
		<comments>http://afronteirafinal.com/o-que-perdemos-com-o-ie6/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 14:44:16 +0000</pubDate>
		<dc:creator>Roberto Hiroshi</dc:creator>
				<category><![CDATA[Alex]]></category>
		<category><![CDATA[Hiro]]></category>
		<category><![CDATA[ie6]]></category>

		<guid isPermaLink="false">http://afronteirafinal.com/?p=100</guid>
		<description><![CDATA[Há pouco tempo o serviço federal de segurança da informação(BSI) alemão e a agência nacional de segurança de sistemas informação(SGDSN) francês publicaram notas, respectivamente aqui e aqui para que os usuarios de internet não utilizem mais o Internet explorer, o motivo dito por eles é uma falha de segurança que permite injetar código malicioso através de uma [...]]]></description>
			<content:encoded><![CDATA[<p>Há pouco tempo o serviço federal de segurança da informação(BSI) alemão e a agência nacional de segurança de sistemas informação(SGDSN) francês publicaram notas, respectivamente <a title="BSI" href="https://www.bsi.bund.de/cln_183/ContentBSI/presse/Pressemitteilungen/Sicherheitsluecke_IE_150110.html" target="_blank">aqui</a> e <a title="SGDSN contra o IE" href="http://www.certa.ssi.gouv.fr/site/CERTA-2010-ALE-001/CERTA-2010-ALE-001.html" target="_blank">aqui</a> para que os usuarios de internet não utilizem mais o Internet explorer, o motivo dito por eles é uma falha de segurança que permite injetar código malicioso através de uma página web. Esses boletins publicados fizeram com que a Microsoft logo disponibilizasse um <a title="Boletim de segurança da Microsoft" href="http://www.microsoft.com/technet/security/bulletin/ms10-002.mspx" target="_blank">service pack</a> para a correção do problema.</p>
<p><span id="more-100"></span></p>
<h2><strong>Segurança (ou falta de)</strong></h2>
<p>Especialistas em segurança afirmam que da forma como o IE 6 é desenhado é muito difícil garantir sua segurança.</p>
<p>Uma das maiores falhas de segurança Internet Explorer é o fato dele ser executado com o mesmo nível de acesso do usuário logado. Os malwares que exploram as vulnerabilidades do browser se aproveitam desse nível de acesso, já que grande parte dos usuários de Windows (XP por exemplo), se conectam ao sistema com usuário Administrador ou perfil de acesso que o valha. Existem ferramentas para limitar o nível de acesso do Internet Explorer, mas poucos usuários as conhecem ou se preocupam em instalar. E só pelo fato dessa segurança não estar presente por padrão, o pobre usuário do IE ja inicia a navegação vulnerável.</p>
<p>Esse problema de nível de acesso ocorre também com outros navegadores do mercado que rodam em ambiente windows. O problema é que o navegador é tão integrado ao Windows que uma falha de segurança é uma ameaça potencial ao próprio sistema operacional.</p>
<p>Não existe ambiente 100% seguro, nem mesmo navegador 100% a prova de falhas, mas o fato é que o Internet Explorer 6 é campeão em falhas críticas de segurança e, com a descontinuidade do projeto, as atualizações (que nem são tão frequentes quanto precisavam ser) vão deixar de acontecer.</p>
<h2>Compatibilidade com CSS</h2>
<p>O Internet Explorer 6 foi lançado muito tempo depois da especificação do CSS 2. Mesmo assim, o browser não tem compatibilidade completa com itens especificados para o CSS 1.</p>
<p>A grande maioria dos browsers modernos, já dão algum suporte a versão 3 do CSS que ainda em desenvolvimento. Hoje ja é possível criar detalhes de layout de forma muito simples e limpa. A nova especificação do CSS 3 promete resolver muitos problemas visuais encontrados hoje no desenvolvimento dos layouts, mas enquanto uma parcela tão grande de internautas continuar utilizando um navegador antigo e sem padrões, a migração será muito difícil.</p>
<p>Muitas implementações do CSS 3 não estão previstas nem para versões mais novas do IE. Repare como o há falta de suporte a muitas implementações:</p>
<p><a title="Compatibilidade de css com browsers" href="http://www.quirksmode.org/css/contents.html" target="_blank">http://www.quirksmode.org/css/contents.html</a></p>
<h2>A Web está deixando de suportar o IE6</h2>
<p>O IE 6 já está quase no seu 10° ano de vida e alguns sites já não dão mais suporte, conscientes das dificuldades para manter produtos na web que funcionem no navegador, e do número de restrições que este traz para projetos de interface.</p>
<p>O Google, por exemplo, já tem há algum tempo feito campanhas para que os usuários de seus produtos atualizem seus browsers. E agora definitivamente a empresa deixará de dar suporte ao IE6, retirando inicialmente o suporte dos produtos Google Docs e Google Sites.</p>
<h2>Deseja contribuir para a erradicação do IE6?</h2>
<p>Aqui vão algumas iniciativas e campanhas contra o &#8220;grande vilão&#8221; das interfaces modernas:</p>
<p><a title="RIP IE6" href="http://www.ripie6.com/" target="_blank">http://www.ripie6.com/</a></p>
<p><a title="IE6 no more" href="http://www.ie6nomore.com/" target="_blank">http://www.ie6nomore.com/</a></p>
<p><a title="Dear IE6" href="http://dearie6.com/" target="_blank">http://dearie6.com/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://afronteirafinal.com/o-que-perdemos-com-o-ie6/feed/</wfw:commentRss>
		<slash:comments>0</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>
		<item>
		<title>Aumente sua velocidade e qualidade de desenvolvimento com CSS Frameworks: Acredite, eles podem ajudar.</title>
		<link>http://afronteirafinal.com/aumente-sua-velocidade-e-qualidade-de-desenvolvimento-com-css-frameworks-acredite-eles-podem-ajudar/</link>
		<comments>http://afronteirafinal.com/aumente-sua-velocidade-e-qualidade-de-desenvolvimento-com-css-frameworks-acredite-eles-podem-ajudar/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 16:24:12 +0000</pubDate>
		<dc:creator>Alexander Borges</dc:creator>
				<category><![CDATA[Alex]]></category>
		<category><![CDATA[blueprint]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css framework]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[yui-grids]]></category>

		<guid isPermaLink="false">http://afronteirafinal.com/?p=59</guid>
		<description><![CDATA[No dia-a-dia do desenvolvimento, muito se ouve falar em “frameworks” e geralmente quando essa palavra é mencionada, estamos falando de um pacote de classes, implementadas em alguma linguagem, utilizando design-patterns, tirando o máximo proveito da performance que a linguagem em questão tem a oferecer e solucionando a maioria dos problemas comuns no desenvolvimento de sistemas. [...]]]></description>
			<content:encoded><![CDATA[<p>No dia-a-dia do desenvolvimento, muito se ouve falar em “frameworks” e geralmente quando essa palavra é mencionada, estamos falando de um pacote de classes, implementadas em alguma linguagem, utilizando design-patterns, tirando o máximo proveito da performance que a linguagem em questão tem a oferecer e solucionando a maioria dos problemas comuns no desenvolvimento de sistemas. Há casos que os frameworks dão um suporte maior ainda, oferecendo melhor integração entre ambientes, soluções para infra-estrutura da aplicação e até mesmo scripts que geram algum código útil para adiantar o trabalho do desenvolvedor.</p>
<p>Talvez pelo termo “Framework” estar tão associado à idéia de facilitar o desenvolvimento “back-end” do sistema, que a primeira vista podemos encarar um “Framework CSS” como alguma coisa que vai processar folhas de estilo do lado do servidor, que vai gerar CSS dinamicamente ou algo do tipo.</p>
<p>Se você (assim como eu), também teve essa percepção sobre o assunto antes de explorá-lo, pode ter ficado com uma impressão ruim a respeito dos frameworks CSS.</p>
<p><span id="more-59"></span>Não podemos dizer que é um erro de nomenclatura. A palavra “framework” significa “estrutura” e se encaixa perfeitamente no contexto, se observarmos o propósito dos frameworks. Mas talvez a primeira impressão que a palavra deixa seja um motivo para que essas ferramentas não sejam aproveitadas e respeitadas como merecem.</p>
<p>Veremos mais adiante que apesar das inúmeras diferenças, podemos fazer várias comparações entre um framerwork css com um framework de software. Falemos um pouco então sobre o que eles são e como eles podem nos ajudar muito no desenvolvimento.</p>
<h2>O que é?</h2>
<p>É uma biblioteca compatível com padrões web, cross-browser, otimizada, com estilos CSS básicos pré-definidos que resolvem a maioria das situações comuns de desenvolvimento das interfaces web na linguagem CSS. Em suma, é um ou mais arquivos *.css válido(s), pronto(s) para uso e homologado(s) na maioria dos navegadores do mercado.</p>
<h2>Vantagens:</h2>
<p>Aqui vão alguns bons motivos para aderir ou pelo menos explorar as possibilidades dos CSS frameworks.</p>
<h3>Equipe de desenvolvimento</h3>
<p>A grande maioria dos CSS frameworks é desenvolvida pela comunidade, pelos melhores especialistas no assunto. É muito luxo você poder contar com equipes assim pra resolver problemas estruturais para o seu projeto não é? rs</p>
<h3>Cross-browser</h3>
<p>As estruturas definidas pelos CSS frameworks são testadas na maioria dos navegadores do mercado. Quem utiliza, não precisa se preocupar com o que é oferecido pelo framework, porque já houve uma equipe preocupada em testar cada detalhe em todos os navegadores.</p>
<h3>Agilidade</h3>
<p>A principal vantagem que esperamos de qualquer framework: Agilidade. No mundo da internet isso é primordial, recursos de desenvolvimento são escassos, o trabalho é grande e as mudanças são constantes. Ganhar tempo para conseguir dar o máximo de qualidade naquilo que realmente precisa se feito é extremamente necessário.</p>
<h3>Flexibilidade</h3>
<p>Na maioria dos CSS Frameworks podemos escolher configurações que se adequem ao nosso projeto, sendo assim podemos fazer a escolha mais “econômica” se tratando de consumo de banda e peso de página, e que vai nos oferecer os recursos que necessitarmos para o projeto entre esses recursos estão:</p>
<ul>
<li>. <em>Grid </em>customizado,</li>
<li>. Tipografia,</li>
<li>. <em>css-reset</em>,</li>
<li>. Folhas de estilo otimizadas por mídia (Impressão, Tela/Projetor).</li>
<li>. Suporte  para layouts fluídos</li>
<li>. Templates  com estruturas <em>SEO-friendly</em></li>
</ul>
<h3>Padrão de Código</h3>
<p>Com o tempo, os desenvolvedores vão se acostumar com o padrão estrutural das páginas e isso poderá facilitar muito o trabalho, não só do desenvolvedor como do webmaster. Mais um ganho enorme em agilidade de desenvolvimento e qualidade.</p>
<h3>Suporte / Documentação</h3>
<p>Eu ainda não conheço equipe que faça documentação da implementação de CSS, como estruturar ou utilizar cada classe, ID ou coisas assim. Utilizando um framework você e sua equipe “ganham de brinde”, na maioria dos casos, uma ótima documentação e guia de consulta.</p>
<h2>Mitos / Paranóias</h2>
<p>Talvez pra alguns seja melhor mais saber o que um CSS framework NÃO é antes mesmo de saber o que ele realmente é. Segue uma lista de falsidades sobre o assunto:</p>
<h3>- O trabalho do Webmaster se torna dispensável com os CSS frameworks.</h3>
<p>Não!!!! Assim como um framework de software, o framework não faz nada sozinho. Além do mais as decisões relacionadas a escolha de um bom framework, com a configuração ideal para o projeto também é responsabilidade do webmaster. Não há porque temerem pelos seus empregos (pelo menos não por isso <img src='http://afronteirafinal.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<h3>- O framework gera código automaticamente</h3>
<p>Também Não!!! Apesar de existirem algumas iniciativas para tornar o CSS dinâmico, processado server-side. &lt;desabafo&gt;Sou completamente avesso a essas tecnologias e ficarei assim até que me provem que realmente isso pode ser útil, e que compensa substituir um CSS bem escrito que não consome mais recursos de servidor)&lt;/desabafo&gt;, Os CSS frameworks que tem como objetivo gerar código dinamicamente.</p>
<h3>- O Webmaster vai “desaprender” como faz CSS usando framework</h3>
<p>Mais uma bobagem! Assim como um desenvolvedor não esquece como se programa quando usa um framework de software, o webmaster também não esquece como se faz HTML/CSS usando um framework. Se alguém até aqui ainda acha que não precisa mais conhecer (bem) CSS por causa de um framework, por favor, reinicie a leitura, obrigado!</p>
<h3>- CSS Frameworks são pesados</h3>
<p>Mais um engano. A grande maioria deles são bem leves e geralmente oferecem uma versão “minified”, ou seja, compactada. Você certamente teria que desenvolver “na unha” aquelas linhas de código de qualquer forma e talvez nem escreveria tão otimizado quanto.</p>
<h2>Desvantagens</h2>
<p>Como nem tudo são flores e aqui não é uma Central de Vendas de frameworks, existem sim desvantagens ao se utilizar CSS frameworks que devem ser pesadas na hora da escolha:</p>
<h3>Bugs herdados</h3>
<p>Se por um acaso a versão que você tiver utilizando tenha algum bug esse poderá ser herdado pelos seus elementos, já que como o próprio nome da tecnologia diz: são estilos em cascata.</p>
<h3>Excesso de código</h3>
<p>Como qualquer framework, nós nunca utilizamos 100% dos recursos oferecidos em nossos projetos, isso faz com que algumas linhas de código estejam perdidas sem nunca serem utilizadas. Por isso, a escolha do framework e da configuração deve ser bem pensada antes de começar o projeto.</p>
<h2>Lista de CSS frameworks</h2>
<p>Existem muitas opções de frameworks no mercado. Uma rápida pesquisa na rede trará vários deles, alguns bem completos, outros nem tanto, mas cabe á equipe optar pelo que melhor atende e explorá-lo. A dica é que não variar muito entre frameworks para que não haja confusão no padrão de nomenclaturas de classes, estruturas etc, porque no fim das contas vai exisitir uma curva de aprendizado do framework em que os usuários vão ter que se adaptar. Também não precisamos tornar um framework como &#8220;a única salvação&#8221; como se fosse uma religião ou time de futebol (Isso acontece muito quando se trata de framework de software). É preciso estar sempre atento às outras boas alternativas que existem por aí.</p>
<p>Como qualquer framework, é importante que a decisão sobre o seu uso seja bem planejada na concepção do projeto. Pode ser uma experiência arriscada migrar ou até mesmo atualizar um framework, uma vez que ja existe toda uma estrutura &#8220;pendurada&#8221; nele. Fica a dica.</p>
<p>- Blueprint &#8211; <a href="http://www.blueprintcss.org/" target="_blank">http://www.blueprintcss.org/</a></p>
<p>- YUI Grids &#8211; <a href="http://developer.yahoo.com/yui/grids/" target="_blank">http://developer.yahoo.com/yui/grids/</a></p>
<p>- YAML &#8211; <a href="http://www.yaml.de/en/" target="_blank">http://www.yaml.de/en/</a></p>
<p>- Elastic &#8211; <a href="http://elasticss.com/" target="_blank">http://elasticss.com/</a></p>
<p>- 960 Grid System &#8211; <a href="http://960.gs/" target="_blank">http://960.gs/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://afronteirafinal.com/aumente-sua-velocidade-e-qualidade-de-desenvolvimento-com-css-frameworks-acredite-eles-podem-ajudar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

