Archive for January, 2009

Tweened Library on CodePlex and Ms-Pl [Library]

2 commentaires

    Salut à tous,

    J'ai décidé de changer l'hébergement du projet Tweened, il est donc désormais disponible sur le portail Code Plex. Je trouve celui-ci bien plus pratique d'utilisation, il permet aussi une gestion des versions beaucoup plus agréable. Deuxième grand changement : le type de licence affectée. Tweened est désormais sous licence Ms-Pl car la licence Gnu posait des problèmes puisqu'en la lisant et sur les conseils de Christophe, je me suis rendu compte que celle-ci avait un comportement viral, j'avoue que je ne m'étais pas vraiment renseigné là-dessus. Pour faire simple, quand on crée un projet avec la licence Gnu, ce qui en est dérivé doit avoir une licence Gnu. Pas très très funky tout ça :) mais tout est maintenant dans l'ordre et j'ai rajouté de nombreux exemples téléchargeables sur CodePlex ainsi que le diagramme des classes. Hésitez pas à poster des commentaires si vous avez des questions...

    La propagation événementielle Bubbling en C#

    Aucun commentaire

      En tant que développeur ou même intégrateur vous avez sans déjà entendu parler de modèle événementiel. Le modèle événementiel d'un langage logique comme par exemple C# est crucial car c'est lui qui permet les interactions utilisateur.

      Le modèle événementiel repose sur deux principes importants :

      • Le premier est le principe de diffusion d’événements, par exemple lorsque vous cliquez sur un bouton celui-ci diffuse un évènement Click

      • Le second principe est celui d’écouteur. Il est bien beau de pouvoir diffuser des évènements, cependant il faut être à l’écoute de ceux-ci pour déclencher une action adéquate. L’objet qui réagit aux événements diffusés est appelé écouteur. En générale, l’écouteur est une méthode comme par exemple la méthode Page_Loaded.

      On retrouve ces deux principes dans la vie réelle, voici un exemple :

      • Vous décidez de prendre un abonnement à un site Web d’annonces immobilières, le fait de vous abonner fait de vous un écouteur. En effet, à chaque nouvelle annonce, vous recevrez un email d’information concernant le bien immobilier. Vous écoutez le site Web qui agit en tant que diffuseur de l’évènement « nouvelle annonce mise en ligne ». A chaque nouvelle annonce reçue vous décidez ou non de visiter le bien. Ce qui correspond bien à une action en retour.

      • Importante mais souvent oubliée cette phase est pourtant très importante : lorsque vous avez trouvé le bien le plus approprié, vous décidez d’arrêter la souscription à ce site, dès lors vous ne recevrez plus d’email. Autrement dit vous supprimez l’écouteur :)

      C’est exactement ce qui arrive lorsque vous développez pour Silverlight. C# voici les deux mêmes méthodes écrites différemment, vous remarquerez que l’écriture est nettement plus appropriée et claire, de plus vous aurez une aide à la complétion via l’IntelliSense :

      • souscription :

      //Diffuseur.Événement += écouteur ;
       
      monRectangle.MouseLeftButtonDown += monRectangle_MouseLeftButtonDown;

      • désinscription :

      //Diffuseur.Événement -= écouteur ;
       
      monRectangle.MouseLeftButtonDown -= monRectangle_MouseLeftButtonDown;

      Il est important de connaitre au moins ces bases car nous allons aborder un point assez spécifique aux langages de haut niveaux. En fait lorsqu'un objet graphique diffuse un événement ce n'est pas forcément l'objet auquel on a souscrit un écouteur. Je m'explique : lorsqu'on crée une série de menus au sein d'une boucle, on ne souhaite peut-être pas à chaque fois ajouter l'écoute du click sur chacun de ces menus. Pourquoi ?

      1 - parce que cela est assez gourmant en performance et en mémoire
      2 - parce que pour chaque menu il faudra supprimer l'écoute si besoin

      Pour éviter de mettre un écouteur sur chaque menu, il suffit simplement de mettre un écouteur sur le conteneur de ceux-ci. En fait lorsque vous souscrivez un écouteur à un conteneur d'objet lorsque l'événement est diffusé vous avez la possibilité de réupérer l'objet source diffusant l'événement au sein du conteneur. je vous ai fait un joli schéma tout en haut.

      Je vous donne également un exemple d'utilisation ici :

      private void CreateMenu()
      {
            var i = 0;
            foreach (string menu in myMenus)
            {
                  Debug.WriteLine(menu);
                  var monMenu = new Menu();
                  //monButton.Content = menu;
                  monMenu.Name = menu + "_btn";
                  monMenu.Titre = menu;
                  monMenu.num = i;
                  monMenu.Height = 22;
                  monMenu.Margin = new Thickness(0, 10, 0, 0);
                  i++;
                  myStack.Children.Add(monMenu);
       
                  //ici on évite d'écrire la chose en dessous ::
                  //monMenu.MouseLeftButtonUp += new MouseButtonEventHandler(monMenu_MouseLeftButtonUp);
       
            }
       
            myStack.MouseLeftButtonUp += new MouseButtonEventHandler(monMenu_MouseLeftButtonUp);
      }
       
      void monMenu_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
      {
            //en premier je teste si je clique bien sur un objet de type Menu
            Debug.WriteLine(e.OriginalSource);
       
            //e.OriginalSource renvoie bien l'objet source qui diffuse l'événement
            Debug.WriteLine("le nom :: " + (e.OriginalSource as Menu).Name);
       
            int actualMenu = (e.OriginalSource as Menu).num;
            rubTo.ContinueTo((double)(actualMenu * -215));
            rubTween.Start();
       
      }

      Il est à noter qu'il est possible d'arrêter la propagation événementielle dans certains cas cela est vraiment pratique car la propriété MouseChildren n'existe pas à priori en C#. Pour arrêter la propagation événementiel il suffira simplement de faire :

      void monMenu_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
      {
            //là j'arrête la propagation
            e.Handled = true;
      }

      Moonlight release

      Aucun commentaire
        times reader

        Le project Moonlight 1 est disponible depuis le 20 janvier au téléchargement. Pour rappel Moonlight est un portage du lecteur Silverlight sur des systèmes non supportés nativement. Ce projet repose sur le framework Mono qui est un portage de .Net sur plusieurs distributions du système Linux dont MacOS X. Ce projet a trois objectifs :

        • Donner un environnement de développement Silverlight sur d'autres plate-forme que Windows
        • Porter le lecteur Silverlight sur Linux
        • permettre la création d'applications Desktop Silverlight sur linux un peu comme Air.

        Il est clair que pour un lecteur multi-système comme Silverlight, proposer un environnement de développement autre que Windows pourrait être judicieux. Ainsi l'application du Times ' Reader ressemble comme deux goutte d'eau à une application traditionnelle. Le moteur de texte de Silverlight étant vraiment très performant, celle-ci a été réalisable simplement et l'affichage de pavés de texte animés est fluide et vraiment agréable.vous pouvez la télécharger ici.

        Il devrait subsister toujours cette période d'un an entre une version de Silverlight et une version de moonlight, voici la roadMap actuelle pour Moonlight 2 :

        versions Date
        Alpha 18 Mars 2009
        Beta Mi-Avril 2009
        Final Septembre 2009

        Concours 10K pour partir au Mix

        Aucun commentaire

          Si vous êtes un mordu de WPF et de Silverlight, il ne vous reste plus que 8 petites journées pour participer au TenK contest. Ce concours récompensera les meilleures oeuvres produites dans ces deux technologies et n'excédant pas un poids de 10 Ko. Le premier prix n'est rien d'autres que le séjours à Las Vegas tous frais payés pour participer à l'événement Microsoft de l'année. Le Mix est la référence si vous souhaitez être tenu informé des dernières nouveautés et avant premières Mircrosoft. Silverlight 3 y sera sans doute évoqué, le champagne coulera à flot lors des soirées et vous vous glisserez dans la peau d'un Brad Pitt ou d'un Georges Clooney, la belle vie quoi ;)