<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Renato Pacheco</title>
	<atom:link href="http://www.renatopacheco.com.br/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.renatopacheco.com.br/blog</link>
	<description>Compartilhando conhecimento</description>
	<lastBuildDate>Fri, 15 Apr 2011 21:48:15 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Conhecendo o Actionscript gerado pelo Flex</title>
		<link>http://www.renatopacheco.com.br/blog/2009/09/conhecendo-o-actionscript-gerado-pelo-flex/</link>
		<comments>http://www.renatopacheco.com.br/blog/2009/09/conhecendo-o-actionscript-gerado-pelo-flex/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 22:54:44 +0000</pubDate>
		<dc:creator>Renato Pacheco</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.renatopacheco.com/blog/?p=97</guid>
		<description><![CDATA[O Flex nada mais é que um compilador cheio de componentes que estruturamos pelo MXML assim como fazemos no HTML, mas no fim tudo isso será interpretado pelo programa onde classes Actionscript serão geradas e finalmente compiladas em arquivos SWF. Agora se toda aquela estrutura MXML nada mais é que um esquema para gerar classes [...]]]></description>
			<content:encoded><![CDATA[<p>O Flex nada mais é que um compilador cheio de componentes que estruturamos pelo MXML assim como fazemos no <abbr title="HyperText Markup Language">HTML</abbr>, mas no fim tudo isso será interpretado pelo programa onde classes Actionscript serão geradas e finalmente compiladas em arquivos <abbr title="Shockwave File">SWF</abbr>.</p>
<p>Agora se toda aquela estrutura MXML nada mais é que um esquema para gerar classes ActionScript, então por onde andam esses arquivos que não aparecem nas pastas do projeto?</p>
<p>Criando um novo projeto, que eu vou chamar de “ProjetoFlex” (muito original) e colocamos apenas um label:</p>
<pre class="brush: php;">&lt;mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"&gt;
&lt;mx:Label text="OLÁ MUNDO" /&gt;&lt;/mx:Label&gt;&lt;/mx:Application&gt;</pre>
<p>No Flex Navigator temos a seguinte estrutura.</p>
<p><img class="aligncenter size-full wp-image-103" title="Arvore de estrutura de projeto" src="http://www.renatopacheco.com/blog/wp-content/uploads/2009/09/004a.jpg" alt="Arvore de estrutura de projeto" width="245" height="338" /></p>
<p>Nada em especial, só as pastas de depuração e a de template idênticas, como deveria ser, sendo diferente apenas pelo ProjetoFlex.swf que esta representado pelo ProjetoFlex.mxml.</p>
<p>Vamos fazer com que o Flex não esconda mais os códigos ActionScript clicando com o botão direito do mouse sobre a pasta do projeto.</p>
<p><img class="aligncenter size-full wp-image-105" title="Arvore de estrutura de projeto" src="http://www.renatopacheco.com/blog/wp-content/uploads/2009/09/003a.jpg" alt="Arvore de estrutura de projeto" width="339" height="555" /></p>
<p>Abrimos a opção Properties e selecionamos a opção Flex Compiler.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-107" title="Projeto propriedades" src="http://www.renatopacheco.com/blog/wp-content/uploads/2009/09/005a.jpg" alt="Projeto propriedades" width="606" height="417" /></p>
<p>Agora no campo de Addicional compile arguments, orientamos o Flex para que ao compilar os arquivos mostre a pasta de scripts. Para isso basta deixar o campo desta maneira:</p>
<p><strong>-locale en_US -keep-generated-actionscript</strong></p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-110" title="Projeto propriedades" src="http://www.renatopacheco.com/blog/wp-content/uploads/2009/09/006a.jpg" alt="Projeto propriedades" width="606" height="417" /></p>
<p>Feito isso clique em Apply e depois em OK.</p>
<p>Uma nova pasta chamada generated vai aparecer e nela todos os scripts que o Flex precisou criar para poder chegar ao seu resultado final o <abbr title="Shockwave File">SWF</abbr>.</p>
<p><img class="aligncenter size-full wp-image-112" title="Projeto propriedades" src="http://www.renatopacheco.com/blog/wp-content/uploads/2009/09/001a.jpg" alt="Projeto propriedades" width="424" height="501" /></p>
<p>Aos curiosos é uma boa fonte de informação para entender melhor como o Flex monta o seu resultado final, podendo até nos levar a fazer o script manualmente do que utilizar a tag de programação do Flex para melhorar o desempenho do projeto.</p>
<p>E esta pasta não se aplica somente a página principal, se aplica a tudo desde seus componentes personalizados, até mesmo o <abbr title="Cascading Style Sheets">CSS</abbr>. Supondo que você crie sub-pastas para organizar sua estrutura, por exemplo um a pasta só para <abbr title="Cascading Style Sheets">CSS</abbr>, dentro dela será criada uma pasta generated correspondente a este conteúdo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renatopacheco.com.br/blog/2009/09/conhecendo-o-actionscript-gerado-pelo-flex/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>System.useCodePage, por que não usar?</title>
		<link>http://www.renatopacheco.com.br/blog/2009/09/system-usecodepage-por-que-nao-usar/</link>
		<comments>http://www.renatopacheco.com.br/blog/2009/09/system-usecodepage-por-que-nao-usar/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 12:38:24 +0000</pubDate>
		<dc:creator>Renato Pacheco</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[codificação]]></category>
		<category><![CDATA[unicode]]></category>

		<guid isPermaLink="false">http://www.renatopacheco.com/blog/?p=45</guid>
		<description><![CDATA[Em muitos projetos com o Flash passamos por uma inseparável questão dos caracteres especias que são um tormento para muitos desenvolvedores que em um momento de desespero recorrem ao System.useCodePage, fazendo assim: System.useCodePage = true; Que bom, de repente seu problemas acabaram, todos aqueles caracteres começaram a funciona, mas que comando maravilhoso é esse? Vamos [...]]]></description>
			<content:encoded><![CDATA[<p>Em muitos projetos com o Flash passamos por uma inseparável questão dos caracteres especias que são um tormento para muitos desenvolvedores que em um momento de desespero recorrem ao System.useCodePage, fazendo assim:</p>
<pre class="brush: js;">System.useCodePage = true;</pre>
<p>Que bom, de repente seu problemas acabaram, todos aqueles caracteres começaram a funciona, mas que comando maravilhoso é esse? Vamos ver o que a Adobe nos diz.</p>
<blockquote><p>Um valor Booleano que determina qual a página de código a ser usada para interpretar arquivos de texto externos. Quando a propriedade for definida como false, os arquivos de texto externos serão interpretados como Unicode. (Esses arquivos devem ser codificados como Unicode quando você os salva). Quando a propriedade está definida como true, os arquivos de texto externos são interpretados usando a página de código tradicional do sistema operacional que executa o aplicativo. O valor padrão de useCodePage é false.</p>
<p>O texto carregado como arquivo externo (usando a classe Loader.load(), URLLoader ou URLStream) deve ter sido salvo como Unicode para que o aplicativo o reconheça como Unicode. Para codificar arquivos externos como Unicode, salve-os em um aplicativo que ofereça suporte a Unicode, como Bloco de notas do Windows.</p></blockquote>
<p>Resumindo a história, desde que você mantenha o valor de System.useCodePage como false, o Flash irá interpretar os dados recebido como Unicode, mas também significa que eles serão enviados as páginas dos servidores também como Unicode.</p>
<blockquote><p><strong>Unicode</strong>: é um padrão universal que permite aos computadores representar e manipular de forma consistente praticamente qualquer sistema de escrita que exista.</p></blockquote>
<p>Então, uma vez que você carrega um arquivo externo que não esteja em Unicode e aparecem aqueles caracteres malucos você corre para mudar o System.useCodePage para  true. Vamos ver agora o que a adobe diz sobre isso.</p>
<blockquote><p>Quando esse código está presente, o aplicativo interpreta o texto externo usando a página de código tradicional do sistema operacional que executa o sistema operacional. Geralmente, é CP1252 em um sistema operacional Windows em inglês e Shift-JIS em um sistema operacional japonês. Se você definir useCodePage como true, o Flash Player 6 e superior tratarão o texto como o Flash Player 5 o trata. (O Flash Player 5 tratava todos os textos como se estivessem na página de código tradicional do sistema operacional que executava o player).</p></blockquote>
<p>Quer dizer, seu problema se resolve por que apartir deste momento os textos serão interpretados de acordo dom o sistema operacional que estiver executando o <abbr title="Shockwave File">SWF</abbr> e não mais usando a codificação universal.</p>
<p>Acontece que seu cliente comprou um notebook direto dos Estados Unidos, ou pior ele é Chinês e você vai apresentar seu site pra ele, ai eu te pergunto:</p>
<p>O sistema operacional dele tem os nossos caracteres? Você acha mesmo que ele vai poder ver todos aqueles acentos maravilhosos? Os dados que você vai carregar estão no formato que você precisa?</p>
<p>Então eu recomendo, se você realmente quer que o máximo possíveis de pessoas possam usar perfeitamente o seu site, procure usar o System.useCodePage com valor padrão false.</p>
<p>Por isso, se necessário, procure tratar os dados enviados ou recebidos pelo Flash antes de mudar o tipo de codificação que ele irá trabalhar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renatopacheco.com.br/blog/2009/09/system-usecodepage-por-que-nao-usar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Documentação ActionScript 3</title>
		<link>http://www.renatopacheco.com.br/blog/2009/09/documentacao-actionscript-3/</link>
		<comments>http://www.renatopacheco.com.br/blog/2009/09/documentacao-actionscript-3/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 04:28:00 +0000</pubDate>
		<dc:creator>Renato Pacheco</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.renatopacheco.com/blog/?p=35</guid>
		<description><![CDATA[Como não podia ser diferente, link obrigatório para todo desenvolverdor é a documentação da liguagem e que moleza maior tendo ela toda em português. http://help.adobe.com/pt_BR/AS3LCR/Flash_10.0/index.html Tem também uma orientação para quem quer migrar do AS2 para o AS3 também em português. http://help.adobe.com/pt_BR/AS3LCR/Flash_10.0/migration.html Particularmente para aqueles que ainda não aderiram ao AS3 acho que já é [...]]]></description>
			<content:encoded><![CDATA[<p>Como não podia ser diferente, link obrigatório para todo desenvolverdor é a documentação da liguagem e que moleza maior tendo ela toda em português.</p>
<p><a href="http://help.adobe.com/pt_BR/AS3LCR/Flash_10.0/index.html" onclick="urchinTracker('/outgoing/help.adobe.com/pt_BR/AS3LCR/Flash_10.0/index.html?referer=');">http://help.adobe.com/pt_BR/AS3LCR/Flash_10.0/index.html</a></p>
<p>Tem também uma orientação para quem quer migrar do <abbr title="ActionScript 2">AS2</abbr> para o <abbr title="ActionScript 3">AS3</abbr> também em português.</p>
<p><a href="http://help.adobe.com/pt_BR/AS3LCR/Flash_10.0/migration.html" onclick="urchinTracker('/outgoing/help.adobe.com/pt_BR/AS3LCR/Flash_10.0/migration.html?referer=');">http://help.adobe.com/pt_BR/AS3LCR/Flash_10.0/migration.html</a></p>
<p>Particularmente para aqueles que ainda não aderiram ao <abbr title="ActionScript 3">AS3</abbr> acho que já é um bom momente. Eu mesmo não havia aderia completamente ao <abbr title="ActionScript 2">AS2</abbr> por que o mesmo apresentava varios bugs  que mesmo usando <abbr title="ActionScript 2">AS2</abbr> eu programava como se fosse <abbr title="ActionScript 1">AS1</abbr>.</p>
<p>Felizmente o <abbr title="ActionScript 3">AS3</abbr> parece estar funcionado como prometido, já trabalho com ele desde o Flash <abbr title="Creative Suite 3">CS3</abbr> e está exelente, é mais rápido e organizado de se trabalhar.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renatopacheco.com.br/blog/2009/09/documentacao-actionscript-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ExternalInterface ou navigateToURL?</title>
		<link>http://www.renatopacheco.com.br/blog/2009/09/externalinterface-ou-navigatetourl/</link>
		<comments>http://www.renatopacheco.com.br/blog/2009/09/externalinterface-ou-navigatetourl/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 14:59:25 +0000</pubDate>
		<dc:creator>Renato Pacheco</dc:creator>
				<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[classe]]></category>
		<category><![CDATA[favorito]]></category>
		<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://www.renatopacheco.com/blog/?p=1</guid>
		<description><![CDATA[Alguns desenvolvedores costumam se questionar sobre o uso do ExternalInterface no lugar navigateToURL para executar um javascript afinal de contas a classe existe para executar esta tarefa mas, será que não existem exceções?]]></description>
			<content:encoded><![CDATA[<p>Alguns desenvolvedores costumam se questionar sobre o uso do ExternalInterface no lugar navigateToURL para executar um JavaScript afinal de contas a classe existe para executar esta tarefa mas, será que não existem exceções?</p>
<p>Pode ser que você se lembre do getURL que até o Flash 7 era o nosso meio de comunicação com o navegador antes da chegada do  ExternalInterface ainda no <abbr title="ActionScript 2">AS2</abbr> e que felizmente logo na seqüência,  o getURL saiu de cena para dar lugar ao navigateToURL no <abbr title="ActionScript 3">AS3</abbr>.</p>
<p>Passada por esta fase tornou-se obrigatório o uso do ExternalInterface e o navigateToURL foi deixado de lado para o uso exclusivo de acesso a links. Eu até concordaria, desde que todos os pontos fossem cobertos.</p>
<p>Vamos a um exemplo criando dois botões, um usando o  ExternalInterface e outro usando  navigateToURL para executar um JavaScript. Vou utilizar neste exemplo um script para adicionar a favoritos que encontrei no site <a title="Adicionar aos Favoritos no IE, Mozilla Firefox e Opera" href="http://codigofonte.uol.com.br/codigo/js-dhtml/browser/adicionar-aos-favoritos-no-ie,-mozilla-firefox-e-opera" onclick="urchinTracker('/outgoing/codigofonte.uol.com.br/codigo/js-dhtml/browser/adicionar-aos-favoritos-no-ie_-mozilla-firefox-e-opera?referer=');">codigofonte</a> que funciona em vários navegadores.</p>
<p>JavaScript:</p>
<pre class="brush: js;">
function addFav(title,url)
{
	if (window.sidebar)
	{
		window.sidebar.addPanel(title, url,"");
	}
	else if(window.opera &amp;&amp; window.print)
	{
		var mbm = document.createElement('a');
		mbm.setAttribute('rel','sidebar');
		mbm.setAttribute('href',url);
		mbm.setAttribute('title',title);
		mbm.click();
	}
	else if(document.all)
	{
		window.external.AddFavorite(url, title);
	}
}
</pre>
<p>Agora no Flash, fiz dois botões:</p>
<p><img class="aligncenter size-full wp-image-8" title="botoes" src="http://www.renatopacheco.com/blog/wp-content/uploads/2009/09/botoes.png" alt="botoes" width="215" height="25" /></p>
<p>Cada um executando o mesmo JavaScript de maneiras diferentes:</p>
<p>ActionScript:</p>
<pre class="brush: as3;">
// Importando as classes que vamos utilizar.
import flash.external.ExternalInterface;
import flash.net.navigateToURL;

// Vamos definir o título do favorito.
var titulo:String = "Renato Pacheco";
// Aqui, definimos a url do favorito.
var url:String = "http://www.renatopacheco.com.br";
// Juntando os dois dados acima, montamos um JavaScript covencional.
// Poderiamos usar até em um link de página HTML.
// É muito importante usar a função void(0) para anular o retorno da função qe vamos executar.
var javaScript:String = "javascript:addFav('" + titulo + "','" + url+ "');void(0);";

// Aplicando a um dos botões a função ExternalInterface.
ExtIntBtn.addEventListener(MouseEvent.CLICK,function($e:MouseEvent):void{
	ExternalInterface.call("addFav",titulo,url);
});
// Aplicando ao outro botão o navigateToURL.
NavToUrlBtn.addEventListener(MouseEvent.CLICK,function($e:MouseEvent):void{
	navigateToURL(new URLRequest(javaScript),"_self");
});
</pre>
<p>Ao colocar o <abbr title="Shockwave File">SWF</abbr> na mesma página que o código JavaScript e clicar em qualquer um dos botões aparentemente temos quase o mesmo resultado:</p>
<p><img class="aligncenter size-full wp-image-9" title="favorito" src="http://www.renatopacheco.com/blog/wp-content/uploads/2009/09/favorito.png" alt="favorito" width="345" height="209" /></p>
<p>A primeira vista temos o mesmo resultado, mas não podemos esquecer que esta ação depende do usuário para ser concluída.</p>
<p>No caso do navigateToURL não faz diferença pois o flash continuará sua execução normalmente mas, para o ExternalInterface a história não é bem assim. Quando é executado o <code>ExternalInterface.call()</code> espera um retorno do javascript seja ele nulo ou não, então espere que o usuários demore uns quinze segundos para terminar a ação e veja o que acontece:</p>
<p><img class="aligncenter size-full wp-image-10" title="timeOut" src="http://www.renatopacheco.com/blog/wp-content/uploads/2009/09/timeOut.png" alt="timeOut" width="540" height="293" /></p>
<p>Você pode até achar que isso não acontece e que ninguém vai levar mais de quinze segundos para adicionar um link aos favoritos, pois eu lhe digo que já aconteceu e não interessa sua justificativa, o cliente vai entrar em pânico quando vir uma mensagem dessa.</p>
<p>Por isso eu pensaria duas vezes antes de tornar o uso de o ExternalInterface uma regra indiscutível e a prova de falhas.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.renatopacheco.com.br/blog/2009/09/externalinterface-ou-navigatetourl/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

