lundi 16 avril 2012

MEF, importer le constructeur

Bien le bonjour,
Bien que j'ai déjà fait un article sur le MEF, je voudrais apporter une explication sur une fonctionnalité fort intéressante à mon gout: "importingconstructor". Le but de cette option est de partager un objet du conteneur avec l'ensemble de ses plugins. Dans mon projet actuel, il me permet de donner accès à des fonctionnalités de la Kinect à chaque composant chargé par MEF.

Dans le conteneur, lors de l'instanciation du MEF:
string[] directories = Directory.GetDirectories("Plugins");
AggregateCatalog containerMaster = new AggregateCatalog();
foreach (string directory in directories)
{
      containerMaster.Catalogs.Add(new DirectoryCatalog(directory));
}
CompositionContainer container = new CompositionContainer(containerMaster);
container.ComposeExportedValue("myKinect", _myKinect);
container.ComposeParts(this);
On remarque que l'importingconstructor ne nécessite qu'une seule ligne (l'avant dernière ligne), que celle-ci ne comporte que la variable _myKinect et le nom sous lequel on référence cette variable: "myKinect".

Une fois dans un composant, il faut récupérer cette variable. Cela se fait dans le constructeur comme suit:

[ImportingConstructor]
        public MainWindow([Import("myKinect")] KinectSensor myKinect)
        {
            _kinect = myKinect;
        }
 J'espère que cette explication vous sera utile. Je fini néanmoins par vous prévenir sur le fait que cette technique peut posséder un risque, vu que vous donner accès à des ressources sans connaître le composant qui va les exploiter.

Comme on dit chez moi: Paix sur ta couche!

mardi 13 mars 2012

Trello, l'outil de planning d'équipe

Tant que l'on est dans les outils pouvant vous aider, je me dois de vous présenter Trello. Ce site permet de garder un œil sur ce que vous, et vos collaborateurs, faites en temps réel. Le principe est assez simple, commencez tout d'abord par créer une "Board" et invitez-y vos collègues de travail. Vous vous trouvez alors devant quatre colonnes:
  • To Do             --- Ce que vous comptez faire
  • Doing              --- Ce que vous êtes entrain de faire
  • To Review      --- Ce qui est fait et doit être vérifié par un tiers
  • Done              --- Ce qui est terminé
Vous allez alors créer des cartes où vous décrivez une tâche que vous placerez dans l'une de vos colonnes. Chaque carte peut être customisée, en y ajoutant une couleur, des commentaires, un vote et le plus important: les personnes qui sont concernées. Une fois l'ensemble mis en place, on peut avoir un aperçu permanent de l'évolution du travail de chacun.

La chose est très simple et très pratique lors de projet commun entre plusieurs personnes pour ne pas se demander inutilement qui fait quoi en permanence et également pour trouver qui glande sur "l'ajout du logo" depuis 4 jours.

Stack Overflow

Je m'aperçois que je ne vous ai pas encore parlé d'un site bien utile lorsque l'on développe, je parle de www.stackoverflow.com.
Ce site communautaire permet de trouver rapidement de l'aide à vos soucis que Google n'aura pu résoudre. Vous pourrez ainsi avoir des informations émanant de personnes souvent compétente et qui vous permettront de vous faire gagner beaucoup de temps. Mais ce site fonctionne également dans l'autre sens, ainsi il vous est possible d'aider les autres membres lorsque ceux-ci sont confrontés à un problème au sujet duquel vous êtes en mesure d'apporter votre aide.

Un système de point est utilisé pour vous donner de façon progressive des droits au sein du site et ainsi donner accès à de nouveaux outils pouvant vous aider. Les points se gagnent de façon diverses, que ce soit en répondant à des questions ou en posant vous même une question de façon intéressante.
N'oubliez jamais de valider les réponses que l'on vous donne de façon à montrer clairement que votre question à trouver sa réponse.

Je ne peux que je vous encourager à découvrir ce site, qui vous sera surement utile un jour. A défaut de vous aider, il pourra toujours vous faire réviser votre maitrise de l'anglais ;)

Générer un fichier dll plutôt qu'un fichier exe

C'est le matin et voilà votre pain quotidien.
Dans certains cas, du style d'une architecture MEF, il peut être utile qu'un projet génère une dll plutôt qu'un fichier exécutable, voici donc comment procéder:
  1.  Dans les propriétés de "App.xaml", changer l’action de génération en Resource
  2.  Dans les propriétés du projet, modifier le type de sortie de Application Window en Bibliothèque de classes
  3.  Pour obtenir la DLL, on finit par aller dans le menu Générer et choisir Générer la solution
Dans le cadre d'un plugin MEF qui serait incorporé entre des balises <itemsControl>, il est nécessaire d'ajouter ces étapes:
  1. Dans le Xaml, il faut changer les balises <Window> en <UserControl> et <Window.ressources> en <UserControl.ressources>
  2.  Au niveau de l’héritage de la classe, enlever le :Window
J'espère que ça aidera l'un ou l'autre fidèle passant par ici. Peace!

mercredi 7 mars 2012

Planning Poker



Après le Poker Texas Hold'em, le Poker fermé, le strip Poker, le Poker face, voici le Planning Poker !
Loin d'être une nouvelle version que vous seriez susceptible de voir dans le projet James Bond, le Planning Poker est une méthode de planification des tâches lors d'un développement logiciel.
Imaginons 5 développeurs réunis autour d'un projet et accompagné de leur Project Owner (cf Scrum), qu'ils sont couchés dans des Fatboys en sirotant un café et munis chacun d'une main de 13 cartes existants sous plusieurs versions:
0 - 0.5 - 1 - 2 - 3 - 5 - 8 - 13 - 21 - 34 - 89 - ?
0 - 0.5 - 1 - 2 - 3 - 5 - 8 - 13 - 20 - 40 - 100 - ?

Le Project Owner pose une "User Stories" (Un module à implémenter dans le programme) et le but sera d'estimer le temps nécessaire à sa réalisation. Chaque développeur va alors prendre la carte représentant le nombre de jour qu'il pense nécessaire à la confection du module et la poser face cachée sur la table. On retourne les cartes et découvre les estimations de chaque membre. On discute alors entre développeurs pour comprendre pourquoi l'un a mit plus, et un autre moins, de façon à partager les informations et ainsi avoir un partage de connaissances. On recommence jusqu'à obtenir une même estimation pour chaque membre. En cas de conflit de plus de 5minutes, on fini par choisir la durée la plus longue et on passe à l' "User Stories" suivante.
La durée peut varier entre un "Young Programmer" et un "Senior Programmer" de façon impressionnante, il est donc impensable de baser la durée de développement sur l'un ou l'autre au dépend du second.

On a donc ainsi la possibilité d'estimer la durée des modules et donc le nombre d'entre eux à réaliser durant un sprint. Au final, l'équipe possède un plan des fonctionnalités, de leur durée estimée et de leur importance de façon à organiser leur travail pour un mieux comme on peut le voir dans cet exemple:
Le dernier point à retenir est le facteur de vélocité. C'est un facteur qui va permettre d'adapter l'estimation à la réalité car 100 unités de temps ne se feront pas en 100 unités de temps mais plutôt en 50 ou 80 suivant le niveau. Et ce pour la raison que l'on se base sur des estimations et que donc on ne tombera jamais juste.

mardi 6 mars 2012

Microsoft Innovation Center

Amis du jour, bonjour. Voilà presque un mois que je roule ma bosse à mon stage et je me suis dis qu'il serai peut-être judicieux de faire un petit article au sujet de l'entreprise qui m'accueille, j'ai nommé: Microsoft. Plus exactement le Microsoft Innovation Center de Mons.
Cette ASBL créée à partir de fonds publics en privés s'est fixé comme but, de développer l'IT sous différentes formes en région wallonne et d'encourager la création de sociétés associées à ce même domaine. Elle a également un but très louable qui est d'encadrer des étudiants en dernière année issus des écoles d'informatique de la région et de les mettre en relation avec des entreprises leur proposant un stage. C'est ainsi qu'en cette belle année 2012, on se retrouve à 27 stagiaires au sein de l'entreprise pour développer des projets divers et variés.
Mais vu que des images valent tous les mots du monde, je vous propose de visionner cette vidéo, tournée il y a peu dans nos locaux:



Comme dis précédemment, munis de différents projets nous tentons de mener à bien nos idées. Deux de ces projets relatifs à l'équipement Kinect et au robot d'Aldebaran Nao concernent 4 étudiants (dont je fais partie) et dont je vous propose de retrouver un article écrit par nos collègues de Technocité suivant ce lien.

Le Microsoft Innovation Center propose également un grand nombre de formations et de certification auxquelles vous pouvez vous inscrire ici : http://mic.fikket.be/

Retrouvez toutes nos vidéos sur YouTube : http://www.youtube.com/user/MICBELGIQUE

Le blog du MIC : http://blog.mic-belgique.be/
Le site officiel : http://www.mic-belgique.be/

lundi 5 mars 2012

Gestion des logs avec NLog

Aujourd'hui c'est lundi, c'est gratuit, dehors c'est le smog alors attaquons les logs.
Mais un log c'est quoi?
Et bien ça peut être bien des choses mais de façon simplifiée, c'est une façon de garder une trace de certains évènements qui se sont produits durant l'exécution du programme. On peut gérer ces logs de plusieurs façons mais les plus conventionnelles sont l'affichage dans un fichier texte ou dans la console.
On va dés lors, à certains moments dans notre code, placer des enregistrements du contenu de variables de façon à les analyser à posteriori.

On enregistre 3 types d'informations:
  • Le débugging: Ce qui va nous permettre en analysant les logs de voir ce qui génère les bugs et que l'on a pas su voir via le débogueur classique de Visual Studio par exemple.
  • Le tracing: On va consigner les évènements qui se sont produits dans un but de statistiques ou analyse de fonctionnement. On trouvera ainsi la trace d'une connexion à une base de donnée, le chargement d'un module, l'adresse d'une requête, ...
  • La gestion des erreurs: Une fois le logiciel fonctionnel, on va pouvoir consigner les évènements anormaux qui ont nuis au fonctionnement normal du programme. Un plantage, une requête échouée, un fichier inexistant, une écriture refusée, un serveur indisponible, ...

Bien vite indispensable, les logs doivent se faire au fur et à mesure de la conception du produit. Ainsi lors d'un plantage, une consultation des logs permet de voir la dernière action effectuée correctement et peut-être même celle qui a échoué, selon la façon que l'on a implémenté nos logs.
De façon à simplifier le travail, des outils sont mis à notre disposition, l'un d'eux est "NLog" que vous allez pouvoir télécharger via ce lien: ici
Un autre système de log se nomme "Log4Net" et est développé par Apache: ici
Des tutoriels sont disponibles sur leur site respectif et sont suffisant pour une structure simple.

Il est également intéressant de lire cet article sur la façon de reporter un bug de façon efficace en ce lieu
Et pour ceux qui pensent que le débogueur de Visual Studio ne sert qu'à mettre des points d'arrêts, voici deux liens possédant divers astuces pour vous faire gagner du temps: Ici et là.


System.Windows.MessageBox.Show("Enjoy !");