Este é o screencast que enviei como extra à gravação da minha palestra no Flex For Kids 2010.
Download: http://blip.tv/file/get/Vedovelli-IniciaoAoMateFramework393.flv
About modules
Modules are SWF files that can be loaded and unloaded by an application. They cannot be run independently of an application, but any number of applications can share the modules. The main application, can dynamically load other modules that it requires, when it needs them.
ModuleManager and ModuleLoader
Module domains
By default, a module is loaded into a child domain of the current application domain. You can specify a different application domain by using the applicationDomain property of the ModuleLoader class. Because a module is loaded into a child domain, it owns class definitions that are not in the main application’s domain. For example, the first module to load the PopUpManager class becomes the owner of the PopUpManager class for the entire application because it registers the manager with the SingletonManager. If another module later tries to use the PopUpManager, Adobe ® Flash® Player throws an exception. The solution is to ensure that managers such as PopUpManager and DragManager and any other shared services are defined by the main application (This technique also applies to components). Typically, this is done by adding the following to a script block:
Because a Flex module must be in the same
security domain as the application (SWF) that loads it, when you’re using modules in an AIR application any module SWF must be located in the same directory as the main application SWF or one of its subdirectories, which ensures that like the main application SWF, the module SWF is in the AIR application security sandbox.Creating ActionScript-based modules
Reducing module size
To reduce the size of the modules, you can optimize the module by instructing it to externalize classes that are included by the application. The result is that the module includes only the classes it requires, while the framework code and other dependencies are included in the application.
To externalize framework classes with the command-line compiler, you generate a linker report from the application that loads the modules. You then use this report as input to the module’s load-externs compiler option. The compiler externalizes all classes from the module for which the application contains definitions. This process is also necessary if your modules are in a separate project from your main application in Flex Builder.
1. Generate the linker report and compile the application:
mxmlc -link-report=report.xml MyApplication.mxml
2. Compile the module and pass the linker report to the load-externs option:
mxmlc -load-externs=report.xml MyModule.mxml
Using the ModuleManager class to load modules
import mx.events.ModuleEvent;
import mx.modules.ModuleManager;
import mx.modules.IModuleInfo;
public var info:IModuleInfo;
private function initApp():void {
info = ModuleManager.getModule(“ColumnChartModule.swf”);
info.addEventListener(ModuleEvent.READY, modEventHandler);
// Load the module into memory. Calling load() makes the
// IFlexModuleFactory available. You can then get an
// instance of the class using the factory’s create() method.
info.load();
}
private function modEventHandler(e:ModuleEvent):void {
// Add an instance of the module’s class to the display list.
vb1.addChild(info.factory.create() as ColumnChartModule);
}
No seu aplicativo você tem um DTO cujo os dados são renderizados por diferentes Views (telas). Então, toda hora que o seu DTO muda, você percebe sua aplicação travada por uns segundos. Depois de um tempo você percebe que o problema é que mesmo as telas que estão invisÃveis estão executando código de apresentação de dados com base no novo DTO. Bem, este é um problema comum quando trabalhamos com DTOs complexos e abusamos do Data Binding.
A notÃcia ruim é que se você não teve este problema ainda, um dia você terá. A notÃcia boa é que uma das maneiras de evitar este problema é utilizar o DTOViewHelper, componente disponibilizado neste screencast.
Alguns Frameworks atuais do Flex oferecem maneiras de resolver este problema, mas o DTOViewHelper é independente do Framework que você usa. Além disso, como pode ser visto no Screencast, você pode definir métodos auxiliares dentro do DTOViewHelper com o objetivo compartilhar lógica de apresentação de dados de DTOs entre diferentes Views (veja o exemplo da Data que mostra a string “Hoje” no Screencast).
Clique aqui para fazer o download do código fonte do exemplo “errado” (I could be WRONG).
Clique aqui para fazer o download do código fonte do exemplo “certo” (I could be RIGHT).

INTRODUÇÃO
Bom dia pessoal!
Eu fiquei ocioso durante um intervalo de tempo, estive trabalhando em alguns projetos particulares, e acabei não atualizando meu blog neste perÃodo.
Mas vamos ao que interessa! A pedido de alguns leitores do meu blog, vou começar a criar pequenos ScreenCasts. Hoje estarei publicando o meu primeiro!! rsrsr…
Neste, abordarei algumas técnicas de design que podem ser utilizadas no Microsoft Expression Blend 3, para a construção de um “Botão de Gel“.
Espero que gostem! Abs.
Robson Fernandes

Dia 01/03 começa mais uma turma do curso de Ruby on Rails do básico ao avançado. As vagas ainda estão abertas e o curso cobre desde os primeiros passos com Ruby até a criação de um projeto completo em Rails e como colocá-lo no ar.
Combinando o conforto do estudo a distância com a plataforma da eGenial nós conseguimos ministrar um curso online ao vivo melhor do que um curso presencial. Pessoas de qualquer região do paÃs podem se inscrever e entrar com pé direito no mundo mágico do Ruby.

Inscrevendo-se você terá acesso a 300 páginas de material exclusivo, lista de discussão fechada, código fonte e 22 aulas ao vivo (que também são gravadas para quem não esteve presente). Também teremos uma aula extra cobrindo todas as novidades do Rails 3.0 beta e como se preparar para a migração.
Assista a primeira aula gratuitamente para entender como funciona o treinamento: DOWNLOAD
Para festejar o sucesso que tem sido os treinamentos de Ruby e já abrir o ano com chave de ouro vamos sortear uma bolsa integral para esta turma.
Para participar da promoção é bem simples. Basta fazer um tweet com a mensagem abaixo:
Retweet e aprenda Ruby on Rails em curso virtual ao vivo na @egenial! http://bit.ly/dpl2Gl #promorails
O ganhador será anunciado no meu twitter e aqui no blog na segunda-feira (01/03).
Neste final de semana do dia 19 ao dia 21 de fevereiro tive o imenso prazer de visitar meus amigos da Ria Labs, Fábio Vedovelli, Marcos Junior, Fábio, Sérgio e a Dinorah!
Troquei muitas idéias, conhecimentos, experiência sobre Adobe Flex e desenvolvimento em geral com esse turma que particularmente sou fã de carterinha!
Vedovelli e sua esposa Ana, que me aguentaram o final de semana inteiro, foram super hospitaleiros e fizeram com que realmente me sentisse em casa.
Passeamos bastante e pude conhecer um pouco mais da cidade da garoa, digo das enchentes, embora eu tenha tirado a sorte grande e não choveu nada nesses dias.
No sábado fomos jantar na Cantina C… Que Sabe no bairro do Bixiga, onde comemos uma lasanha muito saborosa com um chopp refrescante!
Após a lasanha fomos no Bar Asterix onde tomamos Guinness, cerveja tão falada pelo Fábio. E de fato, tem motivo para gostar, porque a danada é gostosa! Foram momentos muito divertidos!
O que na minha opinião foi mais bacana foi que pude conhecer a pessoa por trás do profissional Fábio Vedovelli, e além de fã do trabalho, tornei fã deste cara tão bacana que compartilha seus conhecimentos de maneira única!
Só me resta voltar a agradecer profundamente ao Vedovelli, a Ana, Marcos, Fábio, Sergio e Dinorah por terem me recebido de braços abertos.
Veja o vÃdeo da minha chegada à Ria Labs.
Para minha total surpresa, o Beck Novaes apareceu na Ria Labs e pude conhecer pessoalmente o mestre dos magos do Flex. Não perdemos tempo e gravamos um vÃdeo convocando o Carlos Eduardo da E-Genial para ir à São Paulo visitar a Ria Labs também! O Ved mais que depressa postou o vÃdeo!
Veja como foi nossa intimação ao Carlos.
Enfim! Foi du caramba passar esse final de semana ao lado de pessoas tão especiais!
Muito obrigado por tudo gente e reafirmo aqui no blog o que já disse pessoalmente e no Twitter.
Ved e Ana, estamos esperando vocês aqui em Curitiba! É só chegar! Vlw!
A ultima turma do Imersão Adobe Flex recebeu alguns “presentinhos”. Dentre eles o componente PodFlip, utilizado numa das aplicações que desenvolvemos aqui na DClick e que o pessoal já andou vendo por aÃ.
É verdade que o Flex 4 e com as novas capacidades 3D do Flash Player isso será bem mais fácil no futuro. Mas enquanto este dia não chega agora é a hora de compartilhar este componente com o restante de comunidade. Espero que seja util em algum projeto para vocês.
Clique aqui para fazer o download do código fonte deste screencast.
Lumine + ZendAmf + Flex 1/5
Olá pessoal !!!
Peço desculpas para os iniciantes mas este tutorial vai ser p pessoal + avançado, Então temos como requisito para esse tutorial que o leitor tenha um conhecimento básico de Lumine, ZendAmf e Flex.
Vou tentar focar na integração e não nas tecnologias utilizadas. Então vai ser bastante código e pouca teoria.
Parar o Backend vamos utilizar um trio que p mim tem se mostrado bastante produtivo nos últimos projetos e que pode ser baixada nos seguintes links: MYSQL + Lumine + ZendAmf
Base de Dados
Nossa base de dados será bem simples apenas 2 tabelas com um relacionamento 1 X N:
CREATE DATABASE `lumine_zend_flex`; CREATE TABLE `contact` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `name` varchar(200) NOT NULL, `email` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; CREATE TABLE `phone` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `number` varchar(45) NOT NULL, `contactId` int(10) UNSIGNED NOT NULL, PRIMARY KEY (`id`), KEY `fk_phone_contact` (`contactId`), CONSTRAINT `fk_phone_contact` FOREIGN KEY (`contactId`) REFERENCES `contact` (`id`) ) ENGINE=InnoDB;
PHP Project
Bom, depois das libs baixadas e da base instalada vamos configurar nosso projeto php.
A estrutura fica da seguinte forma :
Arquivos de configuração
Temos 2 arquivos de configuração em nosso projeto
gateway.php : gateway para chamadas amf
lumine-conf.php : Arquivo de configuração do Lumine
gateway.php
//adiciona diretorios ao include path set_include_path('.' . PATH_SEPARATOR . './library/' . PATH_SEPARATOR . './services/' . PATH_SEPARATOR . './models/vo/' . PATH_SEPARATOR . './models/entities/' . PATH_SEPARATOR . get_include_path() ); //inclui bibliotecas require_once 'lumine-conf.php'; require_once 'Lumine/Lumine.php'; require_once 'Zend/Loader/Autoloader.php'; require_once 'ApplicationLoader.php'; //seta tempo infinito de execucao set_time_limit(0); //Mostrar todos os erros independente qual seja error_reporting(E_ALL|E_STRICT); // indica o timezone padrao date_default_timezone_set('Brazil/East'); // auto-carregamento de classes de Lumine spl_autoload_register(array('Lumine','Import')); // auto-carregamento de classes DTO de Lumine spl_autoload_register(array('Lumine','ImportDTO')); // instancia uma configuracao do lumine $cfg = new Lumine_Configuration($lumineConfig); // registra uma funcao para o fechamento da conexao ao termino do script register_shutdown_function(array($cfg->getConnection(),'close')); // carregamento automatico das classes zend Zend_Loader_Autoloader::getInstance(); // carregamento automatico das classes da aplicação ApplicationLoader::getInstance(); $server = new Zend_Amf_Server(); $server->addDirectory('./services/'); $server->addDirectory('./models/vo/'); echo($server->handle());
lumine-conf.php
$lumineConfig = array( 'dialect' => 'MySQL', 'port' => '3306', 'user' => 'xxxx', 'password' => 'xxxx', 'host' => 'localhost', 'database' => 'lumine_zend_flex', 'package' => 'models.entities', 'class_path'=> 'xxxx\www\lumine-zend-flex\php', 'options' => array( 'auto_cast_dto' => '1', 'dto_format' => '%sVO', 'dto_package' => 'models.vo', ) );
Com isso finalizamos a configuração da Base de dados, Lumine e ZendAmf.
Agora podemos partir para a configuração das nossas classes de modelo de dados:
Tutorial : Lumine + ZendAmf + Flex 2/5
Até já !!!
Tutorial : Lumine + ZendAmf + Flex 1/5
Tutorial : Lumine + ZendAmf + Flex 2/5
Tutorial : Lumine + ZendAmf + Flex 3/5
Tutorial : Lumine + ZendAmf + Flex 4/5
Tutorial : Lumine + ZendAmf + Flex 5/5
O screencast abaixo é bem simples, porém muito eficiente para proteger o seu código. É importante ressaltar que isso tudo é necessário, pois o Action Script 3 não possui construtor privado e muito menos a implementação nativa de Enum.