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

#3 Flex How to : Como criar um player de Vídeo avançado

No SDK do Flex você não tem um player de vídeo avançado, você dispõe apenas de um VideoDisplay e o resto fica por conta de sua imaginação. O time do Flex SDK até pensou em incorporar um player de video já pronto, só arrastar e está pronto para uso. Porém não sei o que ocorreu que acabou que a idéia não foi para frente. Graças a comunidade Flexiana que está crescendo a cada dia que passa isso é possível ser feito sem ter que esperar pelo time do Flex SDK, você pode usar esse componente que tem todo o controle possível, play, pause, stop, controle de volume, barra progressiva, tudo que um bom e usual player de vídeo deva ter.

Passo-a-passo

Primeiro baixe aqui código fonte do VideoPlayer. Como ele não tem um arquevo binário para tal, basta copiar do arquevo zip que você baixou, o diretório ‘com’ para pasta src, que tem todas as classes necessárias para o player.

Feito isso, instancie-o assim:

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

	
		< ![CDATA[

			[Bindable]
			private var filme:String = "http://seufilme.com/arquevo.flv";

			]]>
	
	

Fácil não?!

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/ Flex 3 how to

#1 Flex 3 How to : Implementar Singleton em Actionscript 3.0

Quem trabalha com C++, C# e Java, sentiu falta de alguns recursos que o Actionscript 3.0 falta. Dentre eles estão construtores (privados, protegidos), singletons, compositions entre outros recursos que existem nas linguagens mencionadas acima.
O fator que distingue essa falta de recursos é a limitação descrita em suas especificações que vem lá do Ecmascript-262 versão 3 do documento que declara os recursos existentes para linguagens scripts não só em AS3 mais também em Javascript,DMDScript, Javascript.Net, etc.
Porém nada está perdido, existem várias maneiras de enganar o compilador do Actionscript que vem junto ao Flex SDK para que isso ocorra, lembrando que fazendo isso você está apenas contornando o problema, sem muitas percas ou mal funcionabilidades.

Como criar Singleton em Actionscript 3.0?

Singleton é um modelo de design pattern que simplifica o acesso ao objeto com apenas uma instância ao modo geral da aplicação.
Em um modelo real, imagine ipoteticamente que um singleton é sua maneira única de agir, se comportar e falar, ninguém no mundo pode instânciar essa maneira que você tem de fazer as coisas, porém elas podem ser usadas por outras pessoas no mundo, um modelo a ser copiado porém sempre preservando de onde elas vieram.
É assim que singletons atuam, você precisa apenas instancia-los uma vez e ele faz o papel dele.
As classes que vem no Flex SDK não tem esse papel de singleton, alguns críticos acham que singleton é perca de tempo, optimização e recursos de um sistema não necessário à se ter.
Discordações a parte cada modelo de design pattern é aplicável em diferentes formas de elaborar um software, e tampouco pode ser ignorado as diferentes maneiras de serem aplicaveis, vai de cada recurso que elas necessitam.

Na própria página da Wikipedia existe um modelo de singleton em Actionscript 3.0 que podemos usar para esse exemplo.

Paso-a-passo:

1 – Crie um novo projeto Flex no seu Flex Builder
2 – Crie uma nova classe em Actionscript 3.0 e dê o nome “Singleton”.
3 – Adicione o seguinte código em sua classe.


package br.com.igorcosta.howto{
	public class Singleton {

		private static var instance:Singleton;

		public function Singleton(enforcer:SingletonEnforcer){
			if (enforcer == null)
				throw new Error("Só pode haver uma instância de Singleton");
		}

		public static function getInstance() : Singleton {
			if (instance == null)
				instance = new Singleton( new SingletonEnforcer );
			return instance;
		}
	}
}
//Para bloquear o acesso ao constructor.
class SingletonEnforcer {

}

Uma vez feito isso seu Singleton está pronto para ser usado, você pode usar essa mesma classe em outras classes para implementar o singleton nelas, um exemplo típico é os Models que trafegam entre o lado cliente e o servidor.

Como aplicar essa Classe Singleton em sua aplicação Flex?

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

	
		< ![CDATA[

			import br.com.igorcosta.howto.Singleton;

			public var instancia:Singleton = Singleton.getInstance();

			public function acessar():void{
					instancia.PropriedadesFuturas = // você pode definir propriedades
			}
		]]>
	


Ao invés de sempre usar public var obj:Object = new Object(); Você passa a usar a instância já pre-estabelecida para aquila classe em geral, por exemplo:

Criar um model que tenha algumas procidades e que essas possam ser acessadas por outras classes.

Classe Singleton: Modelo

package  br.com.igorcosta.howto.models{

	public class Modelo {



		// Propriedades publicas

		public var X:Number;
		public var Y:Number;
		public var Largura:Number;
		public var Altura:Number;

		private static var instance:Modelo;


		public function Modelo(enforcer:SingletonEnforcer){
			if (enforcer == null)
				throw new Error("Só pode haver uma instância de Singleton");
		}

		public static function getInstance() : Modelo {
			if (instance == null)
				instance = new Modelo( new SingletonEnforcer );
			return instance;
		}
	}
}
//Para bloquear o acesso ao constructor.
class SingletonEnforcer {

}

Cliente acessando pela instância e setando o valor de cada propriedade do Singleton Modelo:

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

	
		< ![CDATA[
			import mx.controls.Alert;
			import br.com.igorcosta.howto.models.Modelo;

				//instanciar o singleton Modelo

				public var instancia:Modelo = Modelo.getInstance();

				public function setarPropriedades():void {
					instancia.Altura = painel.height;
					instancia.Largura = painel.width;
					instancia.X = painel.x;
					instancia.Y = painel.y;
					Alert.show("Altura:"+instancia.Altura+ "n"+"Largura:"+instancia.Largura+
					"n"+"Posicao X:"+instancia.X+"n"+"Posicao Y:"+instancia.Y);


				}
		]]>
	
		
		

Veja aqui também outras maneiras de implementar Singletons em Actionscript 3.0.

Eventos/ Flex

Opine sobre o futuro do Flex

A Adobe, em especial a equepe que mantem a tecnologia Flex, está discutindo sobre o futuro da tecnologia, já que a Adobe recebeu da comunidade open-source um feedback negativo em relação a suas ações perante a abertura do código fonte do Flex. Se você tem uma opinião, colabore conosco, participe do evento aberto ao público em geral e dê seu recado.

Detalhes do evento.
Quando: 28, Janeiro – 10:00am PT / 1:00pm ET / 6:00pm GMT (duração de 1 hora)

Onde: Via Connect: http://adobedev.adobe.acrobat.com/techweds (entre como “guest” convidado, usando seu primeiro nome e último nome).

Se você não tiver tempo de participar ou não tem uma opinião a ser dada, você pode assistir o evento que será gravado e colocado o link no site do Flex opensource.

Eu acho bacana essa preocupação e o poder que os blogs influenciam sobre um produto.

Minha certa opinião para tal questão é que para se tornar realmente open-source o Flex, teria que fazer as seguintes ações:

  • Criar uma fundação sem fins lucrativos para manter o SDK
  • Criar uma comissão por membros da comunidade e empregados da Adobe para opinarem sobre novas funções do SDK
  • Deixar de apenas corrigir bugs ou patchs para o atual SDK, isso é tendioso e leva-se muito tempo. Coisa que quem trabalha dia-a-dia com o Flex, pouco vai ter tempo de mandar um patch de correção, por que? Por que ou ele cria um workarround para seu problema ou cria um novo componente para situação.
  • Abandonar essa idéia de incorporar o Flash Catalyst ao Flex, isso é pura vaidade da Adobe perante a comunidade de designers, tentar entender esse produto é sem dúvida a maior perca de tempo de toda a história do Flex
  • Alimentar a comunidade de verdade, a Adobe pouco se importou com desenvolvedores externos, que faz jus ao que trabalham, como é o caso da theMidnightCoders,GSkinner,Cynergy,ASFusion,Interation::Two,UM,effectiveUI. Tem tantos projetos que agregam valor ao Flex SDK que eles poderiam fazer parte do próprio SDK, coisa que acaba perdendo a beleza da coisa, o que muitos desenvolvedores perdem o gosto por uma tecnologia que leva mais de 2 anos para implementar cerca de 30 classes novas e 12 funções diferentes. Enquanto um projeto como Spring, Java, Linux Kernel, lança isso em no máximo 6 meses.

Em fim, são idéias futurísticas que poderiam dar certo, caso contrário acho que será melhor a Adobe voltar ao estado de código fechado e esquecer esa idéia de open-source para o lado do Flex. As coisas tendem a melhorar depois desse evento. Particularmente estamos otimistas.

Flex/ Flex Grupos de Usuário/ Notícias

Participe do primeiro encontro do grupo de usuários Flex de Floripa

Demorou mais já começou, o grupo de usuários Flex de Florianópolis já saiu do forno e está de vento em poupa; O grupo é mais uma iniciativa da Adobe e igorcosta.com que compartilham com empresas Brasileiras crescimento de ninchos de mercados locais para adoção do Flex.

O primeiro encontro do grupo de usuários Flex em Florianópolis será agora dia 21 às 19:00. Veja abaixo detalhes do evento.

Flex: o que pode fazer para nós
Na ocasião da criação do grupo de usuários Adobe Flex em Florianópolis (FloripaFlex), a
Sofshore está promovendo a palestra “Flex: o que pode fazer para nós”.
A palestra é direcionada tanto a desenvolvedores e quadros técnicos quanto a gerentes de
TI.
Mario júnior, membro eminente da comunidade Flex no Brasil apresentará a plataforma e
sua integração nas arqueteturas atuais. Josiane Milanez, Analista Java/Flex sênior
apresentará as vantagens da plataforma para os diversos cargos, desenvolvedores e
gerentes.
Horário:
21/01, 19:00
Endereço:
ACATE (Associação Catarinense de Empresas de Tecnologia)
1o andar
Rua Lauro Linhares, 589
88036-001 – Trindade
Florianópolis – SC
Inscrição:
gratuita pelo email info@sofshore.com.br.
Grupo FloripaFlex: http://groups.adobe.com/groups/98f4d309df

Participe, até o momento já foram mais de 100 inscritos, e pelo jeito me parece que faltam poucas vagas devido o tamanho do auditório.

[UPDATE]Notícias dos participantes, o evento lotou, porém reclamaram que foi mal organizado o conteúdo, teve mais apresentação da empresa Sofshore do que das atitudes do grupo. Meu povo eu entendo vocês e repassei essa reclamação para o administrador do grupo que prometeu melhorar as próximas reuniões.
Vou torcer para que isso aconteça, estaremos de olho por vocês.

Negócios/ Web 2.0

O ano em que novas APIs brasileiras vão entrar no mercado

Existem uma dúzia de posts falando sobre a falta de API’s para serviços de sites brasileiros. Eu me pergunto, onde estão esses serviços? Conta-se nos dedos ainda, sites que tem um bom serviço e que possam vir a distribuir o acesso via API.

Veja bem, a boo-box é uma empresa brasileira em uma forma de bolo americana, coisa linda de se ver. O que esses garotos estão fazendo, nada mais é que colocando de fácil acesso o uso dos dados de sites de comércio eletrônico brasileiros como (americanas,submarino,mercado-livre), facilmente acessado via API externa, coisa que até já fizemos uma para seus serviços em Actionscript 3.0; E o melhor você pode faturar grana.

Existem apenas dezenas não centenas de sites brasileiros que provê serviços ao público em geral, por que ainda existe o tal do mito que a Web brasileira é 1.0. O fato é que os desenvolvedores brasileiros, ou melhor falando de galo para galo, as empresas brasileiras ainda não enxergaram o potencial de negócios existente em deixar o desenvolvedor terceiro ou novos serviços agregar valor ao seu modelo de negócio.
É mais ou menos assim, você ilustra uma pequena história e os analistas de negócios começam a entender que será necessário evoluir, é a velha máxima, “Dividir para conquestar”.
Continuando com o tópico sobre comércio eletrônico, imagine que você vai a loja em sua cidade, entra, olha o produto que quer comprar, ou não, e sai sem precisar criar um vínculo com aquila loja.
Outro certo dia você volta, analisa outro produto e decide levá-lo, porém a loja requer que você mantenha um vínculo com ela, que você compartilhe seus dados com ela, é um preço injusto em certas ocasiões, já que você fica com receio de onde irá parar.
O certo pensar era que você poderia se vincular apenas a sua bandeira de cartão de crédito, deixar que ele tome conta de seus dados e a operadora do cartão de crédito assumiria o vínculo com a loja. Parece meio bizarro a idéia de primeiro momento, mais pare, pense e veja em sua volta que é justamente isso que acontece quando você compra um produto à vista na loja física, você opta por criar o vínculo com a loja.
Imagina se isso existisse em sua loja virtual preferida, onde você poderia ter seu próprio site onde manteria o vínculo apenas com a operadora de cartão e assim controlar tudo.
Agora no atual momento, isso é apenas sonho de um pobre desenvolvedor que tem idéias das quais são limitadas por políticas de portas fechadas para o mundo lá fora.
E falando-se em mundo lá fora, tem a seguinte regra “Engula ou será engolido”. É justamente o que vai acontecer se daqui a 1 ano as empresas que provêem serviços aos brasileiros não se adequarem a maneira que o mercado vai. Vai acontecer como existe já a ameça do Paypal explorar o mercado Brasileiro como os serviços pagseguro e pagamentodigital.
Não vai demorar muito para ambos, sentirem ameaçados pelo Paypal e começarem a lançar suas APIs, diferente deles o Paypal tem uma vasta API para todo tipo de linguagem de programação que você pensar.

Então penso eu na frase, “engula ou será engolido“, ser verdade. Será 2009 o ano em que as empresas brasileiras, não tão somente elas mais serviços do governo como Correios, Receita Federal, lançarem API’s para seu serviços na web?

Flex

Novo blog de Flex

O Fabiel Prestes, lá de Santa Catarina está escrevendo sobre Flex em seu novo blog. Parabéns Fabiel pelo seu blog, o conteúdo está indo muito bem.
Não só de Flex o Fabiel fala sobre Java para web.

Visitem.

Você tem um blog que fala de Flex? Me avise para publicar por aqui.