﻿<?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>TidBits</title>
	<atom:link href="http://www.tidbits.com.br/feed" rel="self" type="application/rss+xml" />
	<link>http://www.tidbits.com.br</link>
	<description>Desenvolvimento de Front End</description>
	<lastBuildDate>Wed, 18 Jan 2012 00:41:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Porque a chave no Javascript deve ser aberta na linha de cima</title>
		<link>http://www.tidbits.com.br/porque-a-chave-no-javascript-deve-ser-aberta-na-linha-de-cima</link>
		<comments>http://www.tidbits.com.br/porque-a-chave-no-javascript-deve-ser-aberta-na-linha-de-cima#comments</comments>
		<pubDate>Wed, 18 Jan 2012 00:41:33 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Padrões]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1793</guid>
		<description><![CDATA[O Visual Studio, além de ser uma IDE mega pesada, tem um problema que gera intrigas entre equipes: ele abre por padrão uma função no JavaScript colocando a chave na linha de baixo. Parece algo mínimo, mas irrita profundamente quem está acostumado a trabalhar da forma correta. Porque forma correta? Simples, porque pode dar erro [...]]]></description>
			<content:encoded><![CDATA[<p>O Visual Studio, além de ser uma IDE mega pesada, tem um problema que gera intrigas entre equipes: ele abre por padrão uma função no JavaScript colocando a chave na linha de baixo. </p>
<p>Parece algo mínimo, mas irrita profundamente quem está acostumado a trabalhar da forma correta.</p>
<p>Porque forma correta? Simples, porque pode dar erro se colocar a chave na linha de baixo.</p>
<p>Pensem na função abaixo getUser que retorna um objeto em JavaScript</p>
<pre class="brush: jscript; title: ; notranslate">
function getUser(){
	return {
		nome:'Danilo',
		idade:28
	}
}

getUser() // retorna um objeto
</pre>
<p>Se fosse pra deixar a chave embaixo, ficaria assim:</p>
<pre class="brush: jscript; title: ; notranslate">
function getUser()
{
	return
	{
		nome:'Danilo',
		idade:28
	}
}

getUser() // retorna undefined
</pre>
<p>Só que há um problema: pelo fato do ponto e vírgula indicando quebra de linha ser no JavaScript ser opcional, o return não entende que é pra retornar um objeto e encerra a função ali, retornando undefined.</p>
<p>E tem um caso pior, que simplesmente dá erro de sintaxe:</p>
<pre class="brush: jscript; title: ; notranslate">
function getPosition()
{
   return
   {
       top:32,
       left:50
   }
}
// dá erro &quot;SyntaxError: Unexpected token :&quot;
</pre>
<p>E se fosse feito com os braces na linha de cima, daria certo.</p>
<p>O incrível é que mesmo com esse argumento, tem programador que não dá o braço a torcer e insiste dizendo que JavaScript veio do java e no java se programa assim. ERRADO, JavaScript veio de <a href="http://pt.wikipedia.org/wiki/Scheme" target="_blank">Scheme</a> e qualquer livro de <a href="http://novatec.com.br/livros/padroesjavascript/" target="_blank">Padrões em Javascript</a> vai aconselhar abrir o bloco com a chave na linha de cima.</p>
<p>Dá pra configurar isso no Visual Studio 2010 (no 2008 deve dar também).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/porque-a-chave-no-javascript-deve-ser-aberta-na-linha-de-cima/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A carta ao SINDPD pra não roubarem 30 reais do seu salário todo mês</title>
		<link>http://www.tidbits.com.br/a-carta-ao-sindp-pra-nao-roubarem-seu-salari</link>
		<comments>http://www.tidbits.com.br/a-carta-ao-sindp-pra-nao-roubarem-seu-salari#comments</comments>
		<pubDate>Thu, 12 Jan 2012 02:41:29 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Carreira]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1786</guid>
		<description><![CDATA[Trabalho em agência em publicidade e, em São Paulo, algumas delas respondem ao Sindicato dos Publicitários enquanto outras (normalmente com maior tempo de vida) respondem ao Sindicato dos Trabalhadores em Processamento de Dados e Tecnologia da Informação, o chamado SINDPD e essas sim sofrem. Todo mês o SINDPD por regra fica com 30 reais do [...]]]></description>
			<content:encoded><![CDATA[<p>Trabalho em agência em publicidade e, em São Paulo, algumas delas respondem ao Sindicato dos Publicitários enquanto outras (normalmente com maior tempo de vida) respondem ao Sindicato dos Trabalhadores em Processamento de Dados e Tecnologia da Informação, o chamado SINDPD e essas sim sofrem.</p>
<p>Todo mês o SINDPD por regra fica com 30 reais do seu salário. E pra que isso não ocorra só tem uma forma: você tem que escrever uma carta num modelo que eles criam e trocam todo ano e levar <strong>pessoalmente</strong> duas cópias assinadas ao sindicato, <strong>em horário comercial</strong> obviamente e você só pode fazer isso nas duas primeiras semanas do ano (período em que normalmente pessoas felizes tiram férias). Se você não entregar até a segunda sexta feira do ano aí já era. No estilo &#8220;perdeu playboy&#8221; mesmo. Até dezembro você vai perder 30 reais todo mês por não ter levado a cartinha deles.</p>
<p>O processo todo é feito pra você não conseguir entregar o documento a eles. Afinal, é só pensar um pouco: Sindicato de Tecnologia da Informação ter que levar uma carta, pessoalmente, pra eles carimbarem, é ridículo. Qualquer programador podia fazer um sistema básico pra todo mundo poder autorizar ou não, de casa ou do trabalho, o dinheiro tomado por eles. Mas não, e são filas longas (ano passado eu perdi 2 horas e meia na fila que dava uma volta no quarteirão).Pra intimidar, eles colocam cerca de 30 seguranças pra não deixar ninguem &#8220;dar pitizinho&#8221;. E funciona assim: quanto mais gente voltar pro trabalho ao invés de perder meio dia de serviço pra entregar um papel, melhor (mais dinheiro) pro sindicato.</p>
<p><img src="http://www.tidbits.com.br/wp-content/uploads/2012/01/fila-no-sindicato-.jpg" alt="Fila no Sindicato" width="465" height="275" class="alignnone size-full wp-image-1787" /></p>
<p>Além disso, no modelo da carta, é necessário colocar seu e-mail lá. Não vejo outro motivo pra eles ter seu e-mail a não ser vender a base, já que somos obrigados a ir pessoalmente lá.</p>
<p>Eu me recuso a deixar 330 reais na mão do sindicato ( 30 reais x 11 meses, em janeiro é cobrado de toda forma, levando cartinha ou não) e quem trabalhar em alguma empresa que também responde ao SINDPD deveria fazer o mesmo. O modelo da carta de 2012 <a href="/download/modelo_carta_de_oposicao_sindpd2012.doc" target="_blank">está aqui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/a-carta-ao-sindp-pra-nao-roubarem-seu-salari/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Desenhando com a tag canvas em HTML5</title>
		<link>http://www.tidbits.com.br/desenhando-com-a-tag-canvas-em-html</link>
		<comments>http://www.tidbits.com.br/desenhando-com-a-tag-canvas-em-html#comments</comments>
		<pubDate>Tue, 25 Oct 2011 20:37:50 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1773</guid>
		<description><![CDATA[A maioria das pessoas (inclusivo programadores front end) vê alguma aplicação onde é possível desenhar e pensa que é algo do capeta, complexo e precisa de 1 ano pra fazer, mas provavelmente ninguém nunca tentou. É simples! Obviamente precisa de um belo work-around pra funcionar em interfaces touch e o pior, versões antigas de IE. [...]]]></description>
			<content:encoded><![CDATA[<p>A maioria das pessoas (inclusivo programadores front end) vê alguma aplicação onde é possível desenhar e pensa que é algo do capeta, complexo e precisa de 1 ano pra fazer, mas provavelmente ninguém nunca tentou. É simples!</p>
<p>Obviamente precisa de um belo work-around pra funcionar em interfaces touch e o pior, versões antigas de IE. Mas a ideia em si é simples, basicamente no mousemove em cima do canvas você escreve uma linha com o LineTo, veja abaixo como ficou:</p>
<p><iframe width="460" height="470" frameborder="0" scrolling="no" src="http://www.tidbits.com.br/download/exemplos/desenhando-com-canvas-usando-html5/"></iframe>	</p>
<p>Bom, vamos aos códigos:</p>
<h3>HTML</h3>
<p>Criando a tag canvas e deixando uma mensagem caso o usuário não tenho um browser compatível com HTML5.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;canvas id=&quot;canvas&quot; class=&quot;canvas&quot; width=&quot;400&quot; height=&quot;400&quot;&gt;
    Seu browser não suporta canvas, é hora de trocar!.
&lt;/canvas&gt;
</pre>
<h3>Javascript</h3>
<p>São só 29 linhas (bem indentadas e organizadas) de javascript</p>
<pre class="brush: jscript; title: ; notranslate">
var Draw = {
	obj : document.getElementById('canvas'),
	contexto : document.getElementById('canvas').getContext(&quot;2d&quot;),
	_init:function(){
		Draw.obj.onmousemove = Draw._over;
		Draw.obj.onmousedown = Draw._ativa;
		Draw.obj.onmouseup = Draw._inativa;
		Draw.obj.onselectstart = function () { return false; };
	},
	_over:function(e){
		if(!Draw.ativo) return;
		Draw.contexto.beginPath();
		Draw.contexto.lineTo(Draw.x,Draw.y);
		Draw.contexto.lineTo(e.layerX, e.layerY);
		Draw.contexto.stroke();
		Draw.contexto.closePath();
		Draw.x = e.layerX;
		Draw.y = e.layerY;
	},
	_ativa:function(e){
		Draw.ativo = true;
		Draw.x = e.layerX;
		Draw.y = e.layerY;
	},
	_inativa:function(){
		Draw.ativo = false;
	}
}
Draw._init();
</pre>
<h3>CSS</h3>
<p>Basicamente, é adicionar o cursor no elemento Canvas</p>
<pre class="brush: css; title: ; notranslate">
#canvas{ cursor: url(&quot;../img/pencil.gif&quot;), default; }
</pre>
<p>Então, não parece tão complicado, parece?</p>
<p>[]s,</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/desenhando-com-a-tag-canvas-em-html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transição de Flip usando CSS3</title>
		<link>http://www.tidbits.com.br/transicao-de-flip-usando-css</link>
		<comments>http://www.tidbits.com.br/transicao-de-flip-usando-css#comments</comments>
		<pubDate>Mon, 24 Oct 2011 17:57:53 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1767</guid>
		<description><![CDATA[Novos efeitos em css3 vão sendo adicionados. Por enquanto por causa do translate 3d, somente webkit reproduzem isso (resumindo só funciona em Google Chrome e Safari). Parece inútil, mas se parar pra pensar. Em sites mobiles ou pra tablets, isso funciona praticamente em 100% dos acessos. Veja o efeito, com o mínimo de código possível: [...]]]></description>
			<content:encoded><![CDATA[<p>Novos efeitos em css3 vão sendo adicionados. Por enquanto por causa do translate 3d, somente webkit reproduzem isso (resumindo <strong>só funciona em Google Chrome e Safari</strong>).</p>
<p>Parece inútil, mas se parar pra pensar. Em sites mobiles ou pra tablets, isso funciona praticamente em 100% dos acessos.</p>
<p>Veja o efeito, com o mínimo de código possível:</p>
<p><iframe width="460" height="300" frameborder="0" scrolling="no" src="http://www.tidbits.com.br/download/css3-flip/"></iframe>	</p>
<p>Pra quem se interessou, pode fazer <a href="http://www.tidbits.com.br/download/css3-flip/css3-flip.zip">download do exemplo aqui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/transicao-de-flip-usando-css/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE6 morreu, e agora? O que dá pra fazer diferente no HTML / CSS?</title>
		<link>http://www.tidbits.com.br/ie6-morreu-e-agora-o-que-da-pra-fazer-diferente-no-html-e-css</link>
		<comments>http://www.tidbits.com.br/ie6-morreu-e-agora-o-que-da-pra-fazer-diferente-no-html-e-css#comments</comments>
		<pubDate>Thu, 20 Oct 2011 16:02:07 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Sem categoria]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1757</guid>
		<description><![CDATA[Pedimos por anos a morte do IE6 e hoje considero ele morto, mas e aí? Agora é começar a xingar o IE7 e fazer as mesmas coisas? Nem tanto, algumas possibilidades que não usávamos, podem ser exploradas. E a grande notícia é que o uso de IE7 vai caindo drasticamente. Hoje segundo a global stats, [...]]]></description>
			<content:encoded><![CDATA[<p>Pedimos por anos a morte do IE6 e hoje considero ele morto, mas e aí? Agora é começar a xingar o IE7 e fazer as mesmas coisas? Nem tanto, algumas possibilidades que não usávamos, podem ser exploradas. </p>
<p>E a grande notícia é que o uso de IE7 vai caindo drasticamente. Hoje segundo a global stats, IE6 no Brasil está na casa de 8%, enquanto IE7 bate cerca de 5% do total.</p>
<p>Então, veja a gama de features que podemos usar se não formos nos preocupar com o IE6.</p>
<ul>
<li>CSS Attribute selectors</li>
<li>min-height / max-height / min-width / max-width</li>
<li>General Sibling Selector</li>
<li>Float Left + Margin Left</li>
<li>border-color: transparent</li>
<li>Porcentagem na margin / padding</li>
<li>position:fixed </li>
<li>png24</li>
<li>:hover em qualquer elemento</li>
<li> &gt; no css (filho direto) </li>
</ul>
<p>Veja uma pequena apresentação que fiz falando de cada uma dessas features:</p>
<p><iframe src="https://docs.google.com/present/embed?id=dc44fgs9_2dk7wfqdg" frameborder="0" width="410" height="342"></iframe></p>
<p>Mas e o FDP que ainda usa IE6?</p>
<p>Recomendo usar o IE7.js que minimiza os bugs do browser, vai rodar tipo LENTO, mas se o cara ainda usa IE6, não deve ser alguém muito preocupado com performance, né?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/ie6-morreu-e-agora-o-que-da-pra-fazer-diferente-no-html-e-css/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sobre o bug de vazamento de memória do Firefox</title>
		<link>http://www.tidbits.com.br/sobre-o-bug-de-vazamento-de-memoria-do-firefox</link>
		<comments>http://www.tidbits.com.br/sobre-o-bug-de-vazamento-de-memoria-do-firefox#comments</comments>
		<pubDate>Thu, 13 Oct 2011 03:04:22 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Navegadores]]></category>
		<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1735</guid>
		<description><![CDATA[Eu uso Firefox como browser default desde 2005 quando a Mozilla Foundation lançou a versão 1.5 do navegador, que na época tinha como principal rival o Internet Explorer 6, da Microsoft, que chegou a atingir 99% do market share mundial dois anos atrás, em 2003. A ideia do navegador aceitar extensões desenvolvidas por qualquer programador [...]]]></description>
			<content:encoded><![CDATA[<p>Eu uso Firefox como browser default desde 2005 quando a Mozilla Foundation lançou a versão 1.5 do navegador, que na época tinha como principal rival o Internet Explorer 6, da Microsoft, que chegou a atingir 99% do market share mundial dois anos atrás, em 2003.</p>
<p>A ideia do navegador aceitar extensões desenvolvidas por qualquer programador fez o Firefox crescer rápido até que em 2006, a Microsoft que havia decidido não mexer mais em seu browser, anunciou que iria trabalhar numa nova versão do navegador, o Internet Explorer 7. A Mozilla comemorou esse dia afinal, se eles chegaram ao ponto de incomodar a gigante Microsoft, significava que eles estavam indo muito bem, mandaram até um bolo pra eles.</p>
<p>Com as extensões, muitas possibilidades foram agregadas no browser, aplicações que mandavam email de forma mais simples ou que possibilitavam pausar downloads diretamente do navegador ou então baixava vídeos do Youtube e já convertia o .flv pra uma extensão diferente, entre outras que usamos até hoje como o Firebug, Web Developer Toolbar, HTML Validator, etc.</p>
<p>Só que todas essas novas features tiveram um peso: a memória RAM, que vaza até hoje como água na peneira enquanto usamos o Firefox. Veio a versão 2 que prometia resolver isso e #fail, veio a versão 3, 3.5, 4, 4.1, 5, 6 e 7 (entre outras intermediárias) e todas também levaram um big #fail quando o assunto é gerenciamento de Memória RAM. Veio então o Google Chrome há alguns anos atrás, que também possibilitava múltiplas abas e centenas de extensões, imaginávamos outro problema de RAM, mas nada disso, fizeram um bom trabalho.</p>
<h2>E como funciona o gerenciamento de memória do Firefox?</h2>
<p>É mais ou menos assim:</p>
<p><a href="http://www.tidbits.com.br/wp-content/uploads/2011/10/gerenciamento-de-memoria-do-firefox.jpg"><img src="http://www.tidbits.com.br/wp-content/uploads/2011/10/gerenciamento-de-memoria-do-firefox.jpg" alt="Como funciona o gerenciamento de memória do Firefox" title="Gerenciamento de memória do Firefox" width="460" height="544" class="alignnone size-full wp-image-1743" /></a></p>
<h2>E o que dá pra fazer?</h2>
<p>Muitas pessoas estão &#8220;migrando&#8221; pro Chrome mas apesar disso, pra mim, o Firefox ainda é o melhor navegador pra desenvolvedor de interface.</p>
<p>Desinstalar extensões que não usamos muito, pode aliviar um pouco. E existe uma extensão também chamada &#8220;Memory Restart&#8221; que avisa quantos megas (ou gigas) o Firefox está usando, e quando começa a crescer muito, a extensão avisa que está na hora de reiniciar o browser.</p>
<p>De resto, só podemos aguardar a Mozilla Foundation melhorar o principal produto dela, dizem que no Firefox 8 vai estar melhor (assim como falavam no Firefox 2). Até lá, o Firefox continua assim:</p>
<p><a href="http://www.tidbits.com.br/wp-content/uploads/2011/10/bug-de-vazamento-de-memoria-do-firefox.png"><img src="http://www.tidbits.com.br/wp-content/uploads/2011/10/bug-de-vazamento-de-memoria-do-firefox.png" alt="Gerenciador de Tarefas do Windows com Firefox usando 1.3 gigas de RAM" title="Gerenciador de Tarefas do Windows com Firefox usando 1.3 gigas de RAM" width="460" height="467" class="alignnone size-full wp-image-1750" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/sobre-o-bug-de-vazamento-de-memoria-do-firefox/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Como usar requestAnimationFrame ao invés de setInterval</title>
		<link>http://www.tidbits.com.br/como-usar-requestanimationframe-ao-inves-de-setinterval</link>
		<comments>http://www.tidbits.com.br/como-usar-requestanimationframe-ao-inves-de-setinterval#comments</comments>
		<pubDate>Fri, 07 Oct 2011 20:08:15 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1730</guid>
		<description><![CDATA[Um grande passo pra evolução do HTML não precisar de plugins como Flash e Silverlight pra renderizar conteúdo e fazer animações ou jogos é a implementação de um controle de frames (além da aceleração por hardware que hoje já está presente em algumas features do CSS3). Quando se fala em jogos e animações, pensamos em [...]]]></description>
			<content:encoded><![CDATA[<p>Um grande passo pra evolução do HTML não precisar de plugins como Flash e Silverlight pra renderizar conteúdo e fazer animações ou jogos é a implementação de um controle de frames (além da aceleração por hardware que hoje já está presente em algumas features do CSS3).</p>
<p>Quando se fala em jogos e animações, pensamos em quantidade de frames por segundo, ou seja, quantas vezes por segundo algo vai mexer na tela.</p>
<p>Uma quantidade razoável pro trabalho não ficar &#8220;pesado&#8221; ou &#8220;travado&#8221; é cerca de 30 frames por segundo. Enquanto o máximo que o olho humano consegue distinguir é em torno de 60 frames por segundo, ou seja, não adianta fazer uma animação com intervalo de 10 milisegundos, seu olho não vai enxergar isso.</p>
<p>Antes, pra fazermos uma animação, trabalhávamos com o setInterval fixo de X milisegundos, ou então, criavamos e chamavamos uma função que se auto-invocava novamente com setTimeout também com um valor fixo de X milisegundos. O problema é que esse X de milisegundos varia de acordo com cada browser, cada processador e alguma hora acabava ficando ou muito lento, ou muito rápido.</p>
<p>Hoje, é possível trabalhar com o requestAnimationFrame, e ao invés de você gerenciar intervalo para o processamento, o browser faz isso.</p>
<p>Imaginem uma função onde algo, sei lá, um boneco, ande.</p>
<p>Como seria com setTimeout?</p>
<pre class="brush: jscript; title: ; notranslate">
funcion mover(){
    var boneco = document.getElementById('boneco');
    boneco.style.left = (parseInt(boneco.style.left.replace('px','')) + 2).toString() + 'px';
}
setInterval(mover,20); // reinvoca a cada 20 miliseg.
</pre>
<p>Já com requestAnimationFrame  seria assim:</p>
<pre class="brush: jscript; title: ; notranslate">
funcion mover(){
    var boneco = document.getElementById('boneco');
    boneco.style.left = (parseInt(boneco.style.left.replace('px','')) + 2).toString() + 'px';
    mozRequestAnimationFrame(mover);
}
mover();
</pre>
<p>Nesse caso funcionaria só pra Firefox, mas tem uma função já que funciona cross-browser e pra usuários de browsers sem HTML5 tem um work-around com setTimeout:</p>
<pre class="brush: jscript; title: ; notranslate">
window.animationFrame = (function(){
	return	window.requestAnimationFrame       ||
		window.webkitRequestAnimationFrame ||
		window.mozRequestAnimationFrame    ||
		window.oRequestAnimationFrame      ||
		window.msRequestAnimationFrame     ||
		function(/* function */ callback, /* DOMElement */ element){
			window.setTimeout(callback, 1000 / 60);
		};
})();
</pre>
<p>Nesse caso, ficaria assim:</p>
<pre class="brush: jscript; title: ; notranslate">
funcion mover(){
    var boneco = document.getElementById('boneco');
    boneco.style.left = (parseInt(boneco.style.left.replace('px','')) + 2).toString() + 'px';
    animationFrame (mover);
}
mover();
</pre>
<h2>Detalhes</h2>
<p>Quando você troca de aba com o requestAnimationFrame, o processamento da animação / jogo / whatever é pausado na hora, e quando você volta, ele retorna.</p>
<p>Já no setInterval, hoje, pra dar uma melhor performance nos browsers, a maioria deles quando você troca de tab, ele automaticamente aumenta qualquer setInterval pra 1000 milisegundos se você ter declarado menos do que isso, e retorna ao valor inicial quando a aba é ativada novamente</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/como-usar-requestanimationframe-ao-inves-de-setinterval/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Entendendo melhor o console do firebug</title>
		<link>http://www.tidbits.com.br/entendendo-melhor-o-console-do-firebug</link>
		<comments>http://www.tidbits.com.br/entendendo-melhor-o-console-do-firebug#comments</comments>
		<pubDate>Thu, 06 Oct 2011 21:34:55 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Tecnologia]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1714</guid>
		<description><![CDATA[O console do firebug é uma poderosa ferramenta que além de mostrar erros de JavaScript, erros 404 e todos os detalhes de uma requisição ajax, é capaz de interagir com o próprio firebug, inspecionando os nodes HTML. Mas o uso maior do console, é pra debugar javascript mesmo. Vou listar alguns comandos, funcionam tanto no [...]]]></description>
			<content:encoded><![CDATA[<p>O console do firebug é uma poderosa ferramenta que além de mostrar erros de JavaScript, erros 404 e todos os detalhes de uma requisição ajax, é capaz de interagir com o próprio firebug, inspecionando os nodes HTML.</p>
<p>Mas o uso maior do console, é pra debugar javascript mesmo.</p>
<p>Vou listar alguns comandos, funcionam tanto no Firebug pro Firefox, quando no &#8220;Developer Tools&#8221; do Google Chrome</p>
<h2>console.log ou console.debug</h2>
<p><strong>Sintaxe:</strong> console.log(variaveis);<br />
<strong>Serve para:</strong> debugar variáveis no javascript ao invés de colocar 300 alerts</p>
<p>Até hoje, nunca descobri a diferença (se é que existe) entre os dois métodos.<br />
Um detalhe que pouca gente sabe, é que é possível passar infinitos argumentos nessa função.</p>
<pre class="brush: jscript; title: ; notranslate">
var nome = 'Danilo';
var sobrenome = 'Augusto';
var nome_completo = nome+' '+sobrenome;
console.log(nome_completo);
// Danilo Augusto
console.log('nome:',nome);
// nome: Danilo
console.log('nome:',nome,' e sobrenome: ',sobrenome);
// nome: Danilo e sobrenome: Augusto
</pre>
<h2> console.dir </h2>
<p><strong>Sintaxe:</strong> console.dir(objeto);<br />
<strong>Serve para:</strong> debugar um objeto, mostrando todos os childs dele</p>
<pre class="brush: jscript; title: ; notranslate">
var posicoes = {
    left:10,
    top:50
}
console.dir(posicoes);
// left	10
// top 50
</pre>
<p>Ou então: </p>
<p>console.dir(document.getElementById(&#8216;menu&#8217;));</p>
<p>retorna tudo sobre o elemento:</p>
<p><a href="http://www.tidbits.com.br/wp-content/uploads/2011/10/console.dir_.jpg"><img src="http://www.tidbits.com.br/wp-content/uploads/2011/10/console.dir_.jpg" alt="" title="Exemplo de funcionamento do console.dir do Firebug" width="460" height="231" class="alignnone size-full wp-image-1720" /></a></p>
<h2>copy</h2>
<p><strong>Sintaxe:</strong> copy(variavel);<br />
<strong>Serve para:</strong> copiar uma variável para a área de transferência do sistema operacional (funciona como um ctrl+c)</p>
<pre class="brush: jscript; title: ; notranslate">
copy(document.getElementById('erro').innerHTML)
</pre>
<h2>$0</h2>
<p><strong>Sintaxe:</strong> $0<br />
<strong>Serve para:</strong> retornar o objeto selecionado/inspecionado no próprio firebug.</p>
<pre class="brush: jscript; title: ; notranslate">
$0.style.display = 'none';
</pre>
<h2>$$</h2>
<p><strong>Sintaxe:</strong> $$(expressao)<br />
<strong>Serve para:</strong> retornar um ou mais objetos através de um seletor.</p>
<p>Funciona como o $ do jQuery. Então, é ideal pra testar em sites que não usam jQuery (sacou? sacou?).</p>
<pre class="brush: jscript; title: ; notranslate">
$$('#footer').style.display = 'none';
</pre>
<h2>inspect</h2>
<p><strong>Sintaxe:</strong> inspect(elemento)<br />
<strong>Serve para:</strong> inspecionar no próprio firebug um elemento HTML.</p>
<p>Funciona como o $ do jQuery. Então, é ideal pra testar em sites que não usam jQuery (sacou? sacou?).</p>
<pre class="brush: jscript; title: ; notranslate">
inspect($$('#footer'));
</pre>
<p>Acho interessante quem gostou do assunto dar uma olhada num vídeo do Paul Irish em que ele demonstra essas e outras funções do console do firebug.</p>
<p><iframe width="460" height="342" src="http://www.youtube.com/embed/4mf_yNLlgic?rel=0" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/entendendo-melhor-o-console-do-firebug/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Novas possibilidades com o Google Maps</title>
		<link>http://www.tidbits.com.br/novas-possibilidades-com-o-google-maps</link>
		<comments>http://www.tidbits.com.br/novas-possibilidades-com-o-google-maps#comments</comments>
		<pubDate>Wed, 28 Sep 2011 21:59:39 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Sem categoria]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1690</guid>
		<description><![CDATA[O Google Maps foi lançado em fevereiro de 2005 e nesses 6 anos ele virou referência pra se indicar um lugar, na internet. E hoje ele está dentro de qualquer smartphone; nos traça rotas de carro / ônibus; mostra como está o transito; o StreetView do maps está presente em 36 países. E as aplicações [...]]]></description>
			<content:encoded><![CDATA[<p>O Google Maps foi lançado em fevereiro de 2005 e nesses 6 anos ele virou referência pra se indicar um lugar, na internet. E hoje ele está dentro de qualquer smartphone; nos traça rotas de carro / ônibus; mostra como está o transito; o StreetView do maps está presente em 36 países.</p>
<p>E as aplicações neles estão crescendo. Listei 10 sites e experimentos de programadores (isso significa sem design nenhum)  fuçando novas possibilidades pro Google Maps:</p>
<h2>1 &#8211; Dual Maps</h2>
<p><a href="http://www.mapchannels.com/DualMaps.aspx#preview" target="_blank"><img src="http://www.tidbits.com.br/wp-content/uploads/2011/09/dual_map.jpg" alt="Dual Map no Google Maps" title="Dual Map no Google Maps" width="460" height="324" class="alignnone size-full wp-image-1692" /></a><br />
Aplicação que sincroniza o Google Maps, o StreetView e a visão aérea do mesmo local.</p>
<h2>2 &#8211; Stas Kulesh</h2>
<p><a href="http://stas.kulesh.co.nz/" target="_blank"><img src="http://www.tidbits.com.br/wp-content/uploads/2011/09/stas_kulesh.jpg" alt="Fotos do Flickr  no Google Maps" title="Fotos do Flickr  no Google Maps" width="460" height="312" class="alignnone size-full wp-image-1693" /></a><br />
Monta um mosaico de fotos do Flickr no Maps e deixa navegar nele.</p>
<h2>3 &#8211; Valor do Taxi</h2>
<p><a href="http://pedromenezes.com/taxi/" target="_blank"><img src="http://www.tidbits.com.br/wp-content/uploads/2011/09/calculadora-de-taxi.jpg" alt="Calculadora de Taxi no Google Maps" title="Calculadora de Taxi no Google Maps" width="460" height="414" class="alignnone size-full wp-image-1694" /></a><br />
Escolha dois endereços e o site calcula a rota e um valor aproximado de uma viagem de taxi do ponto A ao B.</p>
<h2>4 &#8211; MegaFoto</h2>
<p><a href="http://www.meutimao.com.br/_assets/megafoto-fazendinha/" target="_blank"><img src="http://www.tidbits.com.br/wp-content/uploads/2011/09/megafoto-fazendinha.jpg" alt="MegaFoto no Google Maps" title="MegaFoto no Google Maps" width="460" height="344" class="alignnone size-full wp-image-1696" /></a><br />
Aquele esquema de gigafotos é possível fazer usando o google maps.<br />
Nesse caso eu que fiz um teste (#VaiCorinthians). Mas teve algum site que já usou isso comercialmente mesmo.</p>
<h2>5 &#8211; Pop Places (Made In Web) </h2>
<p><a href="http://gdd11.madeinweb.com.br/" target="_blank"><img src="http://www.tidbits.com.br/wp-content/uploads/2011/09/pop_places.jpg" alt="Pilote um avião no Google Maps" title="Pilote um avião no Google Maps" width="460" height="392" class="alignnone size-full wp-image-1697" /></a><br />
Uma espécie de game / site interativo, que traça uma rota pra você pilotar um avião dentro do maps. Foi desenvolvido como um case pra um concurso de HTML5 do Google.</p>
<h2>6 &#8211; Rota animada</h2>
<p><a href="http://econym.org.uk/gmap/example_cartrip3.htm" target="_blank"><img src="http://www.tidbits.com.br/wp-content/uploads/2011/09/rota_animada.jpg" alt="Rota animada no Google Maps" title="Rota animada no Google Maps" width="460" height="370" class="alignnone size-full wp-image-1698" /></a><br />
Percorre uma rota animada com um carrinho feio do ponto A ao ponto B.</p>
<h2>7 &#8211; TwitterVision</h2>
<p><a href="http://twittervision.com/" target="_blank"><img src="http://www.tidbits.com.br/wp-content/uploads/2011/09/twittervision.jpg" alt="Aplicação usando o Google Maps" title="Aplicação usando o Google Maps" width="460" height="261" class="alignnone size-full wp-image-1701" /></a><br />
Na verdade quando fui tirar o print não estava funcionando, mas basicamente ele procurava algo no twitter, identificava o lugar de origem do post e apontava no mapa onde foi postado (movendo o mapa) e aparece a mensagem do tweet com a foto de que publicou. O efeito é legal. Fiz algo parecido pra click em 2009 mas acabou não sendo aproveitado.</p>
<h2>8 &#8211; Los Angeles Firemap</h2>
<p><a href="http://www.latimes.com/news/local/la-me-la-fire-map-html,0,7464337.htmlstory" target="_blank"><img src="http://www.tidbits.com.br/wp-content/uploads/2011/09/firemap.jpg" alt="Mapa de incêndio no Google Maps" title="Mapa de incêndio no Google Maps" width="460" height="487" class="alignnone size-full wp-image-1702" /></a><br />
Quando houve o grande incêndio em Los Angeles, o site Los Angeles Times publicou um mapa estilizado, desenhando os pontos de risco, pontos de evacuação, etc.</p>
<h2>9 &#8211; ShowStreet</h2>
<p><a href="http://www.showstreet.com/" target="_blank"><img src="http://www.tidbits.com.br/wp-content/uploads/2011/09/showstreet.jpg" alt="Street View e Google Maps juntos" title="Street View e Google Maps juntos" width="460" height="286" class="alignnone size-full wp-image-1703" /></a><br />
Site que mostra o Google Maps sincronizado com o StreetView</p>
<h2>10 &#8211; Guiarte</h2>
<p><a href="http://www.guiarte.com/mapas-google/desarrolloweb/fotos-panoramio.php" target="_blank"><img src="http://www.tidbits.com.br/wp-content/uploads/2011/09/guiarte.jpg" alt="Aplicativo usando o Google Maps" title="Aplicativo usando o Google Maps" width="460" height="289" class="alignnone size-full wp-image-1704" /></a><br />
Pega fotos do próprio maps e adiciona no mapa antes de ter que escolher o local.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/novas-possibilidades-com-o-google-maps/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adicionando callbacks por JavaScript no tweet button / like button / +1 button</title>
		<link>http://www.tidbits.com.br/adicionando-callbacks-por-javascript-no-tweet-button-like-button-1-button</link>
		<comments>http://www.tidbits.com.br/adicionando-callbacks-por-javascript-no-tweet-button-like-button-1-button#comments</comments>
		<pubDate>Mon, 26 Sep 2011 23:31:46 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Redes Sociais]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1672</guid>
		<description><![CDATA[Imaginei vários cenários em que isso pode ser útil, basicamente adicionando uma função de callback no JavaScript após twittar ou dar like / curtir ou apertar o botão mágico que o Google inventou, que quando você clica soma 1 (HÁ!), enfim, pode evitar que você precise programar server-side e se preocupar com oauth, e os [...]]]></description>
			<content:encoded><![CDATA[<p>Imaginei vários cenários em que isso pode ser útil, basicamente adicionando uma função de callback no JavaScript após twittar ou dar like / curtir ou apertar o botão mágico que o Google inventou, que quando você clica soma 1 (HÁ!), enfim, pode evitar que você precise programar server-side e se preocupar com oauth, e os malditos tokens, ou seja, dá pra fazer tudo no JavaScript, tipo:</p>
<ul>
<li>Como trackear ou <strong> como colocar tags do Google Analytics no tweet button , like button e +1 button</strong>, mensurando o compartilhamento de cada post, página ou sessão do site nas redes sociais.</li>
<li>Aplicações do tipo, <strong>pague com um tweet</strong>, ou <strong>compartilhe para fazer o download</strong>, liberando um conteúdo, uma foto um vídeo ou qualquer arquivo somente depois que o usuário efetivamente compartilhar a página no Twitter, Facebook ou Google Plus.</li>
<li>Fazer coisas bregas do tipo &#8220;<strong>Obrigado por compartilhar</strong>&#8220;, tem gente que adora isso, sério.</li>
</ul>
<p><span id="more-1672"></span><br />
Vamos aos códigos&#8230;</p>
<h2>Callback no Like Button</h2>
<p>Dos três botões, o único que tem frescura é o do Facebook, pois ainda que você faça tudo no JavaScript, ele te obriga a criar uma app lá no canal de desenvolvedores deles, vai lá, criar uma App só pra pegar o ID. Além disse também tem a frescura de precisar colocar o atributo <strong>xmlns:fb=&#8221;http://www.facebook.com/2008/fbml&#8221;</strong> dentro da sua tag &lt;html&gt; .<br />
E dentro do seu &lt;body&gt; (que gay isso), no lugar onde você vai colocar o like button, adicione:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;fb-root&quot;&gt;&lt;/div&gt;
&lt;fb:like&gt;&lt;/fb:like&gt;
</pre>
<p>E lá no fim do body, em javascript:</p>
<pre class="brush: jscript; title: ; notranslate">
	window.fbAsyncInit = function() {
		FB.init({appId: 'SUA_APP_ID', status: true, cookie: true, xfbml: true});
		FB.Event.subscribe('edge.create', function(href, widget) {
			alert('Você acabou de curtir a página: '+href);
		});
	};
	(function() {
		var e = document.createElement('script');
		e.type = 'text/javascript';
		e.src = document.location.protocol + '//connect.facebook.net/pt_BR/all.js';
		e.async = true;
		document.getElementById('fb-root').appendChild(e);
	}());
</pre>
<p>E vai funcionar assim:</p>
<div id="fb-root"></div>
<p><fb:like></fb:like></p>
<p><script type="text/javascript">
	window.fbAsyncInit = function() {
		FB.init({appId: '167712269965150', status: true, cookie: true, xfbml: true});
		FB.Event.subscribe('edge.create', function(href, widget) {
			alert('Você acabou de curtir a página: '+href);
		});
	};
	(function() {
		var e = document.createElement('script');
		e.type = 'text/javascript';
		e.src = document.location.protocol + '//connect.facebook.net/pt_BR/all.js';
		e.async = true;
		document.getElementById('fb-root').appendChild(e);
	}());
</script>	</p>
<p>Clica aí em like, e depois que você efetivamente compartilhar, vai dar um alert de callback, obviamente poderia ser qualquer outra coisa, como usar uma tag do analytics, ou dar show/hide numa div, sei lá.</p>
<h2>Callback no Tweet Button</h2>
<p>Tem um detalhe só, tem um script que necessariamente tem que estar dentro da tag &lt;head&gt; :</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script src=&quot;http://platform.twitter.com/anywhere.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>No demais, sem segredo, onde você for colocar o tweet button é só colocar o seguinte html</p>
<pre class="brush: xml; title: ; notranslate">
&lt;a href=&quot;https://twitter.com/share&quot; class=&quot;twitter-share-button&quot; data-count=&quot;vertical&quot; data-via=&quot;maktuiu&quot;&gt;Tweet&lt;/a&gt;

&lt;script type=&quot;text/javascript&quot; src=&quot;http://platform.twitter.com/widgets.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
	twttr.events.bind('tweet', function(event,user) {
		alert('Você twittou pelo tweet button =)');
	});
&lt;/script&gt;
</pre>
<p>E vai funcionar assim:</p>
<p><a href="https://twitter.com/share" class="twitter-share-button" data-count="vertical" data-via="maktuiu">Tweet</a></p>
<p><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script><br />
<script type="text/javascript">
	twttr.events.bind('tweet', function(event,user) {
		alert('Você twittou pelo tweet button =)');
	});
</script> </p>
<p>Testa aí, é a mesma coisa do Like button.</p>
<h2>Plus One Button</h2>
<p>Sem frescuras, simples e além de saber se alguém clicou no +1, dá pra saber se alguém desclicou depois:</p>
<p>O código é este:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;g:plusone annotation=&quot;inline&quot; callback=&quot;PlusOneCallBack&quot;&gt;&lt;/g:plusone&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
	function PlusOneCallBack(obj){
		if(obj.state=='on'){
			alert('você clicou no +1');
		} else {
			alert('você desclicou no +1');
		}
	}
	(function() {
		var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
		po.src = 'https://apis.google.com/js/plusone.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
	})();
&lt;/script&gt;
</pre>
<p>E vai funcionar assim:</p>
<p><g:plusone annotation="inline" callback="PlusOneCallBack"></g:plusone></p>
<p><script type="text/javascript">
	function PlusOneCallBack(obj){
		if(obj.state=='on'){
			alert('você clicou no +1');
		} else {
			alert('você desclicou no +1');
		}
	}
	(function() {
		var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
		po.src = 'https://apis.google.com/js/plusone.js';
		var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
	})();
</script></p>
<h2>FAQ</h2>
<ul>
<li>
Não dá pra saber, nos 3 casos, dados da pessoa que compartilhou (como foto, nome, perfil, senha do banco, etc), pra acessar dados do perfil é necessário pedir permissão no applicativo, e aí é obrigado a passar por aquele pedágio &#8220;O aplicativo tal que saber suas informações de blablabla&#8221;. Não é essa a intenção de quem quer simplemente compartilhar um conteúdo.</li>
<li>Pro orkut, naquele &#8220;Promova&#8221; não sei se tem algo do tipo ou não, e também não estou muito interessado em ir atrás.</li>
</ul>
<p>Bom, é isso.</p>
<p>[]s,</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/adicionando-callbacks-por-javascript-no-tweet-button-like-button-1-button/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 2.415 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-02-04 23:28:09 -->

