Rss Feed

Applications mobile et tablette (iOS et Android) avec Flex et AIR

Avec la version Flex 4.5, le développement sur mobiles (iPhone, Android et Blackberry) et tablettes (iPad et Android) était possible avec quelques limitations selon la typologie du projet. La version 4.6 va apporter quelques nouveautés qui vont permettre de gommer les limitations de la version Flex 4.5. La principale nouveauté est l’utilisation des natives extensions.

Pour en savoir plus, vous pouvez consulter : Developing native extensions for Adobe AIR

Flex Burrito

Avec le dernier né des IDE flex, Adobe corrige pas mal des défauts qui restaient au niveau de flash builder tout en entrant dans le développement pour mobile et multi-plateforme.

L’IDE s’améliore premièrement grâce à la mise à jour de son noyau qui passe en version 3.6 d’éclipse et pour les utilisateurs d’OSX de la version Carbon à la version Cocoa. Cette mise à jour va régler pas mal de bugs inhérents d’eclipse. La mise a jour se fait aussi au niveau du contenu avec la dernière version de Flex (Hero), AIR (2.5) et flash player (10.1). Tout cela améliorant de façon significative les performances au niveau de la compilation, de l’usage de la mémoire…

La seconde amélioration vient du développement bi-directionnel de la liaison Flash Builder – Flash Catalyst augmentant les possibilités d’interaction entre développeur et designer.

La troisième amélioration vient de la variété des projets disponibles :

  • Que ce soit au niveau du namespace accepté :  MX uniquement, MX+spark, spark uniquement
  • Ou du type de projet : mobile, multiplateforme, actionscript uniquement, flex, air, actionscript mobile uniquement, compatible flash catalyst, flash professionnel, actionscrit air uniquement, bibliothèque flex, java.

La quatrième amélioration se situe au niveau de la design view qui montre les feed-back lors du déplacement des éléments et qui peut se masquer quand on n’a pas besoin d’elle.

La cinquième amélioration va augmenter la productivité grâce à un ensemble de fonctionnalités qui manquaient grandement : template de code en AS3, génération automatique d’event handler, renomage d’une variable dans un fichier ou dans le workspace, génération de classes/interfaces pour des types déclarés mais non reconnus, complétion de code sur les métadatas…

OpenScales, BlazeDS et JTS

Afin de faciliter les opérations d’enregistrement et de récupération de données géométriques il est d’usage d’utiliser la librairie Java JTS dont les types de géométrie peuvent être directement enregistrés en base de donnée (Oracle ou PostgreSQL+Postgis) grâce, par exemple, à Hibernate Spatial. C’est le format utilisé en standard par la librairie Geotools. Malheureusement il existe un problème dans BlazeDS qui conduit à une mauvaise sérialisation/dessérialisation des objets JTS, ceux-ci ne contiennent aucune propriété valable après avoir été traités par le marshaller ; il est dont impossible de les faire transiter en l’état entre le client et le serveur. Grâce à l’utilisation des BeanProxy et du PropertyProxyRegistry nous avons pu redéfinir la liste des propriétés à considérer pour les objet de type com.vividsolutions.jts.geom.Point et com.vividsolutions.jts.geom.Polygon ; et ainsi modifier la façon dont elles sont traitées (en overridant les méthodes getValue et setValue de la class BeanProxy). Les objets de type géométrie transitent donc en toute transparence entre l’application Flex/Flash et l’application serveur+BDD. Ceci est particulièrement util pour le dessin sur carte avec sauvegarde des objets géométriques créés par l’utilisateur et apporte un gain de temps considérable dans la réalisation d’un projet avec module cartographique.

Exemple pour Polygon :

PropertyProxyRegistry.getRegistry().register(com.vividsolutions.jts.geom.Polygon.class, new BlazeDSGeometryUtils.JTSPolygonProxy());

static class JTSPolygonProxy extends BeanProxy
{
@Override
public List getPropertyNames(Object instance)
{
List newList = new ArrayList();
newList.add("SRID");
newList.add("area");
newList.add("coordinate");
newList.add("coordinates");
newList.add("numPoints");
newList.add("dimension");
newList.add("length");
newList.add("geometryType");

return newList;
}
}

Cas des systèmes de projection :

La librairie OpenScales n’offre pas autant de méthodes de projection de coordonnées que Geotools ; il peut être utile d’effectuer les conversions d’un système de projection à un autre directement sur le serveur pour s’affranchir des limitations imposées par OpenScales. On peut citer par exemple le système Lambert II étendu qui n’est supporté que dans la dernière version d’OpenScales — réservée à Flex 4. Pour éviter de fastidieuses et répétitives tâches de conversion au sein des fonctions d’enregistrement et de requêtage nous avons choisi de les implémenter directement dans la redéfinition des fonctions du BeanProxy. En effet, en déclarant à BlazeDS les propriétés des objets Point et Polygon il est tout à fait possible d’en ajouter plus que nécessaire, et notamment une propriété contenant le code du système de projection voulu après la sérialisation/désérialisation. Il suffit alors, dans la surcharge des méthodes setValue et getValue, d’agir sur les coordonnées en fonction du système désiré. De cette manière nous pouvons travailler en coordonnées Long/Lat dans l’application Flex et enregistrer les données en système métrique — Lambert II étendu ou 93 par exemple — dans lequel une requête portant sur la distance entre plusieurs points sera nettement moins coûteuse en ressources.

Flex hero

Avec le dernier né des sdk flex, Hero, Adobe rentre enfin de plein fouet dans le développement pour mobile (principalement Androïd pour l’instant) mais aussi finit la migration de ses composants commencée avec flex 4.

La preview Hero comprend déjà pas mal de nouveautés dont la première et pas des moindre est la possibilité de développer des applications flex multi-écrans directement avec le noyau de flex. Et ceci avec des composants spark optimisés pour mobile.

La seconde nouveauté est la continuation de la migration des composants mx vers spark :

  • D’abord le composant Datagrid qui passe entièrement en spark, ce qui permet un rendu, un défilement, une performance et une personnalisation supérieure au datagrid mx. De plus le passage de spark en mx du datagrid permet l’utilisation des composants spark en tant qu’itemEditor et itemRenderer ce qui rend la personalisation et le travail sur les datagrids beaucoup plus facile et complet. Enfin on peut maintenant rendre la sélection d’un élément du tableau obligatoire et voir qu’elles sont les lignes mais aussi les cellules sélectionnées.
  • Deuxièmement le composant Form passe aussi en spark rendant sa personalisation, sa configuration et son rendu nettement supérieurs.
  • Troisièment le composant image se personnalise et se configure bien mieux grâce au spark et aux loaders de chargement plus facile.
  • Enfin les formateurs de devise de nombre et de date passent en spark en prenant maintenant en compte les spécificités d’écriture locale.

La troisième nouveauté est le tri, qui prend enfin en compte les spécificités locales d’écriture pour pouvoir trier par devise, par date et par nombre.

Quatrième nouveauté : la mise à jour de l’OSMF et sa généralisation au niveau du vidéo player spark (améliorant le HTTP streaming) ainsi que celle du TLF pour les composants texte de tous les composant spark en particulier le TextInput, le TextArea… (améliorant la fluidité du texte, ainsi que les performances de ces composants).

Cinquième nouveauté, dans le but d’améliorer les performances, la logique des liens RSL a été revue pour ne lier que ce qui est vraiment utile. Ce qui n’est pas encore vraiment visible dans la version actuelle mais qui sera disponible pour la prochaine preview de Hero.

La dernière amélioration est liée à toutes les autres : ces augmentations de performance entrainent une diminution de l’utilisation mémoire lors de la compilation totale des projets ansi que la diminution du temps de compilation que ce soit pour les compilations totale ou les compilations incrémentales.

Error #2046: The loaded file did not have a valid signature.

Depuis vendredi soir (aux alentours de 22h30 heure française), les applications flex compilées avec la version 4.0.0.10485 (dernière beta) ne se lancent plus. Il semblerait qu’Adobe ait changé la signature des rsl, à mon avis par inadvertance étant donné qu’aucune information de leur part n’a été envoyée avant cette date.
La solution à l’heure actuelle si vous souhaitez ne pas avoir à vérifier que votre programme fonctionne correctement avec une release de Flex 4, c’est de compiler l’application en mode « static » (dans « Chemin de génération Flex » => choisir « Fusionné dans le code » pour l’option « Liaison de structure »), et de bien décocher les 2 options en dessous : « Vérifier les condensés RSL », et « Utiliser les bibliothèques RSL locales de débogage lors du débogage ».

Il est quand même conseillé autant que possible de passer sur une version release.

Quelques discussions :
http://forums.adobe.com/thread/723378
http://forums.adobe.com/message/3143569

Modifier le dataProvider d’une combobox

Ce matin, je suis tombé sur un bug assez énervant qui faisait qu’après une réassignation du dataProvider d’une comboBox, celle ci ne se mettait pas à jour visuellement de suite. Par exemple, si ma comboBox contient 3 éléments, puis que je lui donne un nouveau tableau avec 5 éléments, la liste déroulante prend la place de 5 lignes, mais il n’y a que 3 éléments affichés. Pour corriger ce soucis (qui semble avoir été corrigé dans Flex 4, mais pas dans la version 3.5 que j’utilise sur mon projet courant), il faut réassigner aussi le dataProvider de la liste déroulante.

Voici le bout de code qui fait l’affaire :

1
2
3
var newArray : Array = [ 0, 1, 2, 3, 4 ]; // Nouveau tableau à assigner
combo.dataProvider = newArray; // Assignation du dataProvider de la comboBox
combo.dropdown.dataProvider = newArray; // Assignation de la liste déroulante

Génération de labyrinthes

Vous avez toujours rêvé de savoir comment on pouvait générer un labyrinthe à l’aide d’un programme informatique ? Et bien, voici un article fort intéressant qui vous explique en détail cette création, allant de la théorie à la pratique. Tout un chapitre décrit la partie algorithmie, puis un exemple en flash est proposé avec le code source pour s’en inspirer, le tout sous licence GNU GPL v3, donc il ne faut pas se priver.

Algorithmique pratique et optimisation de code : La génération de labyrinthes.

Les nouveaux composants et conteneurs Flex 4

Le SDK Flex 4 a introduit un certain nombre de nouvelles classes et de nouveaux composants qui utilisent la nouvelle architecture, permettant de faire de nouveaux skins et autres personnalisations, beaucoup plus simplement. Voici un tableau montrant les composants Flex 3 MX et leurs homologues Flex 4 Spark: [Lire la suite...]