Actionscript Frameworks/ AS 3.0/ Flex/ frameworks/ Notícias/ Web 2.0

Boo-Box Actionscript 3.0 API para Flash/Flex

Opa, estamos felizes por ajudar mais uma vez ao mundo open-source e toda comunidade Flash/Flex brasileira.


Alguém aqui conhece o Boo-Box?

Boo-Box, é um serviço de agregação de produtos on-line que geram renda para você blogueiro, dono de site, é um mix de serviços de afiliados em um só lugar. Por exemplo eles oferecem um serviço que é único para acessar produtos de lojas como a submarino, americanas.com,mercado livre, dentre outros sites internacionais como todos as lojas do amazon,e-bay,etc. Tudo no bom estilo web 2.0.

Está ai entre poucos sites que oferecem API tupiniquem para seus serviços, modelo o qual muito portal e serviço web brasileiro deveriam adotar.

Até então a única api existente para o Boo-Box é em REST(xml/JSON). Por que não portar uma API para o lado cliente e mais ainda para o Flex/Flash.

A API do Boo-Box para actionscript 3.0 é completa, tem todos os serviços que a Boo-Box oferece.

Você só precisar ir no http://code.google.com/p/booboxas3api/

No projeto do google você encontra o SWC para integrar dentro de seu projeto Flash ou Flex, exemplos, documentação da API, tudo para facilitar sua vida.

Agora começe a ganhar dinheiro com suas aplicações Flex ou criar uma loja para isso.

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.

Actionscript Frameworks/ AS 3.0/ Flash/ Flash CS 3/ Flex/ Flex 3/ Flex 3 Open-Source/ Flex Componentes/ frameworks/ Labs

Componente Google Maps para Flex 3

Eu só tinha anunciado essa notícia no Blog em inglês. E cometi o erro de não publicar aqui também na versão Brasileira.

O Componente mapas do google para o Flex aka(GoogleFlexMaps). Eu até tinha publicado a tão recém e aguardada obra do Google para plataforma Flash Player, tornando assim usar seus serviços tão htmlzados.
Em fim, Vocês pode usar o componente que torna a sintaxe bem mais fácil, bem mais completa ao ponto de vista de desenvolvimento Flex.

1
2
3
4
5
6
7
8
< ?xml version="1.0" encoding="utf-8"?>
<mx :Application xmlns:google="com.igorcosta.*"  xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
    <google : GoogleFlexMap
      key="sua chave de desenvolvedor"
      width="100%" height="100%"/>
 
</mx>

E quanto aos desenvolvedores Flash? Eu também pensei neles e fiz uma alteração no componente .swc que pode aceitar dentro do Flash. Basta apenas usar uma instancia nova. Porém não garanto 100% perfeição em todos os recursos que o Google Maps funciona, para isso indico o SDK padrão do Flex.

Baixe aqui o .swc para seus projetos tanto em Flex quanto Flash.

Veja aqui a documentação do Componente* ( em ingles)

Caso você seja curioso ou quer o código fonte por simplesmente por gostar de fazer hacks,

Boa sorte em seus uso.

Actionscript/ AS 3.0/ Dicas

#3 Performance em AS3.0 [Funções em pacotes]

O que são funções em pacotes? São exatamente funções que são de ambito e uso em geral do pacote da classe sem estar preso ou associado a classe em questão.

Mais eu consigo isso usando static functions e métodos à partir da instancia de um objeto.

A diferença significativa é apenas no nível de acesso e na flexibilidade que isso pode me trazer. Por exemplo o SDK do Flex usa o pacote global do Flash Player que tem muito disso entre outras classes.

E qual é sintaxe disso?

Veja o exemplo abaixo:

1
2
3
4
5
6
7
package com.igorcosta.performancetips
 
{
		public function DividirPorDois(a:int):int {
			return a*.5;
		}
}

Uso da técnica:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package com.igorcosta.performancetips
{
	import com.igorcosta.performancetips.createSnapShot;
 
	public class Teste
	{
		public function Teste()
		{
 
			DividirPorDois(5);
		}
 
 
 
	}
}

Detalhe que esse tipo de técnica é usada dentro de outras classes, caso você tente usar no MXML principal você não consegue. Como também se preocupar em não usar o this para esses tipos de implementações, tente torna-los o mais genérico possível.

Fonte: http://www.jibbering.com/faq/faq_notes/closures.html
http://www.ericfeminella.com/blog/2008/05/06/package-level-function-closures-in-actionscript/

AS 3.0/ Dicas

#2 Performance em AS3.0 [Operadores matemáticos]

Continuando a série Performance, mais um tip para você trabalhar bem com AS3.0 independente se seja Flex ou Flash, muitos dos tips vai te ajudar em um dos campos.

Qual o melhor dividir ou multiplicar?

No Flex/Flash é melhor multiplicar do que dividir.

Um caso prático de teste de performance que você pode fazer é o seguinte mostrado no código abaixo.

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
< ?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 flash.utils.getTimer;
 
		  public var time:Number = getTimer();
 
			public function init():void {
				rodarDivisao();
				rodarMultiplicacao();
			}
		  public function rodarDivisao():void {
		    time = getTimer();
		    var i:int;
		   for (;i&lt;10;i++) {
		        var test:int = i/2;
		       }
		      abcDump.text = "teste de divisao" +(getTimer()-time).toString()+ "n" ;
		      trace(getTimer()-time);
		   }
		   public function rodarMultiplicacao():void {
		      time = getTimer();
		      var i:int;
		      for (;i&lt;10; i++) {
		          var teste:Number = i*.5;
		      }
		       abcDump.text = "teste multiplicacao: "+ (getTimer()-time).toString();
		       trace(getTimer()-time);
			}
 
		]]>
	</mx>
 
	<mx :TextArea id="abcDump" width="100" height="100"/>

Ao invés de simplesmente eu pegar um N/2 é mais rápido multiplicar para o Flash Player por 0.5. Claro que tem especificas mudanças que é melhor usar Number para somar ao invés de multiplicar.

Exemplo disso é a seguinte situação

1
2
3
4
5
6
7
8
 
 public function calcular():void {
   var _n:int = 2+2 ;
trace(_n) // mais rápido somar 4
 
   var _n2:int = 2 * 1.5
   trace (_n2) // resultado 3 é mais rápido multiplicar ao invés de somar 2+1;
}

Tem algumas situações que fica meio que confuso, portanto acredito eu que a melhor forma de você fazer esse tipo de teste é usando a classe Timer e ver em qual sentido você ganhou em performance.