Archive

Posts Tagged ‘actionscript 3’

White paper optimisation des développements ActionScript 3

mars 1st, 2010

En faisant ce matin le tour des mes blogs préférés, j’ai découvert sur le blog de Michaël Chaize que Thibault Imbert avait rédigé un white paper sur les optimisations des développements ActionScript 3 pour mobile.

Travaillant sur de plus en plus de projet en flex (et par conséquent en ActionScript 3) j’ai entamé la lecture de ce document disponible à l’adresse suivante (une version pdf existe aussi) :

http://help.adobe.com/en_US/as3/mobile/index.html

Premier constat, c’est vraiment très intéressant et ce n’est pas dédié uniquement aux développeurs Flash sur plateforme mobile. Toutes les astuces et recettes de cuisine présentées sont utilisables quelque soit le device (ordinateur de bureau, smartphone, …) et quelque soit la machine virtuelle (flash player, AIR, …).

On y apprend comment économiser de la mémoire, optimiser les traitements CPU, optimiser les échanges réseau, …

Un exemple tout bête : lorsqu’on veut convertir un Number positif en entier la méthode Math.round() et plus performante que la méthode Math.floor().

Un document que tout développeur ActionScript devrait lire et connaitre.

Bonne lecture ;)

VN:F [1.0.8_357]
Rating: 5.0/5 (1 vote cast)

developpement, flex , ,

Introspection en Flex ou ActionScript, utilisation de l’API de reflection

février 27th, 2009

Il est parfois utile d’avoir à déterminer les caractéristiques d’un objet (méthodes, attributs) ou bien de vouloir instancier de manière dynamique un objet à partir d’un code générique. Pour cela on utilise un mécanisme appelé l’introspection ou Reflection.

Tous les languages de haut niveau proposent ce type de fonctionnement et Actionscript ne déroge pas à la règle. Il y a cependant certaines subtilités à connaitre afin de faire fonctionner l’introspection en ActionScript.

L’utilisation de l’introspection en ActionScript passe par l’utilisation des fonctions disponibles dans le package flash.utils. Nous allons étudier par la suite deux de ces fonctions en détails, celle permettant de déterminer les caractéristiques d’un objet et celle permettant de faire des instanciation dynamique.

Déterminer dynamiquement les caractéristiques d’un objet

Pour déterminer de manière dynamique les caractéristiques d’un objet, il faut utiliser la fonction describeType dont voici la signature :

function describeType(value:*):XML

Cette fonction prend en paramètre tout type d’objet (* signifiant type indéfini) et retourne un XML décrivant la classe.

Instancier dynamiquement un objet

Pour intancier dynamiquement un objet il faut utiliser la méthode getDefinitionByName dont voici la signature :

getDefinitionByName(name:String):Object

Cette fonction retourne une référence de la classe (un pointeur) définie par la chaine de caractère passée en paramètre (le paramètre name).

Prenons tout de suite un exemple. Si on veut instancier de manière dynamique un objet Flex Button le code sera le suivant :

import mx.controls.*;
try{
var myClass:Class = getDefinitionByClassName(”mx.controls.Button”);
}catch(error:Error){
trace(error.message);
}
var myObject:* = new myClass();

Avec ce code on retrouve dans la variable myObject une instance de la classe Flex Button. Ce code compile parfaitement mais malheureusement à ne fonctionne pas à l’execution et générer l’erreur 1065 (variable n’est pas définie). En effet dans ce code, le moteur flash n’embarque à aucun moment la définition de la classe Button car il n’existe aucune variable faisant référence à la classe Button. Pour que le code fonctionne il faut donc créer une variable “bidon” faisant référence à la classe Button pour que le moteur flash l’embarque.
Le code devient donc :

import mx.controls.*;
try{
// hack pour permettre à l’introspection de fonctionner
var buttonBidon:Button;
var myClass:Class = getDefinitionByClassName(”mx.controls.Button”);
}catch(error:Error){
trace(error.message);
}
var myObject:* = new myClass();

Avec l’ajout de cette variable le code fonctionne parfaitement et la variable myObject devient utilisable.

En conclusion, l’introspection est parfaitement fonctionnelle et utilisable en ActionScript. Elle nécessite cependant quelques astuces indispensable.

VN:F [1.0.8_357]
Rating: 3.7/5 (3 votes cast)

developpement, flex ,

A la découverte de la librairie as3corelib pour Actionscript 3

février 23rd, 2009

Je vous ai déjà parlé de cette librairie dans l’article “Utiliser le cryptage MD5 en Actionscript 3” mais j’ai voulu approfondir la présentation de cette bibliothèque et de ses fonctionnalités.

Cette librairie téléchargeable à l’adresse http://code.google.com/p/as3corelib/downloads/list propose un ensemble de classes permettant d’étendre les fonctionnalités du langage actionscript 3 utilisé dans Flash, Flex et Adobe AIR.

Vous trouverez dans la suite de cet article la présentation de chaque package.

Package com.adobe.air.logging

Ce package fournit une unique classe FileTarget permettant de stocker dans un fichier sur le système local de l’utilisateur les logs applicatifs. Attention cette classe n’est utilisable qu’avec Adobe AIR.

Package com.adobe.crypto

Ce package fournit un ensemble de classes qui implémentent les algorithmes de cryptage usuels tels que HMAC, MD5, SHA1, SHA224, SHA256

Package com.adobe.fileformats.vcard

Ce package fournit un ensemble de classes qui permettent d’implémenter le système de données vCard en actionscript 3.
Les classes Address, Email, Phone et VCard permettent de représenter en objets actionscript 3 le système vCard.
La classe VCardParser permet de construire un objet VCard à partir de la version sérialisée d’une carte de visite.

Package com.adobe.images

Ce package fournit un ensemble de classes qui permettent d’encoder une image en Jpeg ou PNG à partir d’une instance de l’objet actionscript BitmapData.

Package com.adobe.net

Ce package fournit un ensemble de classes qui étendent les fonctionnalités natives d’interaction réseau de l’actionscript 3.

Package com.adobe.net.proxies

Ce package fournit une unique classe RFC2817Socket qui permet d’ouvrir une connection via un socket en passant via un proxy HTTP en accord avec la recommandation RFC 2817.

Packages com.adobe.protocols.dict, com.adobe.protocols.dict.events, com.adobe.protocols.dict.util

Ces packages fournissent un ensemble de classe afin d’implémenter le protocole DICT du côté client. DICT est un protocole de communication utilisé pour ‘implémenter les fonctions de dictionnaire.
Ce procotole a été créé par le “DICT Development Group”.

Ces classes permettent donc de se connecter à un serveur DICT, de l’interroger et de traiter les résultats.

Vous trouverez plus d’information sur http://www.dict.org.

Package com.adobe.serialization.json

Ce package fournit tout un ensemble de classes pour traiter les structures de données au format JSON. Il est ainsi possible d’encoder ou de décoder des chaines au format JSON et d’extraire les données stockées dans ces chaines.

Package com.adobe.utils

Ce package fournit un ensemble de classes qui présentent des méthodes statiques pour manipuler les tableaux, les dates, les nombres entiers, les chaines de caractères, les documents XML, …
La classe ArrayUtil par exemple permet de comparer deux tableaux actionscript (méthode arraysAreEqual), ou bien encore de déterminer si un tableau contient une certaine valeur (méthode arrayContainsValue).

Voila un peu plus en détails cette librairie que je trouve presque indispensable pour les développeurs actionscript.

VN:F [1.0.8_357]
Rating: 5.0/5 (2 votes cast)

flex , ,

Utiliser le cryptage MD5 en Actionscript 3

février 12th, 2009

Je travaille actuellement sur une application web dont le front est développé en flex. Ce client flex communique avec le serveur en postant les données à traiter vers du code PHP.

Dans ce genre de communication, j’aime bien poster un checksum en supplément des données à traiter afin de valider que la requête est bien issue du client flex et pas d’un hacker qui appelle le code en direct.

Le principe est simple. L’application flex calcule le checksum à partir des données à traiter et encode le tout en MD5. Du côté PHP on applique le même calcul et on compare la chaine calculée au checksum reçu. Si ils ont égaux on considère que la requête provient bien du flex.

Seul problème, le language Actionscript ne permet pas en standard d’encrypter une chaine en MD5 comme c’est par exemple le cas en PHP.

Heureusement, une implémentation open source existe. Il s’agit de la libriarie as3corelib disponible sur google code.

Pour utiliser cette bibliothèque, il suffit de télécharger le fichier zip, de le décompresser et de copier le contenu du répertoire “src” à la racine de votre projet flex.

Ensuite, dans votre code actionscript, il suffit de procéder comme suit :

import com.adobe.crypto.MD5;
var hash:String = MD5.hash(”test”);

Dans la variable hash, vous trouverez le résultat de l’encodage en MD5 de la chaine “test”.

VN:F [1.0.8_357]
Rating: 4.6/5 (8 votes cast)

developpement, flex , , ,