Flex/ Flex 3/ Flex 3 para Flex 4/ Flex 4

Flex 3 para Flex 4: AC_OETags vs. SWFObject

Não ocorreram só mudanças na parte do SDK apenas, o Wrapper que envolve o SWF produzido pelo Flash Builder também mudou. Os engenheiros do SDK notaram que é muito complicado manter o formato AC_OETags em diferentes browsers sem ter que alterá-lo. E também mais complicado ainda é adicionar parametros, adicionar variáveis, uma gama de pequenas dificuldades que acabam gerando algum certo tipo de stress seu na hora de publicar seu projeto.

A grande vantagem do SWFObject é que é um projeto mantido pelo Google, Open-source e continua constantemente sendo atualizado a cada 12 meses de ciclo. É um projeto que faz examente a mesma coisa que o AC_OETags faz, porém de forma mais simples.

No Flex 3 para você embedar uma aplicação Flex ou um SWF feito em Flash Builder, você provavelmente teria isso aqui como código gerado.
Read More

Flex/ Flex 3/ Flex 3 SDK/ Flex 4/ Open-source

follow-up sobre o futuro do Flex SDK

A reunião foi bem produtiva e teve uma dúzia de perguntas descente para quem realmente leva desenvolvimento de software a sério. Tirando algumas perguntas do público em geral que era o suporte do Flex para celulares e iphone, que dentre 10 perguntas essa foi feita umas 9 vezes.

Fora isso, o evento trouxe uma boa perspectiva para o time do Flex e assim ainda em processo de decição vai alavancar mais novidades daqui em diante.

Apenas uma coisa foi confirmada que o time do Flex vai dedicar pelo menos uma vez ao mês esse tipo de encontro e saber o que a comunidade de desenvolvedores acha das idéias e decisões que o Flex SDK pode sofrer. Eu acho isso bem interessante e afugenta o desequelíbrio de fracasso.

Outro ponto bastante importante é que o pessoal do SDK tem colaborado constantemente com o time de documentação, tanto que agora você pode no livedocs colocar posts de blogs sobre a documentação oficial da Adobe e assim facilitar a difusão de conteúdo.

Sobre o SDK

A grande reclamação é que desenvolvedores estavam um pouco preocupados com o sistema atual de contribuição de patchs para corrigir bugs, já que na versão atual 3.3 do Flex SDK, liberada quinta-feira passada, sofreu poucas mudanças, isso gerou uma certa receio do público em geral.

Foi decidido então que o time do SDK fará alguns vídeos para o Adobe TV e artigos para o devnet, mostrando como contribuir para o SDK e corrigir suas falhas.

Eu conversei depois com Matt Chotin e Deepa sobre a possibilidade de facilitar esse processo de contribuição, não só apenas corrigir falhas mais também deixar que empresas e membros da comunidade que seguem o padrão do código do Flex, possam contribuir para novos componentes de UI e Remoting. A idéia foi bem aceita e está na pauta, Matt prometeu me enviar uma resposta sobre isso mês que vem.

Outra sugestão como foi dada aqui, é a criação de uma fundação sem fins lucrativos para manter o SDK do Flex, já que tem empresas como a Borland, Microsoft, PeopleSoft(Oracle),BrightCove, Cynergy,EffectiveUI,Universal Mind, possam contribuir com seus respectivos componentes e melhorias no SDK, sem ter que está amarrado a uma empresa.

O mundo corporativo é meio controverso em achar que seus códigos e idéias não podem ficar em uma empresa com fins lucrativos e o processo de convergência entre elas podem haver conflitos de interesse já que é um software competitivo. A idéia foi recebida com um pouco de espanto, mais no fundo no fundo se eles pararem e pensarem direito pode até colar, devido ao sucesso que é hoje a Mozilla Fundation. Onde existem mais de 30 colaboradores Enterprise e uma cadeia de desenvolvedores independentes que colaboram para melhoria do navegor Firefox, ThunderBird.

Em fim, as mudanças futuras vão acontecer e como sempre ela a nave mãe(Adobe) herdou isso da antiga macromedia, em ouvir a comunidade e esperar que ela ajude a decidir sobre seus softwares opensource.

Qualquer futura mudança vocês podem aguardar que publicaremos aqui.

Para quem perdeu a oportunidade de participar da palestra como eu, pode assistir o vídeo gravado aqui.
https://admin.adobe.acrobat.com/_a300965365/p37175125

Flex/ Flex 3 how to

#2 Flex How to: Criando seus próprios eventos em Actionscript 3.0

O modelo do SDK do Flex permite que você crie, dispare e assista a distribuição de seus eventos próprios, sem ter que usar os eventos padrão que vem aos componentes do Flex SDK.

Criar eventos próprios facilita na hora de manipular as informações e o fluxo que elas agregam a tela de sua aplicação. Fácil à isso tornar-se elementar o uso de eventos próprios em componentes.

Passo-a-passo

Para se criar eventos próprios, basta estender da classe Event e disparar pelo DispatchEvent que são modelos de classes nativas do Flash Player.

package br.com.igorcosta.howto.events
{
	import flash.events.Event;

	public class MeuEvento extends Event
	{
		public static const CRIOU:String= "criouEvent";
		public static const DELETOU:String = "deletouEvent";
		public static const ATUALIZOU:String = "atualizouEvent";
		public function MeuEvento(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
		{
			super(type, bubbles, cancelable);
		}
		override public function clone():Event{
			return new MeuEvento(type,bubbles,cancelable);
		}

	}
}

Uma vez que sou responsável pela classe eu consigo manipular todos os seus estados, eu criei uma classe chamada MeuEvento que estende da classe Event, logo eu declarei três constantes públicas para serem acessadas pelo meu componente, que for usar. Uma coisa bem importante é que você faça o clone da classe Event, para que ela se comporte igual à um evento nativo do Flash Player, caso contrário o Flash Player não vai entender sua classe como um evento distinto para ser absorvido pelo eventDispatcher.

Aplicação

Como a classe MeuEvento foi definida, agora resta aplicar o código na aplicação, já que este é um simples exemplos vou aplicar direto no Application, no seu caso se for um componente, você não muda nada em termos de aplicação, é basicamente igual.
Para declarar e deixar que o Flex acesse o evento, eu declaro via um tag metada chamado Event meu evento.

< ?xml version="1.0" encoding="utf-8"?>



		[Event (name="Nome do Evento",type="Tipo do Evento")]



O tag metadata é bem útil e pode servir para outros propósitos não só para evento, mais para um número finitos de aplicações.

O nome do evento que será declarado ao total são 3 e derivam do tipo MeuEvento. Criei uma interface para ajudar a entender melhor e disparar e escutar todos os eventos necessários para isso.

< ?xml version="1.0" encoding="utf-8"?>



		[Event (name="criouEvent",type="br.com.igorcosta.howto.events.MeuEvento")]
		[Event (name="deletouEvent",type="br.com.igorcosta.howto.events.MeuEvento")]
		[Event (name="atualizouEvent",type="br.com.igorcosta.howto.events.MeuEvento")]


	
		< ![CDATA[

		]]>
	
	
	
	
	
	
	

Agora é colocar para funcionar a lógica dentro do bloco de script. A primeira coisa que pode fazer é criar os eventListeners e os handlers para o aplicativo, ja que está dentro do seu escopo. Ficando assim as funções.

			public function attachEventListeners():void {
					this.addEventListener(MeuEvento.ATUALIZOU,atualizouHandler);
					this.addEventListener(MeuEvento.CRIOU,criouHandler);
					this.addEventListener(MeuEvento.DELETOU,deletouHandler);
			}
			public function atualizouHandler(e:MeuEvento):void {
				Alert.show('Atualizou Registro');
			}
			public function criouHandler(e:MeuEvento):void {
				Alert.show('Criou registro');
			}
			public function deletouHandler(e:MeuEvento):void {
					Alert.show('Deletou Registro');
			}

Uma fez feito, só preciso então adicionar ao tag Application a propriedade creationComplete para agregar os listeners ao aplicativo.
Depois disso, preciso disparar esses eventos para que o aplicativo que agora rigorosamente está escutando-os, basta adicionar o dispatEvent para fazer o trabalho, meus três disparos de eventos ficou assim.

			import mx.controls.Alert;
			import br.com.igorcosta.howto.events.MeuEvento;
			import mx.collections.ArrayCollection;

			[Bindable]public var colecao:ArrayCollection = new ArrayCollection();
			public var pessoa:Object;

			public function createAction():void {
				pessoa = new Object();
				pessoa.nome = yourName.text;
				colecao.addItem(pessoa);
				dispatchEvent(new MeuEvento(MeuEvento.CRIOU));
				yourName.text ='';
			}
			public function deletarAction():void{
				if(peopleList.selectedItem !=null){
				colecao.removeItemAt(peopleList.selectedIndex);
					dispatchEvent(new MeuEvento(MeuEvento.DELETOU));
				}

			}
			public function atualizarAction():void{
				pessoa = new Object();
				pessoa.nome = yourName.text;
				if(yourName.text != '' && peopleList.selectedItem !=null){
						colecao.setItemAt(pessoa,peopleList.selectedIndex);
						dispatchEvent(new MeuEvento(MeuEvento.ATUALIZOU));
				}
			}

Toda vez que fizer uma ação peço para disparar um novo evento que no caso é o MeuEvento com o tipo do evento em questão, lembra das constantes criadas? Elas definem o tipo da classe MeuEvento.

O resultado final, é esse código.

< ?xml version="1.0" encoding="utf-8"?>



		[Event (name="criouEvent",type="br.com.igorcosta.howto.events.MeuEvento")]
		[Event (name="deletouEvent",type="br.com.igorcosta.howto.events.MeuEvento")]
		[Event (name="atualizouEvent",type="br.com.igorcosta.howto.events.MeuEvento")]


	
		< ![CDATA[
			import mx.controls.Alert;
			import br.com.igorcosta.howto.events.MeuEvento;
			import mx.collections.ArrayCollection;

			[Bindable]public var colecao:ArrayCollection = new ArrayCollection();
			public var pessoa:Object;

			public function createAction():void {
				pessoa = new Object();
				pessoa.nome = yourName.text;
				colecao.addItem(pessoa);
				dispatchEvent(new MeuEvento(MeuEvento.CRIOU));
				yourName.text ='';
			}
			public function deletarAction():void{
				if(peopleList.selectedItem !=null){
				colecao.removeItemAt(peopleList.selectedIndex);
					dispatchEvent(new MeuEvento(MeuEvento.DELETOU));
				}

			}
			public function atualizarAction():void{
				pessoa = new Object();
				pessoa.nome = yourName.text;
				if(yourName.text != '' && peopleList.selectedItem !=null){
						colecao.setItemAt(pessoa,peopleList.selectedIndex);
						dispatchEvent(new MeuEvento(MeuEvento.ATUALIZOU));
				}
			}
			public function attachEventListeners():void {
					this.addEventListener(MeuEvento.ATUALIZOU,atualizouHandler);
					this.addEventListener(MeuEvento.CRIOU,criouHandler);
					this.addEventListener(MeuEvento.DELETOU,deletouHandler);
			}
			public function atualizouHandler(e:MeuEvento):void {
				Alert.show('Atualizou Registro');
			}
			public function criouHandler(e:MeuEvento):void {
				Alert.show('Criou registro');
			}
			public function deletouHandler(e:MeuEvento):void {
					Alert.show('Deletou Registro');
			}
		]]>
	
	
	
	
	
	
	


Flex 3/ Flex 3 SDK

Mudou o quê do Flex 2.0.1 SDK para o Flex 3.0 SDK?

É, mudou muita coisa, será que foi só no número? Tem gente que acha que foi só isso.
Eu não quero entrar em detalhes do produto em sí, que envolve N tecnologias e partes. Foque no SDK.

Então essas mudanças comentadas aqui é um pouco diferente do que eu já fiz algum tempo atrás do Flex 2.0 para o Flex 2.0.1 que envolvia muito mais o produto como um todo.

O que mudou aos olhos da Adobe?

Você vai achar essa Lista completa aqui.

Porém aos olhos de um desenvolvedor, vi as seguintes mudanças de verdade, baseadas nelas no que foi planejado e no que foi executado.

A tal lista de deprecated, significa dizer “Vai de reto satanás”, no bom e velho popular.

-Baseline Alignment
-Charting Enhancements
-Compiler Performance
-Enhanced Constraints
-List and Data Effects
-OpenType Font Embedding
-MXMLC/COMPC Faster compilation
-MXMLC/COMPC Class caching at compilation
-MXMLC Framework Caching
-MXMLC Cross-Domain Caching
-MXMLC Runtime Localization
-MXMLC Resource Bundles
-MXMLC/COMPC Class Exclusion
-MXMLC/COMPC Flash-Type support
-Added CSS properties for advanced skinning via SWF/PNG
-List Effect classes
-AIR Flex SDK Application Window
-AIR Flex Database Support Classes
-AIR FileSystemComboBox
-AIR FileSystemDataGrid
-AIR FileSystemHistoryButton
-AIR FileSystemList
-AIR FileSystemTree
-AIR HTML
-AIR MenuItems
-AIR ApplicationWindow
-AIR Cross Scripting support
-AIR Application packaging and signing
-Deep Linking
-AJAX Support
-Flex 3 Open Bugbase
-Flex 3 Nightly Builds and Milestone Builds
-Mais alguns 200+ bugs consertados desde a versão 2.0.1

E a tal copatibilidade?

Bom, como ja é sabido o Flex veio sendo bastante usado na versão 2.0 e 2.0.1 aqui no Brasil por vários projetos que tive a chance de ver de perto ou feito. E para ser compatível e migrar para suportar o que há de melhor no Flex 3.0 nada mais lógico do que seguir essa linha tênue que Adobe preparou para isso. Sem ela você esta atirando no escuro.

Tamanho

Um dos problemas que se encaram desde o Flex 2.0 é o tal do tamanho final do SWF feito. No Flex 3 a coisa mudou, você pode ter detalhes aqui.

Alguma dica à mais para a lista?