03 septembre 2008

Google astique ses chromes


Google a sorti cette nuit son navigateur "Google Chrome".
Basé sur le moteur de rendu WebKit (utilisé également par Safari) il apporte :

d'une part un modèle multi-processus, basé sur le constat qu'on utilise aujourd'hui le navigateur pour exécuter des applications, et non plus pour visualiser des pages. Une application = un processus, c'est logique et cela stabilise le navigateur (étanchéité entre applications).

d'autre part un moteur d'exécution JavaScript basé sur une machine virtuelle crée par Google DK, "V8". Compilé plutôt qu'interprété, le code JS est nettement plus rapide, comme l'a déjà démontré le moteur SquirelFish (cf mon billet sur le sujet). V8 semble particulièrement efficace d'après les premiers benchs, et je confirme l'impression générale de rapidité.

Pour découvrir en image les idées derrière Chrome, consultez la BD éditée par Google : http://www.google.com/googlebooks/chrome/. L'accent porté sur les tests et l'intégration continue associée est intéressant.

Basé sur WebKit, il ne devrait pas y avoir de problème de compatibilité majeure. Peut-être aura t-on tout de même droit à une combinatoire dédiée dans la prochaine version du compilo GWT.

Quel intérêt ?

Pour Google, dans l'esprit "the browser is the platform", une application dans le navigateur doit être au moins aussi rapide, stable et démarrer aussi vite qu'une application installée. 
  • Pour la rapidité, le passage par la compilation du JavaScript est la clé. 
  • Pour la stabilité, le modèle 1 onglet = 1 processus est la solution poussée par Google. 
  • Pour le temps de démarrage, il suffit d'utiliser le mode "raccourci sur le bureau" de chrome pour comprendre : on lance gMail en un temps record, avec un "navigateur" réduit à sa plus simple expression.
Résultat : gMail exécuté sous chrome en mode "application" écrase tous les clients de messagerie connus - ce n'est que mon point de vue ;-)

Il est juste domage que gMail n'exploite pas Gear (à moins que j'ai raté quelque chose?).

01 septembre 2008

GWT 1.5

Google Web Toolkit version 1.5 sort aujourd'hui en version finale - juste à temps pour faire la pub de la première réunion du BreizhJug !

Il sera sous peu disponible dans le référentiel Maven, et je vais en profiter pour mettre à jour le plugin associé du projet Mojo.

26 août 2008

eee

Après des années à envisager l'achat d'un portable, l'essai le temps de SpringOne d'un magnifique 17" (plus transportable que portable), j'entre enfin dans le monde nomade avec un eee-pc 900A : 300€ tout juste pour un concentré d'informatique qui tient presque dans la poche.

Pas question d'installer Eclipse sur cette mini-machine, qui malgré ses 1.6GHz reste très en dessous des PC modernes (mais déjà plus puissant que celui que j'ai à la maison ;-)

Le système linux utilisé est très convivial, même pour un total novice, assez bien francisé, et seul le clavier posera problème (c'est vraiment tout petit !)

Ce billet est donc écrit sur un clavier de 20cm de large, avec de nombreuses fautes de frappe, mais je vais probablement m'habituer.

21 août 2008

Plain Old Binary Services


Les services web sont venu pour nous sauver de tout ces protocoles binaires, propriétaires et non-interopérant qui ont pourri l'informatique depuis tant d'année (alleluïa).

Pourtant, les performances n'étant pas toujours au rendez-vous, et le réseau véhiculant une quantité d'entêtes soap WS-TrucMuch qui fait peur, de nombreux petits malins cherchent à améliorer les choses.

Permière solution : SOAP 1.2 étant basé sur InfoSet (une norme de représentation pour un arbre de données) et non sur XML (une façon textuelle de représenter ce même arbre), rien n'interdit de véhiculer le message SOAP encodé en binaire par FastInfoset. Non seulement le message est très fortement réduit en taille, mais le parsing est nettement plus efficace.

Seconde solution : SOAP over TCP (développé par SUN), disponible pour .NET. Il s'agit cette fois de simplifier la couche de transport, puisqu'on s'est donné comme base de ne pas en dépendre. Donc autant faire au plus simple, et attaquer en TCP - j'attend de pied ferme SOAP sur IP ;-)

En combinant les deux, les perfs deviennent probablement exceptionnelles... Un format d'encodage binaire, basé sur un équivalence ASN.1 du schéma XML, et un transport sur TCP - je ne sais pas pour vous, mais moi ça me rappelle furieusement Tuxedo ou Corba !

Qui réussira à nous faire passer RMI/IP pour du "service web" ?

Google Developer Day '08


Mon inscription - bien que tardive - au Google Developer Day 2008 a été acceptée. Cette journée atelier/conférence autour des outils Google pour les développeurs rencontre un succès qui dépasse largement ses capacités d'accueil, d'ou un passage quasi obligé par la liste d'attente ...

Après l'ouverture de ses APIs de programmation, qui lui permettait de promouvoir ses sites, Google passe la vitesse supérieure avec GWT, Google App Engine, Androïd, plus de nouvelles APIs (Google Visualization, YouTube).

A son habiture, Google essaie d'être présent partout. Nouveaux monopole à la Microsoft crieront certains ! L'avenir nous le dira... mais pour l'instant tous les outils/services de Google sont gratuits !

18 août 2008

GPL : la license des pros

La licence GPL a fait couler beaucoup d'encre, et canalisé quelques frayeurs - auxquelles j'ai moi aussi participé - sur son aspect "viral". Symbole d'un idéalisme du libre, elle s'est longtemps heurtée à la réalité du monde économique purement guidé par des considérations lucratives.

Aujourd'hui, retournement de situation, la GPL devient l'arme numéro 1 de l'entreprise désireuse de porter son outil fétiche. Quelques exemples au hasard :
  • L'excellent librairie EXT-JS
  • SpringSource Application Platform
  • Le framework de Lyria
  • et plein d'autres que je vous laisse découvrir...
L'idée derrière tout ça ? Fàce aux géants du logiciel et à des développeurs Java qui misent beaucoup sur l'opensource, la licence GPL assure à une société de ne pas se voir canibaliser son code (et ses bonnes idées) tout en touchant un public aussi large que possible.

S'il s'avère que SpringSource à raison avec sa "plateforme", à mi-chemin entre OSGi et JEE, IBM ne pourra pas lui piquer - même par morceaux - pour l'intégrer à Websphere 9.

Retournement amusant de situation pour cette licence pas comme les autres ;-)

des Logs pour GWT

Lors d'un développement GWT, le mode Hosted permet de deboguer à loisir depuis Eclipse, ce qui est extrêmement puissant si on compare aux solutions existantes pour le développement JavaScript.

Mais le debogueur ne fait pas tout, et l'utilisation de logs est un complément indispensable.

Petit coup de pub donc pour la librairie gwt-log, qui propose une interface de type log4j pour produire des logs.

Premier point, le code des logs sera totalement supprimé lors de la compilation par GWT pour la combinaison log_level=OFF. Ceci permet donc de ne pas pourrir l'application de production avec des logs. Une "variante" peut être compilée en mode log_level=DEBUG pour le développement, et l'ajout d'un simple paramètre à l'URL permet de la sélectionner - merci la gestion combinatoire du compilo GWT !

Second point, gwt-log sait envoyer ses logs vers à peut près tout ce qu'il est possible d'imaginer :
un [div] de debug, le shell du mode Hosted, la sortie standard (i.e. la console d'Eclipse), ou la console de Firebug pour les amateurs ... Chacun prendra ce qui lui convient le mieux !

En attendant que le projet log4gwt du même auteur murisse, c'est une solution simple, utilisant le mécanisme de compilation de GWT avec intelligence.

13 août 2008

GWT et JPA, main dans la main ?

J'ai raté la sortie d'Hibernate4Gwt en version 1.1. En plus de corriger quelques bugs, cette version est une mise à niveau pour GWT 1.5.

Pour ceux qui ne connaissent pas, H4GWT permet d'utiliser les entités Hibernate/JPA comme données dans une application GWT, ce qui comporte pas mal de complications techniques, habilement résolues par Bruno Marchesson.

Avec le support de Java5 dans GWT, et une "émulation" des annotations JPA, il devient possible d'utiliser le même modèle métier depuis la couche de persistance jusqu'à l'IHM web. Tout le code de type "contrôles et validation" peut alors être placé dans les setters du modèle, c'est à dire là ou il est finalement le plus logique de le placer !

Je n'ai pas pu tester personnellement (mon projet actuel ne s'y prête pas) mais l'idée me plaît beaucoup et me fait définitivement apprécier le concept phare derrière GWT : un langage et une plateforme pour toute la chaîne de développement.

inutile, donc indispensable


Je viens de découvrir le dernier jeux en Flash, très bien réalisé : labrute.

On s'y combat entre avatars, en mode "spectateur", autant dire un combat de lancé de dés. C'est donc totalement inutile mais absolument incontournable. Si vous avez deux minutes à perdre, venez vous frotter à mon avatar http://cyberloof.labrute.com/

Originalité du jeu (tout de même), la possibilité de revoir les combats passés, ce qui nous offre quelques perles, comme un Microsoft vs Apple.

Je regrette juste de ne pas pouvoir coller mon chocobo préféré comme personnage...
A quand un Final Fantasy en flash ?

31 juillet 2008

Sprechen sie Deutsch ?


Je pars en congé pour une semaine en Allemagne.

Sachant que j'ai fait Allemand première langue, avec 7 années de cours pendant lesquels mes profs se sont acharnés pour me faire comprendre le gérondif, ai-je une petite chance de savoir aligner deux mots ?

Déjà à l'époque j'étais très mauvais en Allemand (j'ai préféré présenter l'option "dessin" au bac), alors aujourd'hui il n'en reste plus grand chose.

Une pub pour des cours de langue dit "il vaut mieux apprendre le français que chercher à comprendre un Français qui parle anglais", j'ai peur de ne pas faire entorse à la règle :-/

update :

De retour d'Allemagne, après une semaine formidable, accueilli dans une famille d'une gentillesse inouïe, j'ai quelques kilos à perdre - la bière Allemande est vraiment excellente - et le retour à la dure réalité est un peu rude ...

Ce jumelage a été une expérience géniale, que je vous recommande si votre ville en propose un, et les 14h de car (!) sont vite oubliées.

règlement à l'amiable

Hier soir j'ai passé deux heures dans les locaux de l'Ordre des Architecte pour négocier une résolution à l'amiable du conflit qui m'oppose à Mme B... sur la rénovation de ma maison.

De mon point de vue, 11% de dépassement du budget, un retard conséquent (2 ans depuis le lancement du projet), une méthode purement pifométrique, une comptabilité pitoyable, et enfin une communication minable pour une transparence nulle.

Le médiateur qui s'est chargé du dossier a été très bon, ramenant le calme et ne cherchant pas à enfoncer l'un ou l'autre tout en soulignant les torts respectifs. On s'en sort donc avec une sorte de "50/50" de marchand de tapis, mais au moins l'affaire est close.

Heureusement que ce genre de situation ne nous arrive jamais à nous, Architectes Java ;-)

30 juillet 2008

Didier Girard vous invite à déjeuner

Didier ne se contente pas de faire des présentations sur GWT, il fait aussi des applications avec ;-)

Il lance aujourd'hui un projet sur googlecode : NouvelleCuisine. Il s'agit d'un portail web dans l'esprit d'un Netvibes ou d'un iGoogle, mais développé en GWT et uniquement basé sur des ressources statiques : pas de serveur au sens traditionnel ! Même la configuration se fait via une feuille Google SpreadSheet...

Un portail web pour 0€, infrastructure comprise, qui dit mieux ?
Que va t-il rester aux bon gros serveurs de Portlets ?

Si vous cherchez comme Didier un moyen rapide, élégant et moderne pour classer vos fiches de cuisine, c'est l'une des solutions à tester. Ca marche d'ailleurs pour plein d'autres utilisations ;-)

Amusant aussi de découvrir sur ongwt.com le compte rendu du commité de revue de l'architecture technique - comprendre le coin de nappe en papier de la cafet'.

28 juillet 2008

Didier Girard accepte l'invitation du BreizhJug

Didier Girard (application-servers, onGwt... c'est lui !) accepte l'invitation du BreizhJug pour venir animer la réunion d'inauguration, dont la date est fixée au 15/09.

Une excelente nouvelle pour le JUG, qui s'offre ainsi une inauguration en grande pompe avec un conférentier de talent sur un sujet "chaud". Si Google avait le bon gout de finalier GWT 1.5 pour cette date ce serait le top ;-)

27 juillet 2008

Google à la rescousse de Struts ?

Google utilise pour plusieurs de ses applications phare (addSense entre autre) WebWork2 ou Struts2. Mais pour faire fàce au problème de montée en charge de Struts2 - de nombreuses limitations ayant été trouvées dans OGNL puis dans les templates Freemarker - Google utilise son moteur de template maison.


La bonne nouvelle, est que ce moteur vient d'être ouvert en opensource : Google XML Pages

Ce moteur est largement éprouvé (après des années d'utilisation par Google sur des applications critiques), et bénéficie d'une compilation validant complètement la syntaxe, par opposition aux JSP basées sur des expressions EL qui ne peuvent être vérifiées qu'au runtime.


Les développeurs Struts n'ont pas attendu pour proposer l'abandon de FreeMarker au profit de GXP... Google va t-il sauver Struts2 de ses problèmes de performances ? Il faudra alors revoir le logo de Stuts2 :

09 juillet 2008

Un Java User Group pour Rennes


J'ai le plaisir de vous annoncer le lancement d'un Java User Group sur Rennes !

2008 sera l'année des JUGs en france, avec le lancement réussi du ParisJug et du ToursJug, et bientôt des initiatives sur Nantes et Bordeaux, mais on parle aussi de Toulouse, Metz, Brest ...

J'ai le plaisir de présider le BreizhJug et en conséquence de rechercher activement sponsors et conférenciers. Si l'aventure vous intéresse, que vous voulez présenter votre travail lors d'une de nos réunion, ou que vous connaissez quelqu'un que ça pourrait intéresser, ou encore que votre société cherche à promouvoir une image "techno-innovante" et est prète à nous épauler, n'hésitez surtout pas à faire connaitre notre email : team@breizhjug.org

04 juillet 2008

GWT, tests junit et MVC


Lors de la réalisation d'un prototype basé sur GWT, je me suis intéressé à la testabilité du framework. GWTTestCase est très décevant car il utilise un navigateur "hosted mode" caché et lance tout le module GWT. C'est donc un bon support pour des tests d'intégration mais nettement trop lourd (et particulièrement lent) pour des tests unitaires.

Je reprend donc mes marque-pages, et je relis cet article et celui-ci.

Avec GWT 1.5, l'utilisation des types génériques permet de créer un modèle simple pour la mise en oeuvre du pattern "Supervising Controller" :

D'abord la notion d'événement, dédié à un composant donné (nb: à cause d'un bug de blogger, j'ai mis des crochets pour la déclaration des types génériques) :

  1. public abstract class Event[T]
  2. {
  3. private T source;
  4. public Event( T source ) {..}
  5. }

..la source qui produit ces événements :

  1. public interface EventSource[T]
  2. {
  3. void addListerner( Listener[Event[T]] listener );
  4. void removeListerner( Listener[Event[T]] listener );
  5. }

..et une classe abstraite pour construire nos SupervisingControllers :

  1. public abstract class SupervisingController
  2. implements Listener[Event[T]]
  3. {
  4. protected T view;
  5. public abstract Object getModel();
  6. public void setView( T view )
  7. {
  8. this.view = view;
  9. view.addListerner( this );
  10. }
  11. }

Il suffit ensuite de définir la "vue" par une interface, comme dans cet exemple ma pop-up de login :

  1. public interface LoginDialog extends EventSource[LoginDialog]
  2. {
  3. String getLogin();
  4. String getPassword();
  5. void hide();
  6. }

Le contrôleur, lui, étend notre SupervisingController en le typant avec l'interface de la vue "supervisée".

  1. public class LoginController
  2. extends SupervisingController[LoginDialog]
  3. {
  4. private LoginService service;
  5. ...

.. et sur réception d'un événement de type 'validation du formulaire de login', il n'a plus qu'à invoquer le service RPC de connexion, mettre à jour les éléments visuels qui vont bien, et fermer la popup :

  1. public void on( Event e )
  2. {
  3. loginService.login( view.getLogin(), view.getPassword(),
  4. new AsyncCallback[Utilisateur]()
  5. {
  6. public void onSuccess( Utilisateur result )
  7. {
  8. view.hide();
  9. }
  10. } );
  11. }


Gràce au génériques, il n'y a pas de cast à déclarer et le code reste donc plutôt simple.

Qu'est ce que ça change ? Et bien maintenant, avec un simple Mock pour mon interface LoginDialog, et un service RPC de test, je peux tester dans un test jUnit classique la logique IHM de mon contrôleur. Elle est triviale dans l'exemple, mais vous devinez que la gestion d'un formulaire de 20 champs avec des controles croisés peut devenir un enfer sans un bon mécanisme de test.

Ce qu'il manque pour faire "encore mieux" :
  • un mécanisme de data-binding entre les widgets et un "modèle". Il existe quelques initiatives opensource, dont le succés et la pérennité sont à évaluer.
  • un spring-gwt, qui permettrait de déclarer dans l'exemple ci-dessus l'injection de la vue et du service RPC via une annotation @Resource. Dis Monsier Rod Johnson, tu peux m'inclure ça dans la roadmap spring 3.0 ;-)

02 juillet 2008

c'est quoi ce poussin ?

Suite à la demande de quelques un d'entre vous, je vous informe que le "poussin" qui apparaît en haut à droite de ce blog est en fait un (bébé) Chocobo, personnage issu du jeu Final Fantasy 7, l'un des rares jeu vidéo (avec Doom) auquel j'ai joué assidument.

21 juin 2008

mieux que l'eXtrem Progamming ?


Via le site perso d'un collègue je suis tombé sur cette méthode de développement, tout à fait dans la tendance "agile", et qui mériterait d'être mieux connue : la RACHE

En fait, je pense qu'elle est déjà très répendue, mais qu'on a pas forcément mis un nom dessus jusqu'ici. Un grand bravo aux créateurs de ce site !

20 juin 2008

Google App Engine : simple comme un coup de fil ?

Pour ceux qui ont raté le début, Google a lancé un service d'hébergement d'applications web basé sur son infrastructure massivement distribuée (on parle de cloud-computing). Autrement dit, même l'application web de votre club de fans de star treck peut potentiellement supporter un pic de traffic temporaire, gràce aux ressources énormes du "cloud", ce que ne permet pas un hébergement sur serveurs dédiés.

Lors du lancement, Google a offert 10000 clés au premiers inscrits. Intile de dire qu'elles sont vites parties et que comme beaucoup je suis arrivé après la bataille.

Google a changé sa stratégie, et on peut désormais obtenir une clé depuis un compte google par une simple procédure de vérification, qui consiste à donner son numéro de mobile pour recevoir la clé par SMS.

Premier point, c'est super : on va pouvoir tester G.A.E !

Deuxième point, d'où Google sort-il cette procédure d'enregistrement ?

Je suppute que Google prépare une attaque en règle du marché mobile, et profite de GAE pour se faire une base de donnée des n° de portable des développeurs web du monde entier... Faut il faire un rapprochement avec les téléphone basés sur androïd (l'OS google pour mobile), qui sont attendus en fin d'année ?
"We will use your phone number to send an invitation code in a SMS message to your phone. In accordance with the Google App Engine Privacy Policy, we will not use your phone number in any other way."
Vais-je recevoir d'autres "invitations" pour tester les nouveaux services mobiles de Google ???

Atelier RIA : Gwt vs SilverLight vs Flex

Valtech organisait jeudi une journée atelier RIA, une formule originale permettant de comparer sur le terrain Gwt, Flex et SilverLight. Ces trois noms dominent en effet (pour l’instant ?) le monde très actif des Rich Internet Applications.

Petite mise au point pour commencer : une Application Internet Riche n’est pas juste une application web bourrée d'effets visuels. Ce n’est pas non plus une application utilisant Ajax pour en améliorer l’ergonomie ou la réactivité.

Une RIA c’est une application qui a été conçue pour déporter sur le client la couche présentation, tout en conservant sur le serveur des services métier de haut niveau, autant que possible sans état. C’est donc à mis chemin entre le client lourd + serveur de données et le client léger + serveur web de présentation. Le serveur devient alors un conteneur de services métier, ce qui permet de converger avec l'approche SOA.Un exemple parmis d'autres, parleys.com (en version Flex ou Gwt) : le serveur héberge les vidéos et les indexes, toutes la mise en page étant gérée sur le client.

Bien sur, cela s’accompagne souvent d’effets graphiques haut de gamme pour se démarquer des applications web devenues trop statiques. Il faut bien un moyen d'accrocher l'internaute !


Quelle est la difficulté sur ce type d'applications ?

  1. la mutliplicité des technologies qu'on doit couvrir pour une même application : HTML + CSS + DOM + JavaScript + HTTP/Ajax + JSP + Java + ...
  2. les exigences de multi-plateforme, en particulier si on vise le monde mobile
  3. le delta qui existe entre un "hello world" et une application de 100 écrans, en particulier pour venir ajouter de nouvelles fonctionnalités

SilverLight est la solution RIA proposée par Microsoft, nécessitant un runtime encore peu répandu, mais qui pourrait rapidement se généraliser via le meilleur outil de promotion : Windows Update ;-)

La présentation SilverLight était assez décevante, trop orientée design pour un public de purs programmeurs, et ne connaissant pas l'outil Blend la première heure a quasiment été perdue. Nous sommes nombreux à en avoir eu une image négative, sans doute fausse par rapport à cette technologie. J’en retiens trois points majeurs :

  • SilverLight et les outils qui l’accompagnent manquent encore de maturité (nous avons utilisé des versions beta, avec de nombreux bugs). Nous n’avons pas utilisé Visual Studio, aussi c’est donc peut-être une fausse impression.
  • Le choix de Microsoft de séparer les outils de Design (Expression) de ceux de développement est discutable. Même en confiant ces rôles à deux personnes, on peut être amené à jongler entre les deux.
  • SilverLight a l’avantage d’être très homogène, client et serveur se programmant en C#, notion que l’on retrouve dans Gwt.


Flex utilise le runtime Flash 9, déjà installé sur de très nombreux postes.

La présentation Flex était très démonstrative, mettant en avant les capacités graphiques du format Flash. L’environnement FlexBuilder est très appréciable (175€), même si de nombreuses fonctionnalités habituelles en Java manquent (formateur de code, refactoring…). Flex permet de laisser aux graphistes le soin de préparer les objets Flash avec toute la puissance de cet environnement. La programmation nécessite cependant de se familiariser avec ActiveScript, pas infaisable mais pas immédiat non plus. Se pose aussi la question du débogage sur des applications ambitieuses. Flexbuilder est très aboutit et probablement indispensable pour envisager ce type de développement.

Pour ces deux premiers candidats, se pose la question de la disponibilité d’un runtime sur toutes les plateformes, en particulier sur mobiles, marché d’avenir pour ces applications.


GWT est un peu l’intrus dans cette journée. Il se positionne fonctionnellement très en dessous de ses concurrents, sans support pour des effets 3D ou vidéo. Par contre, il est le seul à ne nécessiter aucune installation de runtime.

La présentation GWT était plus une visite guidée d’une application GWT, mettant en évidence les principes clé. Le très gros point fort est le développement 100% Java, qui permet ainsi de coder/tester/deboguer sous Eclipse, par simples « save + refresh », et de bénéficier de l’environnement JDT pour « découvrir » l’API GWT. La programmation GWT est donc assez naturelle pour des développeurs Swing.


Absent de cet atelier, JavaFX, pour lequel je me pose pas mal de questions. Ne se programmant pas en Java, on ne retrouve pas les avantages de Gwt ou Silverlight. Générant une application type Swing, quelle différence de fond par rapport à Java Web Start ?


J’ai été impressionné par la facilité de construction d’une IHM Flex, et surtout par le très bon niveau de FlexBuilder, qui malgré la filiation du langage ActiveScript avec JavaScript propose un éditeur riche et assez proche de celui d’Eclipse pour Java. Je n’ai pas accroché sur SilverLight, ne serait-ce qu’à cause du langage C# qui m’est peu familier, mais c’est clairement une plateforme avec laquelle il faudra compter. Enfin, GWT a été très bien vendu par Sami ;-). Il reste tout de même un besoin de compétence pour la mise au point des CSS, tout aussi peu homogène au niveau des navigateurs, point qui n'est pas abordé par Gwt - domage.

Mes conclusions ?

  • Spring MVC + Spring JS pour des applications web classiques avec un bonus ergonomique, comme expliqué dans mon précédent post, cela permet une migraiton "en douceur" depuis Struts.
  • GWT pour des applications RIA de type « gestion », manipulant plus des données que des vidéos ou des effets 3D. Il faut cependant développer une culture "layout" des IHM.
  • Flex pour les applications « flashy » (c’est le cas de le dire), avec l’aide inconditionnelle de FlexBuilder.