Novos cursos avançados para Flex 4 pela RIACycle

Uau, faz 5 meses desde que começamos a treinar o pessoal pela internet e de lá para cá já foram 712 alunos ao total. Obrigado a todos pelo apoio para com a RIACycle e os cursos com nossos instrutores, tem sido um verdadeiro desafio e uma tremenda animação nesse período.

De lá para cá nossos ex-alunos sempre pediam tópicos avançados, então ontem e hoje lançamos 2 novos cursos avançados pela RIACycle, que são:

Design Patterns para projetos Flex 4
banner_design_patterns

Esse curso é para quem gosta de se organizar, deixar tudo nos devidos lugares, deixar seu projeto digno de ser bem interpretado pelo flash player e assim ter uma maior fluidez entre telas, comunicação com serviços remotos e deixar sua aplicação leve e robusta, de fácil manutenção.

Flex 4 Profissional
banner_flex4_pro

Esse curso é voltado para quem já conhece Flex e quer aprofundar no Flex 4 com novo ciclo de componentes, técnicas avançadas de integração contínua, gerar swfs através de ANT Build, e fazer testes unitários, digamos que seja um nível avançado do que você já conhece de Flex e quer ficar mais expert no assunto.

Ambos os cursos tem o objetivo de treinar você a acompanhar o ritmo de projetos de médio e grande porte da solução Flex para o mercado de Rich Internet Applications.

E uma das novidades desses dois cursos é que agora em sua empresa você pode matricular 1 vez até 3 funcionários e pagando menos.

Obrigado a todos pela confiança depositada e iremos retribuir nos cursos, com conteúdo de primeira e exemplos reais.

Como é festa de lançamento estamos sorteando pelo twitter 2 vagas para cada curso, você tem sorte? Então Tweet usando os hashtags #flex4pro e #flexdp.

FlexUnit, necessário e prático para toda aplicação

Poucos desenvolvedores que conheço no Brasil que trabalham com Flex ou com desenvolvimento de sistemas usam testes unitários, o que é pouco para o número de desenvolvedores já existentes ou que vinheram de linguagens bastante notórias em nossa área.
O que eu vejo é o mal hábito de salvar e testar na base do click, é válida o teste mais horas vindo e indo vai causar algum problema que toma muito seu tempo. No qual tira todo o propósito de se criar uma aplicação em Flex que é justamente ser produtivo.

Ao contrário do que você pensa, testes unitários não cria regras de testes à serem executadas, apenas criar especificações que você define para aprovar o que seu código tem a lhe dizer sobre tais métodos disponíveis.

FlexUnit é um projeto open-source, escrito em actionscript 3.0 e que pode te ajudar nesta tarefa chata porém necessária, Você pode criar até seus métodos próprios para testar, mais o FlexUnit é bem completo neste quesito reduzindo assim seu tempo nesse caso de criar do zero.

Como então usar o FlexUnit?

Primeiro faça o download do pacote aqui no site abaixo.
http://opensource.adobe.com/wiki/display/flexunit/Downloads

Depois de baixar, descompacte os arquevos em um diretório seu de preferência. Feito isso, arraste o arquevo FlexUnit.swc para dentro da pasta de seu projeto criado ou existente dentro do Flex Builder, veja como ficou o meu na imagem abaixo:

Pronto seu projeto vai estar apto a criar testes unitários ja que a biblioteca necessária já está adicionada, porém trabalhar com testes unitários requer um pouco mais que só adicionar a biblioteca ao seu projeto. Outro passo que você deve testar é o uso da interface que faz o controle. Para isso adicione em sua aplicação Flex o seguinte código fonte.

1
2
3
4
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:flexui="flexunit.flexui.*">
<flexui :TestRunnerBase id="testeUnitario" width="100%" height="100%"/>
</mx>

Veja que o código acima gera para você a interface de controle do FlexUnit

Que nada mais é que a repesentação gráfica do controle para testes unitários, onde você ver os resultados que foram colhidos em seu teste unitário.
Depois disso, você precisa conhecer um pouco como funciona o FlexUnit, e como é todo esse processo de testes, para facilitar o seu entendimento veja as definições de cada fase do FlexUnit.

assertions – É o resultado esperado pelo seu teste. Por exemplo se você falar que em São Paulo tem sempre poluição o seu código tem que dizer que São Paulo é poluída. Se em seu teste ele não dê a resposta esperada setada pelo assertion, é sinal que você tem que mudar em sua classe e ver onde o erro está associado.

test fixture – Para cada deste poderá haver a necessidade de dependência de criar objetos, propriedades ou até processos para realizar o teste. test fixture funciona justamente nesse aspecto devido fornecer no FlexUnit dois métodos necesários para isso o setUp() e o tearDown(), que exclui a possibilidade de testar duas ou mais instâncias do teste sem a necessidade de se criar redundancia do código, ja que qualquer propriedade pode ser usada ao topo da classe.

test case – Uma pequena parte do teste unitário, test case ou caso de teste, checa apenas uma especificação de dados a serem inseridos no teste. No caso do test case para adiciona-la ao TestSuite, você tem que estender a classe TestCase para ser adicionado ao JUnit. Por regra de padrões de uso do JUnit é interessante que toda classe que for estendida do TestCase que sempre venha com um sufixo exemplo : CalculadoraTest extends TestCase; E dentro de classe cada método usado para testar suas regras de especificações aconselha-se também que use o prefixo test antes do método em si, exemplo: testSoma();

test suite Não tem aquile ditado que comentam: “Quanto mais melhor?!”, é o caso do test suite, quanto mais testes forem acumulados mais fácil será de administrá-los se você agrupa-los.
Onde o próprio test suite pode agrupar outros test suites, testes individuais e até mesmo qual teste pode ser rodado na mesma sessão.

test runner – Lembra do componente adicionado para mostrar seus testes sendo executados? É o tal sujeito test runner, ele apenas mostra o que foi executado como teste, no FlexUnit o teste começa com o método startTest();

Para que o FlexUnit consiga enxergar tudo isso, você precisa instanciá-lo e fazer com que ele passe a receber todos os testes que está sendo executado em sua aplicação.

Começando assim, adicione mais esse código abaixo dentro de sua aplicação principal do Flex:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:flexui="flexunit.flexui.*">
 
</mx><mx :Script>
	< ![CDATA[
 
		    import flexunit.framework.TestSuite;
 
            private function criarTesteUnitario():TestSuite
            {
                var testeUni:TestSuite = new TestSuite();
                return testeUni;
            }
 
	]]>
</mx>
 
 
<flexui :TestRunnerBase id="testeUnitario" width="100%" height="100%"/>

Eu criei uma função que vai instanciar o TestSuite onde este objeto criado pode ser adicionado os testes necessários pelo TestCase como mostra no código à seguir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application applicationComplete="iniciarTestes()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:flexui="flexunit.flexui.*">
</mx><mx :Script>
	< ![CDATA[
 
            import flexunit.framework.TestSuite;
 
            private function criarTesteUnitario():TestSuite
            {
                var testeUni:TestSuite = new TestSuite();
                return testeUni;
            }
            private function iniciarTestes():void{
            	testeUnitario.test = criarTesteUnitario();
            	testeUnitario.startTest();
            }
 
	]]>
</mx>
 
 
<flexui :TestRunnerBase id="testeUnitario" width="100%" height="100%"/>

Veja que agora eu associei o meu componente com a instância testeUnitario com a função que vai guardar todos os testes que eu fizer pelo TestSuite, o disparo que fiz foi pelo evento applicationComplete para ter certeza que os testes só iniciará quando toda a minha aplicação e suas respectivas classes tiverem despejadas na memória. Lembrando que existem casos que testes unitários são necessários serem feitos no processo de inicialização da aplicação, o que isso é assunto para outros posts.
O resultado do código abaixo é que o FlexUnit já está começando a executar os testes, porém como não há nenhum teste unitário feito, eu preciso adicionar algum tipo de testeCase para ele.

Adicionando testes:

Antes de adicionar classes de testes ao FlexUnit, para facilitar a organização e não acabar estragando tudo e misturando tudo em um só diretório, você cria ai como fiz aqui no meu, uma pasta “test”.

Lembra ainda to TestCase que é a classe necessária para adicionar as especificações para o nosso teste? Vamos usar ela, mais antes de começar com ela, vou criar uma classe simples com soma,divisão, multiplicação,subtração ao meu projeto para que ele teste,afinal até então não criei nada para ele testar. Detalhe que essa classe não fica na pasta test, não confunda! Ela fica no src mesmo, na pasta test só as futuras classes de testes.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.igorcosta
{
	public class Matematica
	{
		public function Matematica()
		{
			super();
		}
 
		private var resultado:Number = 0;
		public function Somar(numA:Number,numB:Number):Number{
			return resultado = numA+numB;
		}
		public function Dividir(numA:Number,numB:Number):Number{
			return  resultado = numA/numB;
		}
		public  function Subtrair(numA:Number,numB:Number):Number{
			return  resultado = numA-numB;
		}
		public function Multiplicar(numA:Number,numB:Number):Number{
			return  resultado = numA*numB;
		}
		public function getResultado():Number{
			return resultado;
		}
	}
}

Com a classe matemática pronta, começe a criar a outra classe teste nesse caso chamo ela de MatematicaTest, lembra do sufixo?!

1
2
3
4
5
6
7
8
9
10
11
12
13
package test
{
	import flexunit.framework.TestCase;
 
	public class MatematicaTest extends TestCase
	{
		public function MatematicaTest(methodName:String=null)
		{
			super(methodName);
		}
 
	}
}

A classe faz parte do pacote test e estende a classe TestCase necessária para adicionar os testes.
A partir dai ja estamos com 75% pronto para rodar o primeiro teste, basta agora eu montar as especificações ao a minha classe e depois adicionar ao TestSuite e executar no TestRunner.

Como fazer?
Veja a classe final do meu teste, como quero aqui é apenas um exemplo me limitei a mostrar 2 métodos o somar e subtrair, veja como ficou a minha classe.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package test
{
	import com.igorcosta.Matematica;
 
	import flexunit.framework.TestCase;
 
	public class MatematicaTest extends TestCase
	{
		public function MatematicaTest(methodName:String=null)
		{
			super(methodName);
		}
 
		public function testSomar():void {
			var somando:Matematica = new Matematica();
			somando.Somar(40,40);
			assertTrue("Depois da soma de 40 a mais 40 o valor precisa ser 80",somando.getResultado() == 80);
		}
		public function testSubtrair():void{
			var subtrai:Matematica = new Matematica();
			subtrai.Subtrair(10,2);
			assertTrue("Depois da subtracao de 10 menos 2 o valor precisa ser 8",subtrai.getResultado() == 8);
		}
	}
}

Para finalizar, volto ao meu aplicativo principal e adiciono lá nas minhas funções o MatematicaTest ao TestSuite para rodar pelo testRunner.

Resultado final do meu aplicativo principal.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application applicationComplete="iniciarTestes()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:flexui="flexunit.flexui.*">
 
</mx><mx :Script>
	< ![CDATA[
		import test.MatematicaTest;
 
		    import flexunit.framework.TestSuite;
 
            private function criarTesteUnitario():TestSuite
            {
                var testeUni:TestSuite = new TestSuite();
                testeUni.addTestSuite(MatematicaTest);
                return testeUni;
            }
            private function iniciarTestes():void{
            	testeUnitario.test = criarTesteUnitario();
            	testeUnitario.startTest();
            }
	]]>
</mx>
 
 
<flexui :TestRunnerBase id="testeUnitario" width="100%" height="100%"/>

E ao clicar em Run no Flex Builder veja o resultado final dos meus testes na imagem abaixo.

Para onde ir depois de ler esse exemplo, tentei reunir aqui uma coleção de links para te ajudar no seus estudos futuros.

JUnit – Foi usado seu modelo no FlexUnit

Visão geral de como usar o FlexUnit – em inglês

Rodando FlexUnit via InsideRIA – em inglês

Definição de UnitTest na Wikipedia – em inglês

FlexUnit com Ant – em inglês ( Esse em particular é o que uso, muito prático).

Nós temos fé no sistema

Dificuldade vivida pelos desenvolvedores aqui em final de deploy para entrega ao QA.

Brincdeiras a parte, fundamental para desenvolvedores é usar metodologias que só ajudam. TDD é a bola da vez. Veja mais esses momentos aqui.
Essa veio do Davi Ramos, colega de trabalho.

Melhore como desenvolvedor é sua obrigação parte 2

Como tinha dito antes, se tornar um desenvolvedor é um processo evolutivo. Embora eu tenha N tarefas para fazer, vender, ensinar, traduzir e desenvolver. Eu procuro sempre melhorar no que faço.

Minhas dicas à partir de hoje são:

* Aceite críticas, mesmo as mais duras, elas vão te ajudar a entender o outro lado
* Procure centrar suas necessidades em soluções fixas
* Refactoring é sempre bom para manutenção
* Critique-se e tente achar novas maneiras de fazer a mesma coisa
* Documente tudo que faz, Veja 5 séculos atrás Leonardo Da Vinci fazia
* Leia bastante, eduque-se nada de mais é veneno.
* Haja, teorias são ótimas para realizar a prática com menos erros; Mais no mundo real o cliente quer solução

Outro livro que está fazendo parte de minha biblioteca essa semana é. Refactoring: Improving the Design of Existing Code.
É clássico, e ótimo para software houses.

Criando um tradutor em Flex usando o Google

Essa também veio lá do meu blog em inglês. Como criar uma ferramenta de tradução em Flex usando os recursos on-line que o google tem?

Google está cada vez mais entrando na esfera do Flash player e outras plataformas deixando-as consumir seus serviços, prova disso foi os outros testes feitos anteriormente à isso.

Para usar o serviço de tradução do Google é bem simples, ele respondendo com formato de dados em JSON, REST, XML, TXT no Flex fica mais fácil.

Para encurtar muito nessa explicação aqui abaixo você tem o código fonte da aplicação. Lembrando que para executá-la. É necessário você baixar o código fonte dele, devido ter algumas dependências de classes.

Código fonte

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="626">
	</mx><mx :Script>
		< ![CDATA[
			import mx.collections.ArrayCollection;
			import mx.rpc.events.ResultEvent;
			import com.adobe.serialization.json.JSON;
			[Bindable]public var googleText:String = "http://ajax.googleapis.com/ajax/services/language/" ;
			[Bindable]public var tsrc:String ="translate?v=1.0&q=";
			[Bindable]public var lanpair:String = "&langpair=";
			[Bindable]public var pairCode:String = "%7C";
			private function onJSONLoad(event:ResultEvent):void
			{
				var rawData:String = String(event.result);
				if(JSON.decode(rawData).responseData.translatedText !=null){
				var decoded:String =JSON.decode(rawData).responseData.translatedText;
				}else {
					decoded = "None support";
				}
				txtdest.text = decoded;
			}
		]]>
	</mx>
	<mx :Array id="langFrom">
		<mx :Object  value="auto" label="Select Language"/>
		<mx :Object  value="ar" label="Arabic"/>
		<mx :Object  value="bg" label="Bulgarian"/>
		<mx :Object  value="zh-CN" label="Chinese"/>
		<mx :Object  value="hr" label="Croatian"/>
		<mx :Object  value="cs" label="Czech"/>
		<mx :Object  value="da" label="Danish"/>
		<mx :Object  value="nl" label="Dutch"/>
		<mx :Object  value="en" label="English"/>
		<mx :Object  value="fi" label="Finnish"/>
		<mx :Object  value="fr" label="French"/>
		<mx :Object  value="de" label="German"/>
		<mx :Object  value="el" label="Greek"/>
		<mx :Object  value="hi" label="Hindi"/>
		<mx :Object  value="it" label="Italian"/>
		<mx :Object  value="ja" label="Japanese"/>
		<mx :Object  value="ko" label="Korean"/>
		<mx :Object  value="no" label="Norwegian"/>
		<mx :Object  value="pl" label="Polish"/>
		<mx :Object  value="pt" label="Portuguese"/>
		<mx :Object  value="ru" label="Russian"/>
		<mx :Object  value="es" label="Spanish"/>
		<mx :Object  value="sv" label="Swedish"/>
	</mx>
	<mx :Array id="langTo">
		<mx :Object  value="ar" label="Arabic"/>
		<mx :Object  value="bg" label="Bulgarian"/>
		<mx :Object  value="zh-CN" label="Chinese (Simplified)"/>
		<mx :Object  value="zh-TW" label="Chinese (Traditional)"/>
		<mx :Object  value="hr" label="Croatian"/>
		<mx :Object  value="cs" label="Czech"/>
		<mx :Object  value="da" label="Danish"/>
		<mx :Object  value="nl" label="Dutch"/>
		<mx :Object  value="en" label="English"/>
		<mx :Object  value="fi" label="Finnish"/>
		<mx :Object  value="fr" label="French"/>
		<mx :Object  value="de" label="German"/>
		<mx :Object  value="el" label="Greek"/>
		<mx :Object  value="hi" label="Hindi"/>
		<mx :Object  value="it" label="Italian"/>
		<mx :Object  value="ja" label="Japanese"/>
		<mx :Object  value="ko" label="Korean"/>
		<mx :Object  value="no" label="Norwegian"/>
		<mx :Object  value="pl" label="Polish"/>
		<mx :Object  value="pt" label="Portuguese"/>
		<mx :Object  value="ru" label="Russian"/>
		<mx :Object  value="es" label="Spanish"/>
		<mx :Object  value="sv" label="Swedish"/>
	</mx>
	<mx :ComboBox id="langFromCbx" prompt="Select a language" x="28.5" y="64" dataProvider="{langFrom}"/>
	<mx :HTTPService id="googleTransService"
		 url="{googleText + tsrc+txtsource.text + lanpair + String(langFromCbx.selectedItem.value)+pairCode+String(langToCbx.selectedItem.value)}"
		 useProxy="false" showBusyCursor="true" result="onJSONLoad(event)"  resultFormat="text"/>
	<mx :TextArea id="txtsource" x="28.5" y="124" width="569" height="116"/>
	<mx :TextArea id="txtdest" x="28.5" y="274" width="569" height="248"/>
	<mx :Button x="473.5" y="61" label="Translate" click="googleTransService.send()" width="124" height="28"/>
	<mx :ComboBox id="langToCbx" x="222.5" y="64" prompt="Select a language" dataProvider="{langTo}"></mx>
	<mx :Label x="30.5" y="45" text="Translate from:"/>
	<mx :Label x="28.5" y="98" text="Text to Translate"/>
	<mx :Label x="28.5" y="248" text="Result Text translated"/>
	<mx :Label x="222.5" y="45" text="Translate To:"/>

[Update] Alguns códigos exibidos neste post podem não aparecer corretamente, devido a um problema antigo em um plug-in para exibir código fonte. Pedimos desculpas.

AbsolutoBrasil 1.0 update 1, Uma nova atualização baixem.

Em 24 horas depois do lançamento AbsolutoBrasil, fizeram o download para agilizar certas tarefas na hora do desenvolvimento.

E para essas 276 pessoas que baixaram e as próximas que forem baixar, o AbsolutoBrasil sofreu mais uma alteração e para melhor. Mais classes e mais componentes.

Pacotes alterados/Adicionados/Removidos:

1
2
3
4
                  import br.absolutobrasil.eventos
		  import br.absolutobrasil.intelli
		  import br.absolutobrasil.intelli.autofill
		  import br.absolutobrasil.utils

Pacotes de utilidades foram adicionados como todas as tabelas de pesos e medidas de acordo com as regras Brasileiras do INPE. Agora você ja tem embutido conversões para m3 para dm3, cm para km, km para metro, kg para grama, polegada para metros,…,etc. Muita coisa.

E mais, agora todos os municipios do Brasil, que são ao total 5800+ está disponível via API fácil assim, você utilizando pelo lado cliente sem a chateação de esperar respostas do servidor, você pode economizar cerca de 2kb por tráfego.

Como acessar? Veja o exemplo abaixo onde carrego todas as cidades(municipios do estados do Acre e São Paulo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
	</mx><mx :Script>
		< ![CDATA[
			import br.absolutobrasil.intelli.autofill.MunicipiosSudeste;
			import br.absolutobrasil.intelli.autofill.MunicipiosNorte;
 
				public function carregaMunicipios():void
				{
							var muniacre:MunicipiosNorte = new MunicipiosNorte();
							var munisp:MunicipiosSudeste = new MunicipiosSudeste();
 
							if(cbx.selectedIndex == 0){
										// carrego cidades do Acre
											lista.dataProvider = muniacre.cidadesACRE;
							}else {
									// carrego cidades de SP
											lista.dataProvider = munisp.cidadesSAOPAULO;
							}
 
				}
		]]>
	</mx>
	<mx :List id="lista" x="216" y="45"></mx>
	<mx :ComboBox  prompt="escolha a estado" change="carregaMunicipios()" id="cbx" x="48" y="105">
			</mx><mx :Array>
						</mx><mx :String>Acre</mx>
						<mx :String>São Paulo</mx>

Fácil né?

Ah!, e sem falar que agora você conta com um comoBox para preenchimento de ano, sabe aquiles componentes que geram o ano de nascimento e você escolhe o ano. Ele é bem inteligente, pega o ano corrente da máquena do usuário e gera o resto para você. Ficou com dúvida, veja exemplo abaixo:

1
2
3
4
5
6
7
8
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="br.absolutobrasil.intelli.*">
	</mx><mx :HBox x="78" y="81"  >
		<mx :Label text="Data Nascimento"/>
		<mx :TextInput width="42"/>
		<mx :TextInput width="42"/>
		<ns1 :ComboBoxAno/>
	</mx>

Uma das limitações do Framework do Flex é na hora de passar parâmetros para eventListeners, sejam eles de qualquer tipo, e para contornar esse problema nós também adicionamos uma solução que achamos bacana na hora de fazer isso, e melhor, sem deixar você mudar a maneira de como adicionar listeners ao seus objetos . Como? Veja o exemplo abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application creationComplete="aplicarEventoListener()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
	</mx><mx :Script>
		< ![CDATA[
			import mx.controls.Alert;
 
						import br.absolutobrasil.eventos.EventListenerParam;
 
						public function aplicarEventoListener():void
						{
									botao.addEventListener(MouseEvent.CLICK,EventListenerParam.executar(novaFuncao,"Exemplo de Passagem"));
						}
						public function novaFuncao(event:MouseEvent,texto:String):void
						{
									mx.controls.Alert.show(texto);
						}
		]]>
	</mx>
 
		<mx :Button label="Executar Comandos" id="botao"/>


Download dos SWC

Para usar o AbsolutoBrasil para Flex 3, baixe esse pacote especialmente feito para o Flex 3.

Para usar o AbsolutoBrasil para o Flex 2, basta usar esse pacote especial feito para o Flex 2.

Download dos Exemplos com códigos fontes disponíveis

* Para Flex 2
* Para Flex 3

Muito mais exemplos foram colocados dentro do projeto tanto na versão do Flex 3 quando para o Flex 2.

Baixem, usem é gratuito. Vai ajudar muito você a economizar tempo. Se você quer participar em alguma idéia ainda não implementada, envie sua sugestão para nós, teremos orgulho e o prazer de colocá-la no framework.

[Update] Alguns códigos exibidos neste post podem não aparecer corretamente, devido a um problema antigo em um plug-in para exibir código fonte. Pedimos desculpas.

Conheçam o AbsolutoBrasil 1.0 um framework brasileiro para desenvolvedores Flex

AbsolutoBrasil é uma pequena biblioteca de códigos que contém os seguintes itens:

* Validadores para ( CEP, CPF e CNPJ )
* Formatadores para ( CEP, CPF e CNPJ)
* Lista de Estados Brasileiros
* ComoBoxes para Estados Brasileiros
* ComoBoxes de siglas de Estados Brasileiros

O Framework contém classes do Richard Manzke, e algumas que fiz. O projeto é bem simples porém bem usual, eu recebia e também pediam direto para fazer tais componentes que ajudassem-nos a criar formulários mais inteligentes para a realidade brasileira. Foi ai que surgiu essa idéia e nasceu o AbsolutoBrasil.

Usem e abusem, novas versões estão por vim, como por exemplo “lista de cidades brasileiras, telefone padrão brasileiro”, que ficou de fora dessa vez.

Qualquer dúvida só enviar e-mail para eu, ou em especial para o Richard Manzke, que contribuiu com os códigos.

Como Usar o Framework?

No Flex Builder 2

1. Baixe o pacote especialmente feito para o 2 e depois descompacte no diretório preferido
2. Clique com o botão direito do mouse sobre o projeto e escolha “Properties”
3. Escolha a opção a esquerda :”Flex Build Path”
4. Após isso, escolha a segunda aba chamada “Library Path”
5. Ao entrar na aba clique no botão “add SWC”
6. É só pegar o .swc que você descompactou no diretório e clicar em OK para confirmar todos os passos.
7. Pronto você já está apto a usar o AbsolutoBrasil.

No Flex Builder 3

1. Baixe o pacote especialmente feito para o Flex 3 e descompacte no diretório perferido
2. No seu projeto existe uma pasta chamada libs, arraste e solte o .swc para esse diretório
3. Pronto, seu projeto já está apto a usar o AbsolutoBrasil.

Existe alguns exemplos?

Sim, aqui vai.

Baixe aqui um exemplo feito para o Flex 2.

Baixe aqui um exemplo feito para o Flex 3.

Quer também participar do projeto?

Mais cabeças pensam melhor que poucas, se você tem algumas classes de utilidade como conversores de números ou alguma classe que incremente esse pacote, basta enviar e nós vamos analisar e incluir no Projeto. Deixe um comentário sobre sua classe com o link do arquevo para ser baixado.

FlashDevelop 3 beta 5 disponível

Para quem ainda não atualizou. Já está disponível o beta 5, muitos bugs corrigidos e com uma grande novidade agora com suporte a criação de aplicativos AIR.
Flash Develop Beta 5

Uma listagem geral das mudanças são:

* Mudanças gerais ( complemento de código, pesquesar, encontrar e modificar
* Caching, abertura do programa e projeto muito mais rápido
* Update nos templates do projetos com complementos para as classes dos pacotes(mx,fl e air)
* Suporte 100% a funcionar em USB
* Start page atualizada, ela agora notifica atualizações
* Nova estenção instrict complemento
* Novo projeto AIR

Eles também atualizaram agora, meio que obrigado o usuário a usar o JVM 1.6 e realmente está mais rápido.

Mais informações onde baixar o novo beta 5, cliquem aqui.

Para ver uma lista completa de plug-ins que vão lhe ajudar mais ainda na hora de usar o o FlashDevelop, veja aqui.