AIR 1.0/ Apollo

Minha primeira experiência com o Adobe AIR

Semana passada eu tive minha primeira experiência com o Adobe AIR, eu decidir só postar hoje por que foi onde arranjei tempo suficiente para escrever com mais calma antes que perca o vôo.

Para os que me conhecem de perto eu não gosto e nem dou muita importância ao AIR, enquanto ele não tiver o que preciso que é parcialmente:

– Comunicação com DLL
– Acesso a ODBC
– Acesso à registro da Máquena(win)

Quando ele tiver isso eu volto à postar coisas legais que nele podem ser feitas, mais por produção eu continuo usando o ZINC, que ai sim, sendo franco funciona que é uma beleza para o que “Professional” usam no dia-a-dia.

Mais em fim, não tou aqui para falar mal do AIR mais sim falar da minha primeira experiência com a tecnologia.

Primeiro passo eu instalei o Run-time e depois criei meu primeiro projeto usando o Flex Builder 3 beta 2 para o que precisava. Então vi que por padrão o AIR tem um componente baseado no webkit que renderiza páginas em HTML com suporte ao tag(embed), o que para eu é ótimo. Em fim, comecei a testar e percebi das seguintes limitações.

O componente HTML não aceita ser adicionado em viewStack, então para criar ou você coloca em um Container(Panel, Canvas,HBox,VBox,…,etc), ou você está em apuros por que não vai funcionar.

Sobre o Run-time, ele tem um esquema legal, cria e atualiza sozinho a parte de instalador com acesso ao root Package do Windows para instalar o programa, porém quando tentei executar o tal do locale em jp_JP ele não aceita, fica meio que uma mistura da torre de Babel, inglês e Japonês unidos.

Resumidamente foi isso que aconteceu com a minha primeira experiência com o AIR, já fiz alguns testes hoje por 30 minutos no Drag,Drop de arquevos e pode ser feita alguma coisa legal com esse tipo de recurso.

O resultado de 4 horas de uso do AIR deu-se nisso, no código fonte abaixo, que é um Navegador com Abas, igualzinho no Firefox. Eu tentei usar um leitor de RSS, mais o tempo foi meu rival.
O nome do experimento é Adobe AIR Navigator, o código está logo 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
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
< ?xml version="1.0" encoding="utf-8"?>
<mx :WindowedApplication creationComplete="init()" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="1092" height="540" xmlns:code="http://code.google.com/p/flexlib/">
 
 
	</mx><mx :Script>
		< ![CDATA[
			import mx.core.IFlexDisplayObject;
			import mx.events.CloseEvent;
			import mx.managers.PopUpManager;
			import views.RSSViewer;
			import mx.collections.ArrayCollection;
 
			public var protocol:String = "http://";
			public var protocolRSS:String = "feed://";
			public var queryGoogle:String = "http://www.google.com/search?hl=en&q=";
			[Bindable]
			public var collectionLocations:ArrayCollection;
			public var objLocation:Object;
 
			// adding new view, added as bindable to enable change from input checkfields.
			[Bindable]public var rssView:RSSViewer = new RSSViewer();
 
 
			private function init():void
			{
				collectionLocations = new ArrayCollection();
				// add listeners to the button
				rssButton.addEventListener(MouseEvent.CLICK,createAndViewRSS);
 
			}
			public function createAndNavigate():void
			{
					objLocation = new Object();
					objLocation.url = protocol + adress.text;
					objLocation.query = queryGoogle + querySearch.text;
					collectionLocations.addItem(objLocation);
 
			}
			public function navigate():void
			{
				navigatorContainer.location = objLocation.url;
			}
			public function navigateIntoItem():void
			{
				navigatorContainer.location = collectionLocations.getItemAt(tabs.selectedIndex).url.toString();
			}
			private function searchQuery():void
			{
				navigatorContainer.location = queryGoogle +querySearch.text;
 
			}
 
			// creating the rss view
 
			public function createAndViewRSS(event:Event):void
			{
				PopUpManager.addPopUp(rssView,this,false);
				PopUpManager.centerPopUp(rssView);
				rssView.addEventListener(CloseEvent.CLOSE,closeIt);
			}
			private function closeIt(event:CloseEvent):void
			{
				PopUpManager.removePopUp(event.currentTarget as IFlexDisplayObject);
			}
		]]>
	</mx>
	<mx :VBox width="100%" height="100%">
 
	</mx><mx :ApplicationControlBar x="0" y="0" width="100%">
		</mx><mx :VBox width="100%" height="100%" verticalAlign="middle">
			</mx><mx :HBox width="100%">
			<mx :Label text="Adobe Air Navigator - BETA" fontWeight="bold"/>
				<mx :Spacer width="100%"/>
				<mx :Label text="{'Número de abas:'+collectionLocations.length.toString()+' '+'aberta(s)'}" id="info"/>
			</mx>
			<mx :HBox width="100%" verticalAlign="middle">
				<mx :Button visible="false" id="rssButton" label="RSS"/>
				<mx :Label text="Endereço:"/>
				<mx :TextInput focusIn="adress.selectionEndIndex" enter="createAndNavigate()" id="adress" width="100%"/>
				<mx :Button label="Ir!" click="createAndNavigate()"/>
				<mx :Label text="Pesquensar :"/>
				<mx :TextInput enter="searchQuery()" focusIn="querySearch.text =''" text="Google!" id="querySearch"/>
				<mx :Button click="searchQuery()" label="OK"/>
			</mx>
 
 
		<mx :VBox width="100%" height="100%" verticalGap="2">
 
	<code :SuperTabBar  labelField="url" itemClick="navigateIntoItem()" childAdd="navigate()" id="tabs" dataProvider="{collectionLocations}"/>
				</mx><mx :HBox id="InternalViews" width="100%" height="100%"  y="28">
							<mx :HTML id="navigatorContainer" width="100%" height="100%"/>
				</mx>
 
			<mx :HBox width="100%">
					<mx :Spacer width="100%"/>
					<mx :Label fontSize="9" text="v 1.0 - by Igor Costa"/>
			</mx>

Espero caro leitor que você goste do AIR e começe a fazê-lo funcionar. O código fonte é gratuito, pode ser usado em seu aplicativo com tato que mencione a origem. O resto é por conta de vocês.

Actionscript/ Apollo/ AS 3.0/ Flex/ Notícias

MySQL Driver para aplicações Apollo

Para quem está fazendo aplicações em Apollo e quer ter a vantagem de se conectar diretamente ao banco de dados MySQL é uma ótima notícia, mais tenha cuidado, não tente por hipótese alguma usar essa extensão para aplicações Web.

Por que não usar?

Uma vez que nessa biblioteca você vai precisar setar seu usuário, senha e endereço do banco, fica facilmente possível conseguir todas essas informações fazendo um sniffer mesmo tendo uma pequena proteção como essa biblioteca tem que o “Scrambler” que é de prache para quem programa em PHP, é facil também ter um sniffer para copiar essas informações.

Para quem quer distribuir a aplicação e ser executada localmente sim, já que o propósito do Apollo é tornar qualquer aplicação RIA em uma aplicação desktop.

Como usar essa extensão?

Primeiramente faça o download aqui.

Depois usando o Flex Builder com o plug-in do Apollo instalado, crie um novo Apollo Project.

Com o projeto Apollo criado, vá no menu Project > Properties ; Selecione ao lado esquerdo, Apollo Build Path e na aba “Library Path” adicione o arquevo que você fez o download .swc apontando para seu projeto atual.

Uma vez feito isso, você vai ter a possibilidade de usar todas as bibliotecas do pequeno framework para conectar ao banco de dados local do seu arquevo de aplicação Apollo.

Defina um novo xmlns para essa biblioteca importada, caso você não defina o Flex Builder automaticamente adiciona uma como ns1. Veja um exemplo de como definir a minha.

1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<mx:ApolloApplication
	 xmlns:apolloSQL="com.maclema.mysql.controls.*"
	 xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
 
</mx:ApolloApplication>

Criado isso, façamos agora a conexão dessa aplicação usando o construtor, responder, resultado e erro de conexão, ficando assim.

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
 
<?xml version="1.0" encoding="utf-8"?>
<mx:ApolloApplication
	 xmlns:apolloSQL="com.maclema.mysql.controls.*"
	 xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 
<mx:Script>
	<![CDATA[
 
		import com.maclema.mysql.events.SQLErrorEvent;
		import mx.rpc.events.FaultEvent;
		import com.maclema.mysql.events.ResponseEvent;
		import com.maclema.mysql.crypto.PlainTextScrambler;
 
		private function chamarBanco(db:String):void
		{
			minhaConexao.send(db);
		}
		private function ResultadoOK(event:ResponseEvent):void
		{
 
		}
		private function falhouConexao(event:SQLErrorEvent):void
		{
 
		}
 
	]]>
</mx:Script>
<apolloSQL:MysqlService id="minhaConexao"
	 host="localhost"
	 port="3306"
	 user="root"
	 scrambler="{new PlainTextScrambler('')}"
	 database="cdcol"
	 response="ResultadoOK(event)"
	 error="falhouConexao(event)"/>
 
 
</mx:ApolloApplication>

Um exemplo funcional você pode baixar direto do site do Autor. Clique aqui para baixar.

A documentação dessas classes você encontra aqui.

Lembrem-se que isso pode ser usado para aplicações tanto Flex quanto Apollo, porém o mais aconselhável em aspectos de segurança é mais ideal usar em aplicação criadas para desktop que é o caso do Apollo.

Adobe CS3.0/ Apollo/ Flash Player/ Flex/ SilverLight

SilverLight ou Flash Player?

Está ficando difícil escrever com freqüência para o blog, mais na última semana a Microsoft liberou uma bomba bem guardada a sete chaves que com toda certeza deixou e ainda está deixando muito desenvolvedor RIA, acostumado com Flex, Flash, Actionscript3, com um pé atrás quando se trata de Microsoft.

Vou tentar ser o mais cauteloso e opinar para o que eu acho desse pronunciamento da Microsoft em entrar de cara e com forte investimento ( estima-se que é $100mi ), para a nova era de aplicações Web, Rich Client Application.
Após o lançamento li tudo quanto foi texto para saber quais as novidades e o porquê da Microsoft entrar no mercado RIA e oferecer para seus desenvolvedores uma forma competitiva de revalidar seus concorrentes.
Silverlight e Adobe Flash Player são totalmente diferentes em comparação a novas funções e compatibilidade.

Considere o SilverLight um novo plug-in como o Flash Player mais com capacidade de um aplicativo feito em Apollo ou Zinc rodando em seu navegador.

No site do Silverlight a Microsoft promete muita coisa embora ainda seja alpha e inclui uma página “why SilverLight?”, para esclarecer o por que Silverlight vai ser bom para os clientes.
Uma coisa que pode ser considerada e que não me deixa contente é que SilverLight não faz stream, resumindo, para que você consiga ver o conteúdo feito em Silverlight você precisa esperar que a aplicação que você quer ver precise ser baixada completamente para máquena do usuário, passada para o Javascript runtime e depois executar, isso vai levar um tempinho, exemplo disso é o site deles mesmo, baixei o plug-in e demorou 1min e 34 segundos para executar apenas uma simples imagem.
SilverLight tem uma coisa que pode ser convocadamente um avanço em relação ao Flash Player, ele tem back-end próprio para quem é desenvolvedor .net e Microsoft tem mais expertise em C#, C++, J# etc em aplicações desktop do que Adobe. Porém não se limita só a isso, eles agora liberaram acesso para seu Silverlight acessar o back-end de terceiros, que resumi-se à o quê? Que qualquer PHP, Java ou até mesmo ColdFusion possa trabalhar em conjunto com criações para o SilverLight.

Acho que essa função acima de “não importar qual seja o back-end”, isso eles já imitaram do Flex. Embora todos esses pontos flutuantes que faz você se preocupar, relaxem, SilverLight ainda não tem adoção de 98% do mercado, Microsoft tem muito poder em relação a recursos ilimitados, mais ela deveria se preocupar em ter um produto com maior qualidade para oferecer a seus desenvolvedores coisas que a concorrência não tem, mais que até agora não me influenciou muito, não sei por que falo do lado Flex que uso em meu dia, mais sou celetista e digo se a Adobe abandonar o Flex e começar a vender a patente por U$1.00 eu paro e mudo para o SilverLight.

Não só isso, acho que a experiência que tive nos últimos 7 anos com Flash, não me faz voltar atrás para o que já conquestei e para o que ainda quero conquestar.

Estou super satisfeito com o uso do Adobe Flash Player e com o que já desenvolvo, só espero que o Apollo da Adobe seja maduro suficiente para fazer o que o .net já faz, em um curto espaço de 2 anos.

Saiba mais sobre o SilverLight no site oficial