<?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/"
	>

<channel>
	<title>Leandro Ferreira</title>
	<atom:link href="http://leandroferreira.net/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://leandroferreira.net/blog</link>
	<description>flash geek</description>
	<pubDate>Mon, 01 Jun 2009 18:36:18 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>novos releases da Adobe para plataforma Flash</title>
		<link>http://leandroferreira.net/blog/adobe/novos-releases-da-adobe-para-plataforma-flash/</link>
		<comments>http://leandroferreira.net/blog/adobe/novos-releases-da-adobe-para-plataforma-flash/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 18:36:18 +0000</pubDate>
		<dc:creator>Leandro Ferreira</dc:creator>
		
		<category><![CDATA[adobe]]></category>

		<guid isPermaLink="false">http://leandroferreira.net/blog/?p=167</guid>
		<description><![CDATA[Flash Builder 4 (Antigo Flex Builder), Flash Catalyst (codinome Thermo) e o Flex 4 Framework foram lançados pela Adobe em versão beta.
Uma das discussões dentro do assunto é a já anunciada mudança de nomes: Sempre houve uma grande &#8220;crise de identidade&#8221; quanto a como os desenvolvedores se chamavam: Por um lado, programadores não queriam seu [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://labs.adobe.com/technologies/flashbuilder4/">Flash Builder 4 (Antigo Flex Builder), <a href="http://labs.adobe.com/technologies/flashcatalyst/">Flash Catalyst</a> (codinome Thermo) e o <a href="http://labs.adobe.com/technologies/flex/">Flex 4 Framework</a> foram lançados pela Adobe em versão beta.</p>
<p>Uma das discussões dentro do assunto é a já anunciada mudança de nomes: Sempre houve uma grande &#8220;crise de identidade&#8221; quanto a como os desenvolvedores se chamavam: Por um lado, programadores não queriam seu nome relacionado a IDE do Flash, que pode trazer uma idéia de amadorismo (de quando se programava na timeline) e remeter a tempos do &#8220;skip intro&#8221;, e por outro lado não queriam ser chamados de Flex developers, já que não faziam arquivos MXML.</p>
<p>A Adobe percebendo essa confusão decidiu colocar ordem na casa e separou ferramenta, framework e plataforma: Assim, uma pessoa pode sem confusões falar que programa no <a href="http://labs.adobe.com/technologies/flashbuilder4">Flash Builder</a>(ferramenta), usando o <a href="http://labs.adobe.com/technologies/flex4sdk/">Flex SDK</a> em as-only(framework) e exportando arquivos .swf pra <a href="http://www.adobe.com/flashplatform/">Flash Platform</a>, ou que programa no <a href="http://www.flashdevelop.org/">FlashDevelop</a>, compilando com o <a href="http://www.adobe.com/products/flash/">Flash Professional</a>, exportando para o <a href="http://www.adobe.com/products/air/">AIR</a> (correspondente do Flash Platform para desktop).</p>
<p>Eu fiquei satisfeito com a mudança (a não ser talvez pelo nome Flex SDK, que não mudou por falta de necessidade), mas vejamos como o mercado reage a essa mudança.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandroferreira.net/blog/adobe/novos-releases-da-adobe-para-plataforma-flash/feed/</wfw:commentRss>
		</item>
		<item>
		<title>FaceVR</title>
		<link>http://leandroferreira.net/blog/study/facevr/</link>
		<comments>http://leandroferreira.net/blog/study/facevr/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 04:40:09 +0000</pubDate>
		<dc:creator>Leandro Ferreira</dc:creator>
		
		<category><![CDATA[code]]></category>

		<category><![CDATA[study]]></category>

		<guid isPermaLink="false">http://leandroferreira.net/blog/?p=160</guid>
		<description><![CDATA[Post rápido pra um teste rápido&#8230;
Há algumas semanas estava procurando um meio rápido de fazer detecção facial no flash, pra tentar fazer uma espécie de realidade virtual, como a do Johnny Lee e seu wiimote:

Minha primeira idéia foi tentar portar alguma em C com o Alchemy&#8230; sem sucesso, já que o Alchemy não compila arquivos [...]]]></description>
			<content:encoded><![CDATA[<p>Post rápido pra um teste rápido&#8230;</p>
<p>Há algumas semanas estava procurando um meio rápido de fazer detecção facial no flash, pra tentar fazer uma espécie de realidade virtual, como a do Johnny Lee e seu wiimote:<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Jd3-eiid-Uw&#038;hl=pt-br&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Jd3-eiid-Uw&#038;hl=pt-br&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>Minha primeira idéia foi tentar portar alguma em C com o <a href="http://labs.adobe.com/technologies/alchemy/">Alchemy</a>&#8230; sem sucesso, já que o Alchemy não compila arquivos .dll e não encontrei nenhum programa opensource pequeno (<a href="http://opencv.willowgarage.com/wiki/">OpenCV</a> é muito grande e eu tenho muito pouco conhecimento em C).</p>
<p>Bem, com uma certa ajuda do Google, encontrei <a href="http://www.marijnspeelman.nl/blog/2007/06/24/face-detection-using-flash-and-c/">esse post</a>, com uma solução que processa os Bitmaps no servidor e devolve ao Flash via socket. Legal, mas não achei a solução muito elegante, então deixei pra lá.</p>
<p>Mas hoje me mandaram <a href="http://www.squidder.com/2009/02/17/papertweet3d-augmented-reality-t-shirts/">esse link</a> no <a href="http://twitter.com/leandroferreira">twitter</a>, uma coisa levou a outra e encontrei <a href="http://www.squidder.com/2009/02/26/realtime-face-detection-in-flash/">esse post</a>, falando exatamente sobre o que estava procurando:<br />
<object width="400" height="300"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3383559&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=3383559&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="300"></embed></object><br /><a href="http://vimeo.com/3383559">Realtime Face Detection in Flash</a> from <a href="http://vimeo.com/user1348918">squidder</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Em cerca de uma hora, montei um exemplo simples, mas já meio promissor, pra ver como ficaria a performance no flash e o feeling da VR. <a href="http://leandroferreira.net/blog/wp-content/uploads/facevr/">Clique aqui</a> para ver, e <a href="http://leandroferreira.net/blog/wp-content/uploads/facevr/facevr_v0.1.zip">aqui</a> para pegar o source.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandroferreira.net/blog/study/facevr/feed/</wfw:commentRss>
		</item>
		<item>
		<title>[quickpost] forçando um render assíncrono no flash</title>
		<link>http://leandroferreira.net/blog/uncategorized/quickpost-forcando-um-render-assincrono-no-flash/</link>
		<comments>http://leandroferreira.net/blog/uncategorized/quickpost-forcando-um-render-assincrono-no-flash/#comments</comments>
		<pubDate>Mon, 02 Feb 2009 21:08:42 +0000</pubDate>
		<dc:creator>Leandro Ferreira</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://leandroferreira.net/blog/?p=157</guid>
		<description><![CDATA[Muita gente já deve ter tido problemas com o fato do processamento e do render do Player serem assíncronos&#8230;
Como contornar isso então? Bem, chamando um BitmapData.draw() você força a sincronia entre os dois em um elemento.
Vi no http://www.bytearray.org/?p=423
]]></description>
			<content:encoded><![CDATA[<p>Muita gente já deve ter tido problemas com o fato do processamento e do render do Player serem assíncronos&#8230;<br />
Como contornar isso então? Bem, chamando um BitmapData.draw() você força a sincronia entre os dois em um elemento.</p>
<p>Vi no http://www.bytearray.org/?p=423</p>
]]></content:encoded>
			<wfw:commentRss>http://leandroferreira.net/blog/uncategorized/quickpost-forcando-um-render-assincrono-no-flash/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Otimizando suas aplicações - entendendo o GarbageCollector</title>
		<link>http://leandroferreira.net/blog/uncategorized/otimizando-suas-aplicacoes-entendendo-o-garbagecollector/</link>
		<comments>http://leandroferreira.net/blog/uncategorized/otimizando-suas-aplicacoes-entendendo-o-garbagecollector/#comments</comments>
		<pubDate>Tue, 16 Dec 2008 20:49:04 +0000</pubDate>
		<dc:creator>Leandro Ferreira</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://leandroferreira.net/blog/?p=51</guid>
		<description><![CDATA[Muita gente já ouviu afirmações do tipo &#8220;Flash é pesado!&#8221;, sem saber exatamente o porquê. Na maioria das vezes, a culpa é do desenvolvedor que, por não saber como o player funciona e não se preocupar em manter boas práticas de programação, acaba sobrecarregando a RAM e CPU. Tentarei explicar como podemos otimizar nossas aplicações, [...]]]></description>
			<content:encoded><![CDATA[<p>Muita gente já ouviu afirmações do tipo &#8220;Flash é pesado!&#8221;, sem saber exatamente o porquê. Na maioria das vezes, a culpa é do desenvolvedor que, por não saber como o player funciona e não se preocupar em manter boas práticas de programação, acaba sobrecarregando a RAM e CPU. Tentarei explicar como podemos otimizar nossas aplicações, mas antes, vamos entender o que acontece por trás.</p>
<p>Antigamente, o player não tinha o costume de consumir muita RAM, o problema recaía no uso pesado do processador (que melhorou com o Player 10, que começa a usar recursos da placa de vídeo) mas temos uma série de novos recursos (ByteArray, BitmapData&#8230;) que podem consumir muitos megas da memória. Além disso, desde o ActionScript 2 o Garbage Collector (GC) do flash tem dificuldades em manter a RAM limpa, pelo próprio modo como as referências internas são feitas, como explicado pelo Jim Corbett neste vídeo em (25:30):</p>
<p><embed src="http://services.brightcove.com/services/viewer/federated_f8/271534492" bgcolor="#FFFFFF" flashVars="videoId=1564557060&#038;playerId=271534492&#038;viewerSecureGatewayURL=https://console.brightcove.com/services/amfgateway&#038;servicesURL=http://services.brightcove.com/services&#038;cdnURL=http://admin.brightcove.com&#038;domain=embed&#038;autoStart=false&#038;" base="http://admin.brightcove.com" name="flashObj" width="486" height="412" seamlesstabbing="false" type="application/x-shockwave-flash" swLiveConnect="true" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"></embed></p>
<p>Mas afinal, o que é o Garbage Collector e como ele funciona?</p>
<p>O GC é o processo que limpa a sujeira que você deixou pra trás: ele retira da memória objetos que não serão mais usados pela aplicação. E como ele fica sabendo disso? Bem, atualmente isso é feito no flash de duas maneiras distintas: Reference Counting e Mark Sweep.</p>
<p>O mais simples dos métodos, o Reference Counting era usado desde o Actionscript 1.0, e a idéia é bem prática: toda vez que alguém faz referência a um objeto (ou seja, provavelmente será usado), um contador de uso do objeto é acrescido de 1. Toda vez que uma referência é retirada, esse contador é decrescido de 1. Desse modo, quando não há nada fazendo referência ao objeto (o contador voltou a 0), ele é marcado para ser retirado da memória. Exemplo:</p>
<p><code>var obj1:Object = {var1:"oi"}; // contador em 1, o objeto está sendo referenciado por obj1<br />
var obj2:Object = obj1; // contador em 2<br />
delete obj1; // contador em 1, não está mais sendo referenciado por obj1<br />
trace( obj2.var1 ); // retorna "oi". Como pode ver, o objeto e referências a ele são coisas distintas<br />
delete obj2; // contador em 0. aqui o objeto é alvo do GC para remoção</code></p>
<p>Algumas observações:<br />
- Como podem ver, o objeto e a variável que guarda o objeto são coisas distintas. Mesmo se não houver nada fazendo referência a { var1:&#8221;oi&#8221; }, ele não deixa de existir. Por isso a importância do Garbage Collector.<br />
- Quando ninguém mais &#8220;fala sobre&#8221; o objeto (referência a variáveis, escutas de evento, enterFrames&#8230;), é uma justificativa para ele ser jogado fora. Mas podem haver casos onde o objeto é referenciado, mas não é mais usado.</p>
<p>Pense no seguinte cenário: A guarda B, B guarda C e C guarda A. No final das contas, pode ocorrer o caso de nenhum deles ser mais utilizado, mas todos estão sendo referenciados no código, logo não serão retirados da memória. Para corrigir esse problema, outra técnica é utilizada: o Mark Sweep. Nesse método, o flash percorre a partir do root todos os objetos que consegue encontrar, recursivamente, e os marca. Se algum objeto não for marcado, significa que ele não está sendo utilizado. No caso que falei acima, se nem A nem B nem C tiverem uma ligação direta ou indireta com a raiz da aplicação, eles serão removidos da memória.</p>
<p>Note que limpar a memória é um processo lento, que percorre todos os objetos, logo não é acionado com tanta frequência: aproximadamente uma vez a cada 60 segundos ou quando a alocação de memória der um pulo maior que 20% o uso atual (<a href="http://jessewarden.com/2008/11/writing-a-caching-engine-for-flash-player.html">dados não oficiais</a>). De qualquer modo, não é previsível quando um objeto vai ou não ser removido da memória. Note que, enquanto o objeto existir, isso quer dizer que os loops, acessos a arquivos, sons, etc, continuação ser processados, então fica evidente a importância de se saber como manter a memória limpa.</p>
<p>Em meu próximo post tentarei explicar como podemos ajudar o GC do flash em seu trabalho.</p>
<p>referências:<br />
<a title="GC Flush em Flex" href="http://blogs.eyepartner.com/adrian/flex/flex-tip-6-garbage-collection-in-flex/" target="_blank"> http://blogs.eyepartner.com/adrian/flex/flex-tip-6-garbage-collection-in-flex/</a>GC Flush em Flex</p>
<p><a title="gskinner falando sobre o GC" href="http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html" target="_blank"> http://www.adobe.com/devnet/flashplayer/articles/garbage_collection.html</a> <a title="Grant Skinner" href="www.gskinner.com/blog/" target="_blank">gskinner</a> falando sobre o GC</p>
]]></content:encoded>
			<wfw:commentRss>http://leandroferreira.net/blog/uncategorized/otimizando-suas-aplicacoes-entendendo-o-garbagecollector/feed/</wfw:commentRss>
		</item>
		<item>
		<title>terrenos no flash - parte 3</title>
		<link>http://leandroferreira.net/blog/study/terrenos-no-flash-parte-3/</link>
		<comments>http://leandroferreira.net/blog/study/terrenos-no-flash-parte-3/#comments</comments>
		<pubDate>Fri, 14 Nov 2008 18:57:50 +0000</pubDate>
		<dc:creator>Leandro Ferreira</dc:creator>
		
		<category><![CDATA[code]]></category>

		<category><![CDATA[study]]></category>

		<guid isPermaLink="false">http://leandroferreira.net/blog/?p=44</guid>
		<description><![CDATA[Como eu falei, poucas mudanças fazem outra coisa totalmente diferente&#8230; diminuí o n do perlinNoise e deixei a cor da linha variar de acordo com o y:


stage.quality = "medium";
var noise:BitmapData = new BitmapData( 300, 1000 );
noise.perlinNoise( noise.width, noise.height, 2, Math.random() * 256, true, false, 7, true );
var container:Sprite = new Sprite();
container.x = 100;
container.y = 150;
addChild( [...]]]></description>
			<content:encoded><![CDATA[<p>Como eu falei, poucas mudanças fazem outra coisa totalmente diferente&#8230; diminuí o n do perlinNoise e deixei a cor da linha variar de acordo com o y:</p>
<div><object width="500" height="500" data="http://leandroferreira.net/blog/wp-content/uploads/montanhas2.swf" type="application/x-shockwave-flash"><param name="src" value="http://leandroferreira.net/blog/wp-content/uploads/montanhas2.swf" /></object></div>
<p><code><br />
stage.quality = "medium";<br />
var noise:BitmapData = new BitmapData( 300, 1000 );<br />
noise.perlinNoise( noise.width, noise.height, 2, Math.random() * 256, true, false, 7, true );<br />
var container:Sprite = new Sprite();<br />
container.x = 100;<br />
container.y = 150;<br />
addChild( container );</p>
<p>function createLine( bmd:BitmapData ):Sprite {<br />
var line:Sprite = new Sprite();<br />
line.graphics.beginFill( 0xFFFFFF, 1 );<br />
line.graphics.lineStyle( 0, 0x000000, 0 );<br />
line.graphics.lineTo( 0, -( bmd.getPixel( 0, 1 ) &amp; 0xFF ) / 1.7 );<br />
var ratio:Number;<br />
for (var i:uint = 0; i &lt; bmd.width; i +=2) {<br />
ratio = ( bmd.getPixel( i, 1 ) &amp; 0xFF );<br />
line.graphics.lineStyle( 0, rgb2hex( 0, Math.min( ratio * 3 + 102, 255 ), Math.min( ratio * 3 + 102, 255 ) ), 1 );<br />
line.graphics.lineTo( i, -ratio / 2.2 );<br />
}<br />
line.graphics.lineStyle( 0, 0x000000, 0 );<br />
line.graphics.lineTo( i, 0 );<br />
line.graphics.endFill();</p>
<p>return line;<br />
}</p>
<p>var count:uint = 1;<br />
function animate() {<br />
var bmd:BitmapData = new BitmapData(noise.width, 2 );<br />
bmd.copyPixels( noise, new Rectangle( 0, count, noise.width, 2 ), new Point() );<br />
var elm:Sprite = new Sprite();<br />
var line:Sprite = createLine( bmd );<br />
line.x -= line.width / 2;<br />
line.y -= line.height / 2;<br />
elm.addChild( line );<br />
elm.addEventListener( Event.ENTER_FRAME, onLineFrame );<br />
container.addChild( elm );<br />
container.scaleX = container.scaleY = 2;<br />
container.x = 250;<br />
container.y = 350;<br />
count += 5;<br />
if ( count &gt;= noise.height - 1 ) {<br />
count = 1;<br />
}<br />
}<br />
function onLineFrame( e:Event ):void {<br />
var elm:Sprite = e.target as Sprite;<br />
var ratio:Number = elm.scaleY;<br />
ratio -= 0.02;<br />
elm.scaleX = ( ratio / 1.5 ) + 0.5;<br />
elm.scaleY = ratio;<br />
elm.y = -160 * ( 1 - ratio );<br />
elm.alpha = ( ratio * 1.5 ) - 0.5;<br />
if ( ratio &lt;= 0.3 ) {<br />
elm.parent.removeChild( elm );<br />
elm.removeEventListener( Event.ENTER_FRAME, onLineFrame );<br />
}<br />
}<br />
function rgb2hex( r:int, g:int, b:int ):Number<br />
{<br />
return ( r &lt;&lt; 16 ) | ( g &lt;&lt; 8 ) | b;<br />
}<br />
//animate();<br />
setInterval( animate, 10 );<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://leandroferreira.net/blog/study/terrenos-no-flash-parte-3/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Terrenos no Flash - parte 2</title>
		<link>http://leandroferreira.net/blog/code/terrenos-no-flash-2/</link>
		<comments>http://leandroferreira.net/blog/code/terrenos-no-flash-2/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 19:43:24 +0000</pubDate>
		<dc:creator>Leandro Ferreira</dc:creator>
		
		<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://leandroferreira.net/blog/?p=34</guid>
		<description><![CDATA[Continuando a minha idéia, fiz o primeiro teste:

Criei um PerlinNoise estreito e longo, com stitch = true pro final emendar no começo;
Criei um método pra criar uma linha de acordo com um BitmapData de y = 1;
Criei um método pra criar as linhas uma a uma a aprtir de &#8220;fatias&#8221; do PerlinNoise;
Em cada linha, fiz [...]]]></description>
			<content:encoded><![CDATA[<p>Continuando a <a title="Montanhas no flash" href="http://leandroferreira.net/blog/code/terrenos-no-flash/" target="_blank">minha idéia</a>, fiz o primeiro teste:</p>
<ol>
<li>Criei um PerlinNoise estreito e longo, com stitch = true pro final emendar no começo;</li>
<li>Criei um método pra criar uma linha de acordo com um BitmapData de y = 1;</li>
<li>Criei um método pra criar as linhas uma a uma a aprtir de &#8220;fatias&#8221; do PerlinNoise;</li>
<li>Em cada linha, fiz um método pra montar o &#8220;3D&#8221;, diminuindo, movendo e aplicando alpha.</li>
</ol>
<div>Com isso obtive esse efeito:</div>
<div><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="500" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://leandroferreira.net/blog/wp-content/uploads/montanhas1.swf" /><embed type="application/x-shockwave-flash" width="500" height="500" src="http://leandroferreira.net/blog/wp-content/uploads/montanhas1.swf"></embed></object></div>
<div>O legal é que alterando poucas linhas eu tenho os mais variados efeitos, como textura, ondas ou montanhas, altas ou baixas.</div>
<div>Agora vou fazer uns testes pra deixar visualmente mais interessante e <strong>tentar </strong>deixar mais leve. Depois disso, tô pensando em criar realmente em 3D, como na <a title="Animated Fractal Montain" href="http://upload.wikimedia.org/wikipedia/commons/6/6d/Animated_fractal_mountain.gif" target="_blank">figura</a> do outro post.</div>
<div>Se alguém quiser fazer seus testes, aqui está o código ( cuidado, código porco ):</div>
<div>
<code><br />
stage.quality = "medium"; </p>
<p>var noise:BitmapData = new BitmapData( 300, 800 );<br />
noise.perlinNoise( noise.width, noise.height, 7, Math.random() * 256, true, false, 7, true );<br />
var container:Sprite = new Sprite();<br />
container.x = 100;<br />
container.y = 150;<br />
addChild( container );</p>
<p>function createLine( bmd:BitmapData ):Sprite<br />
{<br />
var line:Sprite = new Sprite();<br />
line.graphics.beginFill( 0xFFFFFF, 1 );<br />
line.graphics.lineStyle( 0, 0x000000, 0 );<br />
line.graphics.lineTo( 0, -( bmd.getPixel( 0, 1 ) &#038; 0xFF ) / 1.7 );<br />
line.graphics.lineStyle( 0, 0x000000, 0.2 );<br />
for( var i:uint = 0; i < bmd.width; i +=5 )<br />
{<br />
line.graphics.lineTo( i, -( bmd.getPixel( i, 1 ) &#038; 0xFF ) / 1.7 );<br />
}<br />
line.graphics.lineStyle( 0, 0x000000, 0 );<br />
line.graphics.lineTo( i, 0 );<br />
line.graphics.endFill();</p>
<p>return line;<br />
}</p>
<p>var count:uint = 1;<br />
function animate()<br />
{<br />
var bmd:BitmapData = new BitmapData(noise.width, 2 );<br />
bmd.copyPixels( noise, new Rectangle( 0, count, noise.width, 2 ), new Point() );<br />
var elm:Sprite = new Sprite();<br />
var line:Sprite = createLine( bmd );<br />
line.x -= line.width / 2;<br />
line.y -= line.height / 2;<br />
elm.addChild( line );<br />
elm.addEventListener( Event.ENTER_FRAME, onLineFrame );<br />
container.addChild( elm );<br />
container.scaleX = container.scaleY = 2;<br />
container.x = 250;<br />
container.y = 350;<br />
count += 5;<br />
if( count >= noise.height - 1 ) count = 1;<br />
}<br />
function onLineFrame( e:Event ):void<br />
{<br />
var elm:Sprite = e.target as Sprite;<br />
var ratio:Number = elm.scaleY;<br />
ratio -= 0.01;<br />
elm.scaleX = ( ratio / 1.5 ) + 0.5;<br />
elm.scaleY = ratio;<br />
elm.y = -160 * ( 1 - ratio );<br />
elm.alpha = ( ratio * 1.5 ) - 0.5;<br />
if( ratio <= 0.3 )<br />
{<br />
elm.parent.removeChild( elm );<br />
elm.removeEventListener( Event.ENTER_FRAME, onLineFrame );<br />
}<br />
}<br />
//animate();<br />
setInterval( animate, 10 );<br />
</code>
</div>
]]></content:encoded>
			<wfw:commentRss>http://leandroferreira.net/blog/code/terrenos-no-flash-2/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Quanto ao tema</title>
		<link>http://leandroferreira.net/blog/meta/quanto-ao-tema/</link>
		<comments>http://leandroferreira.net/blog/meta/quanto-ao-tema/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 01:26:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[meta]]></category>

		<category><![CDATA[procrastination]]></category>

		<guid isPermaLink="false">http://leandroferreira.net/blog/?p=32</guid>
		<description><![CDATA[Depois eu arrumo, tá bom demais.
]]></description>
			<content:encoded><![CDATA[<p>Depois eu arrumo, tá bom demais.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandroferreira.net/blog/meta/quanto-ao-tema/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Terrenos no Flash</title>
		<link>http://leandroferreira.net/blog/code/terrenos-no-flash/</link>
		<comments>http://leandroferreira.net/blog/code/terrenos-no-flash/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 17:05:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[code]]></category>

		<category><![CDATA[3D]]></category>

		<category><![CDATA[actionscript]]></category>

		<category><![CDATA[drawing]]></category>

		<category><![CDATA[flash]]></category>

		<category><![CDATA[new]]></category>

		<guid isPermaLink="false">http://leandroferreira.net/blog/?p=18</guid>
		<description><![CDATA[Vendo o site do BIT-101, me empolguei nos testes com o Flash 10: fiz uns experimentos com simulação de terreno com pontos e PerlinNoise, mas parei por aí. O que eu quero fazer agora é isso:
Terrenos fractais. A idéia na minha cabeça é algo tipo o Google Maps, onde o detalhamento do terreno vai aparecendo [...]]]></description>
			<content:encoded><![CDATA[<p>Vendo o site do <a href="http://www.artfromcode.com">BIT-101</a>, me empolguei nos testes com o Flash 10: fiz uns experimentos com simulação de terreno com pontos e PerlinNoise, mas parei por aí. O que eu quero fazer agora é isso:<img title="fractal terrain" src="http://upload.wikimedia.org/wikipedia/commons/6/6d/Animated_fractal_mountain.gif" alt="fractal terrain" width="446" height="218" /><br />
Terrenos fractais. A idéia na minha cabeça é algo tipo o Google Maps, onde o detalhamento do terreno vai aparecendo com o zoom, ficando leve, ou talvez uma idéia de &#8216;voando&#8217; por um terreno, e criando ele randomicamente em runtime. Vejamos o que sai.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandroferreira.net/blog/code/terrenos-no-flash/feed/</wfw:commentRss>
		</item>
		<item>
		<title>desenrolando</title>
		<link>http://leandroferreira.net/blog/meta/14/</link>
		<comments>http://leandroferreira.net/blog/meta/14/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 17:04:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[meta]]></category>

		<category><![CDATA[blog]]></category>

		<category><![CDATA[procrastination]]></category>

		<guid isPermaLink="false">http://leandroferreira.net/blog/?p=14</guid>
		<description><![CDATA[tá, vou tentar desenrolar isso aqui: vai funcionar como o tumblr, com posts rápidos. Tomara.
]]></description>
			<content:encoded><![CDATA[<p>tá, vou tentar desenrolar isso aqui: vai funcionar como o tumblr, com posts rápidos. Tomara.</p>
]]></content:encoded>
			<wfw:commentRss>http://leandroferreira.net/blog/meta/14/feed/</wfw:commentRss>
		</item>
		<item>
		<title>matéria: Novas Interações e o Papel do Designer</title>
		<link>http://leandroferreira.net/blog/design/materia-novas-interacoes-e-o-papel-do-designer/</link>
		<comments>http://leandroferreira.net/blog/design/materia-novas-interacoes-e-o-papel-do-designer/#comments</comments>
		<pubDate>Wed, 14 Nov 2007 03:39:21 +0000</pubDate>
		<dc:creator>Leandro Ferreira</dc:creator>
		
		<category><![CDATA[design]]></category>

		<category><![CDATA[innovation]]></category>

		<category><![CDATA[study]]></category>

		<category><![CDATA[UnB]]></category>

		<guid isPermaLink="false">http://leandroferreira.net/blog/uncategorized/materia-novas-interacoes-e-o-papel-do-designer/</guid>
		<description><![CDATA[Abaixo o rascunho de uma matéria que estou escrevendo para a -ainda- não produzida revista de design da UnB, chamada Aspas.
O que eu quero colocando isso aqui? Oras, que vocês possam me dizer o que está errado, o que é besteira e como melhorar.
Novas Interações e o Papel do Designer
Alguém que passasse cinco anos dormindo [...]]]></description>
			<content:encoded><![CDATA[<p>Abaixo o rascunho de uma matéria que estou escrevendo para a -ainda- não produzida revista de design da UnB, chamada Aspas.</p>
<p>O que eu quero colocando isso aqui? Oras, que vocês possam me dizer o que está errado, o que é besteira e como melhorar.</p>
<blockquote><p>Novas Interações e o Papel do Designer</p>
<p>Alguém que passasse cinco anos dormindo acordaria em outro mundo: celulares sem teclado, videogames com reconhecimento de movimento, celebridades fazendo música movendo peças em uma grande mesa digital&#8230; Uma revolução em questão de interação que está se instalando com velocidade assustadora e precisa ser entendida por nós, designers.</p>
<p>Os exemplos acima são já cotidianos: tratam-se do iPhone, da Apple, o Nintendo Wii e o Reactable, usado pela cantora islandesa Björk. E o que esses produtos têm em comum? A primeira conclusão lógica seria dizer que por parte de hardware uma maior liberdade é dada ao usuário: a morte dos botões e mouse e o aparecimento de novos meios de se interagir. Mas essa é só a ponta do iceberg.</p>
<p>Não que tudo isso não seja novidade, mas inovações só são digeridas pelo mercado se o mesmo estiver preparado pra isso: nada de novo costuma ser visto por bons olhos se estiver distante demais da realidade, senão assusta. O que está acontecendo, ao contrário, é algo que a massa consumidora está mais que preparada pra entender.</p>
<p>Atualmente, temos consumidores com um perfil muito adaptável a novidades. Melhor que isso, temos pessoas ávidas pelo novo, pelo diferente, evolução de um modelo de consumo que trouxe à tona os chamados prosumers, os que querem algo exclusivo e que os define como ser. Além disso, temos uma série de tecnologias que servem de base para que o usuário esteja pronto para interagir com essas novas interfaces. A internet, por exemplo, trouxe algumas metáforas do real - como páginas, botões, formulários - como tentativa de criar uma interação fluida por para o usuário, mas está criando uma identidade própria, principalmente quando tenta subverter a linearidade das páginas estáticas. A adaptação que a tecnologia Flash trouxe quando foi introduzida na internet se assemelha ao que está sendo assimilado agora com telas multi-touch e mecanismos sensíveis ao movimento corporal, especialmente em termos de liberdade de interação. Oras, a tela sensível ao toque existe desde 1971, mas está se tornando popular apenas nos últimos anos, isto é um claro sinal de que o momento é propício para explorar essas novidades.</p>
<p>Um ótimo exemplo de novidade é o iPhone, o telefone da Apple. Antes de mais nada, a Apple sempre foi uma empresa aberta a esse tipo de novidade, do mouse ao &#8220;click wheel&#8221;, espécie de círculo sensível ao toque do Ipod. Pois bem. Ao se ver o iPhone pela primeira vez, parece que falta algo: é uma grande tela e um botão logo abaixo. Pois esta tela é multi-touch, e toda interação se dá pelo toque de seus dedos: para destravar o aparelho, por exemplo, tudo o que se deve fazer é deslizar uma espécie de barra na tela. E todo o resto é extremamente intuitivo: para girar uma imagem dentro do iPhone, você faz o movimento de giro com dois dedos, muito próximo do que faria com uma imagem real em cima de uma mesa. Para ampliar a imagem, também com dois dedos o que se faz é distanciar um do outro, como se estivesse abrindo um espaço na imagem. Muitas possibilidades, mas pouca exploração de algo que seja distante do real.</p>
<p>Outro exemplo citado foi o Wii, console da Nintendo: neste caso, a interação se dá pelo controle, que reconhece seu movimento nas três dimensões. Isto quer dizer que, ao invés de apertar um botão para pular, por exemplo, você faz o próprio movimento para pular. Esse tipo de movimento o usuário fazia sem perceber nos consoles antigos. Em um jogo de corrida, por exemplo, a tendência era mover o controle e o próprio corpo de acordo com o carro. Outro modo de se interagir, e outro reflexo do real.</p>
<p>Já com o Reactable, melhor definido como um sintetizador touchscreen, explora os recursos que a tecnologia oferece, dando ao usuário um novo repertório dentro da mesma tecnologia. Trata-se de uma espécie de mesa sintetizadora onde um ou mais usuários manipulam artefatos(objetos reais) que são interpretados pela mesa de acordo com o tipo de artefato, posição e rotação. Estes, por sua vez, interagem entre si, dependendo de sua função: um gera uma nota com frequência específica, outro pode, por exemplo, alterar a batida(BPM), enquanto um terceiro cria uma distorção senoidal, tudo passível de mudança de acordo com sua distância do centro da mesa e um do outro, face dos objetos, além de várias configurações feitas com as próprias mãos -a mesa se ilumina, criando todo o ambiente, com ondas e botões.</p>
<p>Como pode-se perceber, a tecnologia em si não é algo interessante ao usuário. O importante, como sempre, são os possíveis usos da tecnologia. E é trabalhos de nós, projetistas, criar essas interações, explorar o que há de novo para tornar a experiência inovadora, útil, agradável e intuitiva.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://leandroferreira.net/blog/design/materia-novas-interacoes-e-o-papel-do-designer/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
