<?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>Comunidade Portuguesa de Rich Internet Applications &#187; Exemplos</title>
	<atom:link href="http://www.riapt.org/category/exemplos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.riapt.org</link>
	<description></description>
	<lastBuildDate>Thu, 13 May 2010 12:05:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Keynotes Evento RIAPT</title>
		<link>http://www.riapt.org/2010/01/21/keynotes-evento-riapt/</link>
		<comments>http://www.riapt.org/2010/01/21/keynotes-evento-riapt/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 03:03:05 +0000</pubDate>
		<dc:creator>joaogoncalves</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Exemplos]]></category>
		<category><![CDATA[Flash Platform]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIAPT]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[boas práticas]]></category>
		<category><![CDATA[comunidade]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=570</guid>
		<description><![CDATA[Espero que todos tenham apreciado nosso evento de dia 16 de Janeiro, quero aqui deixar mais uma vez e publicamente o nosso Muito obrigado à: Novabase, FLAG, Microsoft e Adobe, pelo magnifico evento que nos proporcionaram.
Além dos patrocinadores, quero deixar também o meu agradecimento a todos os oradores, que se esmeraram na qualidade das apresentações, para aqueles que não estiveram presentes [...]]]></description>
			<content:encoded><![CDATA[<p>Espero que todos tenham apreciado nosso evento de dia 16 de Janeiro, quero aqui deixar mais uma vez e publicamente o nosso Muito obrigado à: <strong><a href="http://www.novabase.pt" target="_blank">Novabase</a></strong>, <strong><a href="http://www.flag.pt" target="_self">FLAG</a></strong>, <strong><a href="http://www.microsoft.pt" target="_blank">Microsoft </a></strong>e <strong><a href="http://www.adobe.com" target="_blank">Adobe</a></strong>, pelo magnifico evento que nos proporcionaram.</p>
<p>Além dos patrocinadores, quero deixar também o meu agradecimento a todos os oradores, que se esmeraram na qualidade das apresentações, para aqueles que não estiveram presentes no evento deixo aqui as apresentações , excepto a do João Saleiro que já fez o favor de nos disponibilizar a sua.</p>
<p>Estamos também a contar ter esta semana os vídeos da apresentação assim que tiverem na nossa posse disponibilizaremos aqui no blog.</p>
<p><strong>Apresentação do Luis Martins:</strong></p>
<p><strong><a href="http://www.riapt.org/wp-content/uploads/2010/01/Luis-Martins.pdf" target="_blank"><img class="alignnone size-full wp-image-593" src="http://www.riapt.org/wp-content/uploads/2010/01/luis.png" alt="luis" width="441" height="273" /></a></strong></p>
<p><strong> </strong></p>
<p><strong>Apresentação Enrique Duvos:</strong></p>
<p><strong><a href="http://www.riapt.org/wp-content/uploads/2010/01/RIA-Event-Lisbon-Jan-2010_2.pdf"><img class="alignnone size-full wp-image-592" src="http://www.riapt.org/wp-content/uploads/2010/01/enrique.png" alt="enrique" width="472" height="352" /></a></strong></p>
<p><strong> </strong></p>
<p><strong>Apresentação Nuno Godinho:<br />
<a href="http://www.riapt.org/wp-content/uploads/2010/01/Nuno-Godinho.pdf"><img class="alignnone size-full wp-image-594" src="http://www.riapt.org/wp-content/uploads/2010/01/nuno.png" alt="nuno" width="440" height="332" /></a></strong></p>
<p><strong>Apresentação Ricardo Castelhano e Ricardo Fiel:</strong></p>
<p><strong><a href="http://www.riapt.org/wp-content/uploads/2010/01/silverlightemcenariosinternet-100120075434-phpapp021.pdf"><img class="alignnone size-full wp-image-595" src="http://www.riapt.org/wp-content/uploads/2010/01/ric.png" alt="ric" width="443" height="331" /></a></strong></p>
<p><strong> </strong></p>
<p>Mais uma vez obrigado pela participação de todos, e quero desde já deixar aqui uma noticia em primeira mão, se gostaram deste evento preparem-se porque vêem ai novidades, como por exemplo a presença do <strong><a href="http://www.joshuadavis.com/" target="_blank">Joshua Davis</a></strong>, num próximo evento nosso, além de muitas outras que estão na manga, acreditem este ano irá ser o ano da nossa <strong>RIAPT</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2010/01/21/keynotes-evento-riapt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Artigo sobre Rich Internet Applications na revista Invest</title>
		<link>http://www.riapt.org/2008/08/08/artigo-sobre-rich-internet-applications-na-revista-invest/</link>
		<comments>http://www.riapt.org/2008/08/08/artigo-sobre-rich-internet-applications-na-revista-invest/#comments</comments>
		<pubDate>Fri, 08 Aug 2008 10:57:11 +0000</pubDate>
		<dc:creator>João Saleiro</dc:creator>
				<category><![CDATA[Adobe Air]]></category>
		<category><![CDATA[Exemplos]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flash Platform]]></category>
		<category><![CDATA[Flash remoting]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Formação]]></category>
		<category><![CDATA[Introduções]]></category>
		<category><![CDATA[RIAPT]]></category>
		<category><![CDATA[Tutoriais]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=289</guid>
		<description><![CDATA[Há cerca de dois meses fui contactado pelo David Sousa da revista Invest para dar uma entrevista sobre Rich Internet Applications. Essa entrevista serviria de base para que construissem um artigo que saiu no número deste mês, e que passei a scanner e coloquei abaixo (clique para ampliar):



Só tive acesso ao artigo após ter dado [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Há cerca de dois meses fui contactado pelo David Sousa da <a href="http://www.revista-invest.com">revista Invest</a> para dar uma entrevista sobre Rich Internet Applications. Essa entrevista serviria de base para que construissem um artigo que saiu no número deste mês, e que passei a scanner e coloquei abaixo (clique para ampliar):</p>
<p style="text-align: center;">
<p style="text-align: center;"><a href="http://www.riapt.org/wp-content/uploads/2008/08/invest.jpg"><img class="size-medium wp-image-290 alignnone" title="invest" src="http://www.riapt.org/wp-content/uploads/2008/08/invest-300x230.jpg" alt="" width="300" height="230" /></a></p>
<p style="text-align: center;">
<p>Só tive acesso ao artigo após ter dado entrada na gráfica, pelo que, na minha opinião, há algumas passagens que poderiam ter ficado mais precisas &#8211; nomeadamente, ser referida a Microsoft e não ser referida a Adobe (!!!), dar em alguns pontos a sensação de que as RIAs são gratuítas, e confundir-se algumas características que pertencem geralmente às Web Applications como características das RIAs. Ainda assim o artigo refere e bem a importância das RIAs para o negócio.</p>
<p>Coloco abaixo a entrevista original, que é mais específica e pormenorizada, podendo ser muito útil para elucidar algumas questões mais ligadas ao negócio que são feitas habitualmente por quem quer saber mais sobre o assunto. Curiosamente, estas são as questões que me são habitualmente feitas pelos clientes. Recordo que a entrevista não foi feita para publicação mas sim para ajudar o autor do artigo, pelo que poderão haver algumas &#8220;gralhas&#8221; de português.</p>
<p style="text-align: center;">
<h2 style="text-align: left;">A entrevista original</h2>
<p style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="color: #333333;"><span style="font-family: Tahoma,Helvetica,Sans-Serif;"><span style="font-size: small;"><strong>1- O que são as aplicações RIA?</strong></span></span></span></span></p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">Rich Internet Applications são aplicações com um interface gráfico, funcionalidades e interacção semelhantes ao de uma aplicação desktop, tal como o Microsoft Word, mas que correm dentro do web-browser. Imagine que não precisaria de instalar o Microsoft Word, sendo que para o usar bastaria abrir um endereço no seu web-browser. O endereço <a class="EC_moz-txt-link-freetext" href="http://www.buzzword.com/" target="_blank">http://www.buzzword.com/</a> pode ser tomado como um exemplo de um processador de texto colaborativo no formato RIA.</p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="color: #333333;"><strong> </strong><span style="font-family: Tahoma,Helvetica,Sans-Serif;"><span style="font-size: small;"><strong>2- Porque surgiram estas aplicações?</strong></span></span></span></span></p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">Este tipo de aplicações surgiu de uma evolução natural do software. Hoje em dia queremos aceder aos nossos dados e aplicações de qualquer local, dispositivo, e sistema operativo. Queremos simplicidade, não ter que passar pelo processo de instalação de software nem termos que nos preocupar com manutenção. Numa empresa, por exemplo, é penoso ter que instalar software em centenas ou milhares de computadores, dar manutenção, fazer actualizações, e por aí adiante &#8211; implica elevados custos, e demasiado tempo perdido. Daí as empresas hoje em dia terem convergido para o modelo de &#8220;Web-Application&#8221; &#8211; aplicações baseadas em html que correm remotamente sem terem que ser instaladas nos terminais. Infelizmente, as web-applications apesar de práticas possuem limitações a nível de interface gráfico e funcionalidades, sendo complicado imitar a interacção e objectividade do software desktop. As RIAs são no fundo o próximo passo: pegar no melhor das aplicações Web e das aplicações Desktop e juntar num único conceito.</p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="font-size: small; font-family: Tahoma,Helvetica,Sans-Serif; color: #333333;"> </span></span></p>
<p class="EC_MsoNormal" style="text-align: left;"><strong><span style="color: black;"><span style="color: #333333;"><span style="font-family: Tahoma,Helvetica,Sans-Serif;"><span style="font-size: small;">3- Quais os seus objectivos principais?</span></span></span></span></strong></p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">As RIAs objectivam o mesmo que qualquer outra solução de software: resolver problemas. O cliente tem um problema, e precisa de uma solução. Essa solução pode ser desenvolvida no modelo &#8220;Desktop Application&#8221;, no modelo &#8220;Web Application&#8221;, e agora no modelo &#8220;RIA&#8221;. Portanto a nível de requisitos funcionais, os objectivos são os mesmos: resolver os problemas de negócio.<br />
Porém, no que toca aos requisitos não funcionais &#8211; que se prendem com as características tecnológicas das aplicações &#8211; pretende-se com as RIAs disponibilizar software acessível de qualquer local e computador com ou sem restrições de segurança sendo dado especial destaque ao Interface Gráfico e interacção com o utilizador com vista a que o software seja o tão fácil de usar quanto possível. Regra geral é desdenhada a importância do interface gráfico e simplicidade de utilização, sendo esse um dos primeiros pontos que os clientes cortam no investimento &#8211; porém, surge a questão: de que serve software que funciona se ninguém o souber usar eficientemente?<br />
Outra característica comum nas RIAs é que facilitam a colaboração: é possível que várias pessoas trabalhem sobre os mesmos dados ao mesmo tempo. Este é por exemplo o principal ponto forte do Buzzword: permite que várias pessoas estejam a trabalhar sobre o mesmo documento, algo que actualmente com o Microsoft Word não é possível.</p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="font-size: small; font-family: Tahoma,Helvetica,Sans-Serif; color: #333333;"> </span></span></p>
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="color: #333333;"><span style="font-family: Tahoma,Helvetica,Sans-Serif;"><span style="font-size: small;"><strong>4- Quem produz essas aplicações (empresas estrangeiras, portuguesas)? Há empresas a trabalhar exclusivamente nelas?</strong></span></span></span></span></p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">Sobretudo empresas estrangeiras. Posso referir com convicção a Cynergy Systems (<a class="EC_moz-txt-link-freetext" href="http://www.cynergysystems.com/" target="_blank">http://www.cynergysystems.com/</a>), líder mundial na matéria, a Fantasy Interactive, mais dotada no lado criativo (<a class="EC_moz-txt-link-freetext" href="http://www.fantasy-interactive.com/" target="_blank">http://www.fantasy-interactive.com/</a>) e a EffectiveUI (<a class="EC_moz-txt-link-freetext" href="http://www.effectiveui.com/" target="_blank">http://www.effectiveui.com/</a>).<br />
Em Portugal o conceito ainda é recente, e só agora se começa a ver algum interesse &#8211; em parte, um pouco graças aos <a class="EC_moz-txt-link-abbreviated" href="../" target="_blank">www.riapt.org</a>. Sei que existem algumas consultoras interessadas em apostar na matéria devido a contactos regulares que tenho recebido com questões sobre as tecnologias de desenvolvimento, procurando por técnicos especializados, ou solicitando a minha disponibilidade para dar formação e prestar serviços.<br />
Enquanto estive em Madrid no Adobe onAir Tour &#8211; um evento sobre o assunto &#8211; conheci a Buzz-ID (<a class="EC_moz-txt-link-freetext" href="http://www.buzz-id.com/" target="_blank">http://www.buzz-id.com/</a>), uma PME portuguesa que começa a dar cartas interessantes nesta matéria. No meu caso pessoal, comecei em 2005 a reunir esforços para criar uma equipa especializada na matéria &#8211; a <a href="http://www.webfuel.pt">Webfuel</a>. Nestes dois anos estivemos essencialmente a reunir o know-how, a definir workflows e a preparar-mo-nos para o mercado. <span style="text-decoration: line-through;">Neste momento falta simplesmente o &#8220;clique&#8221; &#8211; os clientes e projectos certos &#8211; para o arranque definitivo.</span> (<em>Neste momento já demos o clique e já ninguém nos pára </em>)</p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="font-size: small; font-family: Tahoma,Helvetica,Sans-Serif; color: #333333;"> </span></span></p>
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="color: #333333;"><span style="font-family: Tahoma,Helvetica,Sans-Serif;"><span style="font-size: small;"><strong>5- A quem se destinam estas aplicações?</strong></span></span></span></span></p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">Estas aplicações são como quaisquer outras aplicações, portanto o destinatário é simplesmente qualquer utilizador de software que precise de uma ferramenta para o ajudar em algo. As RIAs podem portanto destinar-se ao end-user &#8211; que precisa por exemplo de ferramentas de manipulação de imagem, de processamento de texto, de agregração de informação, colaboração, etc &#8211; ou ao negócio em si &#8211; qualquer aplicação de business intelligence. Obviamente que os principais interessados serão aqueles que querem tirar partido do facto de não terem que instalar as aplicações podendo usá-las a partir de qualquer local e dispositivo mas sem se quererem limitar à típica &#8220;web application&#8221; baseada em HTML. Muitas empresas estrangeiras que trabalham com SAP começaram a desenvolver a camada de front-end das suas aplicações em tecnologias de desenvolvimento de RIAs &#8211; como o Adobe Flex -, integrando com os backends SAP existentes. A título de curiosidade, a SAP disponibiliza um livro exactamente sobre a integração com o Adobe Flex, e aborda os conceitos de RIA: <a class="EC_moz-txt-link-freetext" href="http://www.sappress.com/product.cfm?account=&amp;product=H1951" target="_blank">http://www.sappress.com/product.cfm?account=&amp;product=H1951</a></p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="font-size: small; font-family: Tahoma,Helvetica,Sans-Serif; color: #333333;"> </span></span></p>
<p class="EC_MsoNormal" style="text-align: left;"><strong><span style="color: black;"><span style="color: #333333;"><span style="font-family: Tahoma,Helvetica,Sans-Serif;"><span style="font-size: small;">6- Quanto custa a sua criação?</span></span></span></span></strong></p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">Em termos de negócio, a diferença de uma RIA para outra aplicação reside sobretudo na camada de front-end. O investimento no backend é exactamente o mesmo, sendo que este simplesmente irá expôr os seus serviços tal como anteriormente na forma de Web-Services ou outra solução de comunicação (como o Flash Remoting). O investimento adicional é feito sobre a camada de front-end que implica colocar na equipa de desenvolvimento especialistas em design, interaction design, usabilidade e user experience. Porém, face ao custo total das aplicações habituais, o investimento adicional é ligeiro, facilmente suportável e perfeitamente justificado.</p>
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="font-size: small; font-family: Tahoma,Helvetica,Sans-Serif; color: #333333;"><br />
</span></span></p>
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="color: #333333;"><span style="font-family: Tahoma,Helvetica,Sans-Serif;"><span style="font-size: small;"><strong>7- Qual o lucro/retorno que as empresas que criam estas aplicações obtêm ou esperam obter?</strong></span></span></span></span></p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">O ROI não é sobretudo dirigido a quem desenvolve o software, mas a quem o usa. As empresas que criam estas aplicações não são diferentes das outras empresas de desenvolvimento de software. Simplesmente, investiram numa área de ponta, inseriram na sua equipa criativos e especialistas nas plataformas de RIAs, de forma a desenvolver software que resulta na satisfação do cliente pela sua simplicidade de adopção e utilização.<br />
Porém, empresas de desenvolvimento que criem as suas próprias aplicações genéricas podem usufruir de um novo modelo de negócio de distribuição de software denominado de &#8220;pay-per-use&#8221;. Ao invés de venderem um pacote que o cliente tem que comprar e instalar no seu computador, simplesmente disponibilizam a aplicação na Internet que pode ser usada através de um fee mensal, anual ou simplesmente pontual. (<em>Faltou referir o modelo de negócio <a href="http://en.wikipedia.org/wiki/Software_as_a_Service">Software as a Service</a></em>). A manutenção é feita simplesmente actualizando a aplicação no servidor central, sendo benéfico para quem desenvolve e para quem usa. Obtém-se um modelo de negócio mais fácil de gerir, e mais justo para ambas as partes. Uma vantagem que interessa realçar é que neste modelo não é possível piratear software. O que o utilizador compra é um acesso periódico à aplicação, pelo que a única hipótese para um pirata é roubar o acesso a outra pessoa.</p>
<p class="EC_MsoNormal" style="text-align: left;">Em certos casos específicos, também se pode adoptar um modelo de negócio de revenue-sharing, em que a empresa que desenvolve recebe parte dos lucros que a empresa que utiliza gera através do produto de software.<br />
Outro modelo de negócio que não acho tão interessante, é a remuneração por publicidade, em que são colocados anúncios no meio da aplicação. Porém, é uma solução que a meu ver apenas se justifica em aplicações relacionadas com redes sociais online, e que para o negócio em si não faz sentido nenhum.</p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="font-size: small; font-family: Tahoma,Helvetica,Sans-Serif; color: #333333;"> </span></span></p>
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="color: #333333;"><span style="font-family: Tahoma,Helvetica,Sans-Serif;"><span style="font-size: small;"><strong>8- Que género de aplicações vão ser reformuladas para o formato RIA?</strong></span></span></span></span></p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">Quaisquer aplicações que não estejam dependentes das limitações da largura de banda actual, ou das restrições de segurança dos plugins das tecnologias em que se baseiam as RIAs. A título exemplificativo, podemos ir desde backoffices, CRMs, aplicações B2B, B2C às simples aplicações e ferramentas destinadas ao end-user, como processadores de texto, folhas de cálculo ou editores de imagem.</p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="font-size: small; font-family: Tahoma,Helvetica,Sans-Serif; color: #333333;"> </span></span></p>
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="color: #333333;"><span style="font-family: Tahoma,Helvetica,Sans-Serif;"><span style="font-size: small;"><strong>9- Quais as vantagens/desvantagens deste tipo de aplicações para as empresas clientes?</strong></span></span></span></span></p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">O custo de instalação de software desktop em centenas ou milhares de computadores é alto. No caso das aplicações empresariais, temos uma redução drástica no custo de deployment, na medida em que basta colocar a aplicação num servidor HTTP, e a partir daí milhares de terminais ficam com a aplicação disponível através do web-browser.  Além de que, ao se eliminar o passo do deployment, também se obtém um time-to-market muito menor, diminuindo o gap desde o momento em que se fechou o desenvolvimento até ao momento de início da sua utilização em ambiente de produção.<br />
Na manutenção consegue-se novamente obter uma redução drástica de custos, visto que basta dar manutenção a um único ponto: o servidor HTTP onde é disponibilizada a aplicação. Ao actualizar essa aplicação, actualiza todos os clientes &#8220;em simultâneo&#8221;.</p>
<p class="EC_MsoNormal" style="text-align: left;">Quanto à sua utilização, o facto de regra geral serem dotadas de melhores interfaces gráficos resulta numa maior produtividade por parte dos seus utilizadores que se sentem mais confortáveis com a aplicação. Outra ponto que interessa realçar é que as RIAs são muito mais eficientes que as típicas web-applications no que toca à troca de informação com o servidor, obtendo-se tempos de espera muito menores.</p>
<p class="EC_MsoNormal" style="text-align: left;">Imaginemos por exemplo uma aplicação de B2B de gestão de stocks e encomendas. Um distribuidor pretende que os retalhistas com quem trabalha possam usar uma aplicação do distribuidor para fazer reposição de stocks. Se essa aplicação for uma RIA o distribuidor terá somente que entregar ao retalhista o URL da aplicação, com as respectivas credenciais de acesso. O retalhista simplesmente terá que utilizar o seu web-browser para abrir a aplicação, fazer o login, e utilizá-la. Isto é algo que acontece actualmente com as aplicações web, mas no caso das RIAs o retalhista irá usar algo que é realmente uma aplicação, com um interface gráfico e interacção em tudo idênticos ao software desktop, e não um conjunto de páginas HTML que se assemelham a uma aplicação.</p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="font-size: small; font-family: Tahoma,Helvetica,Sans-Serif; color: #333333;"> </span></span></p>
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="color: #333333;"><span style="font-family: Tahoma,Helvetica,Sans-Serif;"><span style="font-size: small;"><strong>10- Como é feito o controlo de acesso e a segurança às redes RIA?</strong></span></span></span></span></p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">Os sistemas de controlo de acessos e a segurança são em tudo idênticas às actuais aplicações Web. Os paradigmas e preocupações são exactamente os mesmos, pelo que não há alteração nem no investimento nem no know-how necessário. Qualquer aplicação distribuída, seja ela desktop, web, ou ria, que troque dados num canal deverá garantir que esse canal é seguro através de algumas técnicas habituais &#8211; como o https.</p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="font-size: small; font-family: Tahoma,Helvetica,Sans-Serif; color: #333333;"> </span></span></p>
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="color: #333333;"><span style="font-family: Tahoma,Helvetica,Sans-Serif;"><span style="font-size: small;"><strong>11- Não há riscos acrescidos de pirataria informática e uma espécie de terrorismo financeiro (caso haja bases de dados financeiras disponíveis na rede)?</strong></span></span></span></span></p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">Não mais que o risco actualmente existente quando utiliza um sistema de home-banking, como o CaixaDirecta. Porém, é natural que com a proliferação das aplicações RIAs surjam empresas com lacunas a nível de desenvolvimento e segurança e seja complicado para o utilizador distinguir se deve confiar nessa empresa/aplicação ou não. Mas como sabe que pode confiar no seu sistema de home-banking?  Os riscos dependem sobretudo da seriedade e experiência da equipa de desenvolvimento, e do investimento que foi feito em segurança.</p>
<p style="text-align: left;">No caso de aplicações críticas, estas podem e devem ser colocadas a correr em ambientes controlados, em que a aplicação está acessível somente dentro da rede da empresa. O acesso externo poderá ser concedido em condições especiais, como por exemplo, VPN&#8217;s, ou a partes limitadas do sistema consoante as credenciais do utilizador.</p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="font-size: small; font-family: Tahoma,Helvetica,Sans-Serif; color: #333333;"> </span></span></p>
<p class="EC_MsoNormal" style="text-align: left;"><strong><span style="color: black;"><span style="color: #333333;"><span style="font-family: Tahoma,Helvetica,Sans-Serif;"><span style="font-size: small;">12- Como irá funcionar a utilização destas aplicações? </span></span></span></span></strong></p>
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="font-size: small; font-family: Tahoma,Helvetica,Sans-Serif; color: #333333;"><br />
</span></span></p>
<p class="EC_MsoNormal" style="text-align: left;">Simples: abre o seu browser, que regra geral vem equipado com um plugin como o Adobe Flash Player ou Microsoft Silverlight e coloca o endereço da aplicação. Por vezes pode ser necessário fazer um login, mas a partir daí a utilização da aplicação será em tudo idêntica à utilização do seu software habitual. Existem algumas pequenas limitações nos plugins que raramente se notam, mas independentemente disso estou convicto que até ao final deste ano até essas limitações estarão completamente ultrapassadas. (<em>Falava do <a href="http://labs.adobe.com/technologies/flashplayer10/">Flash Player 10</a></em>)</p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="color: #333333;"><span style="font-family: Tahoma,Helvetica,Sans-Serif;"><span style="font-size: small;"><strong>13- É sabido que algumas das aplicações são open-source e outras são pagas. Como são definidas as que terão custos e o que as tornam pagas?</strong></span></span></span></span></p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">Cabe a quem desenvolve tomar essa decisão. Tem exclusivamente a ver com o modelo de negócio escolhido, e com as vantagens e desvantagens dos modelos de licenciamento de software aberto ou fechado. Há casos em que o software open-source é completamente justificado. Por exemplo, a empresa decide disponibilizar gratuitamente o código fonte sendo as receitas geradas pelo suporte e formação. Ou ainda, porque desenvolveu um produto para optimizar o seu negócio (i.e. as receitas são resultantes do negócio e não da venda do software), e acha que se disponibilizar o código fonte do seu produto este irá melhorar com o tempo graças à participação de outras pessoas, resultando consequentemente numa mais valia para o seu negócio que se torna mais eficiente à medida que o software é melhorado.</p>
<p class="EC_MsoNormal" style="text-align: left;">Porém, está é uma questão que não é inerente às RIAs, mas a qualquer tipo de software.</p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="font-size: small; font-family: Tahoma,Helvetica,Sans-Serif; color: #333333;"> </span></span></p>
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="color: #333333;"><span style="font-family: Tahoma,Helvetica,Sans-Serif;"><span style="font-size: small;"><strong>14- O que se espera do mercado das aplicações desktop? Vai entrar em falência?</strong></span></span></span></span></p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">Não acredito. Simplesmente vai ter que se adaptar a uma nova realidade, em que o destaque está nos dados e não na aplicação, e aprender a co-existir com as Rich Internet Applications. Começa a surgir um novo conceito, o de Rich Desktop Application. Uma Rich Desktop Application (RDA) consiste numa aplicação que é instalada no nosso computador, mas que regra geral é composta essencialmente por um interface gráfico. Os dados e a camada de negócio encontram-se num servidor remoto. E porque queremos instalar uma RDA no nosso computador, se podemos usar uma RIA? Porque podemos não estar sempre ligados à Internet, e não queremos deixar de usar as nossas aplicações quando a ligação está indisponível -  neste caso, quando a ligação é reposta, os dados são sincronizados com o servidor. Ou simplesmente porque as RDAs não estão limitadas pelas restrições de segurança das sandboxes dos plugins sobre as quais assentam as RIAs, permitindo uma maior integração com o sistema operativo.</p>
<p class="EC_MsoNormal" style="text-align: left;">Como disse atrás, o destaque hoje em dia está nos dados e não na aplicação em si. O que o utilizador quer é ubiquidade: manipular os seus dados a partir de qualquer local, independentemente do sistema operativo, dispositivo, ou meio de acesso. O que é criado pelas equipas de desenvolvimento são diferentes terminais: Desktop, Web, RIA, ou mesmo aplicações móveis, mas todos eles acedem e manipulam os mesmos dados. Tecnologias de desenvolvimento de RIAs como o Adobe Flex permitem facilmente criar uma RIA, e depois reutilizar o código para criar uma RDA (neste caso, assente sobre Adobe Air).</p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="font-size: small; font-family: Tahoma,Helvetica,Sans-Serif; color: #333333;"> </span></span></p>
<p class="EC_MsoNormal" style="text-align: left;"><span style="color: black;"><span style="color: #333333;"><span style="font-family: Tahoma,Helvetica,Sans-Serif;"><span style="font-size: small;"><strong>15- Existem problemas de compatibilidade entre máquinas e sistemas informáticos (ex: PC e MAC)?</strong></span></span></span></span></p>
<p class="EC_MsoNormal" style="text-align: left;">
<p class="EC_MsoNormal" style="text-align: left;">A compatibilidade de acesso a uma RIA é definida pelo suporte do plugin sobre o qual a RIA assente nos diferentes sistemas operativos.<br />
O Flash Player, por exemplo, é actualmente suportado em Windows (XP, Vista, 2003, 2000, ME e 98), Linux, Macintosh e Solaris, com uma penetração na ordem dos 95% (<a class="EC_moz-txt-link-freetext" href="http://www.adobe.com/products/player_census/flashplayer/version_penetration.html" target="_blank">http://www.adobe.com/products/player_census/flashplayer/version_penetration.html</a>) . A versão Lite do Flash Player pode ainda correr em dispositivos móveis, mas implica a criação de source code específico para essa versão.<br />
O Microsoft Silverlight é actualmente suportado em Windows (Vista,2003, XP) e Mac OS. Está a ser desenvolvido suporte para Linux, e para dispositivos móveis com Windows Mobile 6 e Symbian S60.<br />
A Adobe possui ainda uma tecnologia denominada Adobe Air que permite transformar uma RIA numa RDA dando-lhe funcionalidades adicionais de integração com o sistema operativo. O Adobe Air é compatível de forma idêntica em todos os sistemas operativos, tal como o Flash Player.</p>
<p style="text-align: left;">Em resumo, uma das vantagens das RIAs é efectivamente o facto de que não está dependente do sistema operativo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2008/08/08/artigo-sobre-rich-internet-applications-na-revista-invest/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Utilização de Custom Events para transportar informação entre classes</title>
		<link>http://www.riapt.org/2008/07/13/utilizacao-de-custom-events-para-transportar-informacao-entre-componentes-fracamente-acoplados/</link>
		<comments>http://www.riapt.org/2008/07/13/utilizacao-de-custom-events-para-transportar-informacao-entre-componentes-fracamente-acoplados/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 23:04:03 +0000</pubDate>
		<dc:creator>João Saleiro</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Exemplos]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=279</guid>
		<description><![CDATA[A 11 de Março elaborei um post relevante sobre a utilização de eventos aquando da criação de componentes fracamente acoplados. Em resumo, o que se pretendia era eliminar a utilização do &#8220;parent&#8221; na comunicação entre classes. A solução exemplificada consistia em detectar um clique numa opção de um menu e lançar um evento a &#8220;informar&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>A 11 de Março elaborei um <a href="http://www.riapt.org/2008/03/11/best-practices-1-a-morte-do-parentparentparent-criacao-de-componentes-fracamente-acoplados/">post</a> relevante sobre a utilização de eventos aquando da criação de componentes fracamente acoplados. Em resumo, o que se pretendia era eliminar a utilização do &#8220;parent&#8221; na comunicação entre classes. A solução exemplificada consistia em detectar um clique numa opção de um menu e lançar um evento a &#8220;informar&#8221; a necessidade de mudança de secção. A classe acima teria que escutar esse evento, e reagir fazendo então a mudança de secção .</p>
<p>Aconselho vivamente a leitura desse <a href="http://www.riapt.org/2008/03/11/best-practices-1-a-morte-do-parentparentparent-criacao-de-componentes-fracamente-acoplados/">post</a> para facilitar a compreensão deste.</p>
<p>Após esse post, uma das principais questões que me fizeram, foi &#8220;e como transportar dados no evento?&#8221;.</p>
<h2>Exemplo</h2>
<p>Imaginemos um site com a seguinte estrutura:</p>
<ul>
<li>Stage</li>
<li>Stage.seccaoDeProdutos</li>
<li>Stage.seccaoDeProdutos.listagem</li>
<li>Stage.seccaoDeProdutos.listagem.itemProduto1</li>
<li>Stage.seccaoDeProdutos.listagem.itemProduto2</li>
<li>Stage.seccaoDeProdutos.listagem.itemProduto[n]</li>
<li>Stage.seccaoDeProdutos.produtoDetalhe</li>
</ul>
<p>Pretende-se que a classe Listagem detecte cliques nos produtos. Sempre que há um clique num produto, a classe SeccaoDeProdutos deve ser informada e reagir, removendo a listagem, e mostrando o ProdutoDetalhe com os dados do produto clicado.<br />
Graças ao post anterior, já sabemos como resolver a primeira metade deste problema (reagir ao clique, remover a listagem, e mostrar o ProdutoDetalhe), como se demonstra adiante:</p>
<h2>Reagir ao clique</h2>
<p>Exemplo do Listagem.as</p>
<pre class="prettyprint">// Considerando que listaDeProdutos é uma matriz com instâncias da
// classe Produto (id:Number, designacao:String, descricao:String, foto:String)
for (var i:Number=0; listaDeProdutos.length&gt;i; ++i)
{
var p:ItemProduto=new ItemProduto(); // Criar um ItemProduto
p.dados=listaDeProdutos[i]; // Colocar os dados do produto dentro do ItemProduto
addChild (p) // Colocar o ItemProduto no ecrã
p.addEventListener(MouseEvent.CLICK, produtoClickHandler);  // Detectar os cliques no itemProduto
}

private function produtoClickHandler(ev:MouseEvent):void
{
dispatchEvent(new Event('produtoClick'));
}</pre>
<p>No SeccaoDeProdutos.as:</p>
<pre class="prettyprint">var l:Listagem=new Listagem();
addChild(l);
l.addEventListener('produtoClick', listagemProdutoClickHandler);

private function listagemProdutoClickHandler(ev:Event):void
{
trace('Agora bastaria remover o listagem, e instanciar o ProdutoDetalhe com os dados do produto clicado');
trace('Mas... qual é o produto clicado????')
}</pre>
<h2>Transportar dados</h2>
<p>Entramos agora na segunda parte do problema: como entregar à classe SeccaoDeProdutos o produto que foi clicado?</p>
<p>A solução consiste em criar um Custom Event: uma classe nossa que estende a classe Event, e pode por isso levar mais propriedades &#8211; sendo assim usada para transportar informação de um lado para o outro.</p>
<p>Na solução acima, no produtoClickHandler, fazemos dispatchEvent(new Event(&#8216;produtoClick&#8217;)); Se interpretarmos esta linha de código, vemos que está a ser lançado um evento do tipo &#8220;Event&#8221;, com o tipo &#8220;produtoClick&#8221;. É aqui que queremos lançar um evento nosso, que vamos ter que criar previamente, como se explica adiante.</p>
<h3>Criar um Custom Event</h3>
<p>Criar um Custom Event não é mais que criar uma classe que estende a classe Event. Vamos assim criar a nossa classe ProdutoEvent:</p>
<p>ProdutoEvent.as:</p>
<pre class="prettyprint">package
{
import flash.events.Event;
public class ProdutoEvent extends Event
{
public function ProdutoEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
}
}</pre>
<h3>Transportar dados no Custom Event</h3>
<p>O código acima é o suficiente para definir um novo evento. Porém, ainda não chega para o nosso caso: queremos que o nosso evento possa transportar dados. Assim, a solução passa simplesmente por adicionar uma propriedade pública ao nosso evento:</p>
<p>ProdutoEvent.as:</p>
<pre class="prettyprint">package
{
import flash.events.Event;
public class ProdutoEvent extends Event
{
public var produto:Produto;
public function ProdutoEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
}
}</pre>
<p>Agora que temos o evento criado, já o podemos usar. Alteramos assim o código do Listagem.as :</p>
<p>Listagem.as:</p>
<pre class="prettyprint">private function produtoClickHandler(event:MouseEvent):void
{
var produtoEvent:ProdutoEvent=new ProdutoEvent('produtoClick');
produtoEvent.produto= (event.currentTarget as ItemProduto).dados   ;     // Vamos colocar dentro do nosso evento (ev.produto) os dados que vamos buscar ao ItemProduto clicado (ev.currentTarget as ItemProduto), que estão na propriedade dados, como vimos no código inicial
dispatchEvent(produtoEvent);
}</pre>
<p>Agora na classe SeccaoDeProdutos.as, temos que apanhar o tipo certo de evento no handler, e já conseguimos aceder aos dados transportados. Basta fazer a seguinte alteração:</p>
<p>SeccaoDeProdutos.as:</p>
<pre class="prettyprint">private function listagemProdutoClickHandler(ev:ProdutoEvent):void
{
trace('Agora bastaria remover o listagem, e instanciar o ProdutoDetalhe com os dados do produto clicado');
trace('O produto clicado foi: ' + ev.produto.designacao + ' TARAAAAM!');
}</pre>
<p>Temos com isto um evento que pode carregar dentro de si dados preenchidos na classe que o lança, para que possam ser usados pela classe que o apanha.</p>
<h3>Criação de tipos no Custom Event</h3>
<p>O código acima já resolve o problema, mas pode ser melhorado de forma a evitar a string &#8220;produtoClick&#8221;. O ideal seria conseguirmos obter o mesmo comportamento que temos com a classe MouseEvent: fazermos algo como MouseEvent.CLICK em vez de escrevermos à mão &#8220;produtoClick&#8221;.</p>
<p>Para isso basta criarmos dentro da classe ProdutoEvent constantes estáticas do tipo String, uma para cada tipo de evento possível. Por exemplo:</p>
<p>ProdutoEvent.as:</p>
<pre class="prettyprint">package
{
import flash.events.Event;
public class ProdutoEvent extends Event
{
public static const VIEW:String="view";
public static const DELETE:String="delete";
public static const UPDATE:String="update";
// etc... colocar aqui todos os tipos que quisermos aplicar à classe ProdutoEvent
public var produto:Produto;
public function ProdutoEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
{
super(type, bubbles, cancelable);
}
}
}</pre>
<p>Agora quando quisermos preparar um ProdutoEvent, deixamos de fazer:</p>
<pre class="prettyprint">var ev:ProdutoEvent=new ProdutoEvent('produtoClick');</pre>
<p>e passamos a fazer:</p>
<pre class="prettyprint">var ev:ProdutoEvent=new ProdutoEvent(ProdutoEvent.VIEW);</pre>
<p>Para escutarmos o evento, deixamos de fazer:</p>
<pre class="prettyprint">l.addEventListener('produtoClick', listagemProdutoClickHandler);</pre>
<p>e passamos a fazer:</p>
<pre class="prettyprint">l.addEventListener(ProdutoEvent.VIEW, listagemProdutoClickHandler);</pre>
<p>Criei um <a href="http://www.riapt.org/wp-content/uploads/2008/07/customevents.zip">exemplo</a> completo que demonstra a aplicação prática da explicação acima. Se a minha explicação não tiver sido suficiente, espero que o <a href="http://www.riapt.org/wp-content/uploads/2008/07/customevents.zip">exemplo</a> ajude a perceber a criação e utilização de Custom Events.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2008/07/13/utilizacao-de-custom-events-para-transportar-informacao-entre-componentes-fracamente-acoplados/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Meeting AUG dia 28 de Junho</title>
		<link>http://www.riapt.org/2008/06/25/meeting-aug-dia-28-de-junho/</link>
		<comments>http://www.riapt.org/2008/06/25/meeting-aug-dia-28-de-junho/#comments</comments>
		<pubDate>Wed, 25 Jun 2008 10:19:42 +0000</pubDate>
		<dc:creator>João Fernandes</dc:creator>
				<category><![CDATA[Cairngorm]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Exemplos]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[zinc]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=278</guid>
		<description><![CDATA[No próximo dia 28 terá lugar mais um evento do Adobe User Group que terá início pelas 17 horas. O local do evento será novamente nas instalações da Flag e irá ser composto por 3 tópicos

MDM Zinc em 20 minutos por Paulo Moreira
SVN e Flex pelo novo evangelista da Adobe, Mihai Corlan
Construção de uma aplicação [...]]]></description>
			<content:encoded><![CDATA[<p>No próximo dia 28 terá lugar mais um evento do <a title="AUG RiaPT" href="http://aug.riapt.org" target="_blank">Adobe User Group</a> que terá início pelas 17 horas. O local do evento será novamente nas instalações da Flag e irá ser composto por 3 tópicos</p>
<ul>
<li>MDM Zinc em 20 minutos por <a title="Paulo Moreira" href="http://www.tekuchi.com" target="_blank">Paulo Moreira</a></li>
<li>SVN e Flex pelo novo evangelista da Adobe, <a title="Mihai Corlan" href="http://corlan.org/about/" target="_blank">Mihai Corlan</a></li>
<li>Construção de uma aplicação com Cairngorm por <a title="João Fernandes" href="http://www.onflexwithcf.org" target="_blank">João Fernandes</a></li>
</ul>
<p>A apresentação do Mihai será assistido no local através de uma sessão de connect.<br />
No final do evento, será sorteado uma licença de um software da Adobe.<br />
As inscrições para participar deverão ser feitas <a title="AUG RiaPT" href="http://aug.riapt.org">aqui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2008/06/25/meeting-aug-dia-28-de-junho/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>AS3 &#8211; Ciclo de criação de um componente</title>
		<link>http://www.riapt.org/2008/06/17/276/</link>
		<comments>http://www.riapt.org/2008/06/17/276/#comments</comments>
		<pubDate>Tue, 17 Jun 2008 19:37:27 +0000</pubDate>
		<dc:creator>MarioSantos</dc:creator>
				<category><![CDATA[Adobe Air]]></category>
		<category><![CDATA[Exemplos]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIAPT]]></category>
		<category><![CDATA[Action Script]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=276</guid>
		<description><![CDATA[Ao percorrer a documentação da Adobe, reparei num resumo bastante interessante que fala do ciclo de execução/criação de cada componente da nossa aplicação. É incrível como cada simples botão ao ser adicionado a um container tem uma dezena de procedimentos até que seja disparado o evento creationComplete. Para quem já criou/estendeu um componente via ActionScript [...]]]></description>
			<content:encoded><![CDATA[<p>Ao percorrer a documentação da Adobe, reparei num resumo bastante interessante que fala do ciclo de execução/criação de cada componente da nossa aplicação. É incrível como cada simples botão ao ser adicionado a um container tem uma dezena de procedimentos até que seja disparado o evento creationComplete. Para quem já criou/estendeu um componente via ActionScript sabe bem do que falo, mas aqui vai a explicação.</p>
<p>Vou falar apenas do processo que acontece por detrás de um adicionar um botão como child a um container (Box) com o simples código:</p>
<div>
<div style="none"><span style="#008000;">// Criar uma box, um botão, definir o label e adicionar como child</span></div>
<div style="none"><strong>var boxContainer:Box = <span style="#0000ff;">new</span> Box();</strong></div>
<div style="none"><strong>var b:Button = <span style="#0000ff;">new</span> Button()</strong></div>
<div style="none"><strong>b.label = <span style="#006080;">&#8220;Enviar&#8221;</span>;</strong></div>
<div style="none"><strong>boxContainer.addChild(b);</strong></div>
</div>
<p><span style="underline;"><span style="#ff0000;">O Flex, procederá da seguinte forma:</span></span></p>
<p><strong><span style="#ff8000;">1. É chamado o componente construtor (new Box e depois new Button)</span></strong></p>
<p><strong><span style="#ff8000;">2.</span> <span style="#ff8000;">Chamado o setter (b.label=) e actualizado todo o componente</span></strong> ( muitas das vezes são chamados métodos de actualização para definirem todo o layout: invalidateProperties(), invalidateSize(), ou invalidateDisplayList() )</p>
<p><strong><span style="#ff8000;">3.</span></strong> <strong><span style="#ff8000;">Adiciona como child (filho) do box.</span></strong> Aqui o Flex faz a maior parte do trabalho, executando-se a  seguinte ordem:</p>
<p><strong><span style="#ff8000;">4.</span></strong> <strong><span style="#ff8000;">Define a propriedade parent do componente</span></strong> para fazer referencia ao seu &#8220;container&#8221;.</p>
<p><strong><span style="#ff8000;">5.</span> <span style="#ff8000;">Calcula e define o estilo/&#8221;style&#8221; de todo o componente.</span></strong></p>
<p><strong><span style="#ff8000;">6.</span> <span style="#ff8000;">Dispara o evento preinitialize do componente.</span></strong></p>
<p><strong><span style="#ff8000;">7.</span> <span style="#ff8000;">Chama o método createChildren() do componente.</span></strong></p>
<p><strong><span style="#ff8000;">8.</span> <span style="#ff8000;">Chama os métodos invalidateProperties(), invalidateSize(),  e invalidateDisplayList()</span></strong> para obrigar a serem disparadas/chamadas os métodos commitProperties(), measure(), ou updateDisplayList() no próximo evento render. A única excepção a estes acontecimentos, é que o flex não chama o método measure()  quando o &#8220;user/programador&#8221; define a altura e largura do componente.</p>
<p><strong><span style="#ff8000;">9.</span> <span style="#ff8000;">Dispara o evento initialize no componente.</span></strong> Nesta altura todos os childs (childrens) no componente são inicializados, mas o componente ainda não foi correctamente definido no seu tamanho, nem processado o seu layout. Este evento pode ser usado para definir /executar procedimentos extra no componente antes que seja completamente processado.</p>
<p><strong><span style="#ff8000;">10. Dispara o evento childAdd no componente &#8220;pai&#8221; / &#8220;parent&#8221;.</span></strong></p>
<p><strong><span style="#ff8000;">11.</span> <span style="#ff8000;">Dispara o evento initialize do seu componente &#8220;pai&#8221; / &#8220;parent&#8221;.</span></strong></p>
<p><strong><span style="#ff8000;">12. Durante o próximo evento render o flex faz as seguinte acções:</span></strong></p>
<ul>
<li><strong><span style="#ff8000;"> Chama o métodos pela seguinte ordem:</span></strong></li>
</ul>
<ol>
<li>commitProperties();</li>
<li>measure();</li>
<li>layoutChrome();</li>
<li>updateDisplayList();</li>
</ol>
<ul>
<li><strong><span style="#ff8000;">Finalmente é disparado o evento updateComplete no componente.</span></strong></li>
</ul>
<p><strong><span style="#ff8000;">13.</span> <span style="#ff8000;">O Flex, depois deste processo ainda poderá disparar eventos de renderização ( render )</span></strong><span style="#ff8000;"> </span>se os métodos commitProperties(), measure(), ou updateDisplayList() forem executados/chamados através dos métodos invalidateProperties(), invalidateSize(), ou invalidateDisplayList().</p>
<p><strong><span style="#ff8000;">14.</span> <span style="#ff8000;">Depois do ultimo evento render ser chamado, o flex executa as seguintes acções:</span></strong></p>
<ul>
<li>Coloca o componente visível ( .visible=true; ).</li>
<li>Dispara o evento creationComplete no componente. O componente é dimensionado e processado para o layout. Este evento é apenas disparado uma única vez e só quando o componente é criado.</li>
<li><span style="#ff8000;">Dispara o evento updateComplete no componente, este evento também é disparado quando são alteradas quaisquer definições do componente, como layout, posição, tamanho ou qualquer alteração das características visuais.</span></li>
</ul>
<p>A maior parte do trabalho de configuração, definição, e renderização de um componente acontece que este é adicionado a um container ( método addChild() ), isto porque enquanto o componente não for adicionado a um container, o Flex não consegue saber o seu tamanho, definir as propriedade &#8220;in-line&#8221;/&#8221;inheriting&#8221; ou desenha-lo no ecrã.</p>
<p>Perceber estes passos é essencial para conhecer  as propriedades e as operações que são executadas aquando da criação de um componente. Ajuda-nos também a perceber melhor porque é que às vezes temos certos erros no nosso código bem como a entender o processo de criação de um componente, o que se torna muito útil para criarmos o nosso próprio componente.</p>
<p>Artigo original <a title="Adobe Live Docs" href="http://livedocs.adobe.com/flex/3/html/help.html?content=ascomponents_advanced_2.html#203434" target="_blank">aqui</a> (EN)</p>
<p>Este artigo está disponivel em <a href="http://msdevstudio.com/blog/download-manager.php?id=13">pdf</a> para download. (link externo &#8211; <a href="http://www.msdevstudio.com">www.msdevstudio.com</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2008/06/17/276/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tutorial Adobe Flex a partir do zero.</title>
		<link>http://www.riapt.org/2008/05/27/tutorial-adobe-flex-a-partir-do-zero/</link>
		<comments>http://www.riapt.org/2008/05/27/tutorial-adobe-flex-a-partir-do-zero/#comments</comments>
		<pubDate>Tue, 27 May 2008 11:40:41 +0000</pubDate>
		<dc:creator>MarioSantos</dc:creator>
				<category><![CDATA[Adobe Air]]></category>
		<category><![CDATA[Amfphp]]></category>
		<category><![CDATA[Exemplos]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[RIAPT]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[iniciantes]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=270</guid>
		<description><![CDATA[


Todos sabemos que por vezes torna-se bastante difícil encontrar artigos e suporte em português, e embora o flex esteja já instalado no mercado, continua-se a encontrar pouca informação composta em algum lado, contando apenas com alguns (bons) blog&#8217;s, e algumas poucas (listas/grupos) onde podemos tirar as nossas duvidas.
Foi basicamente por isso que decidi criar um pequeno [...]]]></description>
			<content:encoded><![CDATA[<div>
<p style="center;"><img class="aligncenter" src="http://www.msdevstudio.com/mywork/flexTutorLogo.png" alt="flexTutorLogo" width="361" height="123" /></p>
</div>
<p>Todos sabemos que por vezes torna-se bastante difícil encontrar artigos e suporte em português, e embora o flex esteja já instalado no mercado, continua-se a encontrar pouca informação composta em algum lado, contando apenas com alguns (bons) blog&#8217;s, e algumas poucas (listas/grupos) onde podemos tirar as nossas duvidas.</p>
<p>Foi basicamente por isso que decidi criar um pequeno tutorial de instalação e como criar um exemplo &#8220;Olá Mundo&#8221;  (parte I), mas como tive bastante &#8220;feedback&#8221; das pessoas, acabei por continuar o tutorial, estando neste momento na parte 5 (inacabada e não publicada) que brevemente será aqui colocada também.</p>
<p>Venho então dar a conhecer o tutorial <strong>Adobe flex a partir do zero </strong>que oficialmente coloquei no meu blog, e que agora partilho com o riaPT visto ser a maior referência nacional em ria&#8217;s (pelo menos não conheço outra). Neste momento o tutorial vai a meio mas deixo já o download das primeiras quatro partes compiladas num ficheiro e deixo também o index  do que já foi feito mas melhor identificação, passo então a citar:</p>
<p align="left"><span style="Candara;"><strong>1. Observações iniciais. </strong>Pag. 4- 5<br />
<strong>2. Instalando, configurando e fazendo o típico teste &#8220;hello world&#8221;.</strong> Pag. 5-6<br />
2.1. Criando um novo Projecto. Pag. 6-7<br />
2.2. Entendendo o espaço de Trabalho do Flex Builder. Pag. 7-10<br />
2.3. Criando o primeiro exemplo “hello world”. Pag. 10-11<br />
2.3.1. Criando um script (AS3). Pag. 12-14<br />
<strong>3. Entendendo a ordenação e estruturação do código.</strong>Pag. 14-16<br />
3.1. Criação de um ficheiro action script externo para uso no flex. Pag. 16-18<br />
<strong>4. Entendendo os componentes internos, states e transições/efeitos.</strong> Pag. 18-20<br />
4.1. States, entendendo a sua disposição. Pag. 21-22<br />
4.2. Transições e seus efeitos. Pag. 23-24<br />
<strong>5. Programação do exemplo “olá mundo” em Action Script.</strong> Pag. 25-27<br />
<strong>6. Efeitos e eventListners.</strong> Pag. 27-32<br />
<strong>7. Componentes e Módulos.</strong>Pag. 33<br />
7.1. As diferenças entre componentes e módulos. Pag. 33<br />
7.2. Criando um componente e trabalhando com ele. Pag. 34-36<br />
7.3. Enviando e recebendo dados de/para um componente. Pag. 37-38<br />
7.4. Criando um módulo e trabalhando com ele. Pag. 38-41<br />
<strong>8. Entendendo a comunicação com Objectos Remotos.</strong>Pag. 42<br />
8.1. Instalação do amfPHP e servidor Wamp. Pag. 42-43<br />
8.2. Criando o primeiro serviço no amfPHP. Pag. 43-44<br />
8.3. Configurando o Flex Builder para trabalhar com o amfPHP. Pag. 44<br />
8.4. Criando o primeiro Remote Object no Flex. Pag. 45-46</span></p>
<p align="left"><span style="Candara;">Podem fazer o download do pdf <a title="aqui" href="http://msdevstudio.com/blog/go.php?http://msdevstudio.com/blog/download-manager.php?id=8" target="_self">aqui</a> ou ver a versão online nas publicações <a href="http://issuu.com">http://issuu.com</a> acedendo <a title="issuu.com" href="http://issuu.com/msdevweb/docs/flex_book_part_1_2_3_4?mode=embed&amp;documentId=080430143306-d044e542404c41cb82c53d7664cc182b&amp;layout=grey" target="_blank">aqui</a></span></p>
<p align="left">Espero que seja útil, e qualquer critica ou correcção estejam à vontade para me informar.</p>
<p align="left">EDIT: A parte 5 já está disponivel para download <a href="http://msdevstudio.com/blog/2008/06/04/tutorial-adobe-flex-a-partir-do-zero-parte-v/" target="_blank">aqui</a></p>
<p align="left"> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2008/05/27/tutorial-adobe-flex-a-partir-do-zero/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>XML e E4X em Actionscript 3.0 &#8211; part 1</title>
		<link>http://www.riapt.org/2008/04/29/xml-e-e4x-em-actionscript-30-part-1/</link>
		<comments>http://www.riapt.org/2008/04/29/xml-e-e4x-em-actionscript-30-part-1/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 02:35:00 +0000</pubDate>
		<dc:creator>joaogoncalves</dc:creator>
				<category><![CDATA[Exemplos]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Formação]]></category>
		<category><![CDATA[Tutoriais]]></category>

		<guid isPermaLink="false">http://www.riapt.org/?p=261</guid>
		<description><![CDATA[Acabei de deixar no meu Blog, um tutorial sobre XML e E4X em Actionscript 3.0 que gostaria de partilhar com a comunidade, pelo que para quem tiver interessado poderá visualizar aqui:

]]></description>
			<content:encoded><![CDATA[<p>Acabei de deixar no meu Blog, um tutorial sobre XML e E4X em Actionscript 3.0 que gostaria de partilhar com a comunidade, pelo que para quem tiver interessado poderá visualizar aqui:</p>
<p style="center;"><a title="XML e E4X" href="http://www.joaogoncalves.net/blog/?p=14" target="_blank"><img src="http://www.joaogoncalves.net/blog/wp-content/tutoriais/tutorial.jpg" alt="XML e E4X em AS3" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2008/04/29/xml-e-e4x-em-actionscript-30-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Menu ao estilo do MacOS</title>
		<link>http://www.riapt.org/2008/03/26/menu-ao-estilo-do-macos/</link>
		<comments>http://www.riapt.org/2008/03/26/menu-ao-estilo-do-macos/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 11:41:11 +0000</pubDate>
		<dc:creator>João Saleiro</dc:creator>
				<category><![CDATA[Exemplos]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Introduções]]></category>
		<category><![CDATA[Rich UI]]></category>

		<guid isPermaLink="false">http://www.riapt.org/2008/03/26/menu-ao-estilo-do-macos/</guid>
		<description><![CDATA[Ontem durante uma das minhas aulas surgiu a necessidade de se desenvolver um menu ao estilo do MacOS. Apesar de não ter perdido muito tempo a aperfeiçoá-lo, o resultado final ficou engraçado, pelo que partilho o código fonte convosco. Antes de mais, o resultado final:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_MacMenu_1789629983"
			class="flashmovie"
			width="600"
			height="400">
	<param name="movie" value="http://www.webfuel.pt/jsaleiro/etic/Interfaces%20Interactivos%20em%20Actionscript/Exemplos/MacMenu/MacMenu.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://www.webfuel.pt/jsaleiro/etic/Interfaces%20Interactivos%20em%20Actionscript/Exemplos/MacMenu/MacMenu.swf"
			name="fm_MacMenu_1789629983"
			width="600"
			height="400">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
Experimentem a clicar nos ícones. O menu [...]]]></description>
			<content:encoded><![CDATA[<p>Ontem durante uma das minhas aulas surgiu a necessidade de se desenvolver um menu ao estilo do MacOS. Apesar de não ter perdido muito tempo a aperfeiçoá-lo, o resultado final ficou engraçado, pelo que partilho o código fonte convosco. Antes de mais, o resultado final:</p>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			id="fm_MacMenu_15082177"
			class="flashmovie"
			width="600"
			height="400">
	<param name="movie" value="http://www.webfuel.pt/jsaleiro/etic/Interfaces%20Interactivos%20em%20Actionscript/Exemplos/MacMenu/MacMenu.swf" />
	<!--[if !IE]>-->
	<object	type="application/x-shockwave-flash"
			data="http://www.webfuel.pt/jsaleiro/etic/Interfaces%20Interactivos%20em%20Actionscript/Exemplos/MacMenu/MacMenu.swf"
			name="fm_MacMenu_15082177"
			width="600"
			height="400">
	<!--<![endif]-->
		
	<!--[if !IE]>-->
	</object>
	<!--<![endif]-->
</object>
<p>Experimentem a clicar nos ícones. O menu pode ser usado tanto no Flash CS3 como no Flex.</p>
<p>Para usarem o menu nos vossos projectos, basta que:</p>
<ol>
<li>Coloquem na pasta do vosso projecto o ficheiro MacMenu.as;</li>
<li>Coloquem no stage os ícones que pretendem que façam parte do menu. Tenham o cuidado de centrar as imagens no ponto 0,0 por causa do zoom;</li>
<li>Façam o seguinte código:</li>
</ol>
<pre class="prettyprint">
var listaDeIcones:Array=[m1, m2, m3, m4, m5, m6];

var menu:MacMenu = new MacMenu(listaDeIcones);

addChild(menu); // Por causa do enterFrame. Preferia evitar esta solução, mas por agora...</pre>
<p>Onde m1, m2, m3, etc, são o nome das instâncias dos vossos ícones.</p>
<p>O menu possui três parâmetros de configuração:</p>
<ul>
<li>ratio: define a distância de reacção ao rato. Quanto menor o número, mais próximo precisa o rato de estar para que os ícones reajam. Exemplo: menu.ratio= 130;</li>
<li>escala_maxima: define o zoom máximo que os ícones terão. Exemplo: menu.escala_maxima=1.2;</li>
<li>escala_minima: define o zoom mínimo que os ícones terão. Exemplo: menu.escala_minima=0.5;</li>
</ul>
<p>Decidi separar o código de reacção aos cliques retirando-o da classe MacMenu, isto porque podem querer criar as vossas próprias reacções aos cliques. Se no entanto quiserem usar as do exemplo acima (no clique, o ícone fica com um brilho e começa aos saltos), precisarão da classe GlowReactor e da pasta caurina:</p>
<ol>
<li>Copiar para o vosso projecto a pasta caurina;</li>
<li>Copiar para o vosso projecto o ficheiro GlowReactor.as;</li>
<li>Fazer o seguinte código:</li>
</ol>
<pre class="prettyprint">
new GlowReactor(listaDeIcones);</pre>
<p>Algumas das práticas usadas no exemplo são discutíveis, mas recordem-se que foi feito em meia hora com fins educativos. Ainda assim, espero que vos agrade e seja útil.</p>
<p>O código fonte pode ser descarregado <a href="http://www.webfuel.pt/jsaleiro/etic/Interfaces%20Interactivos%20em%20Actionscript/Exemplos/MacMenu.zip">daqui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2008/03/26/menu-ao-estilo-do-macos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Best Practices #1 &#8211; A morte do parent.parent.parent: criação de componentes fracamente acoplados</title>
		<link>http://www.riapt.org/2008/03/11/best-practices-1-a-morte-do-parentparentparent-criacao-de-componentes-fracamente-acoplados/</link>
		<comments>http://www.riapt.org/2008/03/11/best-practices-1-a-morte-do-parentparentparent-criacao-de-componentes-fracamente-acoplados/#comments</comments>
		<pubDate>Tue, 11 Mar 2008 11:17:11 +0000</pubDate>
		<dc:creator>João Saleiro</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Exemplos]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Tutoriais]]></category>

		<guid isPermaLink="false">http://www.riapt.org/2008/03/11/best-practices-1-a-morte-do-parentparentparent-criacao-de-componentes-fracamente-acoplados/</guid>
		<description><![CDATA[Pretendo com este post iniciar uma série de posts de best-practices de desenvolvimento em Actionscript 3.
Começo com um dos maiores erros que costumo ver, especialmente em antigos programadores Actionscript 2: a amaldiçoada utilização do parent (o antigo _parent) ou do stage (o antigo _root).
Este post aplica-se tanto a Flash CS3 como a Flex. O código [...]]]></description>
			<content:encoded><![CDATA[<p>Pretendo com este post iniciar uma série de posts de best-practices de desenvolvimento em Actionscript 3.</p>
<p>Começo com um dos maiores erros que costumo ver, especialmente em antigos programadores Actionscript 2: a amaldiçoada utilização do parent (o antigo _parent) ou do stage (o antigo _root).<br />
Este post aplica-se tanto a Flash CS3 como a Flex. O código está puramente em Actionscript 3, mas o raciocínio é exactamente o mesmo para MXML.</p>
<h2>O caso</h2>
<p>Imaginemos a seguinte imagem:</p>
<p><a title="menu.jpg" href="http://www.riapt.org/wp-content/uploads/2008/03/menu.jpg"></a></p>
<p style="text-align: center"><a title="menu.jpg" href="http://www.riapt.org/wp-content/uploads/2008/03/menu.jpg"><img src="http://www.riapt.org/wp-content/uploads/2008/03/menu.jpg" border="0" alt="menu.jpg" /></a></p>
<p>Temos o Stage. Dentro do Stage, temos um menu e duas secções: seccaoA e seccaoB. Dentro do menu temos dois botões: opcaoA e opcaoB. Ou seja:</p>
<ul>
<li>Stage</li>
<li>Stage.menu</li>
<li>Stage.menu.opcaoA</li>
<li>Stage.menu.opcaoB</li>
<li>Stage.seccaoA</li>
<li>Stage.seccaoB</li>
</ul>
<p>Queremos que quando o utilizador clique na opcaoA, a seccaoA seja mostrada, e que aconteça o mesmo para a opcaoB e seccaoB.</p>
<p>O código, para os adeptos do &#8220;parent&#8221;, parece óbvio:</p>
<p>(Dentro do Menu):</p>
<pre class="prettyprint">// Construtor
public function Menu()
{
opcaoA.addEventListener(MouseEvent.CLICK, opcaoAClickHandler);
opcaoB.addEventListener(MouseEvent.CLICK, opcaoBClickHandler);
}

function opcaoAClickHander(ev:MouseEvent):void
{
parent.seccaoA.visible=true;
parent.seccaoB.visible=false;
}

function opcaoBClickHander(ev:MouseEvent):void
{
parent.seccaoA.visible=false;
parent.seccaoB.visible=true;
}</pre>
<p>Aparentemente isto resolveria o problema de uma assentada só. Porém&#8230;</p>
<h2>Os problemas do parent</h2>
<p>Infelizmente está 100% incorrecto utilizar o parent. A regra é simples: é *proibido* usá-lo. Surgiu um problema que obriga à utilização do parent? Repense! Leia este post, e veja como se resolve.<br />
E obviamente perguntará: porque é que está incorrecto?</p>
<h3>Problema 1: Reutilização</h3>
<p>O seu menu está um espectáculo: é um dos preferidos na sua empresa tanto que o quer utilizar em vários projectos.</p>
<p>Entretanto aparece um novo projecto onde vai usar o menu. Porém foi outro elemento da equipa que fez a seccaoA e seccaoB, mas&#8230;. deu-lhes outros nomes. Chamou-lhes &#8220;seccao1&#8243; e &#8220;seccao2&#8243;. E agora, que faz?</p>
<p><strong>Primeira opção</strong>: mudar os nomes dados pelo seu colega (seccao1 e seccao2) para seccaoA e seccaoB. Big mistake: infelizmente o outro elemento da equipa tinha feito imenso código que usava intensivamente os nomes &#8220;seccao1&#8243; e &#8220;seccao2&#8243;. E agora vai fazer o quê? Mexer no código dele? Não me parece&#8230;</p>
<p><strong>Segunda opção</strong>: mudar no seu código onde está parent.seccaoA para parent.seccao1. Parece uma boa ideia dado o exemplo que fizemos aqui, mas se se tratasse um menu altamente complexo que usasse imensas vezes &#8220;parent.seccaoA&#8221;, seria lógico (e rápido) estar a mudar em todo o lado para seccao1 ?</p>
<p>Ok, é teimoso e estaria disposto a mudar o seu código todo&#8230; Porém, ao fazer isto, em vez de ter um menu que está a reutilizar entre projectos, na realidade acaba por estar a criar vários menus diferentes. Isto porque para cada projecto terá que mudar o código de cada menu de acordo com os nomes das secções. Ou seja, no fundo é um menu diferente com código diferente por projecto&#8230;</p>
<h3>Problema 2: Refactoring</h3>
<p>O seu projecto está feito e parece terminado. Porém, agora aparece o chefe a dizer &#8220;Ah e tal, vocês fizeram isto mal. Não quero a seccaoA dentro do Stage, mas sim dentro de um MovieClip chamado SectionContainer que tem uma borda e uns efeitos giros&#8221;. E lá vão vocês criar o SectionContainer, e colocar as secções lá dentro. Entretanto compilam e&#8230; Erro!</p>
<p>O código antigo do menu referia-se a parent.seccaoA. Porém, com a alteração, a seccaoA neste momento pode ser acedida assim: parent.sectionContainer.seccaoA. E com isto lá ter que ir mudar o seu código (e rezar para que o menu não seja complexo ao ponto de ter que mudar 23423423 linhas&#8230;).</p>
<h2>A solução: componentes fracamente acoplados</h2>
<p>A solução é relativamente simples, e passa por se cumprir uma regra também ela simples:</p>
<p><em>« Um componente/&#8221;MovieClip&#8221; nunca pode saber nada sobre quem o usa. Um componente/&#8221;MovieClip&#8221; só é responsável por si próprio » </em></p>
<p>Por outras palavras, se dentro do Menu está a fazer &#8220;parent.seccaoA&#8221;, quer dizer que o menu sabe que existe uma secção fora de si chamada seccaoA &#8211; sabe mais do que deveria saber.</p>
<p>Então como posso fazer: &#8220;quanto se clica na opcaoA, quero mostrar a seccaoA&#8221; se o menu não pode saber que há uma seccaoA ? Ora, o menu não tem que mudar para a seccaoA mas sim avisar quem o está a usar que está na altura de mudar para a seccaoA. Avisar como? Através de eventos!</p>
<h2>Lançar e apanhar os eventos</h2>
<p>O raciocínio passará a ser então:</p>
<ol>
<li>O utilizador clica no botão, o que despoleta um click e respectiva chamada da função opcaoAClickHander</li>
<li>O opcaoAClickHandler deverá avisar o componente externo que está na altura de mudar para a seccaoA, lançando um evento chamado por exemplo &#8220;opcaoAClick&#8221;</li>
<li>O Stage deverá estar a escutar eventos do tipo &#8220;opcaoAClick&#8221;, e quando os apanha chama a função menuOpcaoAClickHandler</li>
<li>O menuOpcaoAClickHandler deverá conter o código necessário para mostrar a secção correspondente e esconder as outras.</li>
</ol>
<p>Assim, o código correspondente:</p>
<p>(Dentro do Menu):</p>
<pre class="prettyprint">// Construtor
public function Menu()
{
opcaoA.addEventListener(MouseEvent.CLICK, opcaoAClickHandler);
opcaoB.addEventListener(MouseEvent.CLICK, opcaoBClickHandler);
}

function opcaoAClickHander(ev:MouseEvent):void
{
dispatchEvent(new Event("opcaoAClick"));
}

function opcaoBClickHander(ev:MouseEvent):void
{
dispatchEvent(new Event("opcaoBClick"));
}</pre>
<p>(Dentro do Stage, que está associado a uma classe chamada Index):</p>
<pre class="prettyprint">// Construtor
public function Index()
{
menu.addEventListener("opcaoAClick", menuOpcaoAClickHandler);
menu.addEventListener("opcaoBClick", menuOpcaoBClickHandler);
}

function menuOpcaoAClickHandler(ev:MouseEvent):void
{
seccaoA.visible=true;
seccaoB.visible=false;
}

function menuOpcaoBClickHandler(ev:MouseEvent):void
{
seccaoA.visible=false;
seccaoB.visible=true;
}</pre>
<p>Ou seja, se só o Stage é que sabe que existem secções, só o Stage é que pode mudar de secções. Então o menu simplesmente lança um aviso &#8220;olha, está na altura de mudar para a seccaoA&#8221;. O Stage apanha o aviso, e faz então o que é necessário para mostrar a secção correspondente.</p>
<p>Mais correcto ainda, seria criar um Custom Event, que possuiria uma String como propriedade pública onde seria colocado o nome da secção. Porém, isso fica para uma posterior lição.</p>
<h2>Conclusões</h2>
<ul>
<li>Qualquer componente ou MovieClip nunca pode saber *nada* sobre quem o está a usar.</li>
<li>Não usar o parent.</li>
<li>Não usar o parent.</li>
<li>Não usar o parent.</li>
<li>Sempre que surge um caso de &#8220;aqui ficava mesmo bem um parent&#8221;, usamos o dispatchEvent como descrito acima.</li>
</ul>
<p>Desta forma, o nosso menu já não sofre de problemas de reutilização nem de refactoring:</p>
<ul>
<li>se quisermos usar o menu noutro projecto, é só colocá-lo noutro projecto: não é preciso mudar o código do menu, pois este é completamente independente do projecto onde é usado;</li>
<li>se o projecto sofrer alterações de estrutura, é só alterar o projecto sem mexermos no menu: não é preciso mudar o código do menu, pois este é completamente independente do projecto onde é usado.</li>
</ul>
<p>É de realçar que este raciocínio não deve ser aplicado só a menus, mas a TUDO. Vai usar o parent? Esqueça. Use o dispatchEvent!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2008/03/11/best-practices-1-a-morte-do-parentparentparent-criacao-de-componentes-fracamente-acoplados/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Material das apresentações do Portugal Flex Camp</title>
		<link>http://www.riapt.org/2008/02/21/material-das-apresentacoes-do-portugal-flex-camp/</link>
		<comments>http://www.riapt.org/2008/02/21/material-das-apresentacoes-do-portugal-flex-camp/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 20:29:48 +0000</pubDate>
		<dc:creator>João Saleiro</dc:creator>
				<category><![CDATA[Adobe Air]]></category>
		<category><![CDATA[Amfphp]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Exemplos]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Flash Platform]]></category>
		<category><![CDATA[Flash Player]]></category>
		<category><![CDATA[Flash remoting]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Formação]]></category>
		<category><![CDATA[OsFlash]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RIAPT]]></category>

		<guid isPermaLink="false">http://www.riapt.org/2008/02/21/material-das-apresentacoes-do-portugal-flex-camp/</guid>
		<description><![CDATA[Está finalmente reunido o material usado nas apresentações do Portugal Flex Camp. Deixo-vos abaixo os links:

Serge Jespers &#38; Enrique Duvos &#8211; Intro to the Adobe RIA Platform / FB3 features and AIR 1.0 features /Adobe Open-source strategy
Carlos Rovira &#8211; Using Flash and Flex Together
João Fernandes &#8211; BlazeDS e LCDS
João Saleiro &#8211; Integração de aplicações Flex [...]]]></description>
			<content:encoded><![CDATA[<p>Está finalmente reunido o material usado nas apresentações do Portugal Flex Camp. Deixo-vos abaixo os links:</p>
<ul>
<li>Serge Jespers &amp; Enrique Duvos &#8211; <a href="http://flex.org/tour/slides_europe.pdf">Intro to the Adobe RIA Platform / FB3 features and AIR 1.0 features /Adobe Open-source strategy</a></li>
<li>Carlos Rovira &#8211; <a href="http://www.madeinflex.com/2007/10/21/using-flash-and-flex-together/">Using Flash and Flex Together</a></li>
<li>João Fernandes &#8211; <a href="http://www.webfuel.pt/jsaleiro/blazeDSeLCDS.pdf">BlazeDS e LCDS</a></li>
<li>João Saleiro &#8211; <a href="http://www.riapt.org/wp-content/uploads/2008/02/integracao-do-flex-a-um-backend-lamp-atraves2.pdf">Integração de aplicações Flex com PHP através de AMFPHP (Flash Remoting for PHP)</a> e o <a href="http://www.webfuel.pt/jsaleiro/riapt.zip">código fonte</a></li>
</ul>
<p>Vou ver ainda se consigo que me entreguem os vídeos das apresentações, embora não saiba se será possível.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.riapt.org/2008/02/21/material-das-apresentacoes-do-portugal-flex-camp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
