Monthly Archives: octobre 2007

Je hais les variables locales ActionScript

…parce que ça ne marche pas comme je m’y attends. Et donc ça me fait écrire des bugs!

Dans tous les autres languages que je connais (C, C++, C#, Java, Eiffel, …), la notion de scope est très stricte. Je m’attend donc à ce que la fonction suivant ne compile pas:

function test(a: Boolean): void {
if (a == true) {
var i: int = 10;
trace(i);
}
trace(i); // cette ligne ne devrait pas compiler!
}

Or ActionScript a une notion de scope un peu laxiste: dès qu’une variable est déclarée à l’intérieur d’une fonction – peu importe où – alors elle est accessible à l’intérieur, y compris avant sa déclaration! Regardez par exemple la fonction suivante:

public function test2(a: Boolean): void {
i = 5;
trace(i);
if (a == true) {
var i: int = 10;
trace(i);
}
}

La fonction compile et l’execution de test2(false) affiche « 5 ».
C’est fou non?

Alors quand on complique un peu les choses, forcement les bugs sortent du bois.

Quizz numéro 1: qu’affiche la fonction test3() lors de son execution?

public function test3(): void {
var functions: Array = new Array();
for (var i: int = 0; i < 5; i++) {
functions.push(function(): void {
trace(i);
});
}

for each (var fct: Function in functions) {
fct();
}
}

Oui, là devant, bien répondu!

5
5
5
5
5

Quand je vous dis que je hais les variables locales ActionScript!

Quizz numéro 2:Comment implementer la fonction 3 pour que les fonctions anonymes affichent leur index respectif?

FlexSpy

Ce week-end j’ai mis à jour mon composant Flex pour voir les autres composants et je l’ai renommé en FlexSpy au passage. Au menu de cette nouvelle version, la possibilité de voir les styles d’un composant (backgroundColor, cornerRadius, etc.), une nouvelle organisation de la fenètre, et une nouvelle API.

Désormais il suffit d’utiliser l’une des deux méthodes show(…) ou registerKey(…) de la classe com.flexspy.FlexSpy (voir post précédent).

Je vous laisse découvrir la nouvelle version « en live » sur l’application Dashboard de Adobe [version originale]

Flex Spy

Flex Spy démo (right-click pour voir les sources)

Télécharger FlexSpy.zip

Mais je ne vais pas m’arrêter là et je compte faire évoluer ce composant dans les semaines à venir. Quelles fonctionnalités aimeriez-vous que j’ajoute à FlexSpy ?

Un composant Flex pour voir les composants

Si vous vous demandez parfois pourquoi ce satané composant ne prend pas toute la largeur qui lui est allouée alors que vous lui avez expressement demandé, alors ce qui suit est fait pour vous!

Ce composant vous permet d’espionner en temps réel tous les composant d’une application Flex. Voici par exemple, ce que cela donne sur l’application FlexStore de Adobe.

ComponentTree component (small)

Télécharger ComponentTree.zip

Ce composant est complètement libre de droit, il est livré sous licence WTFPL. Pour l’inclure dans votre application, téléchargez le, puis importez le dans Flex Builder (File > Import puis General > « Existing Projects into Workspace ») et linkez le à votre projet.

Ensuite, vous pouvez soit ajouter un bouton pour afficher la pop-up comme suit:

<mx:Application ...>
...
<mx:Script>
  <![CDATA[
    import com.coderpeon.comptree.ComponentTreeWnd;
  ]]>
</mx:Script>
<mx:Button label="Button" click="ComponentTreeWnd.show()" />
...
</mx:Application>

ou bien, enregistrez un raccourci clavier pour ouvrir l’espion de composants (dans le creationComplete de votre application par exemple):

<mx:Application creationComplete="onCreationComplete()"...>
...
<mx:Script>
  <![CDATA[
    private function onCreationComplete():void
    {
      // Register "Ctrl+F12" shortcut.
      ComponentTreeWnd.registerKey(this, 123, true, false, false);
    }
  ]]>
</mx:Script>
...
</mx:Application>

Et voilà.

[18-10-2007] Le lien pour télécharger le fichier a été mis à jour.

Montage de PC: l’invention de l’année?

J’ai récemment changé la carte-mère de mon PC et j’ai opté pour une Asus P5K. Je suis un fan de cette marque depuis une dizaine d’année et je n’ai jamais été déçu. Mais cette fois, j’ai carrément été épaté!!

Asus a eu (repris?) l’idée de génie d’appliquer à sa carte-mère un des vieux principes d’architecture logicielle: la couche d’abstraction.

Le problème est le suivant: un logiciel doit interroger un ou plusieurs systèmes externes pour lesquels aucune API normalisé n’est disponible. Pour isoler au maximum le code qui dépend des systèmes externes du reste du code, on développe une couche intermédiaire chargée de faire tampon. Par exemple, DirectX ou OpenGL servent de couche d’abstraction entre les jeux et les cartes graphiques. Cela permet aux jeux de pouvoir supporter toutes les cartes graphiques – qu’elles viennent de chez nVidia ou ATI – sans avoir a en développer deux versions différentes.

Et ça donne quoi, une couche d’abstraction physique pour une carte-mère? Ça donne ça:

Connecteur Asus

L’idée est simpliste: on branche les connecteurs du boitier PC sur cette petite pièce en plastique.

Connecteur Asus branché

Et ensuite on branche la pièce de plastique blanc directement à la carte mère. Ensuite, si on doit enlever la carte mère pour une raison ou une autre, on débranche simplement la pièce de plastique blanc.

Plus besoin de regarder (le manuel de) la carte mère pour savoir où brancher les fils, la couche d’abstraction s’en charge pour nous.

Pour moi c’est l’invention de l’année… et je me demande encore comment personne n’y a pensé plus tôt !

Travaillez-vous pour la bonne entreprise?

Eloignez votre patron, vos collègues de votre écran et répondez sincèrement à ces questions?

  • Prenez-vous du plaisir à faire ce que vous faites au boulot?
  • Eprouvez-vous de la fierté à effectuer votre job?
  • Etes-vous heureux d’exercer ce métier qui est le votre?

Si vous avez répondu non à toutes ces questions, passez votre chemin, ce blog n’est pas fait pour vous. Si en revanche, comme moi, vous avez répondu oui, lisez attentivement ce qui suit: Vous ne travaillez peut-être pas dans la bonne entreprise.

Car voyez-vous la plupart des entreprises ne sont pas faite pour vous, ni pour moi. Ces entreprises et leurs managers ont une opinion de vous qui n’est pas très reluisante. Savez-vous vraiment ce qu’ils pensent de vous et de vos collègues? Cela se résume selon Douglas McGregor en quelques règles simples (également appelés Théorie X):

  • Règle numéro 1: Les gens détestent le travail.
  • Règle numéro 2: Les gens doivent être dirigés et menacés pour faire en sorte qu’ils remplissent les objectifs fixés par l’entreprise.
  • Règle numéro 3: Les gens aiment la sécurité, ne sont pas ambitieux, aiment qu’on leur dise ce qu’ils doivent faire et fuient les responsabilités comme la peste.
  • Règle numéro 4: Les gens aiment l’argent par dessus tout.

Ces règles s’appliquaient peut-être au XIXème siècle dans les mines de charbon où le travail était particulièrement difficile et les employés peu éduqués, mais plus aujourd’hui quand la plupart des employés de n’importe quelle entreprise informatique sont des Bac+5. Ces entreprises sont passées à coté des profonds changements qui se sont produit dans nos pays industrialisés ces 50 dernières années.

Heureusement, certains manager ont bien compris que l’on n’obtient pas forcement ce qu’on veut avec une carotte et un baton. Ces managers pensent que les gens ne sont pas fondamentalement fainéants et stupide. C’est la Théorie Y:

  • Règle numéro 1: Les gens aiment le travail, tout comme ils aiment les loisirs et le repos.
  • Règle numéro 2: Les gens n’ont pas à être forcés ou menacés pour remplir des objectifs. S’ils s’engagent à remplir des objectifs, ils mettront bien plus de moyens pour y parvenir que tout ce qu’un manager peut espérer.
  • Règle numéro 3: Les gens ne s’engageront que sur des objectifs qui leur permet soit d’augmenter leur auto-satisfaction (raaah…comment je suis trop bon!) ou de s’améliorer (ouaah…comme j’ai progressé par rapport à l’an dernier).

Ces entreprises sont peu nombreuses et leurs pratiques de management gagneraient à être mieux connues. Mais cela va peut-être changer rapidement grâce à l’irrésistible ascension de Google (et ses méthodes de management). J’espère qu’il deviendra vite un modèle pour tous les managers.