EKAMELEON - DevBlog ActionScript & ECMAScript

Aller au contenu | Aller au menu | Aller à la recherche

vendredi, août 22 2008

Flash CS3 et variables locales définies dans une fonction sur la timeline.

Je me permets d'ouvrir un petit billet "détente" entre la partie B et C de mon article sur le Design Pattern MVC pour un petit problème que j'ai découvert avec surprise cet après midi pendant une phase de test tout à fait anodine dans Flash CS3 :)

En fait le problème est simple... mais la réponse à ce problème ? Pour le moment je ne l'ai pas encore trouvée :)

Je vais commencer par vous exposer un petit script qu'il faut absolument poser sur la scène d'une nouvelle animation dans FLASH CS3 en précisant bien entendu une publication en FP9 et AS3 :

trace(" --- ") ;
 
var i:uint ;
trace("1 : " + i) ; // 0
 
var n:Number ;
trace("1 : " + n) ; // NaN
 
var s:String ;
trace("1 : " + s) ; // null
 
trace(" --- ") ;
 
var test:Function = function():void
{
    var i:uint ;
    trace("2 : " + i) ; // undefined
 
    var n:Number ;
    trace("2 : " + n) ; // undefined
 
    var s:String ;
    trace("2 : " + s) ; // undefined
 
}
 
test() ;

Nous pouvons maintenant lancer la compilation de ce petit test pour obtenir dans le panneau de sortie un résultat "très étonnant" :

1 : 0
1 : NaN
1 : null
 --- 
2 : undefined
2 : undefined
2 : undefined

Alors je pense que pour les plus habitués des réactions du code AS3 le problème saute aux yeux... pour les autres je vais rentrer un peu dans le détail :)

Lire la suite...

jeudi, août 14 2008

[VEGAS] B - Les définitions d'objets (Partie 5/5)

Voici la 5ème et dernière partie de ce long chapitre basé sur les définitions d'objet dans un conteneur IoC. Ce chapitre se concentre sur une particularité du framework basé sur l'implémentation d'outils d'évaluations permettant de filtrer et de transformer selon les cas les objets générés par la fabrique.

Pour ceux qui découvrent dans cet article le design pattern d'Inversion de contrôle avec VEGAS et qui n'ont pas eu encore le temps de consulter les articles précédents, voici une liste rapide des derniers articles sur ce blog que je vous conseille vivement de lire les articles suivant avant de passer à la suite :

Comme toujours je vous rappelle rapidement les liens importants pour installer VEGAS et poser des questions à propos des concepts définis dans mes articles :

Pour ceux qui débarquent dans l'aventure, et qui ne savent pas encore ce que représente VEGAS, comment l'installer etc.. Je vous propose d'aller faire un tour rapide sur le Google Code du projet :

Pour toutes vos questions sur VEGAS et ses extensions n'hésitez pas à vous inscrire sur le Google Groups du projet :

Remarque : En définissant convenablement votre abonnement sur le Google Groups vous pourrez recevoir régulièrement des mails à chaque fois qu'un membre intervient sur celui-ci, très pratique pour suivre les conversations sous forme de mailing-list.

Enfin pour suivre le projet au mieux je peux vous proposer de consulter la page officielle de VEGAS sur Ohloh qui sert un peu de point central pour tous les projets opensource sur lesquels je travaille actuellement :

Il est tant de vous attaquer à la dernière partie de ce chapitre qui je l'espère vous apportera tous les éléments pour vous lancer dans l'utilisation d'une fabrique IoC dans vos prochains projets ActionScript :)

Lire la suite...

vendredi, août 8 2008

[VEGAS] B - Les définitions d'objets (Partie 4/5)

Voici la 4ème de notre second chapitre consacré aux différentes stratégies utilisées par la fabrique pour créer un objet avec une définition d'objet.

Pour ceux qui découvrent dans cet article le monde merveilleux du design pattern d'Inversion de contrôle avec VEGAS et qui n'ont pas eu encore le temps de consulter les articles précédents, voici une liste rapide des derniers articles sur ce blog que je vous conseille vivement de lire les articles suivant avant de passer à la suite :

Comme toujours je vous rappelle rapidement les liens importants pour installer VEGAS et poser des questions à propos des concepts définis dans mes articles :

Pour ceux qui débarquent dans l'aventure, et qui ne savent pas encore ce que représente VEGAS, comment l'installer etc.. Je vous propose d'aller faire un tour rapide sur le Google Code du projet :

Pour toutes vos questions sur VEGAS et ses extensions n'hésitez pas à vous inscrire sur le Google Groups du projet :

Remarque : En définissant convenablement votre abonnement sur le Google Groups vous pourrez recevoir régulièrement des mails à chaque fois qu'un membre intervient sur celui-ci, très pratique pour suivre les conversations sous forme de mailing-list.

Enfin pour suivre le projet au mieux je peux vous proposer de consulter la page officielle de VEGAS sur Ohloh qui sert un peu de point central pour tous les projets opensource sur lesquels je travaille actuellement :

Vous pouvez à présent lire ce nouvel article tranquillement :)

Lire la suite...

[VEGAS] B - Les définitions d'objets (Partie 3/5)

Cette 3ème partie du second chapitre consacré au Design Pattern IoC dans VEGAS et sur le Cycle de vie d'un objet configuré avec une définition d'objet.

Cet article sera un peu plus court que les précédents mais également un peu plus technique car il met en avant certains attributs spéciaux définis dans les définitions d'objets.

Ces attributs influences l'objet généré par la fabrique durant son initialisation mais aussi pendant les moments clés de son cycle de vie dans l'application.

Pour ceux qui découvrent dans cet article le monde merveilleux du design pattern d'Inversion de contrôle avec VEGAS et qui n'ont pas eu encore le temps de consulter les articles précédents, voici une liste rapide des derniers articles sur ce blog que je vous conseille vivement de lire les articles suivant avant de passer à la suite :

Comme toujours je vous rappele rapidement les liens importants pour installer VEGAS et poser des questions à propos des concepts définis dans mes articles :

Pour ceux qui débarquent dans l'aventure, et qui ne savent pas encore ce que représente VEGAS, comment l'installer etc.. Je vous propose d'aller faire un tour rapide sur le Google Code du projet :

Pour toutes vos questions sur VEGAS et ses extensions n'hésitez pas à vous inscrire sur le Google Groups du projet :

Remarque : En définissant convenablement votre abonnement sur le Google Groups vous pourrez recevoir régulièrement des mails à chaque fois qu'un membre intervient sur celui-ci, très pratique pour suivre les conversations sous forme de mailing-list.

Enfin pour suivre le projet au mieux je peux vous proposer de consulter la page officielle de VEGAS sur Ohloh qui sert un peu de point central pour tous les projets opensource sur lesquels je travaille actuellement :

Vous pouvez maintenant reprendre la lecture de ce chapitre ! ;)

Lire la suite...

samedi, août 2 2008

[VEGAS] B - Les définitions d'objets (Partie 2/5)

Ce nouveau article va se concentrer tout particulièrement sur les attributs principaux d'une définition d'objet dans un conteneur IoC basé sur le moteur implémenté dans VEGAS.

Pour ceux qui découvrent dans cet article le monde merveilleux du design pattern d'Inversion de contrôle avec VEGAS et qui n'ont pas eu encore le temps de consulter les articles précédents, voici une liste rapide des derniers articles sur ce blog que je vous conseille vivement de lire avant de passer à la suite :

Comme toujours je vous rappele rapidement les liens importants pour installer VEGAS et poser des questions à propos des concepts définis dans mes articles :

Pour ceux qui débarquent dans l'aventure, et qui ne savent pas encore ce que représente VEGAS, comment l'installer etc.. Je vous propose d'aller faire un tour rapide sur le Google Code du projet :

Pour toutes vos questions sur VEGAS et ses extensions n'hésitez pas à vous inscrire sur le Google Groups du projet :

Remarque : En définissant convenablement votre abonnement sur le Google Groups vous pourrez recevoir régulièrement des mails à chaque fois qu'un membre intervient sur celui-ci, très pratique pour suivre les conversations sous forme de mailing-list.

Enfin pour suivre le projet au mieux je peux vous proposer de consulter la page officielle de VEGAS sur Ohloh qui sert un peu de point central pour tous les projets opensource sur lesquels je travaille actuellement :

Vous pouvez maintenant reprendre votre lecture ! ;)

Lire la suite...

vendredi, août 1 2008

[VEGAS] B - Les définitions d'objets (Introduction - 1/5)

Voici un nouvel article qui servira d'introduction au second chapitre (divisé en 5 parties) qui essaiera de dévoiler une part importante des secrets que renferme l'implémentation du moteur d'IoC de VEGAS.

Dans ce chapitre, je vais vous parler tout particulièrement des définitions d'objets et surtout de tous les attributs qui vont permettre de les configurer. Une bonne maitrise des définitions d'objets permet d'aller très loin dans la conception d'une RIA basée sur un moteur IoC.

Pour ceux qui découvrent le monde merveilleux du design pattern d'Inversion de contrôle avec VEGAS et pour les autres aussi, je vous invite à lire attentivement (si ce n'est pas encore fait) le premier chapitre de cet article sur le design pattern IoC :

Je me permets de vous rappeler tout de même les liens importants pour installer VEGAS et poser des questions sur le sujet :

Pour ceux qui débarquent dans l'aventure, et qui ne savent pas encore ce que représente VEGAS, comment l'installer etc.. Je vous propose d'aller faire un tour rapide sur le Google Code du projet :

Pour toutes vos questions sur VEGAS et ses extensions n'hésitez pas à vous inscrire sur le Google Groups du projet :

Enfin pour suivre le projet au mieux je peux vous proposer de consulter la page officielle de VEGAS sur Ohloh :

Nous pouvons maintenant commencer l'étude des définitions d'objets dans un conteneur IoC.

Bonne lecture à tous et n'hésitez pas à me poser des questions (sur le Google Groups) ou à me donner vos impressions (ici en commentaire sur le blog) :)

Lire la suite...

mardi, juillet 22 2008

[VEGAS] A - Design Pattern d'inversion de contrôle - Généralités

IoC ? Injection de dépendance ? Conteneur Léger ... depuis quelques temps maintenant nous entendons parler de ce Design Pattern très puissant qui révolutionne la construction des applications orientées objets. Ce Design Pattern est vraiment pour moi indispensable une fois bien maitrisé et permet d'aller loin, très loin !

Depuis plusieurs mois maintenant je me suis lancé dans la construction de ma propre implémentation de ce pattern en m'inspirant d'une part de ce qu'il se fait de mieux à l'heure actuelle dans ce domaine ( Spring, Parsley, etc..) mais surtout des problèmes et besoins que je peux rencontrer chaque jour dans mes productions. Je remercie d'ailleurs tous ceux qui ont pris le temps de me supporter et de prendre le temps de poser un oeil sur mon code et au final qui m'ont aidé à aller au bout d'une version 1 finale (ou presque.. je finiolle :D ) de VEGAS et ses extensions.

La version AS3 de VEGAS est composée de plusieurs extensions très solides et spécialisées. Mais AndromedAS avec ses outils d'IoC, etc. est devenu le noyau dure du framework pour créer avec facilité une RIA moderne et fonctionnelle aussi bien dans Flash, Flex, ou dans une application AIR.

Je commence donc ici par un premier chapitre de mon énorme article basé sur le Design Pattern IoC dans VEGAS qui va se découper en plusieurs parties ici sur ce blog et qui finira au bout du compte en livre opensource disponible très prochainement sur les pages officielles du projet et aussi sur Google Documents. J'ai encore pas mal de fonctionnalités à documenter car la bibliothèque IoC s'est énormément étoffée ces derniers mois (pour la bonne cause).

J'espère que cette introduction, vous permettra de vous faire une idée clair et précise des bases du pattern IoC mais surtout de l'orientation que j'ai pu prendre pour l'implémenter. Cet article reste ouvert à tous commentaires et s'accompagnera très bientôt d'une seconde partie qui précisera le DOM très complet des définitions d'objets utilisée par le conteneur léger IoC pour créer des objets dans une application.

Comme toujours, je suis toute personne pouvant m'aider à accélérer le processus de traduction de cet article en anglais.

Pour tout ceux qui sont pressés de savoir la suite, vous pouvez me contacter pour que je vous donne en attendant de la communiquer ouvertement sur ce blog, l'url des autres parties (en construction) de ce tutoriel assez imposant (80 pages pour le moment sur Google Documents)

A noter que vous trouverez les sources des exemples ci-dessous dans le repository SVN du projet :

Pour ceux qui débarquent dans l'aventure, et qui ne savent pas encore ce que représente VEGAS, comment l'installer etc.. Je vous propose d'aller faire un tour rapide sur le Google Code du projet :

Pour toutes vos questions sur VEGAS et ses extensions n'hésitez pas à vous inscrire sur le Google Groups :

Enfin pour suivre le projet au mieux je peux vous proposer de consulter la page officielle de VEGAS sur Ohloh :

Il est temps maintenant de démarrer cet article sur le Design Pattern d'IoC et je vous promets la suite de cet article d'ici peu de temps ;)

Lire la suite...

samedi, juin 28 2008

[AS3] Nombre maximum de récursions en AS3 dans Flash CS3

Voici un petit point que je n'avais pas encore eu le temps de regarder depuis que j'utilise Flash CS3 à propos du "nombre de récursions" dans Flash CS3 lorsque nous publions une animation avec les paramètres Flash Player 9 et ActionScript 3.

Ce n'est pas forcément un mystère pour tout le monde mais je me rends compte que malgré tout ce point n'est jamais vraiment traité.

En ActionScript il est impossible d'utiliser un algorithme basé sur une ou des fonctions récursives indéfiniment.

Pour rappel, une fonction récursive est une fonction qui s'appelle elle même.

Par exemple si l'on veut calculer très simplement le produit factoriel d'un nombre entier (multiplication des valeurs n-1 du nombre) nous pouvons écrire la fonction suivante :

var factoriel:Function = function( n:uint ):uint 
{
	if ( n <= 1 )
	{
		return 1 ;
	}
	else
	{
		return n * factoriel(n-1) ;
	}
}
 
trace( factoriel(10) ) ; // 3628800

La fonction précédente n'est pas la plus optimale (pas le but de cet article) mais elle illustre bien que la fonction "factoriel" s'appelle elle même plusieurs fois avant d'obtenir le bon résultat.

Il faut donc faire attention en utilisant une fonction récursive car si elle est mal définie il est possible "en principe" d'obtenir une boucle infinie qui pourrait faire planter l'application.

C'est pour cela que l'ActionScript (ou plus généralement les langages basés sur l'ECMAScript comme le Javascript) limitent leur nombre de récursions.

En AS2 et AS1 nous avions l'habitude de cette limite, avec un nombre maximum de récursion basé sur le nombre 255. Je vais reprendre l'exemple précédent mais en AS2 pour illustrer cette limite :

Lire la suite...

dimanche, juin 22 2008

[AS3] MovieClip.play() inactif au lancement d'une application.

J'ai beaucoup de travail en ce moment pour finaliser les outils permettant d'utiliser le design pattern d'Inversion de Contrôle avec VEGAS (mon framework opensource) et je suis en train d'écrire un gros article (50aines de pages !) sur le sujet qui arrivera d'ici peu sur ce blog et via une publication opensource basée sur des documents au format Google Documents ;)

En attendant, voici un petit article très simple pour vous parler d'un mini "problème" découvert par des amis à moi il y a quelques semaines. Je devrais parler d'un "changement de comportement" plutôt que d'un problème...

Voyons donc de plus prêt le comportement de la méthode MovieClip.play() en ActionScript 3.

Nature du problème

Pour tester et isoler le problème de la méthode MovieClip.play() en AS3, il suffit de suivre la méthodologie suivante :

1 - Ouvrir Flash CS3 et créer un nouveau document.

2 - Créer un MovieClip dans la bibliothèque du document ouvert et à l'intérieur créer une petite interpolation de forme ou de mouvement pour que le clip contienne une petite animation sur plusieurs images clés.

3 - Créer un calque de code dans le scénario (timeline) du clip et mettre un stop(); sur la première image clé du clip.

4 - Poser une occurrence du symbole sur la scène et lui donner un nom d'occurrence "mc" dans le panneau de propriété en ayant bien pris le temps de sélectionner le clip avant.

5 - Créer sur la scène principale un calque de code au dessus du calque qui contient l'occurrence et taper le code suivant :

mc.play() ;

Si nous essayons de compiler le swf (CTRL + ENTER) avec une publication au format AS1 ou AS2 (voir paramètre dans panneau des paramètres de publication du document), pas de problème l'animation du clip se lance sans problème.

Si par contre nous essayons de compiler avec un format AS3 avec une publication pour le FlashPlayer 9 alors le clip ne lance pas l'animation est reste figé sur sa première image clé.

Lire la suite...

dimanche, mai 11 2008

[VEGAS] [AS3] AndromedAS - le Design Pattern Visitor.

Introduction

Design Pattern Visitor en AS3 Voici la nouvelle version mise à jour de mon tutoriel sur le Design Pattern Visitor avec cette fois ci un exemple tout en AS3 optimisé et basé sur la toute dernière version de AndromedAS. Ce tutoriel est le premier d'une série de plusieurs autres qui vont illustrer tout doucement toutes les possibilités offertes par l'extension AndromedAS de VEGAS.

Pour ceux qui voudraient relire l'ancienne version de ce tutoriel je vous propose d'aller faire un tour : sur la page de la version AS2 du pattern Visitor

Ce tutoriel remonte à décembre 2006, le temps passe vite ! Depuis de l'eau a coulée sous les ponts et les implémentations du pattern Visitor ont changé de package et se trouvent maintenant dans le package andromeda.util.visitor et plus dans le package vegas.util.* .

A - Généralité

1 - Définition

Le Design Pattern Visitor permet simplement d'ajouter sur une classe ou instance des fonctionnalités non prévues au départ sans surcharger la structure de base de l'objet et en gardant si possible une certaine flexibilité et souplesse pour ajouter ou enlever rapidement d'autres fonctionnalités sans alourdir à nouveau l'implémentation définie au départ.

Je vous conseille de lire en complément de mon explication les articles à ce sujet sur Wikipedia qui vous apporteront peut être quelques explications supplémentaires sur le sujet.

Pour faire simple, le Design Pattern Visitor s'articule autour d'une classe qui pourra être "visitée" par d'autres classes via une méthode accept() (le nom de la fonction peut varier selon les implémentations du pattern). Cette méthode "accept" prend en paramètre un objet de type "visiteur" et va lancer automatiquement la méthode visit() du "visiteur". Ainsi l'objet visiteur pourra contrôler convenablement l'objet visité en récupérant simplement la référence de cet objet.

2 - Implémentation dans AndromedAS

Dans AndromedAS j'ai implémenté 2 interfaces très simples pour structurer ce Design Pattern. Il est bien entendu possible de juste s'inspirer de ces 2 interfaces pour réaliser d'autres conceptualisations selon des besoins précis. Mais dans mes travaux quotidiens ces 2 interfaces sont suffisantes.

Lire la suite...

samedi, avril 12 2008

[VEGAS] Localization in AS3 and AS2

Il est très important de pouvoir "localiser" (ou régionaliser) nos applications. Localiser une application permet de rendre dynamique son contenu (texte, sonore ou autres) en créant une interface utilisateur qui peut changer en fonction d'une langue en particulier. La localisation d'une application permet d'améliorer l'accessibilité pour différents utilisateurs et il est certain qu'avec toutes les difficultés que l'on peut avoir pour communiquer de façon général, il est tout de même sympathique de pouvoir le faire avec le plus grand nombre dans le monde entier.

Une bon moteur de localisation permet de changer à tout moment les traductions et éléments graphiques de l'application en fonction de données traduites dans plusieurs langues. Il est certain que le plus souvent la localisation d'un site passe par une page d'accueil simple qui permet de diriger l'utilisateur vers une version spécifique de l'application avec un contenu régionalisé. Pour ma part dans VEGAS j'ai préféré créer un moteur qui possède les caractéristiques suivantes :

  • Externalisation des traductions et documents.
  • Utilisation de fichiers ou données externes encodées en UTF8.
  • Moteur dynamique au "runtime". La localisation doit être totalement dynamique et doit intervenir après la compilation (plus léger et plus simple à maintenir)
  • API simplifiée permettant de centraliser les mises à jours de l'interface utilisateur via un mapping utilisant plusieurs stratégies selon les besoins.
  • Par défaut, utilisation du format de donnée eden (http://code.google.com/p/edenrr/) ou JSON (http://www.json.org) même si il est vrai que j'utilise très peu cette dernière notation. Malgré tout il est assez simple de créer un module de parsing basé sur une autre notation comme par exemple du XML.

Dans Flash et surtout dans le framework de base ActionScript nous trouvons la propriété flash.system.Capabilites.language qui permet à tout moment de renvoyer le code langue du système dans lequel l'application swf vient d'être lancée. L'ActionScript se base sur des noms des "codes langue" au format ISO 639-1, par exemple la propriété language aura pour valeur "fr" si le système par défaut est un système français.

Implémentation du moteur de localisation de VEGAS

Dans VEGAS le moteur de localisation se trouve dans le package andromeda.i18n en AS3 et reste pour le moment dans le package asgard.system en AS2.

Mise à jour (2008-08-02) : En AS3 le package asgard.system devient andromeda.i18n

1 - La classe andromeda.i18n.Lang

La première classe que nous allons étudier dans ce package est la classe andromeda.i18n.Lang qui permet d'énumérer les "codes langue" par défaut définis par la norme ISO 639-1 dans le FlashPlayer. Cette classe donne un outil simple pour valider dans vos applications les langues disponibles. Il est ainsi possible d'ajouter d'autres langues en cas de besoin dans la liste des langues par défaut du FlashPlayer mais bien entendu elle ne seront pas prises en compte automatiquement par la propriété System.capabilities.language(AS2) ou flash.system.Capabilities.language(AS3) du Flash Player.

Voici un exemple d'utilisation de cette classe :

Lire la suite...

dimanche, mars 23 2008

AS3 - Scope variables little difference between AS2 and AS3.

Voici un rapide petit tutoriel pour illustrer une petite différence (bug ?) entre la portée des variables en ActionScript 3 par rapport à la même portée des variables en AS2.

Je ne vais pas entrer ici dans un rappel complet sur l'utilisation du scope des variables en ECMAScript (JS ou AS) mais je me suis rendu compte ce soir d'un petit problème de portabilité entre un bout de code AS2 vers de l'AS3. Je me suis donc amusé avec un petit test pour isoler ce problème.

Exemple avec portée de variable simple en AS2.

var a:Number = 1 ;
 
var test:Function = function():Void
{
	trace("> first : " + a) ; // 1
	var a:Number = 2 ;
	trace("> last  : " + a) ; // 2
}
test() ;
 
// output
// > first : 1
// > last  : 2

Analysons un peu l'exemple au dessus avant de passer à l'exemple en AS3 ;)

Lire la suite...

vendredi, mars 14 2008

Use ASDoc with Google Prettify

Il n'y a pas de secret. Le code ne passe pas seulement par des interminables lignes de code mais surtout par d'interminables lignes de documentation (en général plus nombreuses). Un framework, une classe, un bout de code non documenté et c'est très rapidement l'anarchie.

Pour générer nos documentations en AS3 ou MXML, Adobe nous propose ASDoc une application en ligne de commande assez complexe mais qui a le mérite de générer une documentation HTML bien complète.

Je ne vais pas entrer dans mon article sur une explication super détaillée de toutes les options proposées par ASDoc ou encore sur la "meilleure manière" de générer sa documentation via une tache ANT ... Je préfère vous parler d'une fonctionnalité à mes yeux importante et pourtant non prévue dans ASDoc : la colorisation syntaxique du code contenu dans la documentation.

En effet, même si ASDoc propose via les balises code et listing une "solution" pour afficher une partie du texte contenu dans vos documentations avec un formatage "spécifique".. on peut pas dire que le résultat soit très explicite !

A côté de cela Google a sorti il y a un petit moment maintenant un petit module opensource écrit en JAVAScript qui permet de coloriser un code HTML efficacement via le script Google Code Prettify. L'intérêt de ce module réside dans le fait qu'il ne nécessite pas, comme GESHI (PHP) par exemple, d'un script serveur pour coloriser le code d'un texte HTML.

Google Code Prettify permet de coloriser un bon nombre de langages et fonctionne vraiment bien avec les langages basés sur une écriture C, Java, Python, Bash, SQL, HTML, XML, CSS et Javascript.

Pour faire simple Google Code Prettify permets de modifier dynamiquement dans une page HTML les balises pre et code possédant un attribut "class" avec la valeur "prettyprint" comme ceci :

<html>
 
    <header>
 
        <link href="prettify.css" type="text/css" rel="stylesheet" />
        <script type="text/javascript" src="prettify.js"></script>
 
    </header>
 
    <body onload="prettyPrint()">
 
    <p>
 
    <pre class=prettyprint>
    var s = "hello world" ;
 
    var sum = function( n1 , n2 )
    {
        return n1 + n2 ;
    }
 
    trace( 2 + 3 ) ;
    </pre>
 
    </p>
 
    <p>The previous script return <code class="prettyprint">5</p></p>
 
    </body>
 
</html>

Au final, nous avons d'un côté ASDoc un applicatif en ligne de commande qui permet de documenter nos classes via la notation JAVADOC et un texte au format HTML distribué officiellement par Adobe et de l'autre côté Google Code Prettify qui permet de formater un texte HTML si il contient des scripts. L'idée est de pouvoir utiliser les 2 pour créer nos documentations AS3 ;)

Lire la suite...

mercredi, février 20 2008

[FMIS3] BitmapData.draw() and Flash Player 9.0.115.0 - Security sandbox violation.

Généralité

Voici la suite des aventures concernant Flash Media Interactive Server 3 et l'utilisation de la méthode BitmapData.draw() pour capturer un flux vidéo et le transformer en image via le protocol RTMP et un serveur distant.

Je vous conseille, avant de lire la suite, de regarder la première partie de cette troublante saga : BitmapData.draw() and Video Capture - Security sandbox violation.

Nous avions vu que l'utilisation d'un serveur RTMP avec le FlashPlayer nécessité un hack pour capturer une image provenant d'un flux streaming distant. Hors avec FMS3 et surtout le nouveau Flash Player 9.0.115.0 il faut repartir de 0 et revoir complètement nos méthodes. Je savais que le nouveau FlashPlayer avant évolué au niveau de ses niveaux de sécurité mais je ne m'attendais pas à devoir "faire avec" avec les applications tournant sur FMS3 ...

Sécurité du FlashPlayer 9.0.115.0 et RTMP

Revenons donc à la nature de notre nouveau problème. Si l'on souhaite utiliser la méthode BitmapData.draw() avec FMS3 il va falloir se pencher sur deux nouvelles méthodes côté serveur de la classe Client Server Side ActionScript : Client.videoSampleAccess et Client.audioSampleAccess

En effet avec le FMS3 il n'est plus possible de passer au dessus de la sécurité du Flash Player sans affecter une permission au niveau du Client côté serveur. Dans Flash en testant rapidement l'exemple de mon premier article on tombe rapidement sur un message "Security sandbox violation".

Lire la suite...

dimanche, janvier 27 2008

[FMIS3] Flash Media Interactive Server 3 : AMF3 and Classmapping

Généralités

Voici mon premier feedback technique sur Flash Media Interactive Server 3.... Sérieux... pourquoi Adobe donne un nom aussi compliqué à son serveur ? A chaque fois que je suis obligé de parler de FMS3 j'ai l'impression de discuter de la dernière version de Street Fighter 2 Turbo X fatal mega super tropdur alpha combo lol Donc je décide de faire simple et d'utiliser le terme FMS3 dans la suite de mes articles... (fin de cette petite note sur la nomenclature de mes articles traitant de FMS3 :D)

Comme je l'ai déjà dit, les enjeux majeurs de cette nouvelle version de FMS reste une amélioration des performances, une amélioration de la qualité des vidéos en live streaming (full HD avec H264) et pour finir une baisse des prix des licences et une simplification de celles ci en proposant seulement 2 types de serveurs (oui quand je parle de simplification, je ne parle pas du nom des serveurs... cf début de ce message ;))

Reste que pour ma part, même si après l'annonce officielle de la sortie de FMS3 je n'avais que très peu d'espoirs dans les nouveautés au niveau du code côté serveur (pas d'AS3 ou d'ES4 côté serveur), j'espérais que Adobe mettrait un peu plus d'efforts dans l'évolution de la nouvelle version de FMS en faisant une petite mise à jour du moteur Javascript SSAS de FMS. J'avais de gros espoirs là dessus en prenant en compte l'arrivée de l'E4X en AS3 et de la disponibilité de l'E4X depuis la version 1.6 du Javascript. Surtout qu'en regardant Flash CS3 de plus prêt on se rend rapidement compte que le moteur JSFL est bien en version 1.6 !

Ainsi, pendant l'installation du serveur j'ai rapidement ouvert le PDF flashmediaserver_SSLR.pdf contenu dans le répertoire de documentation du serveur et tout de suite j'ai était "choqué" en lisant une documentation pratiquement similaire à la version que l'on peut trouver dans l'installation de FMS2 avec dès le début le joli paragraphe :

Server-Side ActionScript is Adobe’s name for JavaScript 1.5. Flash Media Interactive Server has an embedded Java-Script engine that compiles and executes server-side scripts. This Server-Side ActionScript Language Reference documents the Flash Media Interactive Server host environment classes and functions. You can also use core Java-Script classes, functions, statements, and operators. For more information, see the Core JavaScript 1.5 Reference at http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference. For more information about JavaScript, see “About JavaScript” in the Mozilla Developer Center at http://developer.mozilla.org/en/docs/About_JavaScript.

Bref... je veux bien que l'on ne passe pas tout de suite à une version Javascript 2 ou AS3/4 du SSAS mais là c'est vraiment n'importe quoi ! Il faut à mon avis très peu de temps pour changer le JS engine de FMS pour les développeurs d'Adobe et il ne faut pas oublier qu'à l'heure actuelle Mozilla est en train de diffuser les bases du Javascript 1.8... Politique commerciale ou tout simplement simple suffisance des développeurs d'Adobe. Pour ma part je me demande sérieusement si Adobe utilise sérieusement son serveur.

Je passerai rapidement sinon sur la couche "script" des composants FMS mis à jour dans le répertoire scriptlib de l'installation du serveur avec un code tout juste remis à jour au niveau de la licence en entête des fichiers .asc.

Au final, j'ai beau chercher et je ne vois que très peu de nouvelles méthodes dans la documentation du serveur et encore pire ! La nouvelle documentation ne donne aucune information sur la compatibilité des méthodes côté serveurs compatibles avec FMS2 ou FCS 1.5 :( Il faut maintenant que je me penche un peu plus sur la documentation du PLUG-IN DEVELOPER GUIDE mais pour le reste une simple relecture rapide suffira je pense.

Alors oui ! C'est génial que le prix de la licence baisse ! C'est génial que la qualité des vidéos et la sécurité soient meilleures ! C'est génial d'avoir une version plus stable et performante du serveur ( peut être car à chaque fois que Adobe nous dit que le serveur est stable je me retrouve avec des soucis avec mes clients ... ) ! Mais sérieusement il y a un manque réel de suvi sur les besoins des développeurs SSAS. On est limite dans un flou artistique depuis le début avec FMS qui favorise l'utilisation des composants de Adobe (vraiment médiocres pour le moment) et commercialement annonce bien la sortie prochaine des projets Cocomo et Pacifica.

AMF3 avec FMS3

J'en reviens maintenant au sujet de mon article, avec l'utilisation du protocol AMF3 avec FMS3 :)

Bonne nouvelle malgré tout ce que j'ai pu dire plus haut, FMS3_ apporte la possibilité d'utiliser des données transférées entre le serveur et les clients Flash via le protocol AMF3. Il est donc possible maintenant de diffuser des ByteArray et des instances de type XML(E4X) directement via les méthode NetConnection.call() (AS3) et Client.call()__ (SSAS).

Voici donc un petit exemple d'utilisation de l'AMF3 avec Flash CS3 et FMS3 :

Lire la suite...

- page 1 de 7