Dev. Software/ Dicas/ Dicas e truques/ Labs/ Notícias/ Open-source/ Pessoal

Scratch ensinando crianças à programar

scratch

scratch_shot

O MIT sempre acerta no quesito de metodologias de ensino para o futuro e eu apoio a idéia de ensinar crianças a programar de uma maneira divertida e intuitiva, é o caso do projeto Scratch(“Rascunho”), que ajuda crianças a entender melhor e raciocinar melhor a questão do pensamento lógico e abstrato de seus desenhos.

Imagine você ensinar crianças na faixa etária de 5 até 10 anos à programar dessa maneira, ensina-los como criar um pensamento exponencial usando seus próprios desenhos, isso fomenta o conhecimento por áreas exatas e prepara o futuro da humanidade para a exploração espacial, dúvida?

Para encurtar a curva de aprendizagem no Scratch eu gravei um vídeo bem rápido mostrando como funciona e como pode ser criado animações, jogos simples e até sistemas. Gostou? Compartilhe nas redes sociais, divulgue na sua escola e ensine as crianças.

[media url=”http://www.youtube.com/watch?v=nAod_01YZHw” width=”600″ height=”400″ jwplayer=”controlbar=bottom”]

Ensinar o futuro da nação à programar não é tão difícil assim, já que a intenção justamente não é transforma-los em desenvolvedores de software, mas fazer com que eles transformem a maneira de pensar de um modo linear como é feito hoje para um modo lógico e escalonável e isso meus caros só através de programação.

Programar pode ser útil para o raciocínio de seus filhos, alunos. Ajudem eles a aprender de uma forma totalmente diferente da sua.

Acesse: http://scratch.mit.edu

Flex para Linux/ Labs/ Notícias

Flex Builder Alpha 5 com mais 465 dias para você usar no Linux

Recentemente quem acompanha as notícias via feed, percebeu que a Adobe deu um passo mais novo porém sem muitas forças em direção ao suporte do Flex Builder para o Linux.
De fato é que ela definitivamente ela deixou de dar suporte para plataforma do penguim. Problema relatado por ela é que não há número de usuários suficientes para usar.
Embora eu discorde deste assunto mesmo não sendo um usuário assíduo do linux. Isso vem a calhar pelo fato de que em seus Survey(pesquisa) de mercado ela não coloca geralmente o Linux como plataforma, nem tampouco outro. Em fim, já era.
Contudo, ela recentemente atualizou uma versão mais promissora do Flex Builder 3.0.2 para alguns fixes na plataforma Linux, e o chamou-o de Alpha 5. Aumenta um pouco a espectativa de quem usa o Linux diariamente.

Se você usa Linux e estava usando um emulador de máquina virtual para trabalhar com o Flex Builder no Linux, por que a licença expirou. Seus problemas acabaram pelo menos por 465 dias, é o que promete a Adobe.

Ah! E nem se empolge tanto, o modo design ainda não foi portado. Contimuamos apenas o modo code.(Afinal quem precisa do design?).

Baixem o novo Alpha 5 neste link direto para o Labs da Adobe. No link você encontra novas informações de compatibilidade e como desinstalar o anterior e colocar o novo.

Actionscript Frameworks/ Flex/ Flex Mobile Framework/ Labs/ Slider Framework

Flex Mobile Framework

Ontem a Adobe oficializou o anúncio que estava trabalhando em uma versão optimizada para dispositivos móveis do Flex SDK.
O Flex Mobile Framework ou melhor Slider é uma grande promessa para então já esperada comunidade de desenvolvedores da plataforma Flex.

Com o recém chegado Flash Player 10 para dispositivos móveis a coisa muda de status e passa a amadurecer mais ainda esssa idéia de rodar Actionscript 3.0 para celulares.

Em minha opinião pessoal, acredito que há sem dúvida muito trabalho a ser feito para optimizar o Flex SDK para dispositivos móveis, onde os principais desafios são multi-toque, pouca memória disponível e pouco nível de processamento. O que acarreta atualmente na inviabilidade de se rodar isso “Out of Box”.

Pesquisas internas rodando o novo Flash Player em meu Nokia e62 serie 60 5th mostrou que ainda tem muito que amadurecer o player para rodar nos dispositivos móveis. Principalmente para o futuro Slider.

Uma biblioteca que se comportou muito bem, fora o aspecto de multi-touch. Não pudemos testar por que não possuo nenhum celular com multi-touch foi o minimal components do Keith. É level, funcional e possui a mesmo fluxo de criação de componentes Flex.
Acredito que Adobe esteja se baseando em sua experiência bem sucessidade em introduzir o Flex em forms do LiveCycle para julgar os melhores aspectos.
Como no próprio whitepaper do Slider há grandes desafiors e com toda certeza ela vai fazer isso rodar suavemente.
Vamos aguardar.

[Atualização 07/10/2009] Video mostrando o Slider em ação.

Actionscript/ Actionscript 3.0 Server-side/ Labs/ Notícias/ Open-source/ RIA

Actionscript 3.0 rodando no servidor e não dentro do SWF

redrocket

Em mais de 10 anos de Flash, logo depois Flash Plataforma, nunca tinha visto algo igual a isso.

A idéia principal do produto é habilitar você desenvolvedor Actionscript, escrever o código de server-side apenas em actionscript e conectar-se ou exibir o que seja para o seu aplicativo que fica dentro do SWF.

Ainda é esta em fase de teste e não tem nada disponível para download ou ser lido. Surge a idéia. Se você usar o botão direito do mouse e escolher ver código fonte. Fica claro que realmente foi usado um gerador redRocket.

Com toda certeza é uma grande evolução da plataforma Flash em anos de vida. E agrega valor não só ao Flash Player, mais à profissão de desenvolvedor da plataforma Flash.

Actionscript/ AS 3.0/ Flash/ Flex/ Flex 3 how to/ Flex 3 SDK/ Flex Builder 3/ frameworks/ Labs

3D na sua aplicação Flex usando apenas os novos recursos do Flash Player 10

O título é enorme, mais o conteúdo é de se animar. Eu já havia postado aqui sobre a novidade, só não tinha dito como fazer.Trabalhar com efeitos 3D no Flex é fácil, divertido e te tira uma boa parte do seu tempo pela manhã.

Existem algumas(1) bibliotecas(2) gratuitas(3) que faz esse serviço para a versão do Flash Player 9, embora ainda funcionando no Flash Player 10. Mais esse conteúdo é direcionado apenas para quem já tem o Flash Player instalado e quer começar a brincar ou quem sabe aplicar os efeitos de 3D em sua aplicação Flex existente já usando os novos recursos de 3D do Flash Player 10.

Requesitos:

– Ter o Flash Player 10 instalado
– Ter o Adobe Flex Builder 3.0.2+
– Ter tempo disponível de 30 minutos.

Antes de mais nada, para começar você vai precisar alterar algumas coisas do seu Flex Builder 3.0.2, embora ele já venha atualizado, existe uma pequena configuração necessária para rodar. Notadamente essa configuração não terá mais valor para o Flex Builder 4, ou melhor “gumbo”,já que por padrão ela vem feita.

Passos para configurar:

1. Vá até o Flex Builder e crie um novo projeto.
2. Depois do projeto criado, clique com o botão direito do mouse sobre o projeto e escolha a opção do menu “Properties”.
3. Vai abrir a tela de propriedades do projeto. Nela você deve escolher a opção “Flex Build Path”.
3d

4. Clique em Flex 3.2 para expandir e delete a biblioteca playerglobal.swc, essa biblioteca é para o Flash Player 9.
5.Clique no botão Add SWC e procure dentro dos arquevos de instalação de sua máquena onde está o seguinte caminho.

C:Program FilesAdobeFlex Builder 3 Plug-insdks3.2.0frameworkslibsplayer10playerglobal.swc

Esse novo playerglobal.swc vai garantir que as classes do Player padrão que no caso será o 10, terá todas as classes requesitadas.

Após isso, volte no menu lateral e escolha a opção Flex Compiler, e adicione ao compilador o seguinte parâmetro “-target-player=10”. Com isso garantimos que o compilador vai adicionar as classes dependentes para isso.

Feito isso, caso você queira assegurar que o swf gerado seja enxergado e possa refletir as mudanças para o instalador automático, mude a versão do Flash Player que está ai de 9.0.24 para 10.0.0.

Passo final. Clique OK e está salvo as alterações, agora é só contigo.

Entendendo um pouco do 3D do Flash Player 10.

Toda classe do DisplayObject, MovieClip e Sprite, tem novas propriedades cada uma dessas novas propriedades faz a rotação do objeto em um eixo X,Y e Z. As propriedades são: rotationX,rotationY, rotationZ,transformX,transformY,transformZ,scaleX,scaleY,scaleZ, dentre outras classes. Quem trabalha com Flash CS4 pode ver em detalhe como funciona o 3D do Flash Player (em português).

Para quem trabalha com Flash tem-se uma vantagem que é definir o ponto de registro x,y de um objeto quando se está criando, o que você pode fazer com que seu objeto seja rotacionado no eixo existente e assim fazer um efeito conciso.

Já no Flex não temos essa vantagem o que podemos fazer é imitar o Flash IDE nessa parte, colocando qualquer um de nossos componentes como container do componente afetado, complicado né?! Não, por exemplo veja abaixo que apliquei diretamente o efeito de 3D à um painel, observe que ele vai rotacionar no eixo Y de onde os pontos x,y foram registrados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
	</mx><mx :Script>
		< ![CDATA[
			import caurina.transitions.Tweener;
 
 
			public function rotate():void{
 
				Tweener.addTween(pa,{rotationY:pa.rotationY+180,time:1});
			}
		]]>
	</mx>
 
 
	<mx :Panel  id="pa" x="451" y="141" width="208" height="196" title="Painel Rotativo">
 
	</mx>
	<mx :Button x="20" y="55" label="Rotacionar" click="rotate()"/>

Agora comportando-se como no Flash IDE, adiciono o painel à um container.

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 xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
	</mx><mx :Script>
		< ![CDATA[
			import caurina.transitions.Tweener;
 
 
			public function rotate():void{
 
				Tweener.addTween(pa,{rotationY:pa.rotationY+180,time:1});
			}
		]]>
	</mx>
 
	<mx :Container clipContent="false" id="pa" width="300" height="300" x="513.5" y="223">
	</mx><mx :Panel horizontalCenter="0" x="-150" y="-150" width="300" height="300" title="Painel Rotativo">
 
	</mx>
 
	<mx :Button x="20" y="55" label="Rotacionar" click="rotate()"/>

Onde depois você pode ir manipulando de uma só vez as três propriedades definidas. Exemplo abaixo:

3d2

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
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application horizontalScrollPolicy="off" verticalScrollPolicy="off" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="675" height="509">
 
	</mx><mx :Script>
		< ![CDATA[
			import caurina.transitions.Tweener;
 
 
			public function rotate():void{
 
				Tweener.addTween(pa,{rotationX:transformaX.value,rotationY:transformaY.value,rotationZ:transformaZ.value,time:1});
			}
		]]>
	</mx>
 
	<mx :Container clipContent="false" id="pa" width="150" height="150" x="486" y="212">
	</mx><mx :Panel horizontalCenter="0" x="-75" y="-75" width="150" height="150" title="Painel Rotativo">
 
	</mx>
 
	<mx :Button x="29" y="257" label="Rotacionar" click="rotate()"/>
	<mx :Form x="20" y="85">
		</mx><mx :FormItem label="rotationX">
			<mx :HSlider minimum="0" labels="[0,90,180,270,360]" maximum="360" allowTrackClick="true" snapInterval="15" id="transformaX" />
		</mx>
		<mx :FormItem label="rotationY">
			<mx :HSlider minimum="0" labels="[0,90,180,270,360]" maximum="360" allowTrackClick="true" snapInterval="15" id="transformaY"/>
		</mx>
		<mx :FormItem label="rotationZ">
			<mx :HSlider minimum="0" labels="[0,90,180,270,360]" maximum="360" allowTrackClick="true" snapInterval="15" id="transformaZ"/>
		</mx>
interar/ Labs/ Notícias/ Open-source/ Vídeo/ Web 2.0

Criando uma ferramenta de Video Conferência ( Parte 1 )

Sem dúvida a necessidade do ser humano em sí comunicar vem lá da idade média onde ainda escreviamos em caverna para contar nossa história às futuras gerações. O tempo passou chegadou a idade da pedra, do aço e do papel. Com as recogitadas situações da era humana sempre tivemos essa necessidade de falar, ouvir e até mesmo não ouvir só falar. Surge então em 1981 por ai a tal da Internet, mais uma forma agora da era digital de se comunicar,ver, interagir e covergência digital.

Criar aplicações hoje que sejam usadas por massas é o sonho de todo programador, desenvolvedor, como queira chamar. Só que atingir esse público é longadoura a carreira e pode fazer você desistir facilmente e correr atrás de coisas mais fáceis, ou até mesmo CTRL+C e CTRL+V no trocadilho do mundo digital.

Pois bem, nesta primeira parte de algunas, acreditando eu que possa chegar até a décima, vamos ilustrar aqui como criar uma ferramenta típica e bem útil nos tempos modernos, que é a tal da Video Conferencia, mais não uma simples video conferência, uma feita para rodar na Web no browser e no desktop, que use a tecnologia de ponta que há disponível no mercado.

Nossa ferramenta de Video conferência vai ser parcialmente igual ao modelo encontrado pela solução da Adobe o Adobe Connect Now, que é ao meu ver a melhor opção hoje do mercado para conferências on-line.

Se você for preguiçoso, que gosta só de copiar o código, mudar o nome e dizer que foi você que fez o projeto para impressionar seu chefe ou ganhar uma vaga para um futuro trabalho, pare por aqui mesmo, a intenção deste projeto é causar a parte da pesquesa e desenvolvimento que você está deixando morrer dentro de você, siga os exemplos dos povos da Europa, Estados Unidos, Índia, tente criar alguma coisa nova, instigar seus objetivos como desenvolvedor e use essa série de artigos para inspirá-lo a melhorar essa ferramenta.

Pronto, seguimos então depois do recado….

Ingredientes usados:

Adobe Flex Builder 3 – Para facilitar na codificação
Adobe Flex SDK 3 – Essencial para facilitar o layout da minha aplicação
Flash Media Server – Uma das peças chaves do quebra-cabeça, não me venha pensando em pedir para demonstrar usando outras soluções do mercado, lembre-se do recado acima dado, busque novos horizontes e faça o seu com a sua solução disponível.
WebOrb 3.0 for PHP – Esse aplicativo é muito útil, é com ele que vamos definir nosso lado administrador da video conferência.
XAMPP – Solução útil que reúne PHP,MySQL e apache em um só pacote.

Bibliotecas de códigos utilizadas:

OpenFlux
as3coreLib
absolutobrasil
FlexUnit
PureMVC
GoogleMaps
flexlib
QueueLoader
Tweener
as3rpclib
as3xls
urlkit
as3sharelib
as3httpclientlib

Depois de juntar os ingredientes é listar as funcionabilidades deste projeto. Reunir quais novidades a video conferência terá.

– Video para até 4 participantes
– Audio
– Chat entre participantes e privados
– DashBoard de gráficos
– Exportação de resultados de pesquesas
– Pods e painéis
– Gravação de toda a atividade da aplicação
– Undo/Redo para painel de anotações
– Screensharing (compartilhar a tela do computador )
– Syntax Highligt ( Exibir código fonte em caso de conferências para desenvolvedores )
– Controle de audio.
– Black Screen ( Você ja deu aula em um projetor Epson ou Dell? Eles tem um Black screen caso você esteja compartilhando sua tela e quer ver um e-mail e não quer parar o compartilhamento, você insere uma tela preta.
– Screen Resolution – Se adapta a resize do Browser até em compartilhamento de tela
– Controle de sessões
– Controle de Atas
– Acesso por níveis
– Painel de Administrador
– Upload de apresentações em PPT
– Whiteboard – Lousa em branco para desenhos
– Google Maps colaborativo para marcar eventos
– Compartilhamento de arquevos integrado com o serviço da Adobe o Share
– Gerar PDF,Excel,txt, csv,log dos chats.
– Auto-hide panels.
– Pesquesa de opinião com várias respostas do tipo ( checkbox,radiobutton,textInput).
– e mais quando forem surgindo mais idéias.

Usando patterns
Sim, será usado o PureMVC juntamente com o OpenFlux para deixar o nível de abstração da ferramenta o mais fácil possível.

Nome do projeto.

Tudo tem que ter nome de batismo, vou chamar esse projeto de INTERAR que é uma palavra muito comum em Pernambuco que significar completar, adicionar, somar, e como eu quero adicionar interatividade entre pessoas cai bem ai um nome, não tem logo ainda, e claro que vai ter, só basta alguém de bom senso me enviar.

Prontos para o próximo passo? Aguardem que domingo tem mais INTERAR na parte dois.

Que trata-se de : Configurando ambiente e definindo a interface do INTERAR.

Ah! e quase esqueci, não coloquei os links dos ingredientes de propósito, só para dificultar sua vida um pouco afinal você ja tá pegando o feijão cozinhado. Quem for achando os links vai postando aqui para ajudar aos outros.

AbsolutoBrasil/ Actionscript Frameworks/ AS 3.0/ Flex/ Flex 3/ Flex 3 Documentação/ Flex 3 Open-Source/ Flex Componentes/ frameworks/ Labs/ Open-source

Adicionando um TabManager ao TabNavigator de seu projeto

Em um dos projetos que estamos desenvolvendo chegadou-se a uma certa necessidade de usar um manager para algumas views. Controlar isso via interface é horrível, quanto maior genérico fique sua view melhor.
Gostaria de compartilhar com vocês esta classe que faz justamente isso, organizar e administrar melhor as abas do TabNavigator. Que inclusive estará fazendo parte dos managers do novo AbsolutoBrasil 1.5 que está vindo por ai. Porém como vai demorar um pouquenho para sair segue a classe bem documentada.

Caso de uso:

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
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application applicationComplete="init()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
 
	</mx><mx :Script>
		< ![CDATA[
			import mx.controls.Alert;
			import mx.containers.Canvas;
			import mx.events.ItemClickEvent;
 
			import br.absolutobrasil.managers.TabManager;
 
			private function init():void {
					TabManager.tabNavigator = minhaTabNav;
			}
			public function switchBotoes(event:ItemClickEvent):void {
					switch(btns.selectedIndex) {
						case 0:
								TabManager.createNewTab(Canvas,"Nova Aba","001");
								break;
						case 1:
								TabManager.removeSelectedTabByIndex(minhaTabNav.selectedIndex);
								break;
						case 2:
								Alert.show(TabManager.getUniqueTab("001").toString());
								break;
					}
			}
		]]>
	</mx>
	<mx :Array id="arr">
			<mx :Object label="Criar Aba"/>
			<mx :Object label="Deletar Aba" />
			<mx :Object label="Pegar Id da Aba"/>
	</mx>
	<mx :TabNavigator id="minhaTabNav" width="695" height="375" x="213" y="67">
		</mx><mx :Canvas label="" width="100%" height="100%">
		</mx>
 
 
	<mx :ButtonBar itemClick="switchBotoes(event)" id="btns" dataProvider="{arr}" x="213" y="20">
	</mx>

Classe para adicionar à sua biblioteca

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
package br.absolutobrasil.managers
{
    /**
    * 	http://www.mozilla.org/MPL/
        THIS SOURCE CODE IS PROVIDED "AS IS" AND "WITH ALL FAULTS", WITHOUT
        ANY TECHNICAL SUPPORT OR ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
        BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
        FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  ALSO, THERE IS NO WARRANTY OF
        NON-INFRINGEMENT, TITLE OR QUIET ENJOYMENT.  IN NO EVENT SHALL MACROMEDIA
        OR ITS SUPPLIERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
        EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
        PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
        OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
        WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
        OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOURCE CODE, EVEN IF
        ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
        *
        * Parte original http://coenraets.org/blog/
        * Modificações - http://www.igorcosta.com
 
	*/
	import mx.containers.TabNavigator;
	import mx.core.Container;
	import mx.events.ChildExistenceChangedEvent;
 
	public class TabManager
	{
		/**
		 * @Constructor
		 *
		 */
		public function TabManager()
		{
		}
 
		private static var _tab:TabNavigator;
 
		private static var uniqueTabs:Object = new Object();
 
		/**
		 * Seta o manager ao valor de um TabNavigator existente na aplicacao para iniciar as operacoes
		 * @param tabNavigator
		 *
		 * @example of uses:
		 * <listing version="3.0">
		 *              import br.absolutobrasil.managers.*;
		 * 				var minhaAba:TabNavigator = new TabNavigator();
		 *              private function init():void {
		 *                  TabManager.tabNavigator = minhaAba;
		 *              }
		 * </listing>
		 *
		 */
		public static function set tabNavigator(tabNavigator:TabNavigator):void
		{
			_tab = tabNavigator;
			_tab.addEventListener(ChildExistenceChangedEvent.CHILD_REMOVE,
				function (event:ChildExistenceChangedEvent):void
				{
					for (var uniqueId:String in uniqueTabs)
					{
						if (uniqueTabs[uniqueId] == event.relatedObject)
						{
							uniqueTabs[uniqueId] = null;
							return;
						}
					}
				});
		}
		/**
		 *  Cria uma nova Aba
		 *
		 * @param tabClass - o alvo ou componente que será criado
		 * @param label - Label que aparecerá na aba;
		 * @param uniqueId - Caso você queira definir um id único para a aba
		 * @return uma nova aba criada ao container posicionado como target
		 *
		 */
		public static function createNewTab(tabClass:Class,label:String='', uniqueId:String=null):Container
		{
			if (uniqueId && uniqueTabs[uniqueId])
			{
				_tab.selectedChild = uniqueTabs[uniqueId];
				return uniqueTabs[uniqueId];
			}
 
			var tab:Container = new tabClass();
 
			if (uniqueId)
			{
				uniqueTabs[uniqueId] = tab;
			}
 
			_tab.addChild(tab);
			_tab.label = label;
			_tab.selectedChild = tab;
			return tab;
		}
		/**
		 *Seta um id Unico para a aba desejada, passando obrigatoriamente o id que você deseja setar e o alvo que receberá.
		 * @param uniqueId
		 * @param tab
		 *
		 */
		public static function setUniqueTab(uniqueId:String, tab:Container):void
		{
			uniqueTabs[uniqueId] = tab;
		}
		/**
		 * Remove a aba desejada.
		 * @param tab
		 *
		 */
		public static function removeTab(tab:Container):void
		{
			_tab.removeChild(tab);
		}
		/**
		 *Remove a aba passando a posicao dela necessária, caso não queria controlar isso por id.
		 * @param index
		 *
		 */
		public static function removeSelectedTabByIndex(index:int):void {
			_tab.removeChildAt(index);
		}
		/**
		 * Remove todas as abas existentes no TabNavigator
		 * @param tabNavigatorTarget
		 *
		 */
		public static function removeAllTabs(tabNavigatorTarget:TabNavigator):void {
				_tab = tabNavigatorTarget;
				_tab.removeAllChildren();
		}
		/**
		 *Pega o Id único da aba desejada, não precisa selecionar.
		 * @param uniqueId
		 * @return
		 *
		 */
		public static function getUniqueTab(uniqueId:String):Container
		{
			return uniqueTabs[uniqueId];
		}
	}
}
Actionscript/ AS 3.0/ Dev. Software/ Flex 3/ Flex Componentes/ Google/ Labs/ Open-source

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.