Admin

dimanche 20 novembre 2011

Adobe Native Extensions : Android prend l'AIR !

Vous le savez peut être pour ceux qui suivent l'actualité Adobe de près, la version 4.6 de FlashBuilder arrive bientôt, et la prérelease m'a permis de m'amuser avec un nouveau joujou : les ANE, Adobe Native Extension. Pour faire simple, il s'agit d'offrir à AIR sur mobile l'accès à la plateforme sur lequel il tourne, en l'occurence iOS ou Android. Grâce à ça, on peut imaginer tout sorte d'extensions qui vont venir enrichir les possibilités natives de AIR.

L'exemple le plus courant sur la toile est l'accès aux sensors, ou bien les notifications. J'ai choisi de travailler sur d'autres fonctions, pour changer un peu..Alors, prenez un café, installez vous confortablement, et regardez ce qu'on peut faire !

Texte de remplacement


Et voila...

PS:pour ceux qui auraient des problèmes avec le lecteur, vous pouvez télécharger la vidéo ici (161Mo).

lundi 29 août 2011

AS3 : Arrondi et Cie !

De nombreux articles sur la toile abordent les optimisations que l'on peut mettre en place en AS3 pour remplacer avantageusement certaines fonctions, comme certaines méthodes de la classe Math, par des équivalent plus rapides.

Concernant les maths, les points abordés sont souvent autour du floor() et du ceil(), de la multiplication et division de puissances de 2, et du modulo.

Mais rares sont les articles qui parlent de l'arrondi, à savoir le Math.round();

Voici donc ma petite contribution.

Le but : remplacer le Math.round() natif par un équivalent plus rapide tout en conservant sont comportement.

Deux cas se présentent :

- nombres positifs :

Ici trois solutions existent, elles font toutes la même chose et dans le même temps (les opérateurs binaires ne sont qu'à peine 1% plus rapide, autant dire que l'augmentation de perfs est négligeable).

  • solution 1 : var foo1:int = int(value + 0.5);
  • solution 2 : var foo2:int = value + 0.5 >> 0;
  • solution 3 : var foo3:int = value + 0.5 | 0; (ma préférée, que j'abrège en value+.5|0)

Comparons les perfs (10 000 000 itérations):

  • Math.round() natif : 358.2ms
  • solution 1, 2 ou 3 : 25.6ms

On obtient donc une fonction presque 14 fois plus rapide que le Math.round() natif.

- nombre négatifs (et positifs, le vrai équivalent au Math.round() en somme):

Ici aussi trois solutions existent, elles font toutes la même chose et dans le même temps (les opérateurs binaires ne sont qu'à peine 1% plus rapide, autant dire que l'augmentation de perf est négligeable).

  • solution 1 : var foo1:int = a>0 ? int(value + 0.5) : int(value - 0.5);
  • solution 2 : var foo2:int = a>0 ? value + 0.5 >> 0;
  • solution 3 : var foo3:int = a>0 ? value + 0.5 | 0; (ma préférée, que j'abrège en a>0?value+.5|0:value-.5|0)

Comparons les perfs (10 000 000 itérations):

  • Math.round() natif : 364.2ms
  • solution 1, 2 ou 3 : 139.6ms

On obtient donc une fonction d'arrondi exactement comme Math.round(), mais 2.6 fois plus rapide que le Math.round() natif.

Voila de quoi optimiser vos codes...

Mais attention, ces optimisations n'ont de sens que si elles sont utilisées dans une grosse boucle ou un traitement très complexe : pour un simple renderer, aucun intérêt, un Math.round() fera l'affaire, ou un toFixed() pour obtenir directement une String.

mardi 9 août 2011

Adobe AIR HTML avec Flex: Tootip ou tu l'codes ?

Pour un projet perso, j'ai choisis la plateforme AIR sous Flex, afin de profiter entre autre du composant HTML.

Je sais que celui-ci dispose depuis AIR 2.0 du support de CSS3, donc je me dit qu'un simple attribut title pour un <span> passera sans problème, c'est du HTML 4 standard, non ?

Et bien non, ça ne passe pas ! Comment faire ? Et bien utiliser le support JS pour créer dynamiquement un tooltip.

Mais pour tout gérer (tailles, multi-lignes, styles, positions, etc...), faut un peu de boulot.

Bien sûr on peut utiliser une des nombreuses libs JS pour faire des tooltips, comme qTip avec JQuery par exemple.

Dans mon cas, je souhaitais recréer le design des tooltips de Chrome. Pour l'ombrage, j'ai donc utilisé la propriété -webkit-box-shadow, mais comme mon fond change parfois de couleur, j'ai été obligé de me faire une petite fonction JS pour trouver la couleur et l'alpha adéquat pour la shadow, pour que le rendu de l'ombre soit similaire quelque soit la couleur de fond.

Au total, une demi-journée juste pour un tooltip !

Je ne comprends pas pourquoi il semble plus facile pour Adobe d'implémenter le CSS3 que les simples attributs HTML 4.0. Selon http://www.w3.org/TR/html4/struct/global.html#h-7.4.3, l'attribut title semble tout à fait standard.

Quelqu'un a t-il des explications sur les raisons qui pourraient expliquer l'absence du support de l'attribut title ? Simple oubli, considération de sécurité, bug ?

Note: je n'ai pas testé avec la beta de AIR 3.0; ceux qui la testent actuellement peuvent-ils me dire si il y eu du changement de ce côté là.

dimanche 10 juillet 2011

Accèder à la boussole depuis AIR for Android

Les smartphones récents sont de magnifiques appareils, qui intègrent de plus en plus de capteurs.

Sur mon Samsung Galaxy S, si on omet les deux capteurs vidéo et le micro, on compte un capteur GPS-A, un accéléromètre, un capteur de lumière, un capteur de champ magnétique, un capteur d'orientation, un capteur de proximité, un capteur de température pour la batterie.

Malheureusement, dans la version actuelle du du SDK de Air for Android, la classe flash.sensors.* ne permet d’accéder qu'à deux capteurs, le GPS et l'accéléromètre.

Cependant, le SDK android permet d'utiliser tous ces capteurs. Alors nous allons utiliser le SDK Android pour récupérer les valeurs des capteurs qui nous intéressent, intégrer un SWF dans ce projet Android et les faire communiquer afin de réaliser une boussole sous AIR for Android.

Durant mes recherches, je suis tombé sur deux pistes : utiliser un portage de BlazeDS pour Air for Android, un projet de Farata Systems que vous retrouverez sur http://code.google.com/p/clear-android/ dans une version dev et un article de James Ward très utile que vous conseille de lire.

Pour la parti Android native, rien de bien compliqué :

import air.app.AppEntry;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
 
public class MainApp extends AppEntry implements SensorEventListener {
    private SensorManager sensorManager;
    public float myAzimuth = 0;
    private float myPitch = 0;
    private float myRoll = 0;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);       
        sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
        sensorManager.registerListener(this, 
                sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
                SensorManager.SENSOR_DELAY_NORMAL);  
    }
 
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
 
    public void onSensorChanged(SensorEvent event) {
        myAzimuth = event.values[0];
        myPitch = event.values[1];
        myRoll = event.values[2];
    }
}

Et pour la communication, j'ai choisi la solution de James Ward, à savoir les sockets. Vous trouverez sur le net plein de tutoriaux sur la création d'un serveur de socket en Java, et comment "lire" sur la connection avec Flash (voir la classe socket).Ici je veux récupérer des infos depuis Java (Android) et les "lire" depuis flash, mais n'oubliez pas que depuis AIR 2.0, on peut créer un serveur de socket en AS3 et faire donc l'inverse...

Bon trêve de blabla, voici une vidéo pour montrer le résultat.

Texte de remplacement


Et voila...

mardi 5 avril 2011

3 mois avec le Galaxy S

J'ai acquis un smartphone Samsung Galaxy S fin décembre dernier, et je me propose de vous laisser mes impressions après trois mois d'utilisation en condition réelles.

Lire la suite

samedi 26 février 2011

Flex et les fichiers ASE

Vous connaissez peut-être le format ASE, qui signifie Adobe Swatch Exchange ? Il s'agit d'un format de fichier qui sert à stocker une palette de couleurs, et qui est pris en compte par presque tous les produits Adobe et certains produits concurrents.

Je vais vous montrer aujourd'hui comment on peut générer depuis Flex de tels fichiers. Pour quelle utilisation ? Et bien imaginez un site qui offre à l'utilisateur la possibilité de définir lui même des couleurs. Dans certains cas, l'étape suivante sera probablement réalisée par un designer, qui aura donc besoin de pouvoir importer dans son logiciel de prédilection les couleurs choisies par l'utilisateur. Quoi de plus simple alors pour lui d'importer directement un fichier compatible avec son logiciel ?

Lire la suite

samedi 19 février 2011

Simplification de polygones

Simplifier un polygone, tout un programme ! Un grand nombre de travaux mathématiques existent dans ce domaine et je ne vais rien révolutionner ici... Je vais juste vous donner une implémentation en AS3 de deux algorithmes bien connus dans ce domaine.

Lire la suite

vendredi 18 février 2011

RichAnalysis recrute 2 développeurs Flex/Air

Envie de rejoindre une équipe de dingue ? Envie de travailler dans une ambiance cool et 2.0 ? Alors n'hésitez plus !

Lire la suite

vendredi 5 novembre 2010

Flex et les fichiers ACO

Vous connaissez peut-être le format ACO, qui signifie Adobe Colors ? Il s'agit d'un format de fichier qui sert à stocker une palette de couleurs, et qui est pris en compte par presque tous les produits Adobe et certains produits concurrents.

Je vais vous montrer aujourd'hui comment on peut générer depuis Flex de tels fichiers. Pour quelle utilisation ? Et bien imaginez un site qui offre à l'utilisateur la possibilité de définir lui même des couleurs. Dans certains cas, l'étape suivante sera probablement réalisée par un designer, qui aura donc besoin de pouvoir importer dans son logiciel de prédilection les couleurs choisies par l'utilisateur. Quoi de plus simple alors pour lui d'importer directement un fichier compatible avec son logiciel ?

Lire la suite

vendredi 8 octobre 2010

Flex et les fichiers ACT

Vous connaissez peut-être le format ACT, qui signifie Adobe Color Table ? Il s'agit d'un format de fichier qui sert à stocker une palette de 256 couleurs, et qui est pris en compte par presque tous les produits Adobe et certains produits concurrents.

Je vais vous montrer aujourd'hui comment on peut générer depuis Flex de tels fichiers. Pour quelle utilisation ? Et bien imaginez un site qui offre à l'utilisateur la possibilité de définir lui même des couleurs. Dans certains cas, l'étape suivante sera probablement réalisée par un designer, qui aura donc besoin de pouvoir importer dans son logiciel de prédilection les couleurs choisies par l'utilisateur. Quoi de plus simple alors pour lui d'importer directement un fichier compatible avec son logiciel ?

Lire la suite