mardi 13 mars 2012

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 !");

vendredi 2 mars 2012

Incorporer un texte dans une image

Aujourd'hui, petite astuce. Imaginez que vous possédez un panel d'images associées à des données mais que vu leur nombre il n'est pas toujours possible de créer une image différente pour chaque. Et bien la solution pourrai être de partir d'un corps commun et d'y ajouter le nom de la donnée de façon à pouvoir différencier les images une fois affichées dans le panel.



Tout d'abord, le traitement sur le texte à incorporer se fera via les lignes suivantes:
Font font = new Font("arial", 24, System.Drawing.FontStyle.Bold);
StringFormat format = new StringFormat {Alignment = StringAlignment.Center,
                                                    LineAlignment = StringAlignment.Center };

On extrait notre image commune et on la place dans une variable Image:
Image img = Image.FromFile("Lien vers le fichier image");
Image tmpImg = new Bitmap(img, img.Width, img.Height);
Graphics graphics = Graphics.FromImage(tmpImg);

Pour pouvoir contrôler l'endroit où le texte se situera sur l'image, on crée un rectangle (ou un point, un cercle, une ellipse, ...) dont les dimensions ne devront pas dépasser la résolution de l'image. Une petite marge permettra de ne pas voir le texte collé au bord. Ce qui donne pour une image en 300x180:
const float x = 10.0F;
const float y = 10.0F;
const float width = 280.0F;
const float height = 160.0F;
RectangleF drawRect = new RectangleF(x, y, width, height);

On place tous ces ingrédients en commun pour obtenir notre résultat:
graphics.DrawString("Mon superbe texte à incorporer", font, Brushes.White, drawRect, format);

Comme il serait dommage de devoir recréer ces images à chaque fois, il serait intéressant de stocker notre image dans un fichier temporaire duquel il sera plus simple d'en extraire la donnée:
tmpImg.Save("Lien vers le fichier à créer");


peace and prosperity!

mardi 28 février 2012

Scrum What The ... ?

Scrum est un site sur le rugby et ce qui s'y rapporte: Les dents cassées, les nuques brisées, les tonnes du boues, les contacts (qui tueraient un joueur de football en un instant), les barbus, les ... euh non, peut-être que non en fait. Car imaginer des informaticiens barbus d'accord, mais vous avez déjà vu de la boue dans un pc vous?

Donc en fait Scrum, en réalité, est un framework dédié à la gestion de projets. Cette méthodologie n'est pas une manière de développer mais plutôt de gérer le développement. Elle se base sur une série de principes simples: Une équipe de développeurs hétéroclite composée de 5 à 9 personnes environ, d'un "Project Owner" qui sera la voix du groupe et un "Scrum Master" qui lui n'est pas un développeur et dont le rôle est de faire tomber les obstacles pouvant ralentir le développement d'un produit.
Armé de ces collaborateurs, l'équipe va travailler sur des cycles de 1 mois durant lesquels un produit livrable sera créé. Durant cette période, des réunions quotidiennes, appelées "mêlée quotidienne" seront organisées et d'autres se feront en début et fin de cycle.


Mais qu'est ce que le rugby vient faire la dedans sérieux? Et bien simplement car l'ensemble des termes sont tirés du monde du rugby, probablement pour faire croire aux informaticiens qu'ils faisaient du sport chaque jour...

Pour d'avantages d'informations sur le sujet, je vous invite à lire les liens suivants: ici et là

et de passer le test: en ce lieu