Flex Mania 2010 começa amanhã

Tem sido bem puxado esses dias, o evento toma um bocado de tempo para organizar, editar pautas, selecionar palestrantes, abrir oportunidades para outros e ir em busca de patrocinadores.
Flex Mania 2010 é a soma de todos esses fatores, resumidos em 3 dias de evento, o qual é gratificante ver que os esforços somados trazem o resultado.

E você está preparado para o Flex Mania 2010? Quer conhecer de perto o que a comunidade Flex / Flash / AIR tem aprontado nesses últimos meses? Tenha contato com o que há de mais moderno para a plataforma Flash sem sair de casa, ou melhor da cadeira.

O grande diferencial do Flex Mania é que você tem ótimos tópicos, não gasta nada, conhece gente bacana, faz networking e tudo digitalmente.

Por aqui está tudo preparado para amanhã. E você, já pediu ao chefe para liberar a participação? Já anotou em sua agenda as palestras que quer assistir?

Tentaremos fazer essa edição melhor que 2009.

Veja o que preparamos:

  • R$30.000,00 em prêmios
  • 25 palestrantes
  • API do site para você já sai criando mashups
  • Gravações em HD, nessa edição vamos além de gravar via connect para assistir on-line, você pode baixar o video em HD
  • Certificado digital de participação do evento
  • Sorteios de várias licenças de software
  • Quem participar das palestras que for usado o FDT Editor, vai ganhar uma licença gratis ao final de cada palestra

Uffa! Muita coisa bacana. É isso, nos vemos amanhã.

Flex Hero SDK

A Adobe anunciou ontem que abandonou o projeto Slider Framework, aquele framework em que ela estava trabalhando para criar aplicativos Flex para dispositivos móveis. Porém, não fique chateado, os motivos que ela levou a abandonar o projeto Slider Framework, foram significativos e decisivos, eu realmente acredito que tais movimentos foram necessários, devido:

Aumento de capacidade dos smartphones – Hoje tem celulares com mínimo de 400Mhz de processamento, o Flash Player 10.1 consegue ser executado normalmente em até uma arquitetura de 233Mhz sem problemas. Então temos celulares com maior processamento fazendo com que o Flash Player seja executado mais rápido sem a necessidade de termos players diferenciados como existe hoje. Flash Player para Celulares o famoso Flash Lite. Então isso pode deixar de existir, forçando os fabricantes de smartphones a adotar já o Flash Player 10.1 em seus dispositivos. Acreditamos que até o final do ano teremos ai cerca de 10 novos modelos de smartphones no mercado.

Arquitetura Spark - O Slider Framework seria um framework a parte para desenvolvimento de aplicações ricas para dispositivos móveis, costumamos chamar de RIMA (Rich Interactive Mobile Application); Porém como temos uma arquitetura mais leve, mais robusta, suportando o re-desenho de telas cada vez mais rápido, não custava nada a Adobe trabalhar em um único SDK que desse suporte não só para Desktop, como também para dispositivos móveis.
Foi ai que ela re-pensou sobre o conceito levando em consideração o aumento de performance, e assim lançou o Hero SDK. O novo futuro do Flex SDK.

Levando todos esses fatores em consideração e a rápida adoção do Flash Player 10.1 em dispositivos móveis (smartphones) com maior capacidade, quem é da área de desktop só tem a ganhar, já que a unificação de um só SDK, você terá a chance de aproveitar 100% do conhecimento que você já tem em Flex para criar RIMA.

Devido a constante mudança, acredito eu que tanto o Flash Player 10.1 quanto o AIR 2.0, sofrerá ainda esse ano a Adobe decidiu não compartilhar ainda o SDK para download, ainda está em especificação e você pode acompanhar no site oficial do Hero SDK, já tem alguams especificações já prontas como o ActionBar, que a principio precisa de mais alguns elementos como o autoHide que ainda não foi criado.

Leia mais informações:
Flex Mobile Application FAQ
Site Oficial do Hero SDK
Flex e Mobile Whitepaper

Capturando erros no seu aplicativo RIA no FP 10.1 e AIR 2.0

É tão bom quando você tem alguns minutos livres durante a semana para escrever alguma coisa no blog, que ultimamente tem sido tão deixado de lado!
Uma das grandes novidades do Flash Player 10.1 é a possibilidade de capturar todos os erros gerados pela sua aplicação RIA.
Comumente, desenvolvedores e inclusive nós, tinhamos o hábito de capturar os erros apenas comuns em uma aplicação, por exemplo: IOError, Load Errors, Event Erros, Converter Errors, porém querendo ou não acaba escapolindo do nosso controle uns errinhos como 1009,1056,2048 etc. Esses erros é de tirar o fôlego quando se trata de experiência do usuário, e principalmente quando se tem vários deles.

Infelizmente, isso já era para estar pronto desde a versão 9. Como não tinha, faziamos isso como comentei acima. O que, torna uma tarefa repetitiva e acaba virando um saco fazer sempre aquilo, embora você tente ao máximo re-utilizar seu código.

Contudo, para a grande saúde mental de desenvolvedores, a Adobe decidiu criar esse tipo de captura, dando ao desenvolvedor a oportunidade de verificar quais erros estavam ou estão sendo gerados tanto em backgrounds não mostrados no Stacker ou mostrados.

Nem tudo é um mar de rosas, esse tipo de captura de evento só funciona se seu navegador estiver com o Flash Player do tipo debug, inclusive acaba ficando disponivel apenas para usuarios desenvolvedores, impossibilitando assim você de logar automaticamente um erro e captura-lo e adiciona-lo a uma base de análise, que é comumente feito em sistemas enterprise.

Como era feito a captura de erros até então no Flash Player 9 e 10:

Geralmente como nossos requisitos sempre são simples, nada tão complexo, preferimos usar não a classe padrão de Log de erro do SDK do Flex, por que é além do que agente precisa, e como também existem outras ferramentas e frameworks no mercado para log de erros.

A classe LogManager ela adiciona os erros a um arrayCollection:

package com.igorcosta.debug
{
	import mx.collections.ArrayCollection;
 
	public class LogManager
	{
		[Bindable]private static var _arrError:ArrayCollection = new ArrayCollection();
 
 
		public static function get errors():ArrayCollection
		{
			return _arrError;
		}
		public function LogManager()
		{
 
		}
 
		public static function addError(error:LogError):void
		{
				_arrError.addItem(error);
		}
 
	}
}

E a classe que agente costuma chamar de LogError, nada mais é que um VO/DTO, etc:

package com.igorcosta.debug
{
 
	public class LogError
	{
		public function LogError()
		{
		}
		public var stack:String;
		public var name:String;
		public var ID:String;
		public var message:String;
	}
}

Ai para usarmos em um simples teste de erro, veja o aplicativo que fizemos para esse post. Acho que vai ajudar vocês a melhor enxergar como é penoso o trabalho de capturar os eventos.

< ?xml version="1.0" encoding="utf-8"?>
<application xmlns="http://www.adobe.com/2006/mxml" layout="vertical">
 
 
	<script>
		< ![CDATA[
			import mx.controls.Label;
			import com.igorcosta.debug.LogManager;
			import mx.utils.ObjectUtil;
			import com.igorcosta.debug.LogError;
 
 
 
			public var err:LogError;
 
			public function provocarErro(tipo:uint):void
			{
				switch(tipo){
 
						case 1:
 
							try{
								throw new IOError("I/O Error, de leitura ou escrita");
							}catch(erro:IOError){
									err = new LogError();
									err.stack = erro.getStackTrace();
									err.message = erro.message;
									err.ID = String(erro.errorID);
									err.name = erro.name;
									LogManager.addError(err);
							}
							break;
					   case 2:
					   		try{
					   			var temp:Label;
					   			temp.text = 'test';
					   		}catch(erro:Error){
					   				err = new LogError();
					   				err.stack = erro.getStackTrace();
									err.message = erro.message;
									err.ID = String(erro.errorID);
									err.name = erro.name;
									LogManager.addError(err);
 
					   		}
					   break;
					   case 3:
					   		try{
					   				stackTest();
					   		}catch(erro:Error){
					   				err = new LogError();
					   				err.stack = erro.getStackTrace();
									err.message = erro.message;
									err.ID = String(erro.errorID);
									err.name = erro.name;
									LogManager.addError(err);
 
					   		}					   	
				}
			}
			private function stackTest():void
			{
					stackTest();//loop de funcao da um erro de StackOverflow
			}
		]]>
	</script>
 
 
	<hbox width="100%">
		<button label="Provocar erro 1009" click="provocarErro(2)"/>
		<button label="Provocar erro IO" click=" provocarErro(1)"/>
		<button label="Provocar erro Stack Overflow" click=" provocarErro(3)"/>
	</hbox>
	<datagrid dataProvider="{LogManager.errors}" x="103" y="160" width="743" height="308">
		<columns>
			<datagridcolumn headerText="Nome do Erro" dataField="stack"/>
			<datagridcolumn headerText="Nome do Erro" dataField="name"/>
			<datagridcolumn headerText="Mensagem de erro" dataField="message"/>
			<datagridcolumn headerText="ID do erro" dataField="ID"/>
		</columns>
	</datagrid>
 
</application>

Capturando erros gerais ou “Global Error handler” no Flash Player 10.1 e AIR 2.0:

Agora usando o mesmo aplicativo, podemos capturar qualquer tipo de erro gerado pelo Flash Player, ou mau uso do código. Um detalhe é que o novo recurso do Flash Player o Uncaught Error e Uncaught Error Event, são passíveis de receber qualquer erro ocorrido no swf compilado. Veja o exemplo abaixo:

< ?xml version="1.0" encoding="utf-8"?>
<mx :Application xmlns:mx="http://www.adobe.com/2006/mxml" applicationComplete="completou()" layout="vertical">
 
    </mx><mx :Script>
        < ![CDATA[
        	import mx.controls.Label;
        	import com.igorcosta.debug.LogError;
        	import com.igorcosta.debug.LogManager;
            private function completou():void
            {
                loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, capturarErros);
            }
 
            private function capturarErros(e:UncaughtErrorEvent):void
            {
 
	        	if(e.error is Error){
 
	        		Error(e.error).getStackTrace();
	            	LogManager.addError(e.error as Error);
	         	}
	         	if(e.error is ErrorEvent){
	         		LogManager.addErrorEvent(e.error as ErrorEvent);
	         	}
 
            }
 
             private function identifica(e:MouseEvent):void
            {
 
                var minhaVar:Label;
                try
                {
                   minhaVar.text = " Ola Mundo" ;
                }
                catch (e:Error)
                {
                  // capturou o erro
                  minhaVar as Boolean;
                  trace(minhaVar.text);
                }
            }
        ]]>
    </mx>
     <mx :HBox width="100%" >
     <mx :Button label="Causar erro de  acesso indefinido" click="identifica(event);"/>
    </mx>
 
 
 
 
	<mx :DataGrid width="100%" dataProvider="{LogManager.errors}" x="29" y="182">
		</mx><mx :columns>
			<mx :DataGridColumn headerText="ID do Erro" dataField="errorID"/>
			<mx :DataGridColumn headerText="Nome do erro" dataField="name"/>
			<mx :DataGridColumn headerText="Mensagem de erro" dataField="message"/>
		</mx>

Lembrando que para você usar em seu projeto esse recurso do UncaughtError e UncaughtErrorEvent, você precisa ter o playerglobal.swc do Flash player 10.1, tanto para o Flash Player quanto para o AIR 2.0.

Os códigos fontes de ambos os aplicativos vocês podem baixar diretamente aqui.

Flash Player 10.1 e Adobe AIR 2.0 preview disponível.

Para quem acompanhou aqui no blog , publicamos a respeito do Flash Player 10.1.

A Adobe liberou a poucas horas o instalador do preview do Flash 10.1. Quem estava doido para testar. Pode baixar diretamente no Labs da Adobe.

E, ao mesmo tempo ela liberou o Adobe AIR 2.0 preview também. Podem baixar no site do Labs.

Flash Player 10.1 Ahha, Uhhu!!!

Antes, pedido de desculpas públicas por ter sumido permanentemente do blog. Aquela velha história para boi dormir, “falta de tempo”.

Fora isso, vamos ao que nos interessa. Temos novidades nessa MAX 2009. Infelizmente aquele velho cadeado chamado NDA não deixa agente falar muito. Mais graças ao tempo, senhor das respostas eis que surgem diversas novidades para o Flash Player.

Entre elas:

Dentre todas as novidades, aos quais são ótimas. As que mais gostei foi a respeito da performance e do global Error Handling. Como temos esperado isso há longos cinco anos.

Esse tipo de informação você pode acessar pelos dois links abaixos:

1 – http://www.adobe.com/devnet/logged_in/jchurch_flashplayer10.1.html
2 – http://labs.adobe.com/technologies/flashplayer10/

Dica: Exibindo o consumo de memória do Flash Player em sua aplicação Flex

Duvida vinda por e-mail, bastante desaconselhado já que demoramos muito para responder os e-mails. Como essa dúvida era legal e única, eis aqui uma solução.

Quero exibir a quantidade de memória que minha aplicação Flex está consumindo no momento da execução. Bom dificilmente você vai saber quanto ela está consumindo se você estiver com algum site aberto ou até mesmo MSN Live que use o Flash Player. Já que para ler o consumo de memória mesmo é necessário estar apenas a aplicação rodando. Uma vez que a quantidade de memória acumulativa sendo consumida é medida pelo Flash player em geral e não apenas da aplicação. Se for nessas circunstâncias você pode exibir o consumo de memória para o usuário final. Caso contrário aconselho usar os recursos do Flex Builder como Profiler para tal.

Então como exibir?

Para facilitar eu criei uma classe utilitária chamada MemoriaUtil.as

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package
{
	import flash.system.System;
 
	public class MemoriaUtil
	{
		public function MemoriaUtil()
		{
		}
		public static function uso():String{
 
			 var memoria:String = Number(System.totalMemory/1024/1024).toFixed(2)+'MB';
 
			 return memoria;
		}
	}
}

E uso no Flex assim.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
< ?xml version="1.0" encoding="utf-8"?>
<application xmlns:"http://www.adobe.com/2006/mxml" layout="absolute">
 
	<script>
		< ![CDATA[
 
 
				public function testarMemoria():void{
 
						memoriatxt.text = 'Uso atual do seu Flash Player é de: '+MemoriaUtil.uso();
				}
		]]>
	</script>
		<label enterFrame="testarMemoria()" fontSize="20" x="100" y="100" id="memoriatxt"/>
</application>

i2 Tecnologia

Muito boa a entrevista Luciano e Felipe, em 2009 será um grande ano.

Flash Player 10 64bits disponível para Linux

Quem usa o Flex Builder Alpha e usa o Linux como principal plataforma de desenvolvimento e com 64bits , sente a falta de usar o Flash Player para versão de 64bits, demorou quase um ano para lançarem uma versão para o Linux. Embora agora toda nova versão vem para Windows, Mac e Linux.

Ainda não tem uma versão Flash Player 10 debugger de 64bits para linux, tem só 32bits, mais já é uma mão na roda para quem precisa.

O Flash Player 10 64bits já está disponível para download, veja aqui.

Outras versões standard ou debugger para o Flash Player 10 podem ser vistas aqui.