AS3, FP10, PatchPanel et SwitchBoard

Aujourd’hui un léger post pour faire le point sur le projet “offline” de mon examen. L’idée était de retaper le process d’une application qu’un client avait fabriqué il y a plus de 8 ans, afin de le rendre fluide et exploitable. Au lieu d’utiliser 5000 technos, je pense a réduire le tout a : flash et illustrator dans une conception simple : Photoshop, Catalyst, Flash Builder.

Sans dévoiler la mouture perso de l’application, le process client était celui ci :

  1. Envoyer une image a php pour l’analyser, a la manière d’un getPixel et renvoyer un fichier texte formaté dans l’esprit d’un ByteArray
  2. Balancer le tout dans flash, afin de changer quelques variables, et exporter le tout en jpg
  3. Ouvrir le jpg avec illustrator, utiliser un script pour vectoriser sans pertes le jpg généré
  4. Agrandir et sortir un PDF destiné au print

Voici comment je compte résumer le process :

  1. Ouvrir Illustrator avec un flash panel
  2. Charger un jpg dans le flash panel et jouer avec les curseurs
  3. Générer l’illustrator pret a etre agrandi au besoin et enregistré en PDF

Je laisse la main a l’utilisateur sur l’étape de redimensionnement et d’enregistrement car ces paramètres dépendent essentiellement de la commande. J’aurai pu les inclure dans le flash panel, mais mon idée d’un panneau est un outils destiné aux données du document et il se limite donc a manipuler ces données (et pas à enregistrer, fermer le document, fermer illustrator et allumer la cafetière juste avant d’éteindre le pc).

On part donc sur un panneau flash utilisant la technologie PatchPanel pour communiquer avec l’application. Je fais mon design sur Photoshop, l’importe dans flash Catalyst pour définir les premiers composants qui feront mon application.

Premier constat, si vous utilisez des styles de calques avec transparences, ils seront rasterizés a l’import et ca rendra très moche. J’ai donc préféré me taper l’export de chaque png a la main pour être certain que Catalyst ferait pas de la bouillie de transparence ; pour caler, un screenshot en fond de mon application c’est le plus simple et le plus efficace.

Je fais quelques boutons avec le mythique “je click ici et je dis ceci est un bouton et hop c’est bon” et quelques transitions histoire de dire “waaah” en 5mn, et me voila dans flash builder.

Bon, grâce aux petits conseils fournis à la présentation Flash Platform, j’avais bien renommé mes classes et la lecture du code généré était… relativement simple.

Si Catalyst génère du code propre, je pense quand meme qu’il n’est pas super lisible. J’ai passé près de 20mn a retaper les identations, l’ordre des groupes () pour avoir un code proche de ce que j’aurai pu “générer” à la mano.

Une fois le cleanage fait, le gros taf était simple, de l’AS3 (FP10) tout ce qu’il y a de plus basique. Un loader, un histogramme et la communication avec Illustrator.

Là, la doc de PatchPanel est plus qu’accessible. Il y a énormément d’exemples pour bien démarrer. Pour loader mon image direct, j’utilise FileReference.load() qui permet de charger directement un média dans le player, et là, c’est le drame. L’event de loading n’est pas trigger, et le fait d’executer le panel dans le player interne d’illustrator ne permet aucun debug. Je suis donc dans le flou total pour cette piste.

Petit clone de projet, je décide de passer sur “SwitchBoard”, une techno similaire qui permet a une appli Air de dialoguer avec la suite Adobe. Cette solution me plait moins car il faut installer un client SwitchBoard et le runtime Air pour enfin installer l’appli et la faire tourner. C’est plus fastidieux, et ce n’est pas tout.

Ayant un runtime Air a jour (1.5), FileReference.load() fonctionne bien. Cela ne fait qu’appuyer ma théorie “Illustrator CS4 possède un FP9 interne non updaté”. J’arrive facilement à dialoguer avec illustrator. En fait SwitchBoard est beaucoup moins évolué que ce que je pensais. Il faut créér un “Client”, qui envoie des “Message” qui ne sont ni plus ni moins que des commandes JavaScript. En gros, je perçois l’appli Switchboard et son framework comme un socket camouflé (alors que PatchPanel à au moins une vraie architecture objet calquant le “DOM” d’illustrator (avec ses défauts)).

N’ayant pas trop d’autres choix, je limite le scope de mon appli à la génération de l’artwork et je squizze pour l’instant les quelques curseurs. je fais mes petites boucles, et j’envoie sur enterFrame mes “Messages” a Illustrator…

Pour analyser un jpg de 80×100 (8000px) c’est rapide, très rapide. Pour envoyer les messages quel déception ! C’est lent… très lent… je compte 3 minutes sur un entreFrame de 30fps. L’envoi des données semble même trop rapide pour Switchboard car certains éléments sont tout simplement absent de la génération. Il faudra passer sur un Timer pour ralentir la cadence d’envoi des messages et avoir une génération d’artwork fiable à 100%… en 8mn54s !!! C’est tout simplement abérant :(

Alors je vois pas trop bien quelles solutions j’ai. La meilleure serait de corriger ce problème de Flash Player afin d’utiliser PatchPanel. Pour l’avoir déjà utilisé auparavant, je pense que la génération serait plus rapide et plus fiable. Je pourrais en plus de ca, garder des références des objets générés afin de pouvoir optimiser l’utilisation des curseurs. En utilisant SwitchBoard, je suis contraint de faire une appli plus grande afin d’insérer une zone de prévisualisation dans laquelle je pourrais manipuler un simple ByteArray et un gros bouton “Générer (et allez prendre un café)” pour le process.

Si vous avez des réponses et/ou des solutions, je suis bien évidemment preneur :)