<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7501760480635652155</id><updated>2011-11-27T23:47:49.227-02:00</updated><category term='Fluorine'/><category term='FlashPlayer'/><category term='FrameLess'/><category term='Caurina'/><category term='Studio'/><category term='ByteArray'/><category term='BSoares'/><category term='RIA'/><category term='ASP.NET'/><category term='MAX'/><category term='StageVideo'/><category term='Flash'/><category term='Electronics'/><category term='Arduino'/><category term='Bitshift'/><category term='video'/><category term='Matemática'/><category term='performance'/><category term='JSON'/><category term='ActionScript 4.0'/><category term='Flickr-API'/><category term='AMFPHP'/><category term='Sneaks'/><category term='Adobe'/><category term='stage'/><category term='Mobile'/><category term='Sites'/><category term='FlashPlayer10'/><category term='silverlight'/><category term='AIR'/><category term='Experiments'/><category term='FabioTNT'/><category term='MP3'/><category term='JPGEncoder'/><category term='Bom senso'/><category term='RegEx'/><category term='Bitwise'/><category term='Projetos'/><category term='Util'/><category term='Nomenclatura'/><category term='Google'/><category term='OpenSource'/><category term='Serialproxy'/><category term='C#'/><category term='PHP'/><category term='meta'/><category term='Remoting'/><category term='Música'/><category term='Classes'/><category term='ActionScript 3.0'/><category term='off-topic'/><category term='Google Analytics'/><category term='Diesel'/><category term='TimeLine'/><category term='Sound'/><category term='Novidades'/><category term='microsoft'/><category term='Amigos'/><category term='Tipagem'/><category term='Inicio'/><category term='CS4'/><category term='AMF'/><title type='text'>FlashFrameLess - Porque ActionScript é melhor e mais leve</title><subtitle type='html'>O titulo já fala tudo....Enfim, sempre que sobrar um tempinho aqui no Studio postarei dicas, truques e materias sobre programação em AS e algumas vezes interagindo com outras linguagens. Só! :-) ... Abraços!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-4855056158221741417</id><published>2010-11-28T00:09:00.007-02:00</published><updated>2010-11-28T00:21:54.292-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='video'/><category scheme='http://www.blogger.com/atom/ns#' term='StageVideo'/><category scheme='http://www.blogger.com/atom/ns#' term='Sneaks'/><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='stage'/><category scheme='http://www.blogger.com/atom/ns#' term='MAX'/><category scheme='http://www.blogger.com/atom/ns#' term='FlashPlayer'/><title type='text'>StageVideo</title><content type='html'>&lt;div&gt;Foi apresentado no Max Sneaks 2010 pelo saudoso Tinic Uro, um dos muitos melhoramentos de performances que estão sendo implementados no Flash Player. Vale a pena dar uma olhada e ficar impressionado. Isso vai melhorar e muito nossa vida na hora de criar um site com BG em vídeo, coisa que tem se tornado bastante comum.&lt;/div&gt;&lt;br /&gt;&lt;object width="465" height="286"&gt;&lt;param name="movie" value="http://www.youtube.com/v/geK7geL3I40?fs=1&amp;amp;hl=en_US&amp;amp;color1=0x5d1719&amp;amp;color2=0xcd311b"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/geK7geL3I40?fs=1&amp;amp;hl=en_US&amp;amp;color1=0x5d1719&amp;amp;color2=0xcd311b" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="465" height="286"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-4855056158221741417?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/4855056158221741417/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=4855056158221741417' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/4855056158221741417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/4855056158221741417'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2010/11/stagevideo.html' title='StageVideo'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-4546269601196571731</id><published>2009-06-07T22:41:00.004-03:00</published><updated>2009-06-07T22:57:46.195-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BSoares'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Bitshift'/><category scheme='http://www.blogger.com/atom/ns#' term='Matemática'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='Bitwise'/><title type='text'>Operações binárias</title><content type='html'>Ultimamente tenho me deparado com muitos trechos de códigos que utilizam operações binárias, como chaveamento de multiplexador, extração de RGB a partir de um inteiro ou hexadecimal, bitshift para controlar LED Matrix, etc... E finalmente dei aquela estuda, agora vai ai um post sobre o que resultou o estudo.&lt;br /&gt;&lt;br /&gt;Obs.: Os trechos de códigos deste post foram escritos em ActionScript, mas pode ser aplicado a C, C++, Java, Processing, PHP, entre outras linguagens.&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;br /&gt;• &lt;a href="#introducao"&gt;Introdução&lt;/a&gt;&lt;br /&gt;• Bit Shift&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;• &lt;a href="#bitwise-right-shift"&gt;Operador &gt;&gt; (bitwise right shift)&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;• &lt;a href="#bitwise-left-shift"&gt;Operador &lt;&lt; (bitwise left shift)&lt;/a&gt;&lt;br /&gt;• Operações Bitwise&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;• &lt;a href="#bitwise-and"&gt;Operador &amp;#038; (bitwise AND)&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;• &lt;a href="#bitwise-or"&gt;Operador | (bitwise OR)&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;• &lt;a href="#bitwise-xor"&gt;Operador ^ (bitwise XOR)&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;• &lt;a href="#bitwise-not"&gt;Operador ~ (bitwise NOT)&lt;/a&gt;&lt;br /&gt;• Exemplos&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;• &lt;a href="#extract-rgb"&gt;Extraindo o RGB de uma cor&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;• &lt;a href="#multiplexer-4051"&gt;Chaveando multiplexador 4051&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;a name="introducao"&gt;&lt;strong&gt;Introdução&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Um operador binário, como o nome sugere, é um operador que trabalha com a representação binária do número, e como normalmente não sabemos a representação binária dos números de cabeça, vamos utilizar a tabela abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"&gt; -----------------------&lt;br /&gt;|      BIN |  DEC | HEX |&lt;br /&gt;|-----------------------|&lt;br /&gt;|        1 |    1 |   1 |&lt;br /&gt;|       10 |    2 |   2 |&lt;br /&gt;|       11 |    3 |   3 |&lt;br /&gt;|      100 |    4 |   4 |&lt;br /&gt;|      101 |    5 |   5 |&lt;br /&gt;|      110 |    6 |   6 |&lt;br /&gt;|      111 |    7 |   7 |&lt;br /&gt;|     1000 |    8 |   8 |&lt;br /&gt;|     1001 |    9 |   9 |&lt;br /&gt;|     1010 |   10 |   A |&lt;br /&gt;|     1011 |   11 |   B |&lt;br /&gt;|     1100 |   12 |   C |&lt;br /&gt;|     1101 |   13 |   D |&lt;br /&gt;|     1110 |   14 |   E |&lt;br /&gt;|     1111 |   15 |   F |&lt;br /&gt;|    10000 |   16 |  10 |&lt;br /&gt;|    10001 |   17 |  11 |&lt;br /&gt;|    10010 |   18 |  12 |&lt;br /&gt;|    10011 |   19 |  13 |&lt;br /&gt;|    10100 |   20 |  14 |&lt;br /&gt;|-----------------------|&lt;br /&gt;| 11111111 |  255 |  FF |&lt;br /&gt; ----------------------- &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;A tabela lista os números de 1 à 20 e 255 em três bases diferentes:&lt;br /&gt;• Binário (BIN)&lt;br /&gt;• Decimal (DEC)&lt;br /&gt;• Hexadecimal (HEX)&lt;br /&gt;&lt;br /&gt;Analisando a tabela podemos concluir que 3d = 11b, 19d = 10011b (as letras d e b significam decimal e binário respectivamente). Lembrando que pode ser utilizada uma calculadora que opere em binário (como a do windows) ou uma alternativa de conversão de bases on-line como está: &lt;a href="http://calculadoraonline.com.br/view/conversao-binario.php" target="_blank"&gt;"Conversão de número binário"&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Então vamos &lt;strong&gt;deslocar&lt;/strong&gt;, &lt;strong&gt;escorregar&lt;/strong&gt;, &lt;strong&gt;escovar&lt;/strong&gt; alguns bits para entender melhor.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;hr&gt;&lt;a name="bitwise-right-shift"&gt;&lt;strong&gt;Operador &gt;&gt;&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Deslocamento de bits para a direita (bitwise right shift)&lt;br /&gt;&lt;code lang="actionscript3"&gt;trace(8 &gt;&gt; 1); // 4&lt;br /&gt;trace(8 &gt;&gt; 2); // 2&lt;br /&gt;trace(8 &gt;&gt; 3); // 1&lt;br /&gt;trace(8 &gt;&gt; 4); // 0&lt;/code&gt;&lt;br /&gt;Olhando os números na base decimal faz pouco sentido, ou talvez nenhum sentido, então passamos os números corretos para a base binária e tudo fica mais claro:&lt;br /&gt;8d = 1000b (8 decimal é igual a 1000 em binário), então:&lt;br /&gt;1000b &gt;&gt; 1 (deslocando uma casa para direita) temos o número:&lt;br /&gt;100b que em decimal é 4(dê uma olhada na tabela).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Agora ficou fácil não? Vamos deslocar o número 13:&lt;br /&gt;&lt;code lang="actionscript3"&gt;trace(13 &gt;&gt; 1); // 6&lt;/code&gt;&lt;br /&gt;13 em binário é 1101, deslocando uma casa para a direita (ou removendo 1 bit), fica 110, e 110 é igual a 6 em decimal.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;hr&gt;&lt;a name="bitwise-left-shift"&gt;&lt;strong&gt;Operador &lt;&lt;&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Deslocamento de bits para a esquerda (bitwise left shift)&lt;br /&gt;&lt;code lang="actionscript3"&gt;trace(2 &lt;&lt; 1); // 4&lt;br /&gt;trace(2 &lt;&lt; 2); // 8&lt;br /&gt;trace(2 &lt;&lt; 3); // 16&lt;/code&gt;&lt;br /&gt;Agora é só seguir o mesmo raciocino já utilizando anteriormente.&lt;br /&gt;Se 2 em base binária é igual a 10 e deslocarmos um bit para esquerda, vamos ganhar mais um zero, ficando com 100 que é igual a 4 em decimal.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;hr&gt;&lt;a name="bitwise-and"&gt;&lt;strong&gt;Operador &amp;#038;&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;AND binário (bitwise AND)&lt;br /&gt;O operador &amp;#038; compara bit a bit os números a sua direita e esquerda, por exemplo o resultado de 10 &amp;#038; 11 é 10:&lt;/p&gt;&lt;br /&gt;&lt;pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"&gt;&lt;br /&gt;  1010&lt;br /&gt;&amp;#038; 1011&lt;br /&gt;------&lt;br /&gt;  1010&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;A comparação bit-a-bit somente retorna True (1) quando os bits comparados são iguais a 1, caso contrário retorna False (0). Formando assim um novo número.&lt;br /&gt;Mais alguns exemplos para fortalecer:&lt;/p&gt;&lt;br /&gt;&lt;pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"&gt;&lt;br /&gt;|14 &amp;#038;  9|13 &amp;#038; 11|20 &amp;#038;  9|14 &amp;#038; 10|89 &amp;#038;  112|45  &amp;#038;  77|255  &amp;#038;  13|112 &amp;#038;  255|&lt;br /&gt;|       |       |       |       |         |         |          |          |&lt;br /&gt;|  1110 |  1101 |  10100|  1110 |  1011001|   101101|  11111111|   1110000|&lt;br /&gt;|&amp;#038; 1001 |&amp;#038; 1011 |&amp;#038;  1001|&amp;#038; 1010 |&amp;#038; 1110000|&amp;#038; 1001101|&amp;#038;     1101|&amp;#038; 11111111|&lt;br /&gt;|  ---- |  ---- |  -----|  ---- |  -------|  -------|  --------|  --------|&lt;br /&gt;|  1000 |  1001 |      0|  1010 |  1010000|     1101|      1101|   1110000|&lt;br /&gt;|    8d |    9d |     0d|   10d |      80d|      13d|       13d|      112d|&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;hr&gt;&lt;a name="bitwise-or"&gt;&lt;strong&gt;Operador |&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;OR binário (bitwise OR)&lt;br /&gt;O operador | tem a mesma função do operador OR comum (||) só que atua bit-a-bit, assim como os outros operadores binários. Vejamos um exemplo:&lt;/p&gt;&lt;br /&gt;&lt;pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"&gt;&lt;br /&gt;  1010&lt;br /&gt;| 1011&lt;br /&gt;------&lt;br /&gt;  1011&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Se um dos bits comparados forem iguais a 1 a expressão retornará 1, caso os dois bits comparados forem iguais a 0, a expressão retorna 0. Agora vamos refazer o exemplo anterior trocando apenas o operador &amp;#038; (and binário) por | (or binário):&lt;/p&gt;&lt;br /&gt;&lt;pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"&gt;&lt;br /&gt;|14 |  9|13 | 11|20 |  9|14 | 10|89 |  112|45  |  77|255  |  13|112 |  255|&lt;br /&gt;|       |       |       |       |         |         |          |          |&lt;br /&gt;|  1110 |  1101 |  10100|  1110 |  1011001|   101101|  11111111|   1110000|&lt;br /&gt;|| 1001 || 1011 ||  1001|| 1010 || 1110000|| 1001101||     1101|| 11111111|&lt;br /&gt;|  ---- |  ---- |  -----|  ---- |  -------|  -------|  --------|  --------|&lt;br /&gt;|  1111 |  1111 |  11101|  1110 |  1111001|  1101101|  11111111|  11111111|&lt;br /&gt;|   15d |   15d |    29d|   14d |     121d|     109d|      255d|      255d|&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;hr&gt;&lt;a name="bitwise-xor"&gt;&lt;strong&gt;Operador ^&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;OU exclusivo (bitwise XOR)&lt;br /&gt;A letra X na frente do OR significa Exclusive (Exclusive OR). Isso quer dizer que este operador faz a comparação binária de dois números e resulta os bits que são diferentes. Por exemplos, quais são os bits diferentes entre os números 10 e 11?&lt;/p&gt;&lt;br /&gt;&lt;pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"&gt;&lt;br /&gt;  1010&lt;br /&gt;^ 1011&lt;br /&gt;------&lt;br /&gt;     1&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Vamos novamente trocar o operador do exemplo anterior para analisar os resultados:&lt;/p&gt;&lt;br /&gt;&lt;pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"&gt;&lt;br /&gt;|14 ^  9|13 ^ 11|20 ^  9|14 ^ 10|89 ^  112|45  ^  77|255  ^  13|112 ^  255|&lt;br /&gt;|       |       |       |       |         |         |          |          |&lt;br /&gt;|  1110 |  1101 |  10100|  1110 |  1011001|   101101|  11111111|   1110000|&lt;br /&gt;|^ 1001 |^ 1011 |^  1001|^ 1010 |^ 1110000|^ 1001101|^     1101|^ 11111111|&lt;br /&gt;|  ---- |  ---- |  -----|  ---- |  -------|  -------|  --------|  --------|&lt;br /&gt;|   111 |   110 |  11101|   100 |   101001|  1100000|  11110010|  10001111|&lt;br /&gt;|    7d |    6d |    29d|    4d |      41d|      96d|      242d|      143d|&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;hr&gt;&lt;a name="bitwise-not"&gt;&lt;strong&gt;Operador ~&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Negação (bitwise NOT)&lt;br /&gt;O operador NOT inverte o sinal e complementa em um.&lt;br /&gt;Negando o número 168 (~168) teremos -169.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Alguns exemplos:&lt;br /&gt;&lt;code lang="actionscript3"&gt;trace(~7);   // -8&lt;br /&gt;trace(~-7);  // 6&lt;br /&gt;trace(~14);  // -15&lt;br /&gt;trace(~13);  // -14&lt;br /&gt;trace(~255); // -256&lt;br /&gt;trace(~112); // -113&lt;/code&gt;&lt;/p&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;a name="extract-rgb"&gt;&lt;strong&gt;Extraindo o RGB de uma cor&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;Sabendo que uma cor no formato RGB utiliza dois dígitos hexadecimais para definir quanto existe de Vermelho, Verde e Azul (respectivamente), formando cores como: Vermelho (FF0000), Cinza (C0C0C0), Laranja (FF9900), etc. Temos ai a possibilidade de gerar 16.581.375 de cores com este código, é só fazer a conta para conferir: 255 * 255 * 255 ou FF * FF * FF.&lt;br /&gt;Vamos desmembrar um tom de azul (&lt;strong&gt;&lt;font color="#347BB7"&gt;#347BB7&lt;/font&gt;&lt;/strong&gt;) para saber quanto esta cor tem de Vermelho, Verde e Azul (o valor dos canais RGB).&lt;br /&gt;&lt;br /&gt;&lt;code lang="actionscript3"&gt;// DEC: 3439543&lt;br /&gt;// BIN: 1101000111101110110111&lt;br /&gt;var color:uint = 0x347BB7;&lt;br /&gt;&lt;br /&gt;var r:uint = (color &gt;&gt; 16) &amp; 0xFF;&lt;br /&gt;var g:uint = (color &gt;&gt;  8) &amp; 0xFF;&lt;br /&gt;var b:uint =  color        &amp; 0xFF;&lt;br /&gt;&lt;br /&gt;trace("Red:", r, "Green:", g, "Blue:", b);&lt;br /&gt;// Red: 52 Green: 123 Blue: 183&lt;/code&gt;&lt;br /&gt;Linha 5) Deslocando 16 bits para a direita temos:&lt;br /&gt;&lt;pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"&gt;&lt;br /&gt;  1101000111101110110111 &gt;&gt; 16&lt;br /&gt;=                 110100 (DEC: 52)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Para o caso do vermelho não precisamos continuar a expressão (&amp; 0xFF),&lt;br /&gt;pois deslocando 16 bits para a direita já temos o resultado do vermelho,&lt;br /&gt;mas se a cor estivesse no formato ARGB (Alpha Red Green Blue), seria necessário.&lt;br /&gt;&lt;br /&gt;Linha 6) Deslocando 8 bits para conseguir o verde:&lt;br /&gt;&lt;pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"&gt;&lt;br /&gt;  1101000111101110110111 &gt;&gt; 8&lt;br /&gt;=         11010001111011 (DEC: 13435)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Só com o valor do deslocamentos não vamos conseguir a cor verde, então utilizamos o&lt;br /&gt;operador &amp; (AND) com o valor 255 (0xFF) para extrair a parte binária que nos interessa:&lt;br /&gt;&lt;pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"&gt;&lt;br /&gt;  11010001111011 (DEC: 13435)&lt;br /&gt;&amp;       11111111 (DEC: 255, HEX: 0xFF)&lt;br /&gt;  --------------&lt;br /&gt;        01111011 (DEC: 123)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Linha 7) Para extrair o azul não precisamos deslocar bits e sim pegar os últimos 8 bits:&lt;br /&gt;&lt;pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"&gt;&lt;br /&gt;  1101000111101110110111&lt;br /&gt;&amp;               11111111 (DEC: 255, HEX: 0xFF)&lt;br /&gt;  ----------------------&lt;br /&gt;                10110111 (DEC: 183)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Agora voltando para o hexadecimal:&lt;br /&gt;&lt;code lang="actionscript3"&gt;var r:uint = 52;&lt;br /&gt;var g:uint = 123;&lt;br /&gt;var b:uint = 183;&lt;br /&gt;var color:uint = (r &lt;&lt; 16) | (g &lt;&lt; 8) | b;&lt;br /&gt;&lt;br /&gt;trace(color.toString(16));&lt;br /&gt;// 347bb7&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Linha 4) Deslocando 16 bits para a esquerda do número 52 (Vermelho):&lt;br /&gt;&lt;pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"&gt;&lt;br /&gt;  110100 &lt;&lt; 16&lt;br /&gt;= 1101000000000000000000&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Deslocando 8 bits para a esquerda do número 123 (Verde):&lt;br /&gt;&lt;pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"&gt;&lt;br /&gt;  1111011 &lt;&lt; 8&lt;br /&gt;= 111101100000000&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Efetuando o OR (|) com o resultado das duas operações ((r &lt;&lt; 16) | (g &lt;&lt; 8)):&lt;br /&gt;&lt;pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"&gt;&lt;br /&gt;  1101000000000000000000&lt;br /&gt;|        111101100000000&lt;br /&gt;  ----------------------&lt;br /&gt;  1101000111101100000000&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Efetuando a última operação, o OR com o Azul (183)&lt;br /&gt;&lt;pre style="font-family: 'Lucida Console', 'Courier New', 'Courier'; font-size: 10px; line-height: 10px;"&gt;&lt;br /&gt;  1101000111101100000000&lt;br /&gt;| 0000000000000010110111&lt;br /&gt;  ----------------------&lt;br /&gt;  1101000111101110110111&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;O resultado agora ficou claro. O número 1101000111101110110111 (binário) é igual a 3439543 (decimal) e 347BB7 (hexadecimal).&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;a name="multiplexer-4051"&gt;&lt;strong&gt;Chaveando multiplexador 4051&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;A tarefa de chavear um Multiplexador / Demultiplexador (MUX / DEMUX) 4051 é muito parecida com a extração dos canais RGB de uma cor. Você só precisa Ligar ou Desligar três pinos de seleção (select pins) para que o circuito interprete o valor gerado e transmita a voltagem da entrada desejada.&lt;br /&gt;Existe um gif animado do &lt;a href="http://www.rogercom.com" target="_blank"&gt;RogerCom&lt;/a&gt; muito didático que demonstra o funcionamento do CI 4051, &lt;a href="http://blog.bsoares.com.br/wp-content/uploads/2009/05/animacd4051b.gif" target="_blank"&gt;gif animado CI 4051 aqui&lt;/a&gt;.&lt;br /&gt;Por exemplo, para ler a entrada 3, precisamos desligar o pino de seleção 0, ligar o 1 e o 2, formando assim o número 011 (binário) que é igual a 3 em decimal. Veja no código (Escrito em Arduino / C++):&lt;br /&gt;&lt;br /&gt;&lt;code lang="c++"&gt;// Entrada desejada&lt;br /&gt;int count = 3;&lt;br /&gt;&lt;br /&gt;// Extração dos bits ativos&lt;br /&gt;byte s0 =  count       &amp; 0x1;&lt;br /&gt;byte s1 = (count &gt;&gt; 1) &amp; 0x1;&lt;br /&gt;byte s2 = (count &gt;&gt; 2) &amp; 0x1;&lt;br /&gt;&lt;br /&gt;// Ligando ou desligando os pinos de seleção&lt;br /&gt;digitalWrite(2, s0);&lt;br /&gt;digitalWrite(3, s1);&lt;br /&gt;digitalWrite(4, s2);&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;hr&gt;&lt;strong&gt;Conteúdo relacionado:&lt;/strong&gt;&lt;br /&gt;• Post original: &lt;a href="http://blog.bsoares.com.br/flash/operacoes-binarias"&gt;http://blog.bsoares.com.br/flash/operacoes-binarias&lt;/a&gt;&lt;br /&gt;• &lt;a href="http://en.wikipedia.org/wiki/Bitwise_operation" target="_blank"&gt;Bitwise operation on Wikipedia&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-4546269601196571731?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/4546269601196571731/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=4546269601196571731' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/4546269601196571731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/4546269601196571731'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2009/06/operacoes-binarias.html' title='Operações binárias'/><author><name>Bruno Soares</name><uri>http://www.blogger.com/profile/08637607007716713955</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp2.blogger.com/_qLU3RxFHN9w/R6SdGMkUCFI/AAAAAAAAAFI/t2GmbwTJSn8/S220/msn.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-5484224785023007374</id><published>2009-04-24T15:17:00.014-03:00</published><updated>2009-04-24T16:01:59.108-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bom senso'/><category scheme='http://www.blogger.com/atom/ns#' term='FabioTNT'/><category scheme='http://www.blogger.com/atom/ns#' term='Nomenclatura'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='Util'/><category scheme='http://www.blogger.com/atom/ns#' term='Amigos'/><title type='text'>Boas práticas.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_uAsJb_LXDmg/SfIEorkpG6I/AAAAAAAAAFM/y6qXzlgsFck/s1600-h/Picture+1.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 276px; height: 209px;" src="http://4.bp.blogspot.com/_uAsJb_LXDmg/SfIEorkpG6I/AAAAAAAAAFM/y6qXzlgsFck/s320/Picture+1.png" alt="" id="BLOGGER_PHOTO_ID_5328326406070410146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;Estou ensaiando de postar aqui algo sobre boas prática a tempos, foi uma das primeiras ideias que tive, pois odeio quando pego um código de algum dev que nem identar o código identa. Enfim, até hoje, NADA. Eu com minha correria diária nunca consegui juntar tudo e postar aqui, hoje falando com o &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://blog.bsoares.com.br/"&gt;BSoares&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;, ele mencionou um &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions"&gt;link&lt;/a&gt;&lt;span style="font-family:verdana;"&gt; de boas práticas, imensooo e muito útil, em 5 min vi que tenho mais a aprender sobre boas práticas do que imaginava, isso por que eu idento meu código hein! haha!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Divirtam-se:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" href="http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions"&gt;http://opensource.adobe.com/wiki/display/flexsdk/Coding+Conventions&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;E aqui, para quem não sabe o que é identar ;-)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" href="http://pt.wikipedia.org/wiki/Indenta%C3%A7%C3%A3o"&gt;http://pt.wikipedia.org/wiki/Indenta%C3%A7%C3%A3o&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);font-family:verdana;font-size:100%;"  &gt;Update:&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Conversando com o &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://blog.devlab.com.br/"&gt;Cássio&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;, acabei conhecendo o blog dele e vendo que ele também postou algo sobre boas práticas. :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a style="font-family: verdana;" href="http://blog.devlab.com.br/post/85041607/desenvolvimento-flash-voc-est-fazendo-tudo-errado"&gt;http://blog.devlab.com.br/post/85041607/desenvolvimento-flash-voc-est-fazendo-tudo-errado&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;"&gt;Aproveite e conheça o &lt;/span&gt;&lt;a style="font-family: verdana;" href="http://blog.devlab.com.br/"&gt;Blog dele&lt;/a&gt;&lt;span style="font-family:verdana;"&gt;, tem muita coisa boa! :D&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: verdana; font-style: italic; color: rgb(255, 0, 0);"&gt;Se você também souber de algum post ou materia online sobre boas práticas, deixa ai o link nos comentários para outros devs também terem acesso.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;[]s!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-5484224785023007374?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/5484224785023007374/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=5484224785023007374' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/5484224785023007374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/5484224785023007374'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2009/04/boas-praticas.html' title='Boas práticas.'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_uAsJb_LXDmg/SfIEorkpG6I/AAAAAAAAAFM/y6qXzlgsFck/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-3050583891425730261</id><published>2009-04-24T15:13:00.002-03:00</published><updated>2009-04-24T15:19:00.979-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='BSoares'/><category scheme='http://www.blogger.com/atom/ns#' term='Experiments'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Electronics'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><category scheme='http://www.blogger.com/atom/ns#' term='Projetos'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='Serialproxy'/><title type='text'>Twitter Hardware (Arduino)</title><content type='html'>&lt;a href="http://blog.bsoares.com.br/arduino/twitter-hardware" target="_self"&gt;Twitter Hardware&lt;/a&gt; é um projeto que utiliza a placa &lt;a href="http://www.arduino.cc/" target="_self"&gt;Arduino&lt;/a&gt; e um Display LCD para exibir as mensagens do &lt;a href="http://twitter.com/" target="_self"&gt;Twitter&lt;/a&gt;. Para que a Arduino tenha as mensagens escrevi um software em &lt;a href="http://www.adobe.com/products/air/" target="_self"&gt;Adobe AIR&lt;/a&gt; / &lt;a href="http://www.adobe.com/products/flex/" target="_self"&gt;Flex&lt;/a&gt;, que se conecta ao Serial Proxy enviando o conteúdo para a Arduino.&lt;br /&gt;&lt;br /&gt;&lt;p style="text-align: center;"&gt;&lt;object width="320" height="265" data="http://www.youtube.com/v/W-oXkI7pKZA&amp;amp;hl=pt-br&amp;amp;fs=1" type="application/x-shockwave-flash"&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="src" value="http://www.youtube.com/v/W-oXkI7pKZA&amp;amp;hl=pt-br&amp;amp;fs=1" /&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;/object&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt; Arduino:&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;/**&lt;br /&gt; * Twitter Hardware&lt;br /&gt; * &lt;br /&gt; * @author   Bruno Soares&lt;br /&gt; * @link     http://www.bsoares.com.br&lt;br /&gt; * @language Arduino / C++&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;// Includes&lt;br /&gt;#include &lt;LiquidCrystal.h&gt;&lt;br /&gt;&lt;br /&gt;// Defines&lt;br /&gt;#define DEBUG_PIN                 13&lt;br /&gt;&lt;br /&gt;#define COMMAND_RIGHT             0&lt;br /&gt;#define COMMAND_LEFT              1&lt;br /&gt;#define QUANTITY_COMMANDS         2&lt;br /&gt;&lt;br /&gt;#define ANALOG_PIN_COMMAND_RIGHT  0&lt;br /&gt;#define ANALOG_PIN_COMMAND_LEFT   1&lt;br /&gt;#define ANALOG_PIN_SPEED          2&lt;br /&gt;&lt;br /&gt;#define MESSAGE_START             94  //  94 = ^&lt;br /&gt;#define MESSAGE_END               126 // 126 = ~&lt;br /&gt;&lt;br /&gt;#define SERIAL_BOUND              9600&lt;br /&gt;&lt;br /&gt;#define LCD_LINES                 2&lt;br /&gt;#define LCD_COLUMNS               16&lt;br /&gt;&lt;br /&gt;#define ANIMATE_CMD_WIDTH         4&lt;br /&gt;&lt;br /&gt;// Global variables&lt;br /&gt;unsigned long time;&lt;br /&gt;&lt;br /&gt;// LiquidCrystal display with:&lt;br /&gt;// rs on pin 12&lt;br /&gt;// rw on pin 11&lt;br /&gt;// enable on pin 2&lt;br /&gt;// dbs 3, 4, 5, 6, 7, 8, 9, 10&lt;br /&gt;LiquidCrystal lcd(12, 11, 2, 3, 4, 5, 6, 7, 8, 9, 10);&lt;br /&gt;&lt;br /&gt;// Analog configuration&lt;br /&gt;unsigned int analogCmd[QUANTITY_COMMANDS];&lt;br /&gt;unsigned int analogSpeed = 0;&lt;br /&gt;&lt;br /&gt;// Control commands&lt;br /&gt;boolean changingSpeed = true;&lt;br /&gt;boolean readingSerial = false;&lt;br /&gt;boolean pressedCmd[QUANTITY_COMMANDS];&lt;br /&gt;unsigned int lastSpeed = 0;&lt;br /&gt;&lt;br /&gt;// Massages&lt;br /&gt;char currentMessage[400] = "No messages.";&lt;br /&gt;unsigned int currentMessageLenght;&lt;br /&gt;&lt;br /&gt;// ------------------------------------------------------------------------ \\&lt;br /&gt;// Program&lt;br /&gt;void setup() {&lt;br /&gt;  Serial.begin(SERIAL_BOUND);&lt;br /&gt;  pinMode(DEBUG_PIN, OUTPUT);&lt;br /&gt;  &lt;br /&gt;  smartDelay(10);&lt;br /&gt;  lastSpeed = analogSpeed;&lt;br /&gt;  &lt;br /&gt;  presentation();&lt;br /&gt;  changingSpeed = false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void loop() {&lt;br /&gt;  &lt;br /&gt;  // Show current message&lt;br /&gt;  clearLcd();&lt;br /&gt;  writeLongTextInLcd(currentMessage);&lt;br /&gt;  smartDelay(applySpeed(7000));&lt;br /&gt;  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void presentation() {&lt;br /&gt;  lcd.clear();&lt;br /&gt;  writeLongTextInLcd("Twitter Hardwareby Bruno Soares");&lt;br /&gt;  smartDelay(3000);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void refreshAnalogVars() {&lt;br /&gt;  analogCmd[COMMAND_RIGHT] = analogRead(ANALOG_PIN_COMMAND_RIGHT);&lt;br /&gt;  analogCmd[COMMAND_LEFT]  = analogRead(ANALOG_PIN_COMMAND_LEFT);&lt;br /&gt;  analogSpeed              = analogRead(ANALOG_PIN_SPEED);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// ------------------------------------------------------------------------ \\&lt;br /&gt;// [INI] Commands&lt;br /&gt;void detectCommand() {&lt;br /&gt;  unsigned int i = 0;&lt;br /&gt;  while (i &lt; QUANTITY_COMMANDS) {&lt;br /&gt;    if (analogCmd[i] &gt; 500 &amp;&amp; !pressedCmd[i]) {&lt;br /&gt;      executeCommand(i);&lt;br /&gt;    }&lt;br /&gt;    i++;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void executeCommand(int command) {&lt;br /&gt;  pressedCmd[command] = true;&lt;br /&gt;  digitalWrite(DEBUG_PIN, 1);&lt;br /&gt;  &lt;br /&gt;  if (command == 0) {&lt;br /&gt;    animateNext();&lt;br /&gt;  } else {&lt;br /&gt;    animatePrevious();&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  currentMessage[0] = 'L';&lt;br /&gt;  currentMessage[1] = 'o';&lt;br /&gt;  currentMessage[2] = 'a';&lt;br /&gt;  currentMessage[3] = 'd';&lt;br /&gt;  currentMessage[4] = 'i';&lt;br /&gt;  currentMessage[5] = 'n';&lt;br /&gt;  currentMessage[6] = 'g';&lt;br /&gt;  currentMessage[7] = '\0';&lt;br /&gt;  currentMessageLenght = 7;&lt;br /&gt;  &lt;br /&gt;  Serial.print(command);&lt;br /&gt;  &lt;br /&gt;  while (analogCmd[command] &gt; 500) {&lt;br /&gt;    smartDelay(4);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  pressedCmd[command] = false;&lt;br /&gt;  digitalWrite(DEBUG_PIN, 0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void animateNext()  {&lt;br /&gt;  for (unsigned int i = 0; i &lt; LCD_COLUMNS + ANIMATE_CMD_WIDTH; i++) {&lt;br /&gt;    if (i &lt; LCD_COLUMNS) {&lt;br /&gt;      lcd.setCursor(i, 0);&lt;br /&gt;      lcd.print("&gt;");&lt;br /&gt;      lcd.setCursor(i, 1);&lt;br /&gt;      lcd.print("&gt;");&lt;br /&gt;    }&lt;br /&gt;    delay(5);&lt;br /&gt;    if (i - ANIMATE_CMD_WIDTH &gt;= 0) {&lt;br /&gt;      lcd.setCursor(i - ANIMATE_CMD_WIDTH, 0);&lt;br /&gt;      lcd.print(" ");&lt;br /&gt;      lcd.setCursor(i - ANIMATE_CMD_WIDTH, 1);&lt;br /&gt;      lcd.print(" ");&lt;br /&gt;    }&lt;br /&gt;    delay(30);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void animatePrevious() {&lt;br /&gt;  for (int i = LCD_COLUMNS; i &gt;= -ANIMATE_CMD_WIDTH; i--) {&lt;br /&gt;    if (i &gt;= 0 &amp;&amp; i &lt; LCD_COLUMNS) {&lt;br /&gt;      lcd.setCursor(i, 0);&lt;br /&gt;      lcd.print("&lt;");&lt;br /&gt;      lcd.setCursor(i, 1);&lt;br /&gt;      lcd.print("&lt;");&lt;br /&gt;    }&lt;br /&gt;    delay(5);&lt;br /&gt;    if (i + ANIMATE_CMD_WIDTH &lt; LCD_COLUMNS &amp;&amp; i + ANIMATE_CMD_WIDTH &gt;= 0) {&lt;br /&gt;      lcd.setCursor(i + ANIMATE_CMD_WIDTH, 0);&lt;br /&gt;      lcd.print(" ");&lt;br /&gt;      lcd.setCursor(i + ANIMATE_CMD_WIDTH, 1);&lt;br /&gt;      lcd.print(" ");&lt;br /&gt;    }&lt;br /&gt;    delay(30);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;// [END] Commands&lt;br /&gt;&lt;br /&gt;// ------------------------------------------------------------------------ \\&lt;br /&gt;// [INI] Messages&lt;br /&gt;void detectSerialMessage() {&lt;br /&gt;  if (Serial.available() &gt; 0 &amp;&amp; !readingSerial) {&lt;br /&gt;    if (Serial.read() == MESSAGE_START) {&lt;br /&gt;      serialReadMessage();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void serialReadMessage() {&lt;br /&gt;  digitalWrite(DEBUG_PIN, 1);&lt;br /&gt;  readingSerial = true;&lt;br /&gt;  currentMessageLenght = 0;&lt;br /&gt;  &lt;br /&gt;  iniReading:&lt;br /&gt;  if (Serial.available() &gt; 0) {&lt;br /&gt;    unsigned int _char = Serial.read();&lt;br /&gt;    if (_char == MESSAGE_END) {&lt;br /&gt;      goto endReading;&lt;br /&gt;    } else {&lt;br /&gt;      currentMessage[currentMessageLenght++] = _char;&lt;br /&gt;      delay(2);&lt;br /&gt;      goto iniReading;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  goto iniReading;&lt;br /&gt;  &lt;br /&gt;  endReading:&lt;br /&gt;  currentMessage[currentMessageLenght] = '\0';&lt;br /&gt;  digitalWrite(DEBUG_PIN, 0);&lt;br /&gt;  readingSerial = false;&lt;br /&gt;}&lt;br /&gt;// [END] Messages&lt;br /&gt;&lt;br /&gt;// ------------------------------------------------------------------------ \\&lt;br /&gt;// [INI] LCD manipulation&lt;br /&gt;void writeLongTextInLcd(char text[]) {&lt;br /&gt;  writeInit:&lt;br /&gt;  clearLcd();&lt;br /&gt;  unsigned int cml = currentMessageLenght;&lt;br /&gt;  int loops = -1;&lt;br /&gt;  unsigned int chars = 1;&lt;br /&gt;  while (text[loops++ + 1] != 0) {&lt;br /&gt;    if (chars == 17) {&lt;br /&gt;      lcd.setCursor(0, 1);&lt;br /&gt;      smartDelay(applySpeed(600));&lt;br /&gt;      if (cml != currentMessageLenght) goto writeInit;&lt;br /&gt;    } else if (chars == 33) {&lt;br /&gt;      smartDelay(applySpeed(3000));&lt;br /&gt;      clearLcd();&lt;br /&gt;      if (cml != currentMessageLenght) goto writeInit;&lt;br /&gt;      chars = 1;&lt;br /&gt;    }&lt;br /&gt;    lcd.print(text[loops]);&lt;br /&gt;    smartDelay(applySpeed(60));&lt;br /&gt;    if (cml != currentMessageLenght) goto writeInit;&lt;br /&gt;    chars++;&lt;br /&gt;  }&lt;br /&gt;  Serial.print(2);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void writeInLcd(char text[], int quantity) {&lt;br /&gt;  for (unsigned int i = 0; i &lt; quantity; i++) {&lt;br /&gt;    if (text[i] == 0) {&lt;br /&gt;      do {&lt;br /&gt;        lcd.print(" ");&lt;br /&gt;      } while (i++ &lt; quantity);&lt;br /&gt;      break;&lt;br /&gt;    } else {&lt;br /&gt;      lcd.print(text[i]);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  delay(2);&lt;br /&gt;  //smartDelay(5);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void clearLcd() {&lt;br /&gt;  lcd.setCursor(0, 0);&lt;br /&gt;  smartDelay(5);&lt;br /&gt;  lcd.print("                ");&lt;br /&gt;  smartDelay(applySpeed(400));&lt;br /&gt;  lcd.setCursor(0, 1);&lt;br /&gt;  smartDelay(5);&lt;br /&gt;  lcd.print("                ");&lt;br /&gt;  lcd.setCursor(0, 0);&lt;br /&gt;  smartDelay(applySpeed(0));&lt;br /&gt;}&lt;br /&gt;// [END] LCD manipulation&lt;br /&gt;&lt;br /&gt;// ------------------------------------------------------------------------ \\&lt;br /&gt;// [INI] Speed&lt;br /&gt;void detectChangeSpeed() {&lt;br /&gt;  if (changingSpeed) return;&lt;br /&gt;  if (!(lastSpeed &lt; analogSpeed + 6 &amp;&amp; lastSpeed &gt; analogSpeed - 6)) {&lt;br /&gt;    showGraderSpeed();&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void showGraderSpeed() {&lt;br /&gt;  changingSpeed = true;&lt;br /&gt;  digitalWrite(DEBUG_PIN, 1);&lt;br /&gt;  lcd.clear();&lt;br /&gt;  writeInLcd("Speed:", LCD_COLUMNS);&lt;br /&gt;  &lt;br /&gt;  // Create display velocity&lt;br /&gt;  showSpeed:&lt;br /&gt;  for (unsigned int i = 0; i &lt; 10; i++) {&lt;br /&gt;    int charsSpeed = map(analogSpeed, 0, 1023, 0, LCD_COLUMNS);&lt;br /&gt;    int percentSpeed = map(analogSpeed, 0, 1023, 0, 100);&lt;br /&gt;    char* percentString;&lt;br /&gt;    itoa(100 - percentSpeed, percentString, 10);&lt;br /&gt;    percentString = strcat(percentString, "%");&lt;br /&gt;    lcd.setCursor(7, 0);&lt;br /&gt;    writeInLcd(percentString, 4);&lt;br /&gt;    charsSpeed = LCD_COLUMNS - charsSpeed;&lt;br /&gt;    lcd.setCursor(0, 1);&lt;br /&gt;    for (unsigned int x = 1; x &lt; LCD_COLUMNS + 1; x++) {&lt;br /&gt;      if (x &lt;= charsSpeed) {&lt;br /&gt;        lcd.print("&gt;");&lt;br /&gt;      } else {&lt;br /&gt;        lcd.print(" ");&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    lastSpeed = analogSpeed;&lt;br /&gt;    smartDelay(40);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  // Verify&lt;br /&gt;  for (unsigned int i = 0; i &lt; 10; i++) {&lt;br /&gt;    if (!(lastSpeed &lt; analogSpeed + 6 &amp;&amp; lastSpeed &gt; analogSpeed - 6)) {&lt;br /&gt;      goto showSpeed;&lt;br /&gt;    }&lt;br /&gt;    smartDelay(40);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  // Finalize&lt;br /&gt;  lcd.clear();&lt;br /&gt;  changingSpeed = false;&lt;br /&gt;  digitalWrite(DEBUG_PIN, 0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;long applySpeed (unsigned int value) {&lt;br /&gt;  return map(analogSpeed, 0, 1023, 0, value);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// [END] Speed&lt;br /&gt;&lt;br /&gt;// ------------------------------------------------------------------------ \\&lt;br /&gt;// [INI] Milliseconds controller&lt;br /&gt;void smartDelay(int milliseconds) {&lt;br /&gt;  if (milliseconds &lt; 2) {&lt;br /&gt;    noDelayFunctions();&lt;br /&gt;    delay(milliseconds);&lt;br /&gt;    return;&lt;br /&gt;  }&lt;br /&gt;  do {&lt;br /&gt;    delay(1);&lt;br /&gt;    milliseconds -= noDelayFunctions();&lt;br /&gt;    milliseconds -= 1;&lt;br /&gt;  } while (milliseconds &gt; 0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int noDelayFunctions() {&lt;br /&gt;  time = millis();&lt;br /&gt;  &lt;br /&gt;  // [INI] No delay functions here&lt;br /&gt;  refreshAnalogVars();&lt;br /&gt;  detectChangeSpeed();&lt;br /&gt;  detectCommand();&lt;br /&gt;  detectSerialMessage();&lt;br /&gt;  // [END] No delay functions here&lt;br /&gt;  &lt;br /&gt;  return millis() - time;&lt;br /&gt;}&lt;br /&gt;// [END] Milliseconds controller&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ActionScript (usando Serialproxy):&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;package br.com.bsoares.air.airtwitterhardware&lt;br /&gt;{&lt;br /&gt; import flash.events.Event;&lt;br /&gt; import flash.events.EventDispatcher;&lt;br /&gt; import flash.events.IOErrorEvent;&lt;br /&gt; import flash.events.ProgressEvent;&lt;br /&gt; import flash.net.Socket;&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt;  * Message Control&lt;br /&gt;  * Control messages between the Arduino and in AIR&lt;br /&gt;  * Application using Serial Proxy.&lt;br /&gt;  * &lt;br /&gt;  * @author Bruno Soares&lt;br /&gt;  * @link   http://www.bsoares.com.br&lt;br /&gt;  */&lt;br /&gt; public class MessageControl extends EventDispatcher&lt;br /&gt; {&lt;br /&gt;  // Properties&lt;br /&gt;  private var _host:String;&lt;br /&gt;  private var _port:uint;&lt;br /&gt;  private var _socket:Socket;&lt;br /&gt;  private var _messages:Array; &lt;br /&gt;  private var _currentMessage:uint;&lt;br /&gt;  private static var _instance:MessageControl;&lt;br /&gt;  private static var _allowInstantiation:Boolean = false;&lt;br /&gt;  &lt;br /&gt;  // Constructor&lt;br /&gt;  public function MessageControl()&lt;br /&gt;  {&lt;br /&gt;   if (!_allowInstantiation)&lt;br /&gt;    throw new Error("Use instance property (this is a Singleton Class).");&lt;br /&gt;   init();&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  // Logic&lt;br /&gt;  private function init():void&lt;br /&gt;  {&lt;br /&gt;   _host = "127.0.0.1";&lt;br /&gt;   // COM2&lt;br /&gt;   _port = 5332;&lt;br /&gt;   _messages = [ ];&lt;br /&gt;   _currentMessage = 0;&lt;br /&gt;   socketConnect();&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  private function socketConnect():void&lt;br /&gt;  {&lt;br /&gt;   _socket = new Socket();&lt;br /&gt;   _socket.addEventListener(ProgressEvent.SOCKET_DATA, onSocketData);&lt;br /&gt;   _socket.addEventListener(Event.CLOSE, onSocketClose);&lt;br /&gt;   _socket.addEventListener(IOErrorEvent.IO_ERROR, onSocketIoError);&lt;br /&gt;   _socket.connect(_host, _port);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  private function processData(data:String):void&lt;br /&gt;  {&lt;br /&gt;   trace("Arduino command:", data);&lt;br /&gt;   switch (true)&lt;br /&gt;   {&lt;br /&gt;    // Send next message&lt;br /&gt;    case data == "2" || data == "0":&lt;br /&gt;    {&lt;br /&gt;     sendNextMessage();&lt;br /&gt;     break;&lt;br /&gt;    }&lt;br /&gt;    // Send previous message&lt;br /&gt;    case data == "1":&lt;br /&gt;    {&lt;br /&gt;     sendPreviousMessage();&lt;br /&gt;     break;&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  private function sendMessage(message:String):void&lt;br /&gt;  {&lt;br /&gt;   if (message == null || message == "")&lt;br /&gt;    return;&lt;br /&gt;   &lt;br /&gt;   trace("Message:", message);&lt;br /&gt;   &lt;br /&gt;   // MESSAGE_START&lt;br /&gt;   _socket.writeUTFBytes("^");&lt;br /&gt;   _socket.flush();&lt;br /&gt;   &lt;br /&gt;   // MESSAGE&lt;br /&gt;   for (var i:uint = 0; i &lt; message.length; i++)&lt;br /&gt;   {&lt;br /&gt;    _socket.writeUTFBytes(message.charAt(i));&lt;br /&gt;   }&lt;br /&gt;   _socket.flush();&lt;br /&gt;   &lt;br /&gt;   // MESSAGE_END&lt;br /&gt;   _socket.writeUTFBytes("~");&lt;br /&gt;   _socket.flush();&lt;br /&gt;   &lt;br /&gt;   dispatchEvent(new Event(Event.CHANGE));&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  private function sendNextMessage():void&lt;br /&gt;  {&lt;br /&gt;   _currentMessage = _currentMessage == _messages.length - 1 ? 0 : _currentMessage + 1;&lt;br /&gt;   sendMessage(_messages[_currentMessage]);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  private function sendPreviousMessage():void&lt;br /&gt;  {&lt;br /&gt;   _currentMessage = _currentMessage == 0 ? _messages.length - 1 : _currentMessage - 1;&lt;br /&gt;   sendMessage(_messages[_currentMessage]);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  // Events&lt;br /&gt;  private function onSocketData(event:ProgressEvent):void&lt;br /&gt;  {&lt;br /&gt;   while (_socket.bytesAvailable &gt; 0)&lt;br /&gt;    processData(_socket.readUTFBytes(1));&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  private function onSocketClose(event:Event):void&lt;br /&gt;  {&lt;br /&gt;   socketConnect();&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  private function onSocketIoError(event:IOErrorEvent):void&lt;br /&gt;  {&lt;br /&gt;   trace(event.text);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  // Getters and Setters&lt;br /&gt;  public static function get instance():MessageControl&lt;br /&gt;  {&lt;br /&gt;   if (_instance == null) {&lt;br /&gt;    _allowInstantiation = true;&lt;br /&gt;    _instance = new MessageControl();&lt;br /&gt;    _allowInstantiation = false;&lt;br /&gt;   }&lt;br /&gt;   return _instance;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  public function set messages(value:Array):void&lt;br /&gt;  {&lt;br /&gt;   _currentMessage = 0;&lt;br /&gt;   _messages = value;&lt;br /&gt;   if (_messages.length &gt; 0)&lt;br /&gt;    sendMessage(_messages[0]);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  public function get messages():Array&lt;br /&gt;  {&lt;br /&gt;   return _messages;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  public function get currentMessage():uint&lt;br /&gt;  {&lt;br /&gt;   return _currentMessage;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Esquemático:&lt;/strong&gt;&lt;br /&gt;&lt;a rel="attachment wp-att-207" href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/twitterhardware-schematic.png"&gt;&lt;img title="twitterhardware-schematic" src="http://blog.bsoares.com.br/wp-content/uploads/2009/04/twitterhardware-schematic-300x300.png" alt="twitterhardware-schematic" width="300" height="300" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Baixe o &lt;a href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/twitterhardware.zip"&gt;código fonte aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conteúdo relacionado:&lt;/strong&gt;&lt;br /&gt;Post original: &lt;a href="http://blog.bsoares.com.br/arduino/twitter-hardware" target="_blank"&gt;http://blog.bsoares.com.br/arduino/twitter-hardware&lt;/a&gt;&lt;br /&gt;Mais fotos: &lt;a href="http://www.flickr.com/photos/bsoares/sets/72157616923436133/" target="_self"&gt;http://www.flickr.com/photos/bsoares/sets/72157616923436133/&lt;/a&gt;&lt;br /&gt;Arduino: &lt;a href="http://arduino.cc/" target="_self"&gt;http://arduino.cc/&lt;/a&gt;&lt;br /&gt;Adobe AIR: &lt;a href="http://www.adobe.com/products/air/" target="_self"&gt;http://www.adobe.com/products/air/&lt;/a&gt;&lt;br /&gt;Adobe Flex: &lt;a href="http://www.adobe.com/products/flex/" target="_self"&gt;http://www.adobe.com/products/flex/&lt;/a&gt;&lt;br /&gt;LiquidCrystal Library: &lt;a href="http://arduino.cc/en/Reference/LiquidCrystal?from=Tutorial.LCDLibrary" target="_self"&gt;http://arduino.cc/en/Reference/LiquidCrystal?from=Tutorial.LCDLibrary&lt;/a&gt;&lt;br /&gt;Twitter: &lt;a href="http://twitter.com/" target="_self"&gt;http://twitter.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-3050583891425730261?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/3050583891425730261/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=3050583891425730261' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/3050583891425730261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/3050583891425730261'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2009/04/twitter-hardware-arduino.html' title='Twitter Hardware (Arduino)'/><author><name>Bruno Soares</name><uri>http://www.blogger.com/profile/08637607007716713955</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp2.blogger.com/_qLU3RxFHN9w/R6SdGMkUCFI/AAAAAAAAAFI/t2GmbwTJSn8/S220/msn.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-8793095283778036940</id><published>2009-04-24T15:04:00.002-03:00</published><updated>2009-04-24T15:22:00.826-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AMFPHP'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='BSoares'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Remoting'/><category scheme='http://www.blogger.com/atom/ns#' term='JPGEncoder'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='AMF'/><title type='text'>JPGEncoder (AS3) com AMFPHP</title><content type='html'>Tenho notado pelo Google Analytics que pessoas chegam ao blog procurando por &lt;a href="http://www.amfphp.org/" target="_blank"&gt;AMFPHP&lt;/a&gt;, encode de imagens criadas no flash, salvar imagem com Flash + AMFPHP e outros critérios de busca. E por isso me sinto na obrigação de escrever algo sobre isto.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Exemplo:&lt;/strong&gt;&lt;br /&gt;&lt;p style="text-align: center;"&gt;&lt;object width="550" height="450" data="http://blog.bsoares.com.br/articles/jpgencoder_amfphp/swf/Main.swf" type="application/x-shockwave-flash"&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="src" value="http://blog.bsoares.com.br/articles/jpgencoder_amfphp/swf/Main.swf" /&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;/object&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Vou demonstrar exatamente o que o título do post propõe (Criar imagens no Flash com ActionScript 3, encodar essas imagens com a classe JPGEncoder presente na biblioteca &lt;a href="http://code.google.com/p/as3corelib/"&gt;as3corelib&lt;/a&gt; e salvar como um arquivo .jpg utilizando o AMFPHP). Já escrevi aqui como fazer isso em &lt;a href="http://blog.bsoares.com.br/remoting/jpeg-encoder-as3-fluorinefx-net-flash-remoting-gateway" target="_blank"&gt;FluorineFx (ASP.NET Flash Remoting Gateway)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Suponho que quem esteja interessado em rodar o que está descrito neste tutorial tenha o Apache com PHP instalado, ou algum servidor com suporte. Caso você não tenha recomendo a instalação do &lt;a href="http://www.apachefriends.org/pt_br/xampp.html" target="_blank"&gt;XAMPP&lt;/a&gt; (é de fácil instalação e tem tudo que um programador precisa).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Configuração do AMFPHP:&lt;/strong&gt;&lt;br /&gt;A versão que utilizo neste tutorial é a &lt;strong&gt;1.9 beta&lt;/strong&gt;, mas versões posteriores devem funcionar perfeitamente.&lt;br /&gt;• Baixe o AMFPHP do seguinte link: &lt;a href="http://www.amfphp.org/" target="_blank"&gt;http://www.amfphp.org/&lt;/a&gt;&lt;br /&gt;• Copie o conteúdo do ZIP para o diretório onde você está criando o projeto, recomendo a estrutura de diretórios como mostrada na imagem abaixo:&lt;br /&gt;&lt;img class="alignnone size-full wp-image-174" title="folders" src="http://blog.bsoares.com.br/wp-content/uploads/2009/04/folders.png" alt="folders" width="186" height="209" /&gt;&lt;br /&gt;&lt;br /&gt;• Para testar o funcionamento é só acessar o diretório browser do navegador (http://127.0.0.1/www/amf/browser/).&lt;br /&gt;&lt;br /&gt;Fique entendido que &lt;strong&gt;a responsabilidade de gerar a imagem é do Flash&lt;/strong&gt;, e o &lt;strong&gt;servidor deve apenas receber os binários para gravar em disco&lt;/strong&gt;. Para gerarmos o código da imagem (binário), vamos utilizar a classe JPGEncoder.&lt;br /&gt;&lt;strong&gt;Exemplo:&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;import flash.display.BitmapData;&lt;br /&gt;import flash.utils.ByteArray;&lt;br /&gt;import com.adobe.images.JPGEncoder;&lt;br /&gt;&lt;br /&gt;var bmpData:BitmapData = new BitmapData(width, height);&lt;br /&gt;bmpData.draw(MEU_MOVIECLIP);&lt;br /&gt;var objJPGEncoder:JPGEncoder = new JPGEncoder(QUALIDADE);&lt;br /&gt;var dadosEncode:ByteArray = objJPGEncoder.encode(bmpData);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Muito simples não? O método draw da classe BitmapData obtém a imagem atual do clip, criamos uma instância da JPGEncoder já passando a qualidade (0 à 100) e por fim “encodamos” o BitmapData utilizando o método encode da nossa instância da JPGEncoder, ele nos retorna um &lt;strong&gt;Array de Bytes (flash.utils.ByteArray)&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Vamos a parte do actionscript que interessa:&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;private function encode():void&lt;br /&gt;{&lt;br /&gt; lblMessage.text = "Codificando dados (JPGEncoder.encode)";&lt;br /&gt; &lt;br /&gt; var bmpData:BitmapData = new BitmapData(hit.width, hit.height);&lt;br /&gt; bmpData.draw(target);&lt;br /&gt; var objJPGEncoder:JPGEncoder = new JPGEncoder(sliderQuality.value);&lt;br /&gt; var dadosEncode:ByteArray = objJPGEncoder.encode(bmpData);&lt;br /&gt; &lt;br /&gt; sendToAmf(dadosEncode);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function sendToAmf(data:ByteArray):void&lt;br /&gt;{&lt;br /&gt; lblMessage.text = "Enviando dados para o AMF...";&lt;br /&gt; &lt;br /&gt; _objService = new NetConnection();&lt;br /&gt; _objResponder = new Responder(onResultEvent, onStatusEvent);&lt;br /&gt; _objService.connect(_amfGateway);&lt;br /&gt; _objService.call("br.com.bsoares.Image.saveDataToFile", _objResponder, data);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function onResultEvent(result:Object):void&lt;br /&gt;{&lt;br /&gt; lblMessage.text = "Abrindo imagem";&lt;br /&gt; navigateToURL(new URLRequest("http://blog.bsoares.com.br/articles/jpgencoder_amfphp/generated_images/image.jpg"), "_blank");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function onStatusEvent(event:Event):void&lt;br /&gt;{&lt;br /&gt; lblMessage.text = "Erro";&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Agora a classe Image do PHP:&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;class Image&lt;br /&gt;{&lt;br /&gt; var $imagePath;&lt;br /&gt; &lt;br /&gt; public function __construct ()&lt;br /&gt; {&lt;br /&gt;  $this-&gt;imagePath = "../../../../../generated_images/image.jpg";&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; function saveDataToFile($byteArray)&lt;br /&gt;    {&lt;br /&gt;        file_put_contents($this-&gt;imagePath, $byteArray-&gt;data);&lt;br /&gt;        return $this-&gt;imagePath;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;O PHP só precisa pegar o ByteArray e salvar em um arquivo.&lt;br /&gt;&lt;br /&gt;Dica: Para verificar os request usem o &lt;a href="http://www.charlesproxy.com/" target="_blank"&gt;Charles Web Debugging Proxy&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;É isso ai, qualquer dúvida só postar um comentário.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conteúdo relacionado:&lt;/strong&gt;&lt;br /&gt;Post original: &lt;a href="http://blog.bsoares.com.br/remoting/jpgencoder-as3-with-amfphp" target="_blank"&gt;http://blog.bsoares.com.br/remoting/jpgencoder-as3-with-amfphp&lt;/a&gt;&lt;br /&gt;Código fonte do exemplo: &lt;a href="http://blog.bsoares.com.br/articles/jpgencoder_amfphp/jpgencoder-amfphp.zip" target="_blank"&gt;http://blog.bsoares.com.br/articles/jpgencoder_amfphp/jpgencoder-amfphp.zip&lt;/a&gt;&lt;br /&gt;AMFPHP: &lt;a href="http://www.amfphp.org/" target="_blank"&gt;http://www.amfphp.org/&lt;/a&gt;&lt;br /&gt;AS3CoreLib: &lt;a href="http://code.google.com/p/as3corelib/" target="_blank"&gt;http://code.google.com/p/as3corelib/&lt;/a&gt;&lt;br /&gt;Charles: &lt;a href="http://www.charlesproxy.com/" target="_blank"&gt;http://www.charlesproxy.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-8793095283778036940?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/8793095283778036940/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=8793095283778036940' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/8793095283778036940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/8793095283778036940'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2009/04/jpgencoder-as3-com-amfphp.html' title='JPGEncoder (AS3) com AMFPHP'/><author><name>Bruno Soares</name><uri>http://www.blogger.com/profile/08637607007716713955</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp2.blogger.com/_qLU3RxFHN9w/R6SdGMkUCFI/AAAAAAAAAFI/t2GmbwTJSn8/S220/msn.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-6143072090579558894</id><published>2009-04-24T14:31:00.003-03:00</published><updated>2009-04-24T15:22:21.993-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BSoares'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='Flickr-API'/><title type='text'>Flickr - Buscar fotos por Tag com ActionScript 3.0</title><content type='html'>Vamos a um exemplo de uso da &lt;a href="http://www.flickr.com/services/api/" target="_blank"&gt;API do Flickr&lt;/a&gt;, bem simples pois a API do Flickr é realmente simples (isso não quer dizer que ela não é poderoza).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Aqui está o resultado de pouco código:&lt;/strong&gt;&lt;br /&gt;&lt;p style="text-align: center;"&gt;&lt;object width="455" height="430" data="http://blog.bsoares.com.br/wp-content/uploads/2009/04/main.swf" type="application/x-shockwave-flash"&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="src" value="http://blog.bsoares.com.br/wp-content/uploads/2009/04/main.swf" /&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;/object&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Em primeiro lugar você vai precisar de uma api_key e pode conseguir neste link "&lt;a href="http://www.flickr.com/services/api/keys/apply/" target="_blank"&gt;Solicitar uma nova chave API&lt;/a&gt;". Com sua KEY em mão vamos chamar a api buscando uma tag:&lt;br /&gt;&lt;em&gt; &lt;span style="color: #339966;"&gt;http://api.flickr.com/services/&lt;strong&gt;rest&lt;/strong&gt;/?&lt;strong&gt;api_key&lt;/strong&gt;=[SUA-API-KEY]&amp;amp;&lt;strong&gt;method&lt;/strong&gt;=flickr.photos.search&amp;amp;&lt;strong&gt;tags&lt;/strong&gt;=[TAG]&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;O resultado esperado é este:&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;rsp stat="ok"&amp;gt;&lt;br /&gt;&amp;lt;photos page="1" pages="10" perpage="100" total="1000"&amp;gt;&lt;br /&gt; &amp;lt;photo id="3411384625" owner="23534352@N07" secret="74167a8895" server="3374" farm="4" title="_MG_0611" ispublic="1" isfriend="0" isfamily="0" /&amp;gt;&lt;br /&gt; &amp;lt;photo id="3411401933" owner="23534352@N07" secret="46c095f827" server="3585" farm="4" title="_MG_0641" ispublic="1" isfriend="0" isfamily="0" /&amp;gt;&lt;br /&gt; ...&lt;br /&gt;&amp;lt;/photos&amp;gt;&lt;br /&gt;&amp;lt;/rsp&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Vamos entender o link, rest é o formato que você deseja receber a resposta, atualmente o Flickr suporta 5 formatos (REST, XML-RPC, SOAP, JSON e PHP), usamos o rest porque o ActionScript trabalha muito bem com ele (XML). api_key é a chave que você solicitou acima. method, é o método de busca (você pode encontrar muitos no link da API, &lt;a href="http://www.flickr.com/services/api/" target="_blank"&gt;http://www.flickr.com/services/api/&lt;/a&gt;). E por fim tags que é um parâmetro pelo qual você busca.&lt;br /&gt;&lt;br /&gt;Agora que temos o XML de resposta podemos construir links para as fotos, para a página de galeria do usuário encontrado, para o perfil do usuário entro outros. O link que eu acho mais importante é o da imagem e para consegui-lo basta concatenar alguns dados presentes no XML dessa forma:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #339966;"&gt;http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}.jpg&lt;br /&gt;http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{secret}_[mstb].jpg&lt;br /&gt;http://farm{farm-id}.static.flickr.com/{server-id}/{id}_{o-secret}_o.(jpg|gif|png)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;O que é mstb?&lt;br /&gt;s) quadrado pequeno 75x75.&lt;br /&gt;t) miniatura, 100 no lado mais longo.&lt;br /&gt;m) pequeno, 240 no lado mais longo.&lt;br /&gt;-) médio, 500 no lado mais longo.&lt;br /&gt;b) grande, 1.024 no lado mais longo (existe apenas para imagens originais muito grandes).&lt;br /&gt;o) imagem original, jpg, gif ou png, dependendo do formato de origem.&lt;br /&gt;Na página &lt;a href="http://www.flickr.com/services/api/misc.urls.html" target="_blank"&gt;URLs da origem da foto&lt;/a&gt; você encontra tudo bem explicado.&lt;br /&gt;&lt;br /&gt;Veja no exemplo abaixo o link (do primeio nó 'photo')  para a imagem:&lt;br /&gt;&lt;a href="http://farm4.static.flickr.com/3374/3411384625_74167a8895.jpg" target="_blank"&gt;http://farm4.static.flickr.com/3374/3411384625_74167a8895.jpg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Agora tudo isso com ActionScript (Load do XML e parse para gerar o link):&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;var apiKey:String = "[SUA-API-KEY]";&lt;br /&gt;var tag:String = "arduino";&lt;br /&gt;&lt;br /&gt;var xmlLoader:URLLoader = new URLLoader();&lt;br /&gt;xmlLoader.addEventListener(Event.COMPLETE, onComplete);&lt;br /&gt;var url:String = "http://api.flickr.com/services/rest/?method=flickr.photos.search&amp;api_key=" + apiKey + "&amp;tags=" + tag;&lt;br /&gt;trace("URL: ", url);&lt;br /&gt;xmlLoader.load(new URLRequest(url));&lt;br /&gt;&lt;br /&gt;function onComplete(event:Event):void&lt;br /&gt;{&lt;br /&gt; var xmlData:XML = new XML(event.target.data);&lt;br /&gt; if (xmlData.@stat != "ok")&lt;br /&gt; {&lt;br /&gt;  trace("ERROR: " + xmlData.err.@msg);&lt;br /&gt;  return;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; for (var i:uint = 0; i &lt; xmlData.photos.photo.length(); i++)&lt;br /&gt; {&lt;br /&gt;  var photo:Object = {&lt;br /&gt;   id:xmlData.photos.photo[i].@id,&lt;br /&gt;   owner:xmlData.photos.photo[i].@owner,&lt;br /&gt;   secret:xmlData.photos.photo[i].@secret,&lt;br /&gt;   server:xmlData.photos.photo[i].@server,&lt;br /&gt;   farm:xmlData.photos.photo[i].@farm,&lt;br /&gt;   title:xmlData.photos.photo[i].@title&lt;br /&gt;  };&lt;br /&gt;  photo.url = "http://farm" + photo.farm + ".static.flickr.com/" + photo.server + "/" + photo.id + "_" + photo.secret + ".jpg";&lt;br /&gt;  trace("Imagem: ", photo.url);&lt;br /&gt; }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Repare que você pode adicionar dois parâmetros no link para controlar a paginação das fotos (page e perpage).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conteúdo relacionado:&lt;/strong&gt;&lt;br /&gt;Post original: &lt;a href="http://blog.bsoares.com.br/flash/flickr-search-photos-by-tag-with-actionscript" target="_blank"&gt;http://blog.bsoares.com.br/flash/flickr-search-photos-by-tag-with-actionscript&lt;/a&gt;&lt;br /&gt;Flickr API: &lt;a href="http://www.flickr.com/services/api/" target="_blank"&gt;http://www.flickr.com/services/api/&lt;/a&gt;&lt;br /&gt;XML ActionScript 3.0: &lt;a href="http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/XML.html" target="_blank"&gt;http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/XML.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-6143072090579558894?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/6143072090579558894/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=6143072090579558894' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/6143072090579558894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/6143072090579558894'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2009/04/flickr-buscar-fotos-por-tag-com.html' title='Flickr - Buscar fotos por Tag com ActionScript 3.0'/><author><name>Bruno Soares</name><uri>http://www.blogger.com/profile/08637607007716713955</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp2.blogger.com/_qLU3RxFHN9w/R6SdGMkUCFI/AAAAAAAAAFI/t2GmbwTJSn8/S220/msn.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-4820872213815770632</id><published>2009-04-24T13:59:00.003-03:00</published><updated>2009-04-24T14:31:27.758-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='BSoares'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Convertendo PNG para SWF com PHP 5</title><content type='html'>Bom para quem não sabe o Adobe Flash consegue uma compressão incrível com arquivos do tipo PNG, &lt;strong&gt;mantendo a sua qualidade e transparência&lt;/strong&gt;. Vou deixar um exemplo de código PHP para fazer essa conversão sem a ajuda de softwares como o png2swf.exe pois a realidade é que muitos servidores (hosts) não permitem que o script PHP rode softwares.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Classe:&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;/**&lt;br /&gt; * SwfConvertion&lt;br /&gt; * &lt;br /&gt; * @author Bruno Soares&lt;br /&gt; * @link   http://www.bsoares.com.br&lt;br /&gt; */&lt;br /&gt;class SwfConvertion&lt;br /&gt;{&lt;br /&gt; public function __construct () { }&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt;  * image2swf&lt;br /&gt;  * &lt;br /&gt;  * @param  $imagePath String&lt;br /&gt;  * @return void&lt;br /&gt;  */&lt;br /&gt; public static function image2swf($imagePath, $outputPath = '')&lt;br /&gt; {&lt;br /&gt;  if ($outputPath == '')&lt;br /&gt;  {&lt;br /&gt;   $outputPath = SwfConvertion::resolveOutputPath($imagePath);&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  $bitmap = new SWFBitmap(file_get_contents($imagePath));&lt;br /&gt;  &lt;br /&gt;  $shape = new SWFShape();&lt;br /&gt;  $shape-&gt;setRightFill($shape-&gt;addFill($bitmap));&lt;br /&gt;  $shape-&gt;drawLine($bitmap-&gt;getWidth(), 0);&lt;br /&gt;  $shape-&gt;drawLine(0, $bitmap-&gt;getHeight());&lt;br /&gt;  $shape-&gt;drawLine(-$bitmap-&gt;getWidth(), 0);&lt;br /&gt;  $shape-&gt;drawLine(0, -$bitmap-&gt;getHeight());&lt;br /&gt;  &lt;br /&gt;  $movie = new SWFMovie();&lt;br /&gt;  $movie-&gt;setDimension($bitmap-&gt;getWidth(), $bitmap-&gt;getHeight());&lt;br /&gt;  $movie-&gt;add($shape);&lt;br /&gt;  $movie-&gt;save($outputPath);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; /**&lt;br /&gt;  * &lt;br /&gt;  * &lt;br /&gt;  * @param $imagePath Object&lt;br /&gt;  * @return String&lt;br /&gt;  */&lt;br /&gt; private static function resolveOutputPath($imagePath)&lt;br /&gt; {&lt;br /&gt;  return preg_replace('/^(.+)\.([A-Za-z]{3,4})$/i', '${1}.swf', $imagePath);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Exemplo de uso:&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;?php SwfConvertion::image2swf('imagem_branco.png', 'imagem_branco_2.swf'); ?&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1º Teste:&lt;/strong&gt;&lt;br /&gt;PNG: &lt;a href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/imagem_branco.png"&gt;imagem_branco.png&lt;/a&gt; 167KB&lt;br /&gt;SWF: &lt;a href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/imagem_branco_2.swf"&gt;imagem_branco_2.swf&lt;/a&gt; 98KB&lt;br /&gt;&lt;strong&gt;41,31%&lt;/strong&gt; de compressão (menos 69KB)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2º Teste:&lt;/strong&gt;&lt;br /&gt;PNG: &lt;a href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/imagem_vermelho.png"&gt;imagem_vermelho.png&lt;/a&gt; 309KB&lt;br /&gt;SWF: &lt;a href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/imagem_vermelho_2.swf"&gt;imagem_vermelho_2.swf&lt;/a&gt; 264KB&lt;br /&gt;&lt;strong&gt;14,56%&lt;/strong&gt;  de compressão (menos 45KB)&lt;br /&gt;&lt;br /&gt;Obs.: É importante que você escolha bem as conversões que deseja fazer, pois em alguns casos o SWF pode ficar mais pesado que o PNG ou seja, se você vai utilizar este script para otimizar suas imagens &lt;strong&gt;compare os pesos antes de escolher a definitiva&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conteúdo relacionado:&lt;/strong&gt;&lt;br /&gt;Post original: &lt;a href="http://blog.bsoares.com.br/flash/converting-png-to-swf-with-php-5" target="_blank"&gt;http://blog.bsoares.com.br/flash/converting-png-to-swf-with-php-5&lt;/a&gt;&lt;br /&gt;PHP Shockwave Flash: &lt;a href="http://br2.php.net/manual/pt_BR/book.swf.php" target="_blank"&gt;http://br2.php.net/manual/pt_BR/book.swf.php&lt;/a&gt;&lt;br /&gt;Funções para SWF: &lt;a href="http://br2.php.net/manual/pt_BR/ref.swf.php" target="_blank"&gt;http://br2.php.net/manual/pt_BR/ref.swf.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-4820872213815770632?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/4820872213815770632/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=4820872213815770632' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/4820872213815770632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/4820872213815770632'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2009/04/convertendo-png-para-swf-com-php-5.html' title='Convertendo PNG para SWF com PHP 5'/><author><name>Bruno Soares</name><uri>http://www.blogger.com/profile/08637607007716713955</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp2.blogger.com/_qLU3RxFHN9w/R6SdGMkUCFI/AAAAAAAAAFI/t2GmbwTJSn8/S220/msn.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-3676771788870492298</id><published>2009-04-23T19:49:00.003-03:00</published><updated>2009-04-23T19:56:26.965-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AIR'/><category scheme='http://www.blogger.com/atom/ns#' term='BSoares'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Google Analytics'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>AIR Install Badge com Google Analytics</title><content type='html'>Já a algum tempo procurei um &lt;a href="http://www.adobe.com/devnet/air/articles/badge_for_air.html" target="_blank"&gt;Air Install Badge&lt;/a&gt; com o &lt;a href="http://www.google.com/analytics/" target="_self"&gt;Google Analytics&lt;/a&gt; integrado e acabei encontrando o do &lt;a href="http://www.rogue-development.com/blog2/2008/02/air-install-badge-google-analytics/" target="_blank"&gt;Marc's Musings&lt;/a&gt;, mas me pareceu meio "travado" uma vez que é necessário compilar o flash com as informações do seu aplicativo AIR. Sendo assim modifiquei o original para receber via FlashVars o nome da aplicação, versão, endereço do .air, e é claro o código AnalyticsTracker.&lt;br /&gt;&lt;br /&gt;O &lt;a href="http://googletranslation.bsoares.com.br/" target="_blank"&gt;Google Translation Plus&lt;/a&gt; (uma aplicação que estou desenvolvendo) já está utilizando o Install Badge modificado, verifique.&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Como é mostrado o relatório no Google Analytics:&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/googleanalytics.gif"&gt;&lt;img class="alignnone size-full wp-image-86" title="googleanalytics" src="http://blog.bsoares.com.br/wp-content/uploads/2009/04/googleanalytics.gif" alt="googleanalytics" width="468" height="169" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Principal trecho de código do Install Badge alterado:&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;// Google Analytics Tracking&lt;br /&gt;if (tracker != null) {&lt;br /&gt;   tracker.trackPageview("/" + appName + "/" + action);&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;&lt;strong&gt;Atenção:&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;Existem muitas variáreis para serem alteradas no arquivo AirAppPage.html, como por exemplo: analyticstracker, airversion, appname, appurl, appid, appversion, etc...&lt;br /&gt;&lt;br /&gt;Download do &lt;a href="http://blog.bsoares.com.br/wp-content/uploads/2009/04/airinstallbadgeanalytics.zip" target="_blank"&gt;AIR Install Badge com Google Analytics&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conteúdo relacionado:&lt;/strong&gt;&lt;br /&gt;Post original: &lt;a href="http://blog.bsoares.com.br/as3/air-install-badge-with-google-analytics" target="_blank"&gt;http://blog.bsoares.com.br/as3/air-install-badge-with-google-analytics&lt;/a&gt;&lt;br /&gt;AIR Install Badge: &lt;a href="http://www.adobe.com/devnet/air/articles/badge_for_air.html" target="_blank"&gt;http://www.adobe.com/devnet/air/articles/badge_for_air.html&lt;/a&gt;&lt;br /&gt;gaforflash: &lt;a href="http://code.google.com/p/gaforflash/" target="_blank"&gt;Google Analytics Tracking For Adobe Flash&lt;/a&gt;&lt;br /&gt;swfobject: &lt;a href="http://code.google.com/p/swfobject/" target="_blank"&gt;http://code.google.com/p/swfobject/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-3676771788870492298?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/3676771788870492298/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=3676771788870492298' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/3676771788870492298'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/3676771788870492298'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2009/04/air-install-badge-com-google-analytics.html' title='AIR Install Badge com Google Analytics'/><author><name>Bruno Soares</name><uri>http://www.blogger.com/profile/08637607007716713955</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp2.blogger.com/_qLU3RxFHN9w/R6SdGMkUCFI/AAAAAAAAAFI/t2GmbwTJSn8/S220/msn.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-1370901356418539223</id><published>2009-04-17T21:40:00.002-03:00</published><updated>2009-04-17T21:47:17.302-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Música'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='FabioTNT'/><category scheme='http://www.blogger.com/atom/ns#' term='Matemática'/><category scheme='http://www.blogger.com/atom/ns#' term='Projetos'/><category scheme='http://www.blogger.com/atom/ns#' term='Sites'/><category scheme='http://www.blogger.com/atom/ns#' term='Amigos'/><title type='text'>aM Tone Matrix</title><content type='html'>Checando os novos projetos do insano André Michelle, vi &lt;a href="http://lab.andre-michelle.com/tonematrix"&gt;este ultimo&lt;/a&gt; e agora não consigo mais parar de me divertir nele.&lt;br /&gt;Ultimamente o André tem montado bastante coisa baseada em som e musica, tudo por que ele está juntamente com uma equipe trabalhando arduamente no desenvolvimento da &lt;a href="http://www.hobnox.com/audiotool"&gt;Hobnox&lt;/a&gt;, ferramenta que tem feito um barulho enorme pela net.&lt;br /&gt;&lt;br /&gt;Para quem não conhece o André e seu trabalho, vale muuuuuuito a pena uma visita em &lt;a href="http://void.andre-michelle.com/"&gt;seu site&lt;/a&gt;, ele além de Físico, maluco, insano e desenvolvedor, também é músico. Fica ai a dica. []s&lt;br /&gt;&lt;br /&gt;http://void.andre-michelle.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-1370901356418539223?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/1370901356418539223/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=1370901356418539223' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/1370901356418539223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/1370901356418539223'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2009/04/am-tone-matrix.html' title='aM Tone Matrix'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-5953349075548672326</id><published>2009-03-31T23:24:00.006-03:00</published><updated>2009-03-31T23:56:57.018-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BSoares'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Matemática'/><category scheme='http://www.blogger.com/atom/ns#' term='Util'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Regra de três simplificada (Map do Processing)</title><content type='html'>Se tem uma coisa que programador Flash faz muito é &lt;a href="http://www.somatematica.com.br/fundam/regra3s.php" target="_blank"&gt;regra de três&lt;/a&gt;, esta pequena formula matemática é executada diversas vezes dentro de um projeto, e ela é usada para &lt;em&gt;&lt;strong&gt;transferir um valor dentro de um intervalo de números para o valor equivalente em um outro intervalo de números&lt;/strong&gt;&lt;/em&gt;. Pro exemplo, no loading de uma imagem você sabe quantos bytes tem a imagem e quantos bytes já foram carregados, agora como calcular o percentual de carregamento? Vamos supor que a imagem tenha 300 bytes e já foram carregados 150 então temos 50% carregado, para chegar a este resultado de uma forma fácil e padronizada:&lt;br /&gt;&lt;pre&gt;trace(NumberUtils.map(150, 0, 300, 0, 100));&lt;/pre&gt;&lt;br /&gt;Converti o script escrito originalmente em &lt;a href="http://processing.org/reference/map_.html" target="_blank"&gt;Processing&lt;/a&gt; e &lt;a href="http://arduino.cc/en/Reference/Map" target="_blank"&gt;Arduino&lt;/a&gt; para ActionScript 3.0, agora é só usar.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Mais exemplos de uso:&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;import br.com.bsoares.utils.NumberUtils;&lt;br /&gt;&lt;br /&gt;trace(NumberUtils.map(50, 0, 100, 0, 10));&lt;br /&gt;// 5&lt;br /&gt;&lt;br /&gt;trace(NumberUtils.map(90, 0, 100, 0, 10));&lt;br /&gt;// 9&lt;br /&gt;&lt;br /&gt;trace(NumberUtils.map(90, 100, 0, 0, 10));&lt;br /&gt;// 1&lt;br /&gt;&lt;br /&gt;trace(NumberUtils.map(-90, -100, 100, 0, 10));&lt;br /&gt;// 0.5&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;Classe completa:&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;/**&lt;br /&gt;* NumberUtils&lt;br /&gt;*&lt;br /&gt;* @author Bruno Soares&lt;br /&gt;* @link http://www.bsoares.com.br&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;package br.com.bsoares.utils&lt;br /&gt;{&lt;br /&gt;public class NumberUtils&lt;br /&gt;{&lt;br /&gt; public function NumberUtils() { }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * Transfere um valor de um intervalo para outro.&lt;br /&gt;  * Versão original escrita em Processing (http://processing.org/reference/map_.html).&lt;br /&gt;  *&lt;br /&gt;  * @param value Valor a ser transferido&lt;br /&gt;  * @param inMin Menor valor do primeiro intervalo&lt;br /&gt;  * @param inMax Maior valor do primeiro intervalo&lt;br /&gt;  * @param outMin Menor valor do segundo intervalo&lt;br /&gt;  * @param outMax Maior valor do segundo intervalo&lt;br /&gt;  *&lt;br /&gt;  * @return Valor calculado&lt;br /&gt;  */&lt;br /&gt; public static function map(value:Number, inMin:Number, inMax:Number, outMin:Number, outMax:Number):Number&lt;br /&gt; {&lt;br /&gt;  return (value - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;Links relacionados:&lt;/strong&gt;&lt;br /&gt;Post original: &lt;a href="http://blog.bsoares.com.br/technology/regra-de-tres-simplificada-map-do-processing"&gt;http://blog.bsoares.com.br/technology/regra-de-tres-simplificada-map-do-processing&lt;/a&gt;&lt;br /&gt;Processing: &lt;a href="http://processing.org/reference/map_.html" target="_blank"&gt;http://processing.org/reference/map_.html&lt;/a&gt;&lt;br /&gt;Arduino: &lt;a href="http://arduino.cc/en/Reference/Map" target="_blank"&gt;http://arduino.cc/en/Reference/Map&lt;/a&gt;&lt;br /&gt;Regra de Três: &lt;a href="http://pt.wikipedia.org/wiki/Regra_de_tr%C3%AAs" target="_blank"&gt;http://pt.wikipedia.org/wiki/Regra_de_tr%C3%AAs&lt;/a&gt;, &lt;a href="http://www.somatematica.com.br/fundam/regra3s.php" target="_blank"&gt;http://www.somatematica.com.br/fundam/regra3s.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Enjoy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-5953349075548672326?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/5953349075548672326/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=5953349075548672326' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/5953349075548672326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/5953349075548672326'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2009/03/regra-de-tres-simplificada-map-do.html' title='Regra de três simplificada (Map do Processing)'/><author><name>Bruno Soares</name><uri>http://www.blogger.com/profile/08637607007716713955</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp2.blogger.com/_qLU3RxFHN9w/R6SdGMkUCFI/AAAAAAAAAFI/t2GmbwTJSn8/S220/msn.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-1449156605982048658</id><published>2008-12-16T17:40:00.005-02:00</published><updated>2008-12-16T18:02:30.487-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='off-topic'/><title type='text'>OFF POST!!! Nick from DD is blundering with his viral on Web.</title><content type='html'>In order to help my friend Nick from Digital Drops, FFL Team shows you this very impressive presentation!&lt;br /&gt;&lt;br /&gt;Take a look and... laugh&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/_hIxARgIxec&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/_hIxARgIxec&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=en&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;For more informations: &lt;a href='http://www.desafiolg.com.br/'&gt;Desafio LG&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-1449156605982048658?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/1449156605982048658/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=1449156605982048658' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/1449156605982048658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/1449156605982048658'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2008/12/off-post-nick-from-dd-is-blundering.html' title='OFF POST!!! Nick from DD is blundering with his viral on Web.'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-2899132635944255950</id><published>2008-11-14T20:45:00.007-02:00</published><updated>2008-11-14T21:16:50.615-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='FabioTNT'/><category scheme='http://www.blogger.com/atom/ns#' term='RegEx'/><title type='text'>Removendo acentos com AS3 e RegEx</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_uAsJb_LXDmg/SR4FTTNNWQI/AAAAAAAAAEY/kw75rLi97tc/s1600-h/regex.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 215px; height: 289px;" src="http://3.bp.blogspot.com/_uAsJb_LXDmg/SR4FTTNNWQI/AAAAAAAAAEY/kw75rLi97tc/s320/regex.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5268654443201386754" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nós da equipe #flashFrameLess, estamos desenvolvendo nosso primeiro projeto Flash/&lt;a href='http://www.arduino.cc/'&gt;Arduino&lt;/a&gt;, neste projeto estamos utilizando um display digital de 16x2 que não suporta acentos, por isso acabamos escrevendo um método onde os caracteres são retirados da string, antes de ser enviado para a Arduino, achei por bem compartilhar isso com vocês, já que é uma coisa bem útil e pelo que vi, muita gente anda procurando. Para quem não sabe oque é RegEx, vale uma olhada rápida &lt;a href="http://en.wikipedia.org/wiki/Regular_expression"&gt;aqui.&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Vamos aos codes:&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Primeiro criamos um Array, para guardarmos os nossos patterns e o seu respectivo caracter de substituição:&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;var arrPatterns:Array = new Array();&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Logo em seguida abastecemos o array com um objeto contendo o pattern e o caractere&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;arrPatterns.push( { pattern:/[äáàâãª]/g,  char:'a' } );&lt;br /&gt;arrPatterns.push( { pattern:/[ÄÁÀÂÃ]/g,  char:'A' } );&lt;br /&gt;arrPatterns.push( { pattern:/[ëéèê]/g,   char:'e' } );&lt;br /&gt;arrPatterns.push( { pattern:/[ËÉÈÊ]/g,   char:'E' } );&lt;br /&gt;arrPatterns.push( { pattern:/[íîïì]/g,   char:'i' } );&lt;br /&gt;arrPatterns.push( { pattern:/[ÍÎÏÌ]/g,   char:'I' } );&lt;br /&gt;arrPatterns.push( { pattern:/[öóòôõº]/g,  char:'o' } );&lt;br /&gt;arrPatterns.push( { pattern:/[ÖÓÒÔÕ]/g,  char:'O' } );&lt;br /&gt;arrPatterns.push( { pattern:/[üúùû]/g,   char:'u' } );&lt;br /&gt;arrPatterns.push( { pattern:/[ÜÚÙÛ]/g,   char:'U' } );&lt;br /&gt;arrPatterns.push( { pattern:/[ç]/g,   char:'c' } );&lt;br /&gt;arrPatterns.push( { pattern:/[Ç]/g,   char:'C' } );&lt;br /&gt;arrPatterns.push( { pattern:/[ñ]/g,   char:'n' } );&lt;br /&gt;arrPatterns.push( { pattern:/[Ñ]/g,   char:'N' } );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;Criamos o método de acesso&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function removeAccents( str:String ):String{&lt;br /&gt; &lt;br /&gt; for( var i:uint = 0; i &lt; arrPatterns.length; i++ ){&lt;br /&gt;  &lt;br /&gt;  str = str.replace( arrPatterns[i].pattern, arrPatterns[i].char );&lt;br /&gt;  &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; return str;&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;E por ultimo, é só usar!! :-)&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var strTeste:String = 'Éstá Frásé têm tódàs vôgáîs ácêñtûãdás';&lt;br /&gt;&lt;br /&gt;trace( strTeste );&lt;br /&gt;&lt;br /&gt;trace( removeAccents( strTeste ) ); //Esta Frase tem todas vogais acentuadas&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Fim!!! Espero que seja útil! []s galera!&lt;/div&gt;&lt;div&gt;Aproveito para indicar um ótimo livro de RegEx:  &lt;a href="http://novatec.com.br/livros/expreg/?idA=118"&gt;Expressões Regulares – Uma Abordagem Divertida&lt;/a&gt;!&lt;/div&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-2899132635944255950?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/2899132635944255950/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=2899132635944255950' title='4 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/2899132635944255950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/2899132635944255950'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2008/11/removendo-acentos-com-as3-e-regex.html' title='Removendo acentos com AS3 e RegEx'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_uAsJb_LXDmg/SR4FTTNNWQI/AAAAAAAAAEY/kw75rLi97tc/s72-c/regex.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-9113470180967645525</id><published>2008-11-12T15:25:00.004-02:00</published><updated>2008-11-12T15:44:21.984-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CS4'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><title type='text'>Adobe Suite CS4, disponível para download.</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_uAsJb_LXDmg/SRsUaamp-lI/AAAAAAAAAEQ/ijrXZUMoeoU/s1600-h/adobe.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 201px;" src="http://4.bp.blogspot.com/_uAsJb_LXDmg/SRsUaamp-lI/AAAAAAAAAEQ/ijrXZUMoeoU/s320/adobe.png" alt="" id="BLOGGER_PHOTO_ID_5267826633190537810" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finalmente a Adobe liberou as versões trial dos softwares que compõem a nova suite CS4.&lt;br /&gt;Mas não se anime tanto, com isso, milhões estão baixando e o server fica indisponível constantemente, bom pelo menos comigo aconteceu isso.&lt;br /&gt;&lt;br /&gt;Abraços galera!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-9113470180967645525?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/9113470180967645525/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=9113470180967645525' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/9113470180967645525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/9113470180967645525'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2008/11/adobe-suite-cs4-disponvel-para-download.html' title='Adobe Suite CS4, disponível para download.'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_uAsJb_LXDmg/SRsUaamp-lI/AAAAAAAAAEQ/ijrXZUMoeoU/s72-c/adobe.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-5571108637904265036</id><published>2008-10-15T08:06:00.005-03:00</published><updated>2008-10-15T14:00:26.312-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Diesel'/><category scheme='http://www.blogger.com/atom/ns#' term='CS4'/><category scheme='http://www.blogger.com/atom/ns#' term='FlashPlayer10'/><category scheme='http://www.blogger.com/atom/ns#' term='FabioTNT'/><category scheme='http://www.blogger.com/atom/ns#' term='Novidades'/><category scheme='http://www.blogger.com/atom/ns#' term='FlashPlayer'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Adobe lança o Flash Player 10 Final - agora sim CS4!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px;" src="http://www.adobe.com/shockwave/download/images/flashplayer_100x100.jpg" alt="" border="0" /&gt;&lt;/a&gt;Fala galera! Boas noticias para os que já estão criando projetos em FP10!&lt;br /&gt;Agora não só os outros developer vão ter acesso ao seu novo invento, finalmente a Adobe lançou a versão final do FP10 e já está disponível &lt;a href="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash"&gt;aqui&lt;/a&gt; o link de sempre!&lt;br /&gt;&lt;br /&gt;Bom é isso pessoal!!&lt;br /&gt;Abração!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-5571108637904265036?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/5571108637904265036/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=5571108637904265036' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/5571108637904265036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/5571108637904265036'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2008/10/adobe-lana-o-flash-player-10-final.html' title='Adobe lança o Flash Player 10 Final - agora sim CS4!'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-7319369333886451273</id><published>2008-09-27T01:44:00.006-03:00</published><updated>2008-10-06T11:02:06.780-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Diesel'/><category scheme='http://www.blogger.com/atom/ns#' term='FlashPlayer10'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='FabioTNT'/><category scheme='http://www.blogger.com/atom/ns#' term='Novidades'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='TimeLine'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 4.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><title type='text'>Flash CS4 e não Actionscript 4 - Diesel</title><content type='html'>&lt;span class="Apple-style-span"   style="border-collapse: separate; color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;font-family:'Times New Roman';font-size:16;"&gt;&lt;div style="margin: 8px; font-family: arial; font-style: normal; font-variant: normal; font-weight: normal; font-size: small; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;&lt;p class="MsoNormal"&gt;Fala galera!&lt;/p&gt;&lt;p class="MsoNormal"&gt;Para os desavisados, no dia 23/10 a adobe lançou oficialmente a suite CS4. Da suite inteira, eu até agora só vi o Flash e na real é ele quem importa aqui para o blog.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Muito se esperava para o lançamento dessa nova versão do Flash, o famoso Diesel, por conta de seus novos recursos, mudanças na linguagem etc etc. Felizmente a Adobe não fez feio e o Flash veio bombando de novidades, claro que eu não vou conseguir colocar tudo aqui, estou somente a 2 dias usando o CS4 e não devo ter visto nem 1/10 das novidades.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Vamos lá:&lt;/p&gt;&lt;p class="MsoNormal"&gt;Logo de cara, digo de cara mesmo, já começam aparecer as novidades.&lt;/p&gt;&lt;p class="MsoNormal"&gt;A &lt;a href="http://www.fabiotnt.com/flashframeless/posts/FlashCS4/splash.jpg"&gt;&lt;span style="font-style: italic;"&gt;Splash screen&lt;/span&gt;&lt;/a&gt; já te da o aviso, prepare-se para se impressionar, assim que o flash monta a workspace é normal que você tome um grande susto, acontece que quase tudo mudou de cara e lugar. Da uma olhada:&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.fabiotnt.com/flashframeless/posts/FlashCS4/wellcome.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://www.fabiotnt.com/flashframeless/posts/FlashCS4/wellcome.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Timeline em baixo, ferramentas no canto direito, Flash sem barra do Windows ( ótimo ), propriedades no canto, abas e ferramentas nunca antes vistas, etc e etc...olha ai na imagem e tire suas conclusões!&lt;/p&gt;&lt;p class="MsoNormal"&gt;Na tela de welcome eu já fiquei empolgado, onde vem &lt;span style="font-style: italic; font-weight: bold;"&gt;Create New&lt;/span&gt;, você tem as opções: Adobe AIR e Mobile! Yeah já está tudo ae, Air 1.1 e Lite 3.0.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Se você achou tudo muito bizarro e fora do lugar, não se preocupe, da pra deixar do jeito que você quiser, inclusive tem um preset ‘classic’ para vc ter o CS3 de volta! Rs&lt;/p&gt;&lt;p class="MsoNormal"&gt;Não vou falar das coisas que já existiam, pois tudo está funcionando do mesmo jeito, tirando alguns atalhos tipo o &lt;span style="font-weight: bold; font-style: italic;"&gt;Zoom &lt;/span&gt;que agora está na tecla &lt;span style="font-style: italic; font-weight: bold;"&gt;M&lt;/span&gt; :-P.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Com o novo método de animação implementado na Flash, agora existe um painel chamado &lt;span style="font-weight: bold; font-style: italic;"&gt;Motion Editor&lt;/span&gt;, que não tem muito a ver com o método antigo de se animar as coisa, mas não se assuste, ainda existe o &lt;span style="font-weight: bold; font-style: italic;"&gt;ClassicTween&lt;/span&gt; :-P.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Ao clicar em &lt;span style="font-style: italic; font-weight: bold;"&gt;Create Motion Tween&lt;/span&gt; o ícone da Layer muda e indica que é uma Layer para animação! Só para animação, sem aquela mistureba de coisas que alguns fazem e o painel de motion fica disponível. Olha o tamanho do menino:&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.fabiotnt.com/flashframeless/posts/FlashCS4/motion.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://www.fabiotnt.com/flashframeless/posts/FlashCS4/motion.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;E acredite, ele fica maior ainda.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Para quem já usou o AE, percebe-se uma semelhança e o fato da timeline estar em baixo começa a ter mais sentido.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Existe também, um painel “Motion Presets” que te da algumas opções de anima pronta e que em um simples clique está tudo lá aplicado, em timeline ( nhé ), claro que eu não sou a favor disso, mas os animadores podem gostar.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Olha ae como fica:&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.fabiotnt.com/flashframeless/posts/FlashCS4/motion-lib.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://www.fabiotnt.com/flashframeless/posts/FlashCS4/motion-lib.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Outro cara interessante é o IK ( inverse kinematics ), bones, ossos e por ai vai.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Muito úteis e demoraram pacas para sair, eu particularmente achei que eles nasceriam na versão 8, já que um tal de MOHO estava na versão 5 e já possuía essa feature.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Para quem não conhece IK são ossos propriamente ditos, da uma olhada aqui e entenda melhor:&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://br.youtube.com/watch?v=wDjewbDF4bo"&gt;http://br.youtube.com/watch?v=wDjewbDF4bo&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Ele também altera a timeline e não é nada complicado de se manipular, tanto via código, quanto via timeline.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.fabiotnt.com/flashframeless/posts/FlashCS4/IK.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://www.fabiotnt.com/flashframeless/posts/FlashCS4/IK.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;A Publish Settings, continua praticamente igual, existem algumas opções de Aceleração de hardware, compressão e metadata. Como se pode ver no snap, podemos exportar desde flash player 1 / actionscript 1 até o atual FP10/AS3, incluindo FlashLite e Air também.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.fabiotnt.com/flashframeless/posts/FlashCS4/Publish.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://www.fabiotnt.com/flashframeless/posts/FlashCS4/Publish.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Agora vamos a parte que estava toooodo mundo esperando! O 3D!&lt;/p&gt;&lt;p class="MsoNormal"&gt;Na real esse 3D do FP10 é beeem, mas beeeem fraco, nem é um 3D, tá mais para um controle melhorado de distorções automáticas. Claro que ajuda, sim, é útil e tals, mas não é 3D.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.fabiotnt.com/flashframeless/posts/FlashCS4/3D.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px;" src="http://www.fabiotnt.com/flashframeless/posts/FlashCS4/3D.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;O que acontece, você só consegue manipular Planes, você não consegue por exemplo criar um cubo e sair manipulando ele como em um 3D studio da vida. Mas é legal e promete ajudar&lt;span&gt; &lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;/span&gt;bastante em coisas simples. Mas aquele negócio de que PPV, Sandy e afins estavam com dias contados pfff...pura lenda, pelo menos por enquanto.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Enfim, para animadores e designers, tem muuuuita coisa nova e que se não usada com devida moderação vai acabar ferrando com a vida dos Dev´s. Já para os dev´s as novidades não são muitas, ao contrario do que muita gente estava pensando, a linguagem ainda não mudou para o tão esperado AS4, não ainda, isso provavelmente só vai rolar lá para o ano que vem. Para quem quiser ver mais ou menos como vai ser a AS4, tem um post aqui falando sobre a ECMA4.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Nesta versão continuamos ainda com a AS3, porém com esses plus de 3D, IK e etc. Teoricamente é uma AS 3 turbinada.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Tem muita coisa ainda para falar, mas como eu ainda estou fuçando o menino, prefiro parar por aqui...se eu descobrir alguma coisa muuuuito legal e venho aqui e faço um post especifico.&lt;/p&gt;&lt;p class="MsoNormal"&gt;E chega por hoje que eu já estou com sono!!&lt;/p&gt;&lt;p class="MsoNormal"&gt;Abs galera!!&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Links:&lt;/p&gt;&lt;p class="MsoNormal"&gt;Animators:&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://flashthusiast.com/2008/09/22/the-new-way-of-tweening-in-flash-cs4-or-new-motion-in-flash-cs4-makes-your-animations-better-faster-stronger/"&gt;http://flashthusiast.com/2008/09/22/the-new-way-of-tweening-in-flash-cs4-or-new-motion-in-flash-cs4-makes-your-animations-better-faster-stronger/&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Developers:&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://help.adobe.com/en_US/AS3LCR/Flash_10.0/index.html"&gt;http://help.adobe.com/en_US/AS3LCR/Flash_10.0/index.html&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;Geral:&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://help.adobe.com/en_US/Flash/10.0_UsingFlash/WSd60f23110762d6b883b18f10cb1fe1af6-7beca.html"&gt;http://help.adobe.com/en_US/Flash/10.0_UsingFlash/WSd60f23110762d6b883b18f10cb1fe1af6-7beca.html&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a href="http://www.adobe.com/products/flash/"&gt;http://www.adobe.com/products/flash/&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;a href="http://www.adobe.com/products/flash/features/?view=topnew&amp;amp;promoid=DRHWS"&gt;http://www.adobe.com/products/flash/features/?view=topnew&amp;amp;promoid=DRHWS&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-7319369333886451273?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/7319369333886451273/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=7319369333886451273' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/7319369333886451273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/7319369333886451273'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2008/09/flash-cs4-e-no-actionscript-4-diesel.html' title='Flash CS4 e não Actionscript 4 - Diesel'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-4893979307950756153</id><published>2008-06-20T22:02:00.007-03:00</published><updated>2008-06-20T22:54:45.353-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ByteArray'/><category scheme='http://www.blogger.com/atom/ns#' term='JSON'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='FabioTNT'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='Util'/><category scheme='http://www.blogger.com/atom/ns#' term='Classes'/><title type='text'>AS3CoreLib</title><content type='html'>Hoje foi o dia de discutir sobre vários assuntos aqui no studio, banda larga, covardia, celular, etc etc! rs No final do dia ficou eu mais 3 amigos ( Anaya, Flávio e Rick ) discutindo algumas coisas sobre Flash e seus métodos nativos e ai rolou a indignação geral de o &lt;em&gt;replace &lt;/em&gt;do AS ser tão ruim. Foi ai que lembrei de uma biblioteca que venho usando e não passei para os amigos ( mui amigo eu rs ) e para me redimir geral resolvi escrever este post falando sobre a tal AS3 CoreLib.&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://code.google.com/p/as3corelib/"&gt;AS3CoreLib&lt;/a&gt; é uma biblioteca com várias classes com utilidades super corriqueiras, exemplo o replace, quem nunca precisou de um replace em AS? Altos malabarismos para o fazer e sempre na hora você nunca lembra em que projeto você usou e tem que fazer o método todinho do 0.&lt;br /&gt;&lt;br /&gt;Pensando nisso essa galera montou essa biblioteca que é uma super mão na roda.&lt;br /&gt;As classes disponíveis são:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Utils ( Array, Date, Dictionary, Int, NumberFormatter, String e XML )&lt;/li&gt;&lt;li&gt;Crypto( MD5, SHA e WSS )&lt;/li&gt;&lt;li&gt;Validators( Address, Email, Phone, VCard )&lt;/li&gt;&lt;li&gt;Images( BitString, JPG-Encoder e PNG-Encoder )&lt;/li&gt;&lt;li&gt;Net( &lt;a href="http://tools.ietf.org/html/rfc2817"&gt;Socket RFC2817&lt;/a&gt;, URI e MimeTypeMap )&lt;/li&gt;&lt;li&gt;Serialization( JSON - Encoder, Decoder etc etc )&lt;/li&gt;&lt;li&gt;WebApis( Flickr, YouTube e outros ) - Custom&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Deu pra ver que as classes vão desde um simples replace, com o método disponível na StringUtils até trabalhar com objetos serializados JSON, criptografia e Encoding de Imagens.&lt;/p&gt;&lt;p&gt;O melhor de tudo isso é na hora de usar, separei uns exemplos interessantes.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="width:450px;"&gt;&lt;br /&gt;//Substitui uma determinada string dentro de outra string.&lt;br /&gt;replace(input:String, replace:String, replaceWith:String):String&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;//Compara duas Strings:&lt;br /&gt;stringsAreEqual(s1:String, s2:String, caseSensitive:Boolean):Boolean&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;//Verifica se um objeto existe em um Array&lt;br /&gt;arrayContainsValue(arr:Array, value:Object):Boolean&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;//Remove um objeto de dentro de um Array&lt;br /&gt;removeValueFromArray(arr:Array, value:Object):void&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;//Compara dois arrays&lt;br /&gt;arraysAreEqual(arr1:Array, arr2:Array):Boolean&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;//Converte um Int em um Hexa&lt;br /&gt;toHex( n:int, bigEndian:Boolean = false ):String&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;//Corrige o 0 à esquerda de numeros menores que 10&lt;br /&gt;addLeadingZero(n:Number):String&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;//Retorna um Hash MD5&lt;br /&gt;hash( s:String ):String&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;//Retorna um Hash Base64 SHA&lt;br /&gt;hashToBase64( s:String ):String&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;//Retorna um ByteArray - JPG/PNG a partir de um BitmapData&lt;br /&gt;encode(image:BitmapData):ByteArray&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;//Retorna o MimeType de uma determinada extensão&lt;br /&gt;etMimeType(extension:String):String&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;//Retorna um Obj JSON&lt;br /&gt;encode( o:Object ):String&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Chega!&lt;br /&gt;&lt;br /&gt;O &lt;a href="http://code.google.com/p/as3corelib/"&gt;GoogleCode do Projeto é este aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Como o projeto está em constante atualização é legal baixar a biblioteca pelo &lt;a href="http://as3corelib.googlecode.com/svn/trunk/"&gt;SVN&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bom é isso!&lt;br /&gt;&lt;br /&gt;Abraços e bom final de semana!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-4893979307950756153?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/4893979307950756153/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=4893979307950756153' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/4893979307950756153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/4893979307950756153'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2008/06/as3corelib.html' title='AS3CoreLib'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-681639164356135618</id><published>2008-05-22T23:15:00.003-03:00</published><updated>2008-05-22T23:42:02.408-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Remoting'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSource'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='Novidades'/><category scheme='http://www.blogger.com/atom/ns#' term='Adobe'/><category scheme='http://www.blogger.com/atom/ns#' term='FlashPlayer'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='AMF'/><title type='text'>Open Screen Project</title><content type='html'>Recentemente a Adobe anunciou o "Open Screen Project", liberou o SWF, FLV/FV4 e apartir de então, qualquer empresa que quiser colocar suporte a tais formatos em algum dispositivo, poderá faze-lo sem pagar nada por isso, o que provavelmente vai aumentar a gama de mobiles equipados com Flash Player, porém o projeto não para por ai, juntamente com a Adobe estão grandes empresas como: ARM, Cisco, Intel, LGE, Marvell, Motorola, Nokia, Qualcomm, Samsung, Sony Ericsson, Toshiba dentre outras.&lt;br /&gt;&lt;br /&gt;Com isso não só mobiles estão no jogo, mas qualquer dispositivo que possa "pedir" interatividade, como por exemplo as Tvs, o que vai ser muito bom por sinal, assim esses menus lerdos e cheios de limites hoje usados em TV interativa provavelmente vão ficar bem melhores. Daqui a pouco até sua geladeira poderá estar rodando o Flash Player :-)&lt;br /&gt;&lt;br /&gt;Acredita que ainda tem mais?&lt;br /&gt;Juntamente com o Flash Player foi liberado também o AMF, dando assim mais uma carta, o Flash-Remoting.&lt;br /&gt;&lt;br /&gt;Para quem quiser ler mais sobre o assunto, &lt;a href="http://www.adobe.com/openscreenproject/quotes/"&gt;link oficial da Adobe e seu incrivel projeto.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-681639164356135618?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/681639164356135618/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=681639164356135618' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/681639164356135618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/681639164356135618'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2008/05/open-screen-project.html' title='Open Screen Project'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-4438607727399000370</id><published>2008-05-19T11:57:00.006-03:00</published><updated>2008-05-19T18:27:25.294-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 4.0'/><title type='text'>ActionScript 4!</title><content type='html'>A versão 4 do ECMAScript já tem decumentos oficiais na web, mostrando algumas melhorias e outros pontos da nova versão da linguagem, que pelo que parece vai ganhar ainda mais velocidade.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ecmascript.org/es4/spec/overview.pdf"&gt;Neste Link&lt;/a&gt; temos 40 paginas falando sobre o projeto, não li todas ainda, mas logo no inicio e em uma paginada rápida da pra ver que muita coisa boa está sendo aplicada.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ecmascript.org/es4/spec/evolutionary-programming-tutorial.pdf"&gt;Neste outro&lt;/a&gt; ( já ) temos alguns tutorias sobre a nova versão.&lt;br /&gt;&lt;br /&gt;Bastante coisa já é encontrada do Google buscando ActionScript 4, a grande maioria em Inglês, deem uma Googlada e vejam alguns posts e artigos espalhados por ai, vale total a pena.&lt;br /&gt;&lt;br /&gt;Fonte: &lt;a href="http://blog.oaxoa.com/"&gt;OAXOA&lt;/a&gt; / &lt;a href="http://moock.org/lectures/newInECMAScript4/"&gt;Moock&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-4438607727399000370?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/4438607727399000370/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=4438607727399000370' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/4438607727399000370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/4438607727399000370'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2008/05/action-script-4.html' title='ActionScript 4!'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-7044100486440048047</id><published>2008-04-24T23:19:00.004-03:00</published><updated>2008-04-24T23:27:00.202-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meta'/><title type='text'>Um novo começo está chegando</title><content type='html'>De fato nunca escrevi no Frameless, e meu primeiro post será meta, desculpem. A questão é que o Fábio me chamou pro Frameless pra dar uma força com o blogger porque eu tinha mais experiência. O tempo passou, eu adicionei umas bobaginhas e ficou por isso mesmo. &lt;br /&gt;&lt;br /&gt;Passou mais tempo e comecei a perceber o grande potencial que o FFL tem. E ao mesmo tempo descobri as maravilhas do WordPress. Então comecei a pilhar meus companheiros Framelezeiros a fazer a mudança. Passou mais tempo, e o Frameless está começando a ser elogiado e reconhecido por algumas pessoas, o que é um grande orgulho para todos nós e ainda estamos de cara velha.&lt;br /&gt;&lt;br /&gt;Portanto aguardem, estamos trabalhando com afinco sempre que sobra um tempinho para trazer a versão 2.0 do Frameless, mais bonito, mais organizado e mais eficiente, tudo o que Frameless deve ser.&lt;br /&gt;&lt;br /&gt;E além de pilhar para trocarmos de ferramenta, farei-me mais presente nos posts. Estou cozinhando alguns que espero ser úteis para aqueles que ainda tem medo de Frameless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-7044100486440048047?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/7044100486440048047/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=7044100486440048047' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/7044100486440048047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/7044100486440048047'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2008/04/um-novo-comeo-est-chegando.html' title='Um novo começo está chegando'/><author><name>fmafra</name><uri>http://www.blogger.com/profile/08579409052924946840</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://bp2.blogger.com/_SkYK0tH02QI/R1QvGT4XeKI/AAAAAAAAADU/yeLXLpqS7-4/S220/goodyea.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-539607134697830026</id><published>2008-03-27T21:36:00.015-03:00</published><updated>2008-03-27T23:03:02.768-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FabioTNT'/><category scheme='http://www.blogger.com/atom/ns#' term='MP3'/><category scheme='http://www.blogger.com/atom/ns#' term='Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='Sound'/><category scheme='http://www.blogger.com/atom/ns#' term='Amigos'/><title type='text'>Loop perfeito usando fonte MP3</title><content type='html'>Fala galera...depois de muuuito tempo mais um post.&lt;br /&gt;Hoje a tarde no Studio um colega de trabalho ( Cauê ) perguntou aos Devs presentes se alguém já havia arranjado uma solução para fazer loop com MP3, para quem já tentou fazer isso com certeza se frustou com os paddings iniciais e finais que o MP3 sempre fica e acabou optando pelo WAV.&lt;br /&gt;Neste post, mostro como contornar esse tipo de problema, podendo assim ter um loop perfeito em MP3, que é beeeeem mais leve que WAV, fazendo assim você ganhar uns Kb no seu filme.&lt;br /&gt;&lt;br /&gt;Primeiramente peguei uma musica do rapper Xzbit e cortei o inicio para fazer o nosso Loop, na imagem eu mostro o arquivo em WAV, observe que o spectro é perfeito ( sem paddings ):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fabiotnt.com/flashframeless/tutorials/perfectMp3Loop/_img/01.jpg"&gt;&lt;img src="http://fabiotnt.com/flashframeless/tutorials/perfectMp3Loop/_img/01p.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Porém assim que salvamos o mesmo arquivo como MP3 os paddings aparecem:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fabiotnt.com/flashframeless/tutorials/perfectMp3Loop/_img/02.jpg"&gt;&lt;img src="http://fabiotnt.com/flashframeless/tutorials/perfectMp3Loop/_img/02p.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Para solucionar isso, precisamos primeiramente de 2 informações.&lt;br /&gt;&lt;br /&gt;O padding inicial:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fabiotnt.com/flashframeless/tutorials/perfectMp3Loop/_img/03.jpg"&gt;&lt;img src="http://fabiotnt.com/flashframeless/tutorials/perfectMp3Loop/_img/03p.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;E o padding final:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fabiotnt.com/flashframeless/tutorials/perfectMp3Loop/_img/04.jpg"&gt;&lt;img src="http://fabiotnt.com/flashframeless/tutorials/perfectMp3Loop/_img/04p.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Com base na seleção podemos ver que o MP3 em questão tem 26ms de padding inicial e 12ms de padding final. Com esses dois valores na mão podemos começar nosso código.&lt;br /&gt;&lt;br /&gt;Neste tutorial estou utilizando AS2 ( ainda ).&lt;br /&gt;&lt;br /&gt;As primeiras linhas como sempre são as variaveis que utilizaremos:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;//--------------------------------------------------------------------//&lt;br /&gt;// 1 -  Variáveis do Filme&lt;br /&gt;//&lt;br /&gt;var skipEnd:Number = 12; //Padding Final&lt;br /&gt;var skipIni:Number = 26; //Padding Inicial&lt;br /&gt;&lt;br /&gt;var soundFile:String = "loopXzbit.mp3"; //Arquivo MP3&lt;br /&gt;&lt;br /&gt;var mySound:Sound = new Sound();&lt;br /&gt;&lt;br /&gt;var stopPoint:Number; //Variavel que indicará o ponto final do som.&lt;br /&gt;&lt;br /&gt;var interval:Number;//SetInterval que será utilizado para verificar a posição do som.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Depois disso, criamos as funções necessárias para executar o Loop.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;//&lt;br /&gt;//--------------------------------------------------------------------//&lt;br /&gt;// 2 -  Funções Gerais&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;//Função que iniciao som e abastece as variaveis.&lt;br /&gt;mySound.onLoad = function(){&lt;br /&gt;//Declara o ponto final do Som.&lt;br /&gt;stopPoint = mySound.duration - skipEnd;&lt;br /&gt;//Inicia o Som com o padding inicial.&lt;br /&gt;mySound.start( skipIni/1000 );&lt;br /&gt;//Intervalo que verifica a posição do Som.&lt;br /&gt;interval = setInterval( loopSound, 1 );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Função de Loop&lt;br /&gt;function loopSound(){&lt;br /&gt;//Verifica se o som já chegou a final.&lt;br /&gt;if( mySound.position &gt; stopPoint ){&lt;br /&gt;mySound.stop();&lt;br /&gt;//Reinicia o som.&lt;br /&gt;mySound.start( skipIni/1000 );&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Função que inicia o Loop.&lt;br /&gt;function init(){&lt;br /&gt;mySound.loadSound( soundFile );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;E no final de tudo, chamamos a função inicial.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;//&lt;br /&gt;//--------------------------------------------------------------------//&lt;br /&gt;// 3 -  Chamadas das Funções&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;init();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pronto, nosso loop está ai funcionando perfeitamente.&lt;br /&gt;&lt;br /&gt;Exemplo:&lt;br /&gt;Clique para iniciar o Loop.&lt;br /&gt;&lt;iframe id="perfectLoop" name="perfectLoop" marginwidth="0" marginheight="0" src="http://fabiotnt.com/flashframeless/tutorials/perfectMp3Loop/" frameborder="0" height="102" scrolling="no" width="302"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Codigo Completo:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;//------------------------------------------//&lt;br /&gt;// FlashFrameLess / Blog        //&lt;br /&gt;// AS desenvolvida por Fábio Lima. 2008/03 //&lt;br /&gt;// fabio@fabiotnt.com      //&lt;br /&gt;//------------------------------------------//&lt;br /&gt;//&lt;br /&gt;//  Ordem de procedência da ActionScript&lt;br /&gt;//&lt;br /&gt;//  1)  Variáveis do Filme&lt;br /&gt;//  2)  Funções Gerais&lt;br /&gt;//         • Script das Funções&lt;br /&gt;//   • Chamada de outras Funções&lt;br /&gt;//  3) Chamadas das Funções&lt;br /&gt;//&lt;br /&gt;//--------------------------------------------------------------------//&lt;br /&gt;// 1 -  Variáveis do Filme&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;var skipEnd  : Number  = 12;&lt;br /&gt;var skipIni  : Number  = 26;&lt;br /&gt;var soundFile  : String  = "loopXzbit.mp3";&lt;br /&gt;var mySound  : Sound  = new Sound();&lt;br /&gt;var stopPoint : Number;&lt;br /&gt;var interval : Number;&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;//--------------------------------------------------------------------//&lt;br /&gt;// 2 -  Funções Gerais&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;//Função que iniciao som e abastece as variaveis.&lt;br /&gt;mySound.onLoad = function(){&lt;br /&gt;//Declara o ponto final do Som.&lt;br /&gt;stopPoint = mySound.duration - skipEnd;&lt;br /&gt;//Inicia o Som com o padding inicial.&lt;br /&gt;mySound.start( skipIni/1000 );&lt;br /&gt;//Intervalo que verifica a posição do Som.&lt;br /&gt;interval = setInterval( loopSound, 1 );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Função de Loop&lt;br /&gt;function loopSound(){&lt;br /&gt;//Verifica se o som já chegou a final.&lt;br /&gt;if( mySound.position &gt; stopPoint ){&lt;br /&gt;mySound.stop();&lt;br /&gt;//Reinicia o som.&lt;br /&gt;mySound.start( skipIni/1000 );&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Função que inicia o Loop.&lt;br /&gt;function init(){&lt;br /&gt;mySound.loadSound( soundFile );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;//--------------------------------------------------------------------//&lt;br /&gt;// 3 -  Chamadas das Funções&lt;br /&gt;//&lt;br /&gt;&lt;br /&gt;init();&lt;br /&gt;&lt;/pre&gt;Baixe o projeto &lt;a href="http://fabiotnt.com/flashframeless/tutorials/perfectMp3Loop/perfectLoop.zip"&gt;aqui.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bom é isso galera, espero ter ajudado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-539607134697830026?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/539607134697830026/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=539607134697830026' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/539607134697830026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/539607134697830026'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2008/03/loop-perfeito-usando-fonte-mp3.html' title='Loop perfeito usando fonte MP3'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-7717862492936293640</id><published>2008-02-19T09:40:00.003-03:00</published><updated>2008-11-13T00:02:41.594-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BSoares'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Remoting'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='AMF'/><category scheme='http://www.blogger.com/atom/ns#' term='Fluorine'/><title type='text'>JPEG Encoder (AS3) + FluorineFx .NET Flash Remoting Gateway</title><content type='html'>&lt;div&gt;Vamos entender neste post como o flash cria um jpeg e o envia através do &lt;a href="http://www.fluorinefx.com/" target="_blank"&gt;FluorineFx&lt;/a&gt; para o servidor para que o servidor possa trabalhar o dado binário e salvar como um arquivo .JPG.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://fluorinefx-jpegencoder.bsoares.com.br/"&gt;Veja aqui um Exemplo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Não vamos entrar em detalhes da instalação e nem da configuração básica de um site com FluorineFx, pois no próprio site do FluorineFx existe um ótimo tutorial para esta configuração inicial (&lt;a href="http://www.fluorinefx.com/docs/fluorine/vswizardnet20.html" target="_blank"&gt;FluorineFx Visual Studio 2005 Wizard&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Em primeiro lugar, que fique entendido que a responsabilidade de gerar a imagem é do Flash, e o servidor deve apenas receber os binários para gravar em disco. Para gerarmos o código da imagem (&lt;span style="FONT-WEIGHT: bold"&gt;binário&lt;/span&gt;), vamos utilizar a classe &lt;span style="FONT-WEIGHT: bold"&gt;JPEGEncoder&lt;/span&gt;.&lt;br /&gt;Exemplo:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;import flash.display.BitmapData;&lt;br /&gt;import flash.utils.ByteArray;&lt;br /&gt;import JPEGEncoder;&lt;br /&gt;&lt;br /&gt;var bmpData : BitmapData = new BitmapData(width, height);&lt;br /&gt;bmpData.draw(MEU_MOVIECLIP);&lt;br /&gt;var objJPEGEncoder : JPEGEncoder = new JPEGEncoder(QUALIDADE);&lt;br /&gt;var dadosEncode : ByteArray = objJPEGEncoder.encode(bmpData);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Muito simples não? O método draw da classe &lt;span style="FONT-WEIGHT: bold"&gt;BitmapData&lt;/span&gt; obtém a imagem atual do clip, criamos uma instância da JPEGEncoder já passando a qualidade (0 à 100) e por fim “encodamos” o BitmapData utilizando o método encode da nossa instância da JPEGEncoder, ele nos retorna um Array de Bytes (&lt;span style="FONT-WEIGHT: bold"&gt;flash.utils.ByteArray&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Agora ficou simples, temos em mãos o array de bytes, podemos enviar ele para o servidor para que o mesmo possa fazer sua parte, que nada mais é que salvar estes bytes em um arquivo. Utilizando o FluorineFx fica fácil, veja o código abaixo:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;using System;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Drawing;&lt;br /&gt;using System.IO;&lt;br /&gt;using FluorineFx;&lt;br /&gt;using FluorineFx.AMF3;&lt;br /&gt;&lt;br /&gt;namespace ServiceLibrary.Imagem&lt;br /&gt;{&lt;br /&gt;    [RemotingService("Comentário da classe")]&lt;br /&gt;    public class JpegEncoder&lt;br /&gt;    {&lt;br /&gt;        public void Salvar(ByteArray byteArray)&lt;br /&gt;        {&lt;br /&gt;            // Transfere de ByteArray para MemoryStream&lt;br /&gt;            uint length = byteArray.Length;&lt;br /&gt;            byte[] bytes = new byte[length];&lt;br /&gt;            byteArray.ReadBytes(bytes, 0, length);&lt;br /&gt;            MemoryStream stream = new MemoryStream(bytes);&lt;br /&gt;&lt;br /&gt;            // Cria a imagem&lt;br /&gt;            Image image = Bitmap.FromStream(stream);&lt;br /&gt;&lt;br /&gt;            // Salva a imagem&lt;br /&gt;            image.Save(&lt;br /&gt;            HttpContext.Current.Server.MapPath("_upload/JpegEncoder.jpg"));&lt;br /&gt;&lt;br /&gt;            // Libera o espaço na memória&lt;br /&gt;            stream.Dispose();&lt;br /&gt;            image.Dispose();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Este código deve ser inserido dentro da ServiceLibrary que você criou para a sua Solution.&lt;br /&gt;&lt;br /&gt;Repare na classe ByteArray, é uma implementação do ByteArray do Flash no servidor, provida pelo FluorineFx.AMF3.&lt;br /&gt;&lt;br /&gt;Sua Solution Explorer deve se parecer um pouco com esta:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_qLU3RxFHN9w/R7rKlsBl3WI/AAAAAAAAAF4/Kv8k9BKPfAs/s1600-h/SolutionExplorer.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5168666271182871906" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_qLU3RxFHN9w/R7rKlsBl3WI/AAAAAAAAAF4/Kv8k9BKPfAs/s320/SolutionExplorer.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Deixei selecionadas as referências para System.Drawing e Web propositalmente, pois são referências necessárias para o funcionamento da nossa classe.&lt;br /&gt;&lt;br /&gt;Agora vamos a parte do envio do ByteArray criado no Flash apartir da JPEGEncoder para a nossa classe la no FluorineFx, a ServiceLibrary.Imagem.JpegEncoder. No exemplo anexo ao post (mais ao fim do post tem um link para download) utilizei uma classe que criei a pouco tempo para trabalhar com AMF no geral (br.com.bsoares.net.Amf), ela vai tomar muito espaço no post, portanto vou demonstrar somente a utilização dela:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;/**&lt;br /&gt; * Função de callback para JpegEncoder.Salvar&lt;br /&gt; * @param resposta&lt;br /&gt; */&lt;br /&gt;private function baixarSusseco (resposta : Object) : void {&lt;br /&gt;    UtilNet.navegar(Config.URL_UPLOAD + "JpegEncoder.jpg", "_blank");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Função de callback para JpegEncoder.Salvar&lt;br /&gt; * @param resposta&lt;br /&gt; */&lt;br /&gt;private function baixarErro (resposta : Object) : void {&lt;br /&gt;    trace("--&amp;lt; ERRO &amp;gt;----------------------");&lt;br /&gt;    for each (var o : Object in resposta) {&lt;br /&gt;        trace(o);&lt;br /&gt;    }&lt;br /&gt;    trace("--------------------------------");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Retorna o ByteArray gerado pela JPEGEncoder&lt;br /&gt; * @return Byte Array&lt;br /&gt; */&lt;br /&gt;private function obterByteArray () : ByteArray {&lt;br /&gt;    var bmpData : BitmapData = new BitmapData(_flvPlayer.msk.width, _flvPlayer.msk.height);&lt;br /&gt;    bmpData.draw(_alvoCaptura);&lt;br /&gt;    var objJPEGEncoder : JPEGEncoder = new JPEGEncoder(_qualidade.value);&lt;br /&gt;    var dadosEncode : ByteArray = objJPEGEncoder.encode(bmpData);&lt;br /&gt;    return dadosEncode;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Chama o método Salvar da Classe JpegEncoder utilizando o FluorineFx.&lt;br /&gt; * Neste exemplo, criei uma classe chamada AMF para tratar a comunicação&lt;br /&gt; * com o FluorineFx (serve também para AMFPHP)&lt;br /&gt; * @param Evento&lt;br /&gt; */&lt;br /&gt;private function onBaixarClick (e : MouseEvent) : void {&lt;br /&gt;    var objAmf : Amf = new Amf();&lt;br /&gt;    objAmf.URL = Config.URL_AMF_GATEWAY;&lt;br /&gt;    objAmf.onSusseco = baixarSusseco;&lt;br /&gt;    objAmf.onErro = baixarErro;&lt;br /&gt;    objAmf.executar("ServiceLibrary.Imagem.JpegEncoder.Salvar", obterByteArray());&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Pelo comentário de cada método já podemos perceber como funciona o envio do Array de bytes.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Dicas:&lt;/span&gt;&lt;br /&gt;• Neste projeto utilizei o &lt;a href="http://osflash.org/flashdevelop" target="_blank"&gt;FlashDevelop&lt;/a&gt;, que na minha opinião é um ótimo editor de Action Script.&lt;br /&gt;• Observe a estrutura de classes, para quem ainda não entende muito de POO (Programação Orientada a Objetos) este post é um bom exemplo de organização de Packages e Nomenclatura de Variáveis, Classes e Métodos. Vou tentar em um próximo post escrever mais sobre Programação Orientada a Objetos (POO) de uma forma mais avançada abrangendo Encapsulamento, Herança e Polimorfismo, o qual não é o objetivo deste post).&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Observações de Configuração:&lt;/span&gt;&lt;br /&gt;Observe na imagem abaixo o projeto aberto no FlashDevelop:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_qLU3RxFHN9w/R7pOa8Bl3UI/AAAAAAAAAFo/3KL2o4pvLv0/s1600-h/FlashDevelop_Project.gif"&gt;&lt;img id="BLOGGER_PHOTO_ID_5168529747057433922" style="CURSOR: pointer" alt="" src="http://1.bp.blogspot.com/_qLU3RxFHN9w/R7pOa8Bl3UI/AAAAAAAAAFo/3KL2o4pvLv0/s320/FlashDevelop_Project.gif" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Clique com o botão direito do mouse sobre &lt;span style="FONT-WEIGHT: bold"&gt;JPEG_Encoder (AS3)&lt;/span&gt;, vá em Properties, repare que na área &lt;span style="FONT-WEIGHT: bold"&gt;Project Classpaths&lt;/span&gt; deve ser adicionado os dois diretórios (_Biblioteca_ e Classes).&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Conclusão:&lt;/span&gt;&lt;br /&gt;Vimos como é possível o Flash gerar uma imagem (JPEG) utilizando a classe JPEGEncoder, como enviamos os binários do JPEG para o ASP.NET utilizando o FluorineFx e como o FluorineFx salva os binários em disco.&lt;br /&gt;&lt;br /&gt;Por hoje é isso pessoal.&lt;br /&gt;Vocês podem fazer o &lt;a href="http://fluorinefx-jpegencoder.bsoares.com.br/download.zip" target="_blank"&gt;download do projeto aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Links relacionados:&lt;/span&gt;&lt;br /&gt;• Exemplo: &lt;a href="http://fluorinefx-jpegencoder.bsoares.com.br/" target="_blank"&gt;http://fluorinefx-jpegencoder.bsoares.com.br/&lt;/a&gt;&lt;br /&gt;• FluorineFx: &lt;a href="http://www.fluorinefx.com/" target="_blank"&gt;http://www.fluorinefx.com/&lt;/a&gt;&lt;br /&gt;• FluorineFx download: &lt;a href="http://www.fluorinefx.com/download.html" target="_blank"&gt;http://www.fluorinefx.com/download.html&lt;/a&gt;&lt;br /&gt;• FluorineFx Visual Studio: &lt;a href="http://www.fluorinefx.com/docs/fluorine/vswizardnet20.html" target="_blank"&gt;http://www.fluorinefx.com/docs/fluorine/vswizardnet20.html&lt;/a&gt;&lt;br /&gt;• Live JPEG Encoder: &lt;a href="http://www.bytearray.org/?p=26" target="_blank"&gt;http://www.bytearray.org/?p=26&lt;/a&gt;&lt;br /&gt;• PNG Encoder in AS3: &lt;a href="http://www.kaourantin.net/2005/10/png-encoder-in-as3.html" target="_blank"&gt;http://www.kaourantin.net/2005/10/png-encoder-in-as3.html&lt;/a&gt;&lt;br /&gt;• FlashDevelop: &lt;a href="http://osflash.org/flashdevelop" target="_blank"&gt;http://osflash.org/flashdevelop&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-7717862492936293640?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/7717862492936293640/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=7717862492936293640' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/7717862492936293640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/7717862492936293640'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2008/02/jpeg-encoder-as3-fluorinefx-net-flash.html' title='JPEG Encoder (AS3) + FluorineFx .NET Flash Remoting Gateway'/><author><name>Bruno Soares</name><uri>http://www.blogger.com/profile/08637607007716713955</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp2.blogger.com/_qLU3RxFHN9w/R6SdGMkUCFI/AAAAAAAAAFI/t2GmbwTJSn8/S220/msn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qLU3RxFHN9w/R7rKlsBl3WI/AAAAAAAAAF4/Kv8k9BKPfAs/s72-c/SolutionExplorer.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-5272894949758859838</id><published>2008-02-02T03:25:00.001-02:00</published><updated>2008-11-13T00:02:42.054-02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BSoares'/><category scheme='http://www.blogger.com/atom/ns#' term='ActionScript 3.0'/><category scheme='http://www.blogger.com/atom/ns#' term='Remoting'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Flash'/><category scheme='http://www.blogger.com/atom/ns#' term='AMF'/><category scheme='http://www.blogger.com/atom/ns#' term='Fluorine'/><title type='text'>Fluorine, uma alternativa de Flash Remoting com ASP.NET</title><content type='html'>Primeiramente gostaria de agradecer o nosso amigo (dono do blog) Fábio Lima, pelo convite para postar no Flash Frameless, valew Fabones!!! Agora, vamos ao nosso artigo.&lt;br /&gt;&lt;br /&gt;Nos tempos em que o Flash ainda era da Macromedia, foi criada a especificação AMF (ActionScript Message Format), para facilitar a comunicação entre o ActionScript e as demais linguagens &lt;a href="http://pt.wikipedia.org/wiki/Server-side"&gt;Server-side&lt;/a&gt; (&lt;a href="http://pt.wikipedia.org/wiki/Gateway"&gt;Gateway&lt;/a&gt;, mais a diante vamos ver que o que controla a comunicação entre o ActionScript e o ASP.NET é com.TheSilentGroup.Fluorine.FluorineGateway). Temos hoje várias linguagem com alguma biblioteca que implemente AMF como por exemplo o PHP, Java, ColdFusion e também o ASP.NET. Existe uma alternativa de remoting muito boa para quem trabalha com PHP que é o &lt;a href="http://www.amfphp.org/"&gt;AMFPHP&lt;/a&gt;, para quem o conhece será fácil entender o funcionamento do &lt;a href="http://fluorine.thesilentgroup.com/fluorine/download.html"&gt;Fluorine&lt;/a&gt;. E para quem não o conhece tenho certeza de que vão encontrar muito material sobre ele na Internet.&lt;br /&gt;&lt;br /&gt;Hoje em dia já estamos na versão 3 da AMF e a Fluorine também implementa bibliotecas para uso desta versão de AMF.&lt;br /&gt;&lt;br /&gt;Vamos ao tutorial.&lt;br /&gt;&lt;br /&gt;Nosso primeiro passo será o download do Fluorine no link a seguir: &lt;a href="http://fluorine.thesilentgroup.com/fluorine/download.html"&gt;http://fluorine.thesilentgroup.com/fluorine/download.html&lt;/a&gt;&lt;br /&gt;Não vou dar detalhes da instalação porque é sempre a mesma coisa de Next, Next e Finish.&lt;br /&gt;&lt;br /&gt;Após realizada a instalação do Fluorine, vamos abrir o Visual Studio e criar uma nova aplicação web। File -&gt; New -&gt; Web Site, selecione &lt;span style="font-weight: bold;"&gt;Fluorine ASP.NET Web Application&lt;/span&gt;, como mostrado na figura seguinte:&lt;br /&gt;&lt;br /&gt;&lt;a rel="lightbox[roadtrip]" href="http://4.bp.blogspot.com/_qLU3RxFHN9w/R6PtUskUCAI/AAAAAAAAAEg/S-za1SwkKfk/s1600-h/Fluorine_01_new_web_site.gif"&gt;&lt;img style="cursor: pointer;" src="http://4.bp.blogspot.com/_qLU3RxFHN9w/R6PtUskUCAI/AAAAAAAAAEg/S-za1SwkKfk/s320/Fluorine_01_new_web_site.gif" alt="" id="BLOGGER_PHOTO_ID_5162230537713354754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sua &lt;span style="font-weight: bold;"&gt;Solution Explorer&lt;/span&gt; deve se parecer com esta imagem:&lt;br /&gt;&lt;br /&gt;&lt;a rel="lightbox[roadtrip]" href="http://1.bp.blogspot.com/_qLU3RxFHN9w/R6PuK8kUCBI/AAAAAAAAAEo/H9K4iwXoCfo/s1600-h/Fluorine_02_solution_explorer.gif"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_qLU3RxFHN9w/R6PuK8kUCBI/AAAAAAAAAEo/H9K4iwXoCfo/s320/Fluorine_02_solution_explorer.gif" alt="" id="BLOGGER_PHOTO_ID_5162231469721258002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Abra o arquivo Sample.cs (dentro de App_Code), vamos utiliza-lo em nosso primeiro teste do Fluorine.&lt;br /&gt;Observe que a classe Sample está dentro do namespace www e que possui um método chamado Echo que retorna uma string e precisa de um parâmetro. O método pega a string do parâmetro (text), concatena com "Gateway echo: " e retorna.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;using System;&lt;br /&gt;using com.TheSilentGroup.Fluorine;&lt;br /&gt;&lt;br /&gt;namespace www&lt;br /&gt;{&lt;br /&gt;[RemotingService("Fluorine sample service")]&lt;br /&gt;public class Sample&lt;br /&gt;{&lt;br /&gt; public Sample() { }&lt;br /&gt;&lt;br /&gt; public string Echo(string text)&lt;br /&gt; {&lt;br /&gt;  return "Gateway echo: " + text;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Pressione F5 para rodar a aplicação, clique sob o arquivo Console.aspx, note que você foi redirecionado para Fluorine.aspx, o Service Browser do Fluorine, deve se parecer com a imagem seguinte:&lt;br /&gt;&lt;br /&gt;&lt;a rel="lightbox[roadtrip]" href="http://3.bp.blogspot.com/_qLU3RxFHN9w/R6PuqckUCCI/AAAAAAAAAEw/50bC8AlRmS8/s1600-h/Fluorine_03_service_browser.gif"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_qLU3RxFHN9w/R6PuqckUCCI/AAAAAAAAAEw/50bC8AlRmS8/s320/Fluorine_03_service_browser.gif" alt="" id="BLOGGER_PHOTO_ID_5162232010887137314" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Você pode clicar no link “&lt;span style="font-weight: bold;"&gt;• www.Sample&lt;/span&gt;” para ver a especificação dos métodos e também obter um exemplo de código em ActionScript 1 e 2 que já roda os métodos da classes Sample.&lt;br /&gt;&lt;br /&gt;Para dizer ao Fluorine que você quer que determinada classe seja acessada por Flash é só você importar “com.TheSilentGroup.Fluorine” (using com.TheSilentGroup.Fluorine;), e colocar o atributo “[RemotingService("Descrição")]” na classe. Fique atento que feito isso, o Fluorine só vai mostrar no Service Browser os métodos &lt;span style="font-weight: bold;"&gt;publicos &lt;/span&gt;da classe, é claro que sem contar o construtor.&lt;br /&gt;Veja como o Service Browser detalha os métodos das classes e já deixa um exemplo de Script para utilizarmos no Flash:&lt;br /&gt;&lt;br /&gt;&lt;a rel="lightbox[roadtrip]" href="http://1.bp.blogspot.com/_qLU3RxFHN9w/R6PwD8kUCDI/AAAAAAAAAE4/XRd9aTQi5RQ/s1600-h/Fluorine_04_service_browser_sample.gif"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_qLU3RxFHN9w/R6PwD8kUCDI/AAAAAAAAAE4/XRd9aTQi5RQ/s320/Fluorine_04_service_browser_sample.gif" alt="" id="BLOGGER_PHOTO_ID_5162233548485429298" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Visto que o Service Browser já gera o código correspondente em ActionScript 1 e 2, vamos deixar o nosso tutorial mais interessante e mostrar uma forma de fazer as devidas chamadas em ActionScript 3.0. Abra o Flash, e cria um arquivo novo, no primeiro frame do Flash insira o código a seguir:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;import flash.net.*;&lt;br /&gt;&lt;br /&gt;function onResult(responds : Object) : void {&lt;br /&gt;trace ("onResult: " + responds)&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function onFault(responds : Object) : void {&lt;br /&gt;trace("fault " + responds.toString());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;var responder : Responder = new Responder(onResult, onFault);&lt;br /&gt;&lt;br /&gt;var gateway : NetConnection = new NetConnection();&lt;br /&gt;gateway.connect("http://localhost:2471/www/Gateway.aspx");&lt;br /&gt;gateway.call("www.Sample.Echo", responder, "Primeiro teste do Fluorine!");&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Fique atento quanto ao endereço do Gateway.aspx, pois no nosso exemplo estou utilizando o endereço que o próprio Visual Studio cria quando rodamos a aplicação, por isto que temos esta portar “maluca” (http://localhost:&lt;span style="font-weight: bold;"&gt;2471&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Depois que você rodar a aplicação no Visual Studio, pegar o endereço gerado por ele, colar o endereço dentro de ‘gateway.connect("&lt;span style="font-weight: bold;"&gt;ENDEREÇO&lt;/span&gt;");’ e exportar o flash, você deve receber a mensagem “onResult: Gateway echo: Primeiro teste do Fluorine!”. Se foi exatamente isso que aconteceu, uueebá! Você acabou de fazer o seu primeiro teste de Flash Remoting com ASP.NET utilizando Fluorine!!! Fácil não?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Agora vamos entender cada linha de código desse nosso ActionScript 3.0:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1ª – &lt;/span&gt;Importamos todas as classes que nos ajudam a efetuar conexões do Flash com o “Mundo Externo”.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3ª à 9ª – &lt;/span&gt;Criamos as funções de callback que vão receber as respostas da nossa requisição.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;11ª – &lt;/span&gt;Criamos um Responder para armazenar as nossas funções de respostas (onResult e onFault).&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;13ª – &lt;/span&gt;Criamos o nosso gateway, responsável pela comunicação com o Fluorine.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;14ª – &lt;/span&gt;Conectamos o nosso gateway ao Serviço do Fluorine.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;15ª – &lt;/span&gt;Efetuamos a chamada para o método &lt;span style="font-weight: bold;"&gt;Echo&lt;/span&gt; da classe &lt;span style="font-weight: bold;"&gt;Sample&lt;/span&gt; que se encontra no namespace &lt;span style="font-weight: bold;"&gt;www&lt;/span&gt;, passamos como segundo parâmetro o Responder (criado na linha 11) e como 3º parâmetro passamos o uma string, pois o método Echo precisa de uma string para funcionar.&lt;br /&gt;&lt;br /&gt;É isso ai pessoal, espero ter ajudado aqueles que precisam da combinação Flash + ASP.NET, como foi o meu caso, pois já conhecia o AMFPHP mas no meu trabalho atual utilizamos ASP.NET.&lt;br /&gt;&lt;br /&gt;No próximo post vou mostrar como transferir um bitmap do Flash para o Fluorine, agora a coisa vai ficar boa :)&lt;br /&gt;&lt;br /&gt;Link para download do projeto:&lt;br /&gt;&lt;a href="http://blog.bsoares.com.br/downloads/Fluorine.NET/20080202_Projeto.zip"&gt;http://blog.bsoares.com.br/downloads/Fluorine.NET/20080202_Projeto.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Links relacionados:&lt;/span&gt;&lt;br /&gt;• Fluorine: &lt;a href="http://fluorine.thesilentgroup.com/fluorine"&gt;http://fluorine.thesilentgroup.com/fluorine&lt;/a&gt;&lt;br /&gt;• Fluorine download: &lt;a href="http://fluorine.thesilentgroup.com/fluorine/download.html"&gt;http://fluorine.thesilentgroup.com/fluorine/download.html&lt;/a&gt;&lt;br /&gt;• Flash Remoting: &lt;a href="http://www.adobe.com/devnet/flashremoting/"&gt;http://www.adobe.com/devnet/flashremoting/&lt;/a&gt;&lt;br /&gt;• AMF3: &lt;a href="http://osflash.org/documentation/amf3"&gt;http://osflash.org/documentation/amf3&lt;/a&gt;&lt;br /&gt;• AMFPHP: &lt;a href="http://www.amfphp.org/"&gt;http://www.amfphp.org&lt;/a&gt;&lt;br /&gt;• Gateway: &lt;a href="http://pt.wikipedia.org/wiki/Gateway"&gt;http://pt.wikipedia.org/wiki/Gateway&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-5272894949758859838?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/5272894949758859838/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=5272894949758859838' title='13 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/5272894949758859838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/5272894949758859838'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2008/02/fluorine-uma-alternativa-de-flash.html' title='Fluorine, uma alternativa de Flash Remoting com ASP.NET'/><author><name>Bruno Soares</name><uri>http://www.blogger.com/profile/08637607007716713955</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='28' src='http://bp2.blogger.com/_qLU3RxFHN9w/R6SdGMkUCFI/AAAAAAAAAFI/t2GmbwTJSn8/S220/msn.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_qLU3RxFHN9w/R6PtUskUCAI/AAAAAAAAAEg/S-za1SwkKfk/s72-c/Fluorine_01_new_web_site.gif' height='72' width='72'/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-8214966529136335360</id><published>2008-01-21T15:51:00.001-02:00</published><updated>2008-03-27T23:07:00.796-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FrameLess'/><category scheme='http://www.blogger.com/atom/ns#' term='FabioTNT'/><category scheme='http://www.blogger.com/atom/ns#' term='TimeLine'/><category scheme='http://www.blogger.com/atom/ns#' term='Caurina'/><category scheme='http://www.blogger.com/atom/ns#' term='Classes'/><title type='text'>Usando Caurina</title><content type='html'>Fala galera....primeira postagem do ano. Ano novo, vida nova, trampo novo ( é me mudei do Studio anterior ) e por fim Classe nova, rs.&lt;br /&gt;&lt;br /&gt;Logo quando comecei a usar essas classes de Tween, experimentei a caurina, porém não curti muito ( coisa de quem não sabe usar ) e pra mim ela fazia a mesma coisa que o tween do Flash, nunca me passou pela cabeça testar desempenho, consumo de memória, flexibilidade e etc, foi então que um dia por necessidade acabei adotando a GreenSock Lite.Tweener como classe de tween padrão, dai pra frente, só GS no code....não tenho nada a reclamar sobre ela, muito pelo contrario, é uma classe muito boa e me serviu e me serve ainda, porém neste novo Studio a galera só usa Caurina e fui praticamente obrigado a usar...é muito mais facil eu unico mudar para Caurina do que todos eles para a GS e por algum motivo eles usam a Caurina, enfim fui em busca de respostas e descobri muita coisa que nem imaginava, a flexibilidade da Caurina é absurdamente grande e por sua popularidade, cade vez mais é empregada em projetos insanos, caso do paper vision. Lembro-me que uma vez um amigo meu ( Mafra ), precisou andar com uma timeLine ao contrario e ai eu fui lá e fiz uma função que fazia isso pra ele, porém mal sabia eu que a Caurina fazia isso....e muuuito mais...ela controla até o Ease da timeLine, velocidade e até o tempo final da coisa, claaaaro que isso não é uma pratica legal, fazer timeLine correr pra traz só em casos extremos, pois em um projeto FrameLess isso seria feito em code mesmo.&lt;br /&gt;Claro que isso é só uma das coisas que a Caurina faz, existem inumeros métodos, atributos, listeners e propiedades para serem usados como quiser...fica ai a dica para quem quiser conhecer melhor seguem os links da &lt;a href="http://hosted.zeh.com.br/tweener/docs/en-us/"&gt;Documentação&lt;/a&gt; e do &lt;a href="http://code.google.com/p/tweener/"&gt;GoogleCode&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Abraços e até a proxima.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-8214966529136335360?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/8214966529136335360/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=8214966529136335360' title='3 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/8214966529136335360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/8214966529136335360'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2008/01/usando-caurina.html' title='Usando Caurina'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-8935839810419142082</id><published>2007-12-04T09:12:00.001-02:00</published><updated>2008-03-27T23:07:16.805-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='FabioTNT'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><title type='text'>SilverLite</title><content type='html'>Sempre é bom estarmos por dentro das novas tecnologias, por isso deem uma olhada no novo "concorrente" do Flash. rs&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/silverlight/"&gt;http://www.microsoft.com/silverlight/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Instale o Player e depois abra o mesmo site....&lt;br /&gt;&lt;br /&gt;Minhas observações:&lt;br /&gt;&lt;br /&gt;Lento, O menu carrossel da home, consome uma quantidade consideravel de processamento, Bug no loading dos filmes e o mais interessante de todos, a grande maioria dos filmes foram feitos em MAC.&lt;br /&gt;&lt;br /&gt;:-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-8935839810419142082?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/8935839810419142082/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=8935839810419142082' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/8935839810419142082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/8935839810419142082'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2007/12/silverlite.html' title='SilverLite'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-7259387992405002559</id><published>2007-11-28T22:22:00.001-02:00</published><updated>2008-03-27T23:09:59.498-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Bom senso'/><category scheme='http://www.blogger.com/atom/ns#' term='FrameLess'/><category scheme='http://www.blogger.com/atom/ns#' term='FabioTNT'/><category scheme='http://www.blogger.com/atom/ns#' term='Inicio'/><category scheme='http://www.blogger.com/atom/ns#' term='Nomenclatura'/><category scheme='http://www.blogger.com/atom/ns#' term='Tipagem'/><title type='text'>E se você chamasse "xyzasd da silva kdsf"?</title><content type='html'>Acho que não né?&lt;br /&gt;Pois é, esse é só um dos motivos para se nomear corretamente os elementos de seu trabalho.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Nome do FLA.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;É sempre bom começar as coisas pelo começo né?! Pois é, a primeira coisa a fazer é criar um nome para seu FLA, nada de ficar trabalhando com untitled-1.fla, dê logo um nome para o arquivo antes de criar qualquer coisa no FLA e seguindo o post anterior, tenho bom senso, se você está fazendo um teste de gravidade ou qualquer outro teste, não nomeio o arquivo como teste.FLA, pois logo mais você mesmo pode precisar do FLA e não vai encontrar, então trate de colocar um nome do tipo testeDeGravidade.fla. Eu particulamente tenho mania de nomear tudo com &lt;a href="http://pt.wikipedia.org/wiki/CamelCase"&gt;lowerCammelCase&lt;/a&gt; , mas você pode usar "_" também: teste_de_gravidade.fla.&lt;br /&gt;Costumo também usar um &lt;a href="http://pt.wikipedia.org/wiki/Sufixo"&gt;sufixo&lt;/a&gt; para identificar a versão do FLA: testeDeGravidade_x01.fla e assim muda-se o nome para x02, x03...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Ordem no código.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Em um projeto, sempre é bom colocar um tipo de índice no começo do códio, para que tudo esteja em seu devido lugar, crie algo como:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;//AS criada por Fulano de tal&lt;br /&gt;//11/2007 - Teste de Gravidade&lt;br /&gt;//&lt;br /&gt;// 1 - Imports e Includes&lt;br /&gt;// 2 - Configurações de elementos do Filme&lt;br /&gt;// 3 - Variaveis do Clip&lt;br /&gt;// 4 - Funções&lt;br /&gt;// 5 - Chamada das Funções&lt;br /&gt;//&lt;br /&gt;//----------------------------------------------------//&lt;br /&gt;//&lt;br /&gt;// 1 - Imports e Includes&lt;br /&gt;//&lt;br /&gt;// Restante do código&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Com isso, tudo que você criar em seu código, será facilmente localizado. Isso economiza tempo, ( Ctrl - F ) e ainda de quebra deixa seu código mais bonito.&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Funções e Variaveis&lt;/span&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;br /&gt;Me diga qual a lógica de uma função que troca uma sessão de um site se chamar "trocaMeio" ou até mesmo "asdasd"?&lt;br /&gt;&lt;br /&gt;Ou mesmo que tenha o nome do elemento na função, do tipo: "interna". Isso lá é nome de função!? Isso está mais para nome de movieClip.&lt;br /&gt;&lt;br /&gt;Você está programando certo?&lt;br /&gt;Você programa em uma maquina certo?&lt;br /&gt;Que tal pensar um pouco como maquinas?&lt;br /&gt;&lt;br /&gt;Para executar um programa em seu computador, você simplesmente digita o nome do programa? Acho que não né?&lt;br /&gt;No caso do windows, ou você abre o executar e ai digita o programa, ou você vai pelo caminho normal: Iniciar -&gt; Programas -&gt; Etc etc. Faça a mesma coisa em seu código, quando uma função for trocar a sessão do site, crie ela como&lt;span style="font-weight: bold; font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;"trocarSessao". Isso ajuda um bocado, porém mais uma vez usa-se o bom senso, imagina uma função chamada "trocaImagemDoThumbDoMenuAmareloDaDireita". Pelo amor né?!&lt;br /&gt;&lt;br /&gt;Outra regrinha legal é se sua função usa parametros, dê tipos a eles:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;function trocarSessao( sessao:String ){&lt;br /&gt;trace( sessao );&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Praticamente a mesma regra deve ser usada para as variaveis, se você tem uma variavel que indica a sessao, não chame ela de "asdasd" chame-a de "sessao" e na hora de declara-la use a forma &lt;a href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;amp;file=00001193.html"&gt;correta&lt;/a&gt;, não jogue sua var de qualquer jeito no codigo tipo:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sessao = "Home"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:georgia;"&gt;Faça do jeito correto:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var sessao:String = "Home";&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;Layers&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:georgia;"&gt;Simples, coloque nome nas layers, inclusive a layer AS ( Onde só entra código ), Label( Onde vai o nome dos poucos Frames ) e se quiser a layer COMENT( Onde você faz qualquer comentário ). Novamente, use o bom senso e aqui você pode usar e abusar de espaços, simbolos, acentos e tudo que te vier a cabeça.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:georgia;" &gt;Livraria&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);font-family:arial;" &gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="font-family:georgia;"&gt;Nomeie tudo, tudo mesmo e nada de Graficos na livraria, somente movieClips, estamos falando em AS2 e em AS2 Graficos não fazem praticamente nada, em AS3 as coisas mudaram bastante e ai sim Graficos são uteis, então sua Lib pode ter tudo, menos graficos ( típicos tweens ).&lt;br /&gt;Se possivel separe as coisas por pastas. Ajuda na hora de achar alguma coisa.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Movie Clips e Botões&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:georgia;"&gt;Esse monte de regrinhas, não serve apenas para deixar tudo mais Clean, aqui por exemplo, você ganha em produtividade.&lt;br /&gt;&lt;br /&gt;Se voce coloca a instância de um botão de "botãoHome" e outro de "botãoHome_btn", na hora chamar um método as coisas mudam. No caso do botão com sufixo, assim que colocar um "." depois da instância, aparecerão todos os métodos e propriedades do mesmo, já no botão sem sufixo, nada aparece. A mesma coisa acontece com o movieClip_mc.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bom acho que é isso, qualquer coisa que tiver um nome em seu projeto, nomeie-o com nomes coerentes.&lt;br /&gt;&lt;br /&gt;Abraços.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="font-family:georgia;"&gt;&lt;span style="font-weight: bold;font-family:georgia;" &gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-7259387992405002559?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/7259387992405002559/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=7259387992405002559' title='2 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/7259387992405002559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/7259387992405002559'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2007/11/voc-gostaria-que-sua-me-te-chamasse-de.html' title='E se você chamasse &quot;xyzasd da silva kdsf&quot;?'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-5014285227766880046</id><published>2007-11-24T00:46:00.001-02:00</published><updated>2008-03-27T23:10:25.360-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FrameLess'/><category scheme='http://www.blogger.com/atom/ns#' term='FabioTNT'/><category scheme='http://www.blogger.com/atom/ns#' term='TimeLine'/><category scheme='http://www.blogger.com/atom/ns#' term='Classes'/><title type='text'>Aplicar ou Não Aplicar.</title><content type='html'>Eu sou da seguinte opinião. Tudo na vida deve ser usado com moderação. Se não estraga, o mesmo acontece com Classes, Includes, Funções, &lt;span style="color: rgb(255, 0, 0);"&gt;TIMELINE &lt;span style="color: rgb(0, 0, 0);"&gt;e&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;também com FrameLess, logo antes de treinar códigos até a morte, treine também um pouco de Noção e Bom Senso. Não tem porque eu criar um quadrado que não vai fazer nada no palco, com &lt;a href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;amp;file=00002478.html"&gt;lineTo&lt;/a&gt; se é bem mais simples cria-lo com a "&lt;span style="font-style: italic;"&gt;Retangle Too&lt;/span&gt;l". Só para dizer que é FrameLess!? rs. Ai acaba ficando &lt;span style="font-style: italic;"&gt;"HeavyAS"&lt;/span&gt;. A mesma coisa para TimeLine e os outros. &lt;strong&gt;Minha&lt;/strong&gt; opinião é que tudo seja usado junto, da melhor forma possível, para que um ajude o outro. Mas uma coisa é certa, um site com muita TimeLine é absurdamente mais complicado de se programar do que um "&lt;span style="font-style: italic;"&gt;FrameLess&lt;/span&gt;". Bom é isso. Abraços a todos. Logo postarei uns exemplos. &lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-5014285227766880046?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/5014285227766880046/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=5014285227766880046' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/5014285227766880046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/5014285227766880046'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2007/11/aplicar-ou-no-aplicar.html' title='Aplicar ou Não Aplicar.'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7501760480635652155.post-1963225817096604608</id><published>2007-11-24T00:27:00.001-02:00</published><updated>2008-03-27T23:11:17.689-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FrameLess'/><category scheme='http://www.blogger.com/atom/ns#' term='FabioTNT'/><category scheme='http://www.blogger.com/atom/ns#' term='Inicio'/><category scheme='http://www.blogger.com/atom/ns#' term='Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Amigos'/><title type='text'>Frameless?!?!</title><content type='html'>Bom, como primeiro post de todos seria interessante explicar a todos a origem do ( Blog ) FrameLess.&lt;br /&gt;&lt;br /&gt;Trabalho em uma agência web em São Paulo, onde a equipe é composta de Dev´s, Designers e Hibridos rs! Né Paulão!? Comecei a programar em AS e em outras linguagens com a ajuda do grande Dev. &lt;a href="http://portifa.bsoares.com.br/"&gt;Bruno Soares&lt;/a&gt; e por ser um grande Dev ele também é ultra chato com padrões, performance, economia de linhas, recursos e etc. Não deu outra, segui o mesmo caminho e sempre estou querendo mais e mais deixar as coisas leves, praticas e como diz o &lt;a href="http://www.blogger.com/www.fmafra.com"&gt;Mafra&lt;/a&gt;, "Aero". Hoje o Bruno não está mais na agência e eu fiquei com a parte de Dev AS ( Demaaais! ). Um dia estavamos montando um hot site e o Marcel(Designer) estava passando o layout para o Flash, dei uma olhada e vi aquele monte de tween em timeline e mais um monte de coisa no palco...huummm Falei...nossa pra que tudo isso. Mostrei a classe de &lt;a href="http://www.blogger.com/%20http://blog.greensock.com/tweenfilterliteas2/"&gt;Tween&lt;/a&gt; e plim, tudo se tornou muito limpo e claro. Começamos então a brincar com o trocadilho TimeLineLess por causa de TableLess e logo depois o Marcel sugeriu que chamassemos de FrameLess, por ser mais curto e de mais facil pronuncia. Dai pra frente adotamos como regra no momento de criar um Flash, que ele seria o mais FrameLess Possivel. No almoço criei o logo e deu na telha de montar esse Blog. Espero que seja útil para a galera! Abraços!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7501760480635652155-1963225817096604608?l=flashframeless.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://flashframeless.blogspot.com/feeds/1963225817096604608/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7501760480635652155&amp;postID=1963225817096604608' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/1963225817096604608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7501760480635652155/posts/default/1963225817096604608'/><link rel='alternate' type='text/html' href='http://flashframeless.blogspot.com/2007/11/frameless.html' title='Frameless?!?!'/><author><name>Fábio Lima</name><uri>http://www.blogger.com/profile/15125728591235153715</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_uAsJb_LXDmg/TFAx6YGXG7I/AAAAAAAAAIY/K6YrLRMWS1w/S220/ThumbCP.jpg'/></author><thr:total>0</thr:total></entry></feed>
