Nos Slides des Techdays 2012

Aucun commentaire

    Nous mettons en ligne une présentation de notre conférence des TechDays 2012 au format PowerPoint. L'objectif de la conférence était de mettre en valeur l'importance et l'intérêt d'une charte graphique propre à chaque client et/ou application... Read more »

    Bookmark and Share

    Windows 8 Consumer Preview

    Aucun commentaire


      Microsoft propose en téléchargement une nouvelle version de son système d'exploitation Windows 8 pour le grand public. Comme nous l'avons déjà abordé Windows 8 cible cette fois les tablettes et propose donc deux modes d'affichage. Le premier est celui que nous connaissons déjà aujourd'ui, le second est l'adaptation de l'ergonomie et du graphisme METRO pour les tablettes. Comme on a pu le voir avec la dernière version de Visual Studio 2011, Microsoft oriente désormais les chartes graphiques de ses logiciels sur les mêmes standards adoptés par Adobe ou Apple mais en les adaptant à la norme METRO.

      Vous pourrez télécharger Windows 8 Consumer Preview ici ainsi que l'ensemble des outils nécessaires dont une nouvelle version d'Expression Blend ici.

      Bookmark and Share

      Notre conférence aux TechDays de Microsoft

      Aucun commentaire

        j'aurai le plaisir d'animer, avec Aude Mousset, la conférence "Retour d'expérience sur la conception et la construction d'une application METRO pour WP7".
        Celle-ci se tiendra aux TechDays de Microsoft le jeudi 9 février de 14h30 à 15h30, donc dans 2 jours :) En exclusivité, vous découvrirez une application Windows Phone 7 unique et les coulisses de sa fabrication.

        Venez nombreux car avec une cinquantaine de slides la conférence sera assez riche et intense !

        Bookmark and Share

        Conférence sur les nouvelles interfaces tactiles

        Aucun commentaire

          Bonjour à tous,
          Microsoft et certains de ces partenaires organisent un nouvel après-midi du développement au menu : Design et nouvelles interfaces naturelles. C'est après les fêtes et c'est gratuit, si vous vous posez des questions ou êtes curieux à propos du développement d'interfaces tactiles, vous trouverez pas mal de réponse durant ces conférences.

          9 Janvier 2012 – 14h00 – 18h00 - Campus Microsoft Issy Les Moulineaux - A partir de 18h00 : Bière Pizza Party !
          Au programme de ce nouvel Après-midi du dev :

          · Les nouvelles interactions digitales et naturelles
          o Dick Lantim - Sensorit
          · Gérer et développer une application tactile
          o Nicolas Calvi et Johanna Rowe - Winvise
          · Application Blend : Le pipeline de création et de réalisation. Revue de la conception et de la mise en production d'une application WPF depuis son maquettage (Sketchflow) jusqu'à sa réalisation (Blend)
          o Michel Rousseau - Bewise
          · Réaliser des présentations efficaces en utilisant la norme METRO
          o David Catuhe - Microsoft

          Pour vous inscrire c'est ici

          Bookmark and Share

          Performance avec TransitionFrame dans WP7

          Aucun commentaire


            J'ai récemment eu un souci de performance sous Windows Phone 7 qui apparaissait lors de l'utilisation du contrôle TransitionFrame fourni par le toolkit Silverlight.
            Pour rappel ce contrôle permet de créer des applications Windows Phone navigantes avec prise en charge du bouton "Back" hardware.
            Le "Fill Rate" de l'application dépassait tranquillement les 2.5 alors que rien ne se passait à l'écran. Bien sûr, nous avions un contrôle Panorama en page d'accueil mais celui-ci est assez bien prise en charge par le framework SL.

            Et Bizarrement dès que nous nous débarrassions ce contrôle tout revenait à la normale.

            Je me suis un peu penché sur le code interne du contrôle et il s'avère que c'est l'arrière plan qui pose problème. Lorsque le TransitionFrame possède un arrière plan (Background), celui-ci est réappliquer n fois par seconde, n correspondant au framerate de Silverlight c'est à dire 60 fois par secondes.

            Dans notre cas d'application, nous appliquions un arrière plan au RootVisual (donc TransitionFrame) de manière dynamique. Cela permettait de faciliter les mécanismes de transition. Le mieux était donc d'avoir un Background à null tant que l'utilisateur se trouvait sur le Panorama. Puis, au dernier instant, c'est à dire dans la méthode surchargée NavigatingFrom, on lui réappliquait l'arrière plan.
            Cette solution est assez efficace et évite les bugs de performance.

            Je vous recommande fortement la lecture de cette page MSDN pour la conception d'applications WP7 performante. Dans un prochain poste, je montrerai comment faire des transitions performantes sous WP7.

            Bookmark and Share

            Surface 2 final sdk release

            Aucun commentaire

              Voici une première bonne nouvelle pour tous les concepteurs d'applications Surface, vous pouvez désormais télécharger le SDK Surface 2 en version finale.

              L'autre bonne nouvelle : ce SDK remplace le précédent Windows Touch beta SDK, il n'est donc plus nécessaire d'installer deux plateformes différentes. Que vous soyez dans l’environnement Windows 7 ou Surface, la conception d'applications tactiles devient moins chronophage. Par exemple, bon nombres de contrôles sont fournis par défaut et il ne sera plus nécessaire de tous les re-développer. Du coup, un certain nombre d'ajustements a été réalisé pour supporter les différents types de hardware. Pour ma part, le premier test que je vais faire consiste à tester les performances sur les tablettes tactiles Windows 7. Le sdk beta était assez lourd et peu performant sur les tablettes tactiles, cela a-t-il évolué ?

              Voici, dans les grandes lignes, les améliorations apportées :

              • Possibilité de définir les spécificités du matériel hardware :
                • Modification de la résolution
                • Définition du nombre de points de contact simultanés
                • Activation de la détection d'objets tag
                • Activation de la détection de blob
                • Activation de la récupération de la bounding box de contact
                • Activation de la récupération de l'orientation
                • Définition de la surface de contact allouée.
              • Les contrôles Surface bénéficie via l'héritage des contrôles WPF standard, des événements souris, stylus ou tactiles. Cela est très pratique lorsque l'on développe en environnement desktop Window 7.
              • Simplification de l'arbre visuel et logique des contrôles pour faciliter le personnalisation.
              • Les événements de type gesture, comme Tap, ne sont plus implémentés directement dans la classe SurfaceControl mais sont dorénavant attachés. Le concept d'évènement attaché existe depuis .Net 3 mais c'est une utilisation vraiment pertinente que nous propose Microsoft.
              • La classe UserControl est enrichie par défaut avec les nouveaux événements et gestionnaires de capture tactiles, la classe SurfaceUserControl est donc supprimée.
              • Le simulateur Surface a été énormément enrichi avec notament le support de l'orientation.

              Il y aurait encore beaucoup à dire, le mieux est de tester directement en développant des applications...

              Bookmark and Share

              Home Connection – Conférence Designer Interactif

              Aucun commentaire

                La conférence Smart World aura lieu le 28 juin à paris. Elle est organisée par CCM en partenariat avec l'association professionelle "Les Designers Interactifs".

                L'objectif en deux mots : expliquer, comprendre et anticiper la révolution des usages dans l'environnement domestique. Les nouveaux objets intelligents du quotidien et les nouvelles interfaces eXtremes (XUI) seront donc à l'honneur.

                Accédez au site dédié pour plus de précision.

                Bookmark and Share

                SketchFlow for Windows Phone 7

                Aucun commentaire


                  C'est la bonne nouvelle de la journée, un nouveau projet sur CodePlex permet de prototyper des application Windows Phone 7 via SketchFlow. Il vous faudra toutefois acquérir la licence Expression Studio Ultimate ou Visual Studio 2010 ultimate. Cela peut paraître assez gadget mais bien au contraire gérer une navigation à la fois simple, efficace et directe peut se révéler un vrai défi sur mobile. L'ensemble des composants sont fournis, des behaviors vous permettent comme au sein de projets SketchFlow standards, de prototyper la navigation ou encore les fonctionnalités WP7 telles que ainsi que les notifications toast. Les boutons HardWare Back et Search, ainsi que l'écran de démarrage WP7, sont également fournis, cela vous permettra de simuler les comportements d'une vrai application. Mais alors, la question qui revient, à quoi sert-il de passer par un prototype ? la réponse est encore la même, la facilité d'utilisation de SketchFlow et la rapidité de construction des interfaces et de la navigation vous permettront de tester de nombreux scénarii utilisateur avant d'entrer dans une phase de production pure et dure. On gagnera forcément du temps...

                  Bookmark and Share

                  ForceColumnBoundary AttachedProperty

                  Aucun commentaire


                    J'ai récemment eu besoin d'un Datagrid avec lignes dépliables, c'est une demande classique de nos clients et des éditeurs comme Telerik propose cette fonctionnalité en standard. Toutefois les clients ne souhaite pas toujours dépenser 1000$ de licence. Du coup, je suis parti d'une ListBox que j'ai configuré pour qu'elle prenne la forme d'un Datagrid, déplier une ligne se révèle assez simple dans ce cas. Pourtant je suis tombé sur un bug du Panel Grid auquel je ne m'attendais pas vraiment. Chaque colonne de ma grille au sein de mon ItemTemplate possède une valeur relative, chacune d'entre elles possède un FrameworkElement dans le cas présent un TextBlock.

                    Toutefois lorsque le contenu d'un TextBlock (par exemple) au sein d'une colonne est trop important, cela décale chaque colonne, du coup on perd l'effet Datagrid. Ce comportement du Layout est illogique si l'on considère qu'en mode Stretch horizontal, chaque TextBlock ne devrait pas dépasser la largeur de la colonne dans laquelle il se trouve. Le résultat est affiché ci-dessous.

                    Pour remédier à cela, j'ai codé une propriété attachée qui force chaque élément au sein d'une colonne à respecter les limites de cette dernière. Le code est relativement simple :

                    class FrameworkElementExtension
                    {
                     
                        private static Dictionary<frameworkelement , GridLength> FrameworkElementToGridLength = new Dictionary</frameworkelement><frameworkelement , GridLength>();
                     
                        public static bool GetForceColumnBoundary(DependencyObject obj)
                        {
                            return (bool)obj.GetValue(ForceColumnBoundaryProperty);
                        }
                     
                        public static void SetForceColumnBoundary(DependencyObject obj, bool value)
                        {
                     
                                obj.SetValue(ForceColumnBoundaryProperty, value);
                        }
                     
                        // Using a DependencyProperty as the backing store for EnsureColumnBoundary.  This enables animation, styling, binding, etc...
                        public static readonly DependencyProperty ForceColumnBoundaryProperty =
                            DependencyProperty.RegisterAttached("ForceColumnBoundary", typeof(bool), typeof(FrameworkElement), new PropertyMetadata(new PropertyChangedCallback(OnEnsureColumnBoundary)));
                     
                        private static void OnEnsureColumnBoundary(DependencyObject d, DependencyPropertyChangedEventArgs e)
                        {
                     
                            bool b = System.Convert.ToBoolean(e.NewValue);
                     
                            FrameworkElement fe = d as FrameworkElement;
                     
                            if (fe == null)
                            {
                                return;
                            }
                     
                            Grid g = fe.Parent as Grid;
                     
                            ColumnDefinition cd = g.ColumnDefinitions[Grid.GetColumn(fe)];
                     
                            if (g == null || cd == null || DesignerProperties.GetIsInDesignMode(fe))
                            {
                                return;
                            }
                     
                            if (b)
                            {
                                if (!FrameworkElementToGridLength.ContainsKey(fe))
                                {
                                    FrameworkElementToGridLength.Add(fe, cd.Width);
                     
                                    g.SizeChanged -= new SizeChangedEventHandler(g_SizeChanged);
                                    g.SizeChanged += new SizeChangedEventHandler(g_SizeChanged);
                                }
                            }
                            else
                            {
                                FrameworkElementToGridLength.Remove(fe);
                     
                                g.SizeChanged -= new SizeChangedEventHandler(g_SizeChanged);
                            }
                        }
                     
                        static void g_SizeChanged(object sender, SizeChangedEventArgs e)
                        {
                            Grid g = sender as Grid;
                     
                            foreach (FrameworkElement fe in g.Children)
                            {
                                bool b = GetForceColumnBoundary(fe);
                     
                                if (b)
                                {
                                    GridLength gl = FrameworkElementToGridLength[fe];
                     
                                    ColumnDefinition cd = g.ColumnDefinitions[Grid.GetColumn(fe)];
                     
                                    cd.Width = gl;
                     
                                    fe.Width = gl.Value*g.ActualWidth;
                                }
                            }
                        }
                    }
                    </frameworkelement>

                    Le résultat est immédiat et fonctionne qu'elle soit le type de colonne dans votre DataGrid.

                    Il suffit d'appliquer la propriété attachée à l'objet que vous souhaitez contraindre dans votre grille de cette manière :

                    Text="{Binding Client}" TextWrapping="Wrap" Grid.Column="1"  
                    		local:FrameworkElementExtension.ForceColumnBoundary="True"
                    Bookmark and Share

                    Team Blog Post preparing MIX

                    3 commentaires

                      L'avenir est en marche, ce post est important si vous suivez l'actualité Silverlight. Concrètement ce n'est pas un effet Bob Muglia que l'on a mais plutôt une réflexion arrivée à maturation qui nous est délivrée par Scott Guthrie et ses collègues. Ils débattent de la place actuelle et future des plugins comme Flash et Silverlight dans un monde HTML5. Silverlight a de beaux jours devant lui, si certains développeurs rêvaient du "tout Silverlight", ils seront déçus. Le HTML5 arrive et prendra une part significative des futurs développements webs. Toutefois, tous les scénarii avancés resteront dans le giron Silverlight. Le livecycle est plus court, plus réactif et les fonctionnalités sont beaucoup plus riches que celles proposées par le HTML5. En attendant, la future problématique concerne le tooling. Microsoft ne peut simplement pas ignorer la nouvelle version du langage HTML et proposera sans doute des outils pour répondre au besoin d'outil de conception dédié au web pur et dur... c'est ce que l'article évoque en partie, bonne lecture...

                      Bookmark and Share

                      Next Page »