Blog de Bertrand Vergnault (MSP)

Développeur .NET, Toulouse
[IC 09] Retour d’expérience Imagine Cup 09

Tout a commencé il y a un peu plus d’un an lorsque Julien, Olivier et moi-même avons décidé de participer au concours Imagine Cup. Passionnés par les technologies Microsoft et en particulier par les technologies .NET, il va de soi que participer au plus grand concours sur les nouvelles technologies organisé par Microsoft est un beau challenge !

De plus, étant donné que nous sommes dans la même classe et que nous travaillions alors sur un projet commun à savoir la communauté Dotnet-France, nous ne pouvions pas ne pas y participer ! Mais pour avoir une équipe complète, il nous manquait un membre + un mentor. Nous nous sommes alors tournés vers deux personnes que nous connaissions de SUPINFO : Yann Lautredou (à l’époque directeur du laboratoire .NET de SUPINFO) en tant que mentor et Mauricio Diaz Orlich (à l’époque directeur du laboratoire Web&Dev de SUPINFO).

Atout supplémentaire pour l’équipe, Mauricio étant MSP, il faisait grimper le quota à 3 MSP au total dans l’équipe en plus de Julien et Olivier.

clip_image002[4]

De gauche à droite, Olivier Courtois, Julien Dollon, Vincent Bouatou (Microsoftee), Mauricio Diaz Orlich et Bertrand Vergnault

Pour rappel voici le thème de l’année : « Imaginez un monde où la technologie nous aide à répondre aux enjeux les plus cruciaux de notre société ».

Ce thème étant très vaste, nous avons mis du temps pour nous focaliser sur une problématique et en ressortir un réel projet à présenter pour ce concours : une solution de protection des enfants sur Internet.

Comment en sommes-nous arrivés à la définition de ce projet ? Olivier ayant travaillé pendant plusieurs années avec l’association Docteur Souris dont le but est d’apporter les nouvelles technologies dont Internet aux enfants hospitalisés de longue durée, une problématique est très vite ressortie : Comment assurer la sécurité des enfants sur Internet de façon fiable et sûre ?

C’est donc à cette problématique que nous avons souhaité apporter un élément de réponse et de le présenter au concours Imagine Cup dans la catégorie Software Design, catégorie reine de la compétition.

Concernant, la définition du projet et des partenaires, je vous renvoie vers l’article d’Olivier où sont exposés tous les documents que l’on a rendu pour la compétition.

En ce qui concerne la répartition des rôles, il a été défini deux chefs de projet à savoir Olivier et Julien. Olivier s’occupant des relations avec le partenaire principal (Docteur Souris) ainsi que de la partie communication externe. Julien pris la responsabilité technique du projet ainsi que le rôle de designer de l’équipe.

Concernant le développement des applications composant la solution de protection des enfants sur Internet, elle a été divisé comme suit : un développeur pour le site web de la communauté réalisé à l’aide de SharePoint 2007, un développeur sur la partie moteur communautaire permettant de centraliser et d’analyser tous les résultats des évaluations des sites web testés, un développeur sur la partie contrôle parental PC qui consiste en le client installé sur l’ordinateur familial et qui permet d’analyser et de rediriger en cas de besoin le trafic http et enfin un développeur dont le rôle était de développer les différents « bookmarklets » permettant à un utilisateur de pouvoir soumettre et de pouvoir noter un site très facilement.

Grâce à ce projet, nous avons eu la chance de pouvoir être sélectionné pour la finale française de la compétition. Pour cela, il a fallu rédiger un document d’une quinzaine de page (disponible sur le blog d’Olivier) permettant de présenter l’équipe, la problématique choisie, la solution à cette problématique ainsi que les technologies employées pour arriver à nos fins.

Nous faisions donc partie des 6 équipes finalistes et afin de nous préparer au mieux pour le grand moment de la soutenance devant le jury de la finale française, Microsoft avait organisé un week-end de coaching pour toutes les équipes retenues.

Ce bootcamp a été organisé dans un grand hôtel en banlieue parisienne…une sorte de mise au vert avant le grand rendez-vous !

Au programme du week-end : échanges avec des membres de la DPE de Microsoft à propos de la problématique et des technologies employées pour la résoudre, mise en place d’un « elevator pitch » permettant de vendre notre projet en quelques mots ainsi qu’un travail de réflexion sur la mise en place d’un business plan pour notre solution.

clip_image004

Salles d’ateliers durant le bootcamp

Nous avons donc pu nous rendre compte que l’on avait absolument pas assez bossé…et les membres de la DPE qui étaient présents ne se sont pas gênés pour nous le faire remarquer :D Tout ceci bien sûr dans l’optique de nous donner un coup de fouet pour que l’on se mette à 300% sur le projet !

Ce week-end a été conclu par un passage devant un jury blanc afin de nous entrainer à la mise en place de notre discours durant la finale française.

clip_image006

Nos deux chefs de projet ;)

Pour notre équipe, ce week-end de coaching a constitué une étape importante puisqu’il s’agissait en fait de la première vraie rencontre entre tous les membres de l’équipe : Mauricio et Yann étant basés à Paris, nous n’avions pas pu jusqu’alors nous rassembler ! L’effet de cohésion dans l’équipe ne s’en ai vu qu’augmentée après ce week-end ;)

Après ce bootcamp intense, nous nous sommes donc remis au travail de plus belle afin d’être prêt pour la finale française qui avait lieu dans les locaux de la DPE, rue de l’Université à Paris.

Mais dans l’optique de réaliser une prestation de grande qualité, Olivier, Julien et moi avons rejoint Mauricio et Yann à Paris 3 jours avant le jour de la finale. SUPINFO nous a accueilli dans ses locaux rue de Bassano où l’on a pu préparer notre présentation : les slides, les démos, le story-telling, etc…devant plusieurs membres de l’administration comme Marc Pybourdin, Thierry Boidart ainsi que certains des directeurs de labo de SUPINFO. Durant ces 3 jours de préparation, nous avons modifié, déplacé, supprimé, réajusté les démos, les diapos de présentation, etc…afin d’obtenir le résultat présent sur le blog d’Olivier (en ce qui concerne la présentation en elle-même).

Puis le jour de la finale tant attendue arriva : attente insoutenable dans les locaux de la DPE puis premier passage devant un premier jury composé entre autres de Vincent Bellet et Pascal Belaud. La présentation se passe à merveille : Mauricio enchaîne le speech en anglais, les démos passent nickel ainsi que l’engouement du jury lors des réponses à leurs questions.

Mais ce n’est pas fini, il reste un second jury à convaincre !!...Il reste encore 20 minutes de présentation + 10 minutes de réponse aux questions avant d’aller pouvoir se détendre et profiter de la réception organisée par MS :D

Le second jury est composé de responsables d’associations ainsi que Guillaume Belmas, MVP. Ce second jury nous a valu quelques frayeurs et nous l’avons senti moins convaincu face à notre propos mais cependant, nous étions plutôt contents de nos deux prestations.

Une fois ce moment passé, direction le premier étage de la Tour Eiffel : Microsoft aime faire les choses en grand et c’est dans ce symbole parisien que nous avons pu fêter et faire partager notre projet aux invités. Chaque équipe avait en effet à disposition un stand lui permettant d’exposer son projet aux différents journalistes, Microsoftees, personnages politiques, etc…présents lors de cette réception.

Vint ensuite le moment tant redouté de l’annonce des résultats…ce moment qui nous a valu une terrible déception (nous souhaitions évidemment la première place !) : nous sommes annoncé comme 3ème !...médaille de bronze…le billet vers la finale mondiale au Caire en Egypte nous passe sous le nez !

clip_image008

Notre “médaille” pour la 3ème place à la finale française

Nous repartons alors un peu déçu mais avec notre lot de consolation sous le bras (une Xbox 360)…

Ce n’est seulement que le lendemain où nous discutons avec les autres membres de l’équipe et poussé par Vincent Bouatou pour participer à un des awards organisé durant le concours. L’award en question se prénommant : H.E. Mrs. Suzanne Mubarak Special Award. En effet, la femme du Président Egyptien étant fondatrice d’une fondation pour la protection des enfants, l’égalité des femmes, etc…et dont le sujet de cet award devait rassembler les 5 meilleures équipes parmi celles du monde entier de la catégorie Software Design qui répondaient aux buts de cette fondation, nous avons donc pu nous inscrire à cette catégorie.

Il a fallu rédiger de nouveau un document, de 5 pages maximum, expliquant notre projet.

Une semaine plus tard nous avons eu la très très bonne surprise d’apprendre que nous avions été sélectionné directement pour la finale mondiale au Caire en Egypte parmi les 94 équipes qui s’étaient présentées pour cette catégorie.

Nous prenons notre revanche sur la déception de la finale française !...A nous le Caire !!!

Nous avons pu aussi voir nos adversaires : 4 autres équipes de nationalité américaine, égyptienne, polonaise et une équipe indonésienne.

La finale mondiale a été une semaine exceptionnelle : entre l’hôtel 5 étoiles luxueux, les visites des pyramides et du sphinx, les échanges avec les étudiants du monde entier et pour finir en apothéose avec le World Festival devant les pyramides et la remise des prix !!

clip_image010

L’équipe en compagnie de Vincent Bouatou devant notre stand à la finale mondiale

Cette expérience a été pour nous l’une des plus riches de notre vie. Non seulement en termes de découverte du monde (différentes cultures) mais aussi sur la conduite de projet, technique et surtout le fait de porter une idée et de se battre pour que l’on le croit en nous.

Auteur : Bertrand Vergnault

Co-Auteur : Julien Dollon

clip_image012

Remise du prix pour la 3ème place à la finale mondiale (on peut noter que Mauricio se prépare à twitter l’info :D )

 

IMGP0298

World Festival devant les Pyramides

Posted: Jan 20 2010, 18:45 by bertrandv | Comments (3) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: Autres | Dotnet-France | Général
[MSP] Je rejoins aujourd’hui la grande communauté des MSP

C’est aujourd’hui que j’ai pu recevoir la très bonne nouvelle !

Je rejoins avec le plus grand honneur et plaisir la grande communauté des MSP :)

image001

Merci à Microsoft de m’accorder toute leur confiance.

Je tiens à remercier tous les MSP/MVP de Dotnet-France qui ont pu me soutenir et en particulier une personne qui m’est chère : Julien Dollon.

Posted: Sep 23 2009, 21:17 by bertrandv | Comments (7) RSS comment feed |
  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
[PowerShell / WPF] Exécuter une commande PowerShell dans WPF

Alors qu’un collègue admin dont je ne citerai pas le nom souhaitait savoir comment réaliser ceci, je me suis dit qu’un petit coup de pouce de la part d’un développeur serait sympa !! :D

Tout d’abord, il faut ajouter la référence Sytem.Management.Automation à notre application. Hors, le problème est qu’elle ne nous est pas proposée dans la liste des références disponibles. Cependant, nous allons quand même pouvoir la référencer éditant le fichier csproj à la main avec le bloc notes.

Voici la ligne à ajouter à l’intérieur de la balise ItemGroup :

<Reference Include="System.Management.Automation" />

A la réouverture de notre projet, la référence est maintenant bien ajoutée et il faut ensuite ajouter l’espace de nom à notre classe :

using System.Management.Automation;

Rentrons maintenant dans le vif du sujet :

J’ai créé, pour l’exemple, une classe CommandResult qui contient deux propriétés : Nom et Definition :

public class CommandResult
{
    public string Name { get; set; }
    public string Definition { get; set; }
}

J’ai créé aussi une classe CommandManager qui contient une méthode GetPSCommands permettant de renvoyer une liste de CommandResult correspondant à toutes les commandes existants en PowerShell :

public class CommandManager
{
    public List<CommandResult> GetPSCommands()
    {
        //On créé un pipeline powershell permettant d'exécuter des commandes
        PowerShell powershell = PowerShell.Create();
        //On ajoute la commande souhaitée
        powershell.AddCommand("get-command");
        //On exécute la commande
        IAsyncResult result = powershell.BeginInvoke();
        PSDataCollection<PSObject> lstPSData = powershell.EndInvoke(result);

        List<CommandResult> lstResults = new List<CommandResult>();
        if (!lstPSData.Count.Equals(0))
            //On récupère les membres souhaités de chaque résultat
            lstResults = (from o in lstPSData
                          select new CommandResult()
                          {
                              Definition = o.Members["Definition"].Value.ToString(),
                              Name = o.Members["Name"].Value.ToString()
                          }).ToList();
        return lstResults;
    }
}

Plus d’infos à propos des types de chaque objet utilisé sur la msdn.

Maintenant nous allons afficher les résultats dans une simple ListView d’une application WPF :

Voilà pour le côté XAML :

<Grid>
    <ListView x:Name="lstResultCommand">
        <ListView.View>
            <GridView>
                <GridViewColumn DisplayMemberBinding="{Binding Path=Name}" />
                <GridViewColumn DisplayMemberBinding="{Binding Path=Definition}" />
            </GridView>
        </ListView.View>
    </ListView>
</Grid>

Voilà pour le côté code-behind :

public Window1()
{
    InitializeComponent();

    this.lstResultCommand.ItemsSource = new CommandManager().GetPSCommands();
}

Et maintenant voici le résultat :

PSCommands

Posted: Aug 31 2009, 21:39 by bertrandv | Comments (4) RSS comment feed |
  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: WPF | C#
[News] Sortie de Silverlight 3 en version RTW

Silverlight-3-the-Future-of-Flash-Extermination

Aujourd’hui vient de sortir Silverlight 3 en version RTW avec le numéro de version 3.0.40624.0.

Il est possible de le télécharger sur le site officiel.

Vous pourrez retrouver les nouveautés de Silverlight 3 dans cet article de Julien Dollon.

Posted: Jul 09 2009, 22:05 by bertrandv | Comments (5) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: Silverlight
[WPF] Profiler ses applications WPF

Ayant développé une application WPF que je trouvai très gourmande en ressources, j’ai eu à profiler celle-ci afin de savoir précisément quelles animations ou quels composants consommaient trop de ressources.

Pour cela, un outil très performant et très puissant m’a permis de réaliser cela : la WPF Performance Suite présent dans le SDK de Windows.

Pour vous éviter d’avoir à télécharger tout le SDK voici le msi directement téléchargeable ici.

Cette application se compose de plusieurs fonctionnalités de profilage organisable par onglets :

wpfperf1

Le premier onglet contenant l’application Perforator va vous permettre d’analyser le rendu de votre application : vous pourrez observer le rafraichissement de vos animations, le nombre de frames/seconde, etc…

La seconde application est Visual Profiler. Cette application va vous permettre de profiler les services WPF permettant la gestion des évènements et la disposition des éléments dans votre application.

Je ne présenterai que l’application Perforator qui m’a le plus aidé dans mon cas. Pour les autres applications, je vous conseille l’article de la msdn qui est très bien fait à ce sujet.

Perforator vous permet, par exemple, en temps réel, de modifier les paramètres de rendu de votre application afin d’observer les fluctuations que cela apporte. De plus, chose très intéressante dans mon cas, les rafraichissement de chaque composant de votre application est mis en avant grâce à une coloration de ces composants. A chaque rafraichissement du composant, celui-ci change de couleur. Pour cela, il faut activer l’option : “Show dirty region update overlay”. Voici ce que l’on observe :

wpfperf2 

En passant sur un des boutons, on déclenche une animation et la zone d’animation se colore d’une couleur différente à chaque rafraichissement, c’est-à-dire très rapidement !

On peut donc facilement observer les animations consommatrices de ressources par exemple.

Ces outils sont donc très puissants et je vous recommande de lire l’article de la msdn que j’ai précité plus haut pour avoir une vision complète de tout ce qu'il est possible de visualiser à l'aide de cette d'outils. Je n’ai en effet délibérément présenté qu’une des nombreuses fonctionnalités de cette suite.

Posted: Jun 11 2009, 23:06 by bertrandv | Comments (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: WPF
[Bing] Le moteur de recherche Bing est disponible !

Depuis ce matin, le moteur de recherche Bing de Microsoft est disponible en version bêta.

Bing.com

Parmi les fonctionnalités intéressantes :

- Filtre des résultats d’images suivants plusieurs critères tels que la taille, la couleur (N&B ou couleur), le type d’image ainsi que la disposition :

Bing.com.images

- De même pour les vidéos :

Bing.com.videos

- Pour concurrencer Google Maps, il y a bien sûr accès à Microsoft Virtual Earth reprenant la même interface que Live Search Maps :

Bing.com.virtual.earth

Enfin, Bing intègre un contrôle parental avec deux niveaux de filtrages : Modéré et Strict.

Maintenant à vous de le tester ! 

Posted: Jun 01 2009, 09:17 by bertrandv | Comments (2) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: Autres | Microsoft
[ASP.NET MVC] Tutorial "NerdDinner" disponible

Sur son blog ScottGu's publie aujourd'hui un article concernant la mise à disposition d'un tutorial ASP.NET MVC au format HTML. Beaucoup plus lisible qu'un simple PDF ;)

Retrouvez donc ce tutorial à cette adresse : http://weblogs.asp.net/scottgu/archive/2009/04/28/free-asp-net-mvc-nerddinner-tutorial-now-in-html.aspx

Posted: Apr 28 2009, 20:40 by bertrandv | Comments (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: ASP.NET | Général
[WPF]Drag’n’Move d’un objet sur une surface

Voici comment implémenter une fonctionnalité de Drag’n’Move sur une surface comme un Canvas par exemple.

Tout d’abord, voici l’architecture des contrôles que l’on utilisera pour réaliser cette fonctionnalité du côté XAML : 

<Window x:Class="DragNMove.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <Canvas x:Name="drag_surface" Background="Azure">
            <Label x:Name="drag_label" 
				   MouseDown="drag_label_MouseDown"
				   MouseMove="drag_label_MouseMove" 
				   MouseUp="drag_label_MouseUp" 
				   Content="Mon Label">
			</Label>
        </Canvas>
    </Grid>
</Window>
Dans mon exemple j’ai choisi de pouvoir déplacer un label dans un canvas.

On peut noter que l’on va s’abonner à 3 évènements afin de réaliser notre fonctionnalité :

  • MouseDown : Cet évènement va nous permettre de verrouiller le mouvement de la souris sur notre label : même si la souris sort hors des limites du contrôle, la fonctionnalité de drag’n’move sera active.
    Il est aussi possible de préciser le bouton de la souris sur lequel on souhaite activer la fonctionnalité.
  • MouseMove : C’est dans cet évènement que l’on va déplacer le contrôle dans notre surface.
  • MouseUp : C’est dans cet évènement que le déverrouillera le mouvement de la souris sur le contrôle.

Voici donc l’implémentation de ces 3 évènements :

private void drag_label_MouseDown(object sender, MouseButtonEventArgs e)
{
    //On verrouille la souris sur le label
    //si le bouton gauche est pressé
    if (e.LeftButton.Equals(MouseButtonState.Pressed))
        this.drag_button.CaptureMouse();
}

private void drag_label_MouseMove(object sender, MouseEventArgs e)
{
    if (e.LeftButton.Equals(MouseButtonState.Pressed))
    {
        //On modifie la position du label dans le canvas 
		//en récupérant la position de la souris
        Canvas.SetLeft(this.drag_button, e.GetPosition(this.drag_surface).X);
        Canvas.SetTop(this.drag_button, e.GetPosition(this.drag_surface).Y);
    }
}

private void drag_label_MouseUp(object sender, MouseButtonEventArgs e)
{
    //On déverrouille la souris
    this.drag_button.ReleaseMouseCapture();
}

 

 

Et voilà c’est terminé !…il vous est tout de même possible d’améliorer le tout pour limiter le déplacement à l’intérieur du canvas.

Posted: Apr 19 2009, 18:15 by bertrandv | Comments (2) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: C# | WPF
[ASP.NET MVC] Sortie de la version finale 1.0 !

La sortie de la version finale du Framework ASP.NET MVC est sortie aujourd’hui.

Au niveau des changements apportés par rapport à la version RC2 :

- correction de quelques bugs
- mise à jour de la version de JQuery intégrée au Framework MVC : passage à la version 1.3.2

La version finale 1.0 est disponible en téléchargement ici.

Posted: Mar 18 2009, 16:00 by bertrandv | Comments (2) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: ASP.NET
[ASP.NET MVC]Partie 3 : Présentation du template de Visual Studio

Suite à mon premier billet à propos du Framework ASP.NET MVC, je vais présenter désormais le template de base dans Visual Studio.

Image1

Sur le screenshot suivant, on peut voir que les dossiers correspondant à chaque couche du design pattern sont créés par défaut.

Le dossier “Scripts” contient les librairies JQuery en version 1.2.6. Il vous est donc possible d’utiliser directement JQuery pour améliorer l’expérience utilisateur de votre application.

Le dossier “Content” contient le CSS de votre application.

Le fichier “Global.asax” va contenir la logique de routage de votre application : l’URL mapping par défaut sera {controller} / {action} / {id}.

On peut noter que dans le dossier “Views” des sous dossiers sont créés contenant nos pages ASPX de l’application. En effet, pour chaque controller créé, il y aura un sous-dossier de créé dans le dossier “Views”.

Ensuite, pour chaque action créé dans le controller, il sera possible de créer une vue correspondante qui viendra se créer dans le sous-dossier correspondant au controller dans le dossier “Views”.

On peut remarquer aussi que dans le dossier “Views” un dossier “Shared”. Ce dossier là contiendra les MasterPages utilisées dans notre application.

Le dossier Models contiendra donc notre couche de persistance de données : Linq To Entities par exemple ou tout autre provider de votre choix !

On peut remarquer qu’un projet de tests unitaires a été créé par la même occasion. Comme je l’ai indiqué dans la présentation du Framework MVC, ce design pattern permet le TDD (Test-Driven Development).

Voilà pour aujourd’hui !…dans un prochain billet je rentrerai plus en détail dans le code. Les bases sont maintenant posées !

Posted: Mar 16 2009, 08:20 by bertrandv | Comments (0) RSS comment feed |
  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Filed under: