Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Cyril Sansus

WPF, Interfaces Utilisateurs et .NET
Kinect 1.5 is out !

La version 1.5 du Kinect For Microsoft vient tout juste de sortir !

Plein de nouveautés:

  • Tracking de squelette en Near Mode
  • Détection en position assise
  • Détection faciale avec un SDK dédié
  • Documentation et des guideline (enfin)
  • Un outil d’enregistrement et de replay
  • De meilleures performances

Retrouvez toute ces informations sur le blog MSDN

Tips WP7 - Déterminez le sens de l’animation d’un Pivot

En essayant d’agrémenter l’animation d’un contrôle Pivot, j’ai eu besoin de déterminer si le mouvement du pivot était de gauche à droite ou de droite à gauche.

Voici une solution très simple (et qui marche) :

protected override void OnManipulationCompleted(ManipulationCompletedEventArgs e)
{
    fromRightToLeft = e.FinalVelocities.LinearVelocity.X < 0;
    base.OnManipulationCompleted(e);
}
RadioButton et RadioButtonList en XAML

Problématique

L’utilisation de RadioButton en XAML s’avère généralement très difficile : impossible de binder sur une source de donnée, impossible de savoir lequel est sélectionné. On en arrive à faire ce genre de chose :

<StackPanel>
    <RadioButton Content="Option1" IsChecked="{Binding IsOption1Checked}" GroupName="MyGroup" />
    <RadioButton Content="Option2" IsChecked="{Binding IsOption2Checked}" GroupName="MyGroup" />
    <RadioButton Content="Option3" IsChecked="{Binding IsOption3Checked}" GroupName="MyGroup" />
</StackPanel>

Visuellement on obtient ça :

image

Résultat : une mise en place pompeuse, peu maintenable, beaucoup de code pour bien peu de chose (on imagine quand il y a 10 éléments…).

Essayons de trouver une manière plus simple de faire un « RadioButtonList ».

Lire la suite

 

Slide & Démo Techdays 2012 – Fast & Furious XAML Apps

Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps.

A ceux qui se posent la question : “est-ce que le code de la DataGrid est disponible?”, je vous répondrais “pas encore”. Je vais mettre en place un projet codeplex pour partager tout ça.

Merci encore à ceux qui ont participé à ma session malgré le décès prématuré de ma gorge Sourire

Mishra Reader : un lecteur RSS très Zune Style en Open Source !

Hier durant une session dédiée aux Techdays 2012, j’ai eu le plaisir d’annoncer la sortie de la Béta 2 de Mishra Reader.

C’est quoi ?

Pour les utilisateurs, c’est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec  les produits qui peuvent exister sur le marché.

Pour les développeurs, c’est un projet Open Source réalisé en WPF utilisant un peu tout ce qui se fait aujourd’hui en terme de développement : Metro Style, MVVM, DI, Test, etc.

Vous pouvez retrouver plus d’informations sur le site codeplex ou encore sur le site de @deltakosh.

Il reste encore beaucoup de fonctionnalités à intégrer, n’hésitez pas à le télécharger et à nous faire vos retours.

Enjoy !

techdays 2012 – Fast and Furious XAML Apps!

Une session indispensable pour tous les développeurs d’application XAML (WP7, SL, WPF et WinRT) qui en ont marre d’entendre leur client dire “c’est mou” et qui aimeraient développer des applications fluides, rapides et réactives !

“Pour les utilisateurs la réactivité d'une application est un critère très important et une des clés de la réussite d'un projet. Dans cette session, vous découvrirez les bonnes pratiques pour réaliser des applications fluides et performantes en Silverlight, Windows Phone et WPF.”

Support Windows Phone 7 Nokia Roadshow

Comme promis à ceux qui ont participé à cette journée de training intense, je met à votre disposition les slides et les démo que j’ai utilisé lors du WP7 Nokia Road Show à Toulouse et Bordeaux.

Télécharger les slides

Merci encore à ceux qui ont participé à cette journée, et bravo aux plus chanceux qui sont repartis avec un Lumia.

Un contrôle Bing Maps pour WPF !!!

Les équipes MS viennent de sortir un contrôle Bing Maps en WPF, 100% WPF !!

Terminées les galères du WebBrowser qui embarque une application Silverlight, les problèmes de superposition, les bidouille d’interop et COM pour faire dialoguer tout ce beau monde, les micro-freeze intempestifs !!

Cette première version Béta fonctionne très bien et il m’a fallut 5 minutes pour migrer de mon ancienne solution vers cette solution 100% WPF. Le résultat est bleffant ! On retrouvera toutes les fonctionnalités de base :

  • Visualisation de la map dans les différentes vues (plan, aérienne, …)
  • Ajouter des pin et des shapes
  • Prise en charge multitouch est assez bien (quelques petits sautillement si on va un peu trop vite).

A télécharger à l’adresse suivante:

http://www.microsoft.com/download/en/details.aspx?id=27165

Vivement la version finale !

[Tips] Popup avec le Surface SDK 2.0

Grace au Surface SDK 2.0, on peut très simplement créer des applications touch sur n’importe quel PC tactile. Mon problème est que ce SDK ne propose pas de contrôle Popup et que l’utilisation de la Popup native WP4 pose des problèmes :

  • Pas de gestion des évènements Touch
  • Lorsqu’on touche l’écran on voit apparaitre le feedback par défaut de la tablette

Pour contourner ces deux problèmes vous pouvez utiliser cette classe (c’est un peu cracra mais ca marche) :

public class SurfacePopup : Popup
{
    protected override void OnOpened(EventArgs e)
    {
        HwndSource hwndSource = PresentationSource.FromVisual((Visual)VisualTreeHelper.GetParent(Child)) as HwndSource;
            
        // Enable surface input and touch events
        hwndSource.EnableSurfaceInput();

        // Disable visual tablet feedback
        NativeMethods.EnableTabletGestures(hwndSource.Handle, false);
        base.OnOpened(e);
    }

    public class NativeMethods
    {
        public static bool EnableTabletGestures(IntPtr hWnd, bool enable)
        {
            string atom = "MicrosoftTabletPenServiceProperty";
            long num = (long)NativeMethods.GlobalAddAtom(atom);
            if (num == 0L)
            {
                return false;
            }
            if (enable)
            {
                return NativeMethods.RemoveProp(hWnd, atom).ToInt64() == 1L;
            }
            int value = 16842777;
            return NativeMethods.SetProp(hWnd, atom, new IntPtr(value)) == 1;
        }

        // Microsoft.Surface.Presentation.Common.NativeMethods
        [DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
        public static extern short GlobalAddAtom(string atom);

        // Microsoft.Surface.Presentation.Common.NativeMethods
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern IntPtr RemoveProp(IntPtr hWnd, string atom);

        // Microsoft.Surface.Presentation.Common.NativeMethods
        [DllImport("user32.dll", CharSet = CharSet.Unicode)]
        public static extern int SetProp(IntPtr hWnd, string atom, IntPtr handle);
    }
}
MIX11 : Prochaine version de Windows Phone 7

Impression après le second keynote : Wouah ! La présentation de la prochaine version de Windows Phone 7 était vraiment impressionnante, la liste des fonctionnalités  qui seront disponibles est énorme (1500 !). Seul ombre au tableau : il va falloir attendre un peu, les tools sont prévus pour mai et la sortie pour cet automne.

Mango (nom de code de la prochaine version) sera multi-tâche. Elle proposera pas mal de fonctionnalités autour du multi-tasking :

  • L’amélioration du temps de reprise des applications
  • Background Agent : les applications pourront continuer de fonctionner en tâche de fond. Exemple avec une application permettant d’écouter une webradio.
  • Notifications : la plateforme permettra de programmer des alarmes et des reminders
  • Background Transfer Service : la plateforme proposera une queue dans laquelle on pourra aller mettre nos différents transferts.

Gros boulot du coté des performances (et il y en avait besoin) :

  • Le scrolling sera smooth (WOUUUUUH !)
  • La gestion des event de Touch a été modifiée afin qu’ils n’arrivent pas avec 100ms de lag.
  • Le chargement du XMAL a été amélioré
  • Vos applications consommeront moins de mémoire.
  • Il sera possible de profiler les applications directement via Visual Studio 2010.
  • Le décodage des images sera également plus efficace et ne bloquera ni l’interface, ni les events de Touch.

Autre truc relativement énorme : la prochaine plateforme proposera SQL CE et Linq to SQL.

Le Framework a été étendue pour offrir plus de services :

  • Au niveau des Tiles :
    • Possibilité d’avoir plusieurs Tiles pour la même application
    • Les Tiles pourront servir de raccourci dans vos applications
    • Quelques changements au niveau des push Notification pour avoir plus de contrôle
  • Phone Extra :
    • Cette fonctionnalité offre la possibilité de positionner vos application directement dans le hub Music, Photo. Exemple on trouvera l’application YouTube dans les Extra du hub Vidéo. Tout ceci sera configurable au niveau du fichier manifest.
  • De nouveaux Launcher :
    • Bing Map
    • Email chooser
    • Phone number chooser
    • Adress chooser
  • Accès aux Contacts
  • Accès au Calendar

D’autres choses en vrac :

  • API pour contrôler le clipboard
  • RichTextBox
  • Amélioration de la navigation
  • Il sera possible d’utiliser du Silverlight dans les applications XNA.
  • Accès à la caméra
  • Amélioration de l’API Sensor
  • Possibilité d’utiliser les sockets (pour des applications comme Faces par exemple
  • Marketplace services
  • Prise en charge des cultures asiatiques
  • 36 pays seront couvert alors que la première version est limitée à 16.

Au niveau de l’outillage :

  • Un debugger pour les applications en background
  • Isolated Storage Explorer
  • Le Profiler de performances
  • L’émulateur permettra d’émuler le Sensor et la Localisation (terrible d’ailleurs).

En résumé Microsoft a écouté la communauté et nous propose une plateforme complète. Il ne reste plus qu’à attendre le mois prochain pour avoir les Tools.

MIX11 : NUI et Surface 2

Il me tardait de pouvoir voir cette nouvelle version de la table surface : c’est chose faite et je ne suis pas mécontent. Durant la session, on nous a présenté les nouveautés de cette Surface 2.

On a donc pu voir une version Alpha de la Surface 2 dont le nom complet est : Samsung SURF40 For Microsoft Surface. Elle a l’avantage d’être plus proche d’un écran plat que d’une grosse table de salon de 80kg. On peut ainsi l’installer en mode vertical ou en mode horizontal. Petite précision : on n’utilise pas une application vertical et horizontale de la même façon !

Le rendu et la finesse de l’écran n’ont rien à voir avec la version 1. On a l’impression de passer du VHS en HD. Un très bon point pour cette nouvelle mouture. La réactivité de l’écran tactile a également été améliorée.

Quelque détails coté hardware :

  • AMD Athlon II X 2.9 Dual Core
  • AMD Radeon HD 6570M 1Gb GDDR5, DirectX 11

Cette nouvelle version est basée sur Windows 7 et Windows Touch (bye bye le vieux Vista Business).

Tout à changer dans cette Surface, même l’interface utilisateur. En effet, le look est clairement orientée Metro et ressemble très fortement à Zune (“content is king”) ! Tous les contrôles ont été “templatés” dans ce sens. La liste des applications a également beaucoup changé et on peut désormais la faire tourner !

D’un point de vue API, je n’ai pas noté de changement. Par contre l’outillage s’est drôlement amélioré. On aura un nouvel outil le “input simulator” qui permet d’émuler du multi-touch, différents devices, créer des gestion multi-touch en toute simplicité. Microsoft proposera également un outil de portage des applications de la version 1 vers la version 2.

Il ne reste plus qu’à attendre le SDK qui devrait arriver cet été.

PS : j’ajouterai les photos dès que possible.

MIX11 : HTML5 for Silverlight Developpers

Première session après le Keynote dans laquelle Georgio Sardo nous présente les équivalences entres HTML5 et Silverlight.

Ce que je retiens c’est que le duo HTML5/CSS3 comble une partie des lacunes : vectorisation, layout, transform, animation, font, audio/vidéo…

Pour les développeurs Silverlight, vous allez retrouver les mêmes outils en HTML5/CSS3 qu’en Silverlight ou tout du moins un équivalent.

Pour ma part je trouve encore HTML5/CSS3/JavaScript très grossier et complexe (j’ai l’impression de voir Silverlight 1.0). Vivement que tout cela soit définitivement normalisé et outillé car pour l’instant c’est plus proche de l’usine à gaz que d’une solution intégrable dans le cadre d’un vrai site web.

MIX11 : Boot Camp Silverlight 5

En direct du Mix, quelques trucs au niveau du boot camp Silverlight :

  • Quelques nouveautés de la prochaine version de RIA Services (complexe type, custom code generator, …)
  • L’ajout du très attendu évènement OnDataContextChanged (enfin)
  • Rien de plus à se mettre sous la dent pour l’instant.

On continue cet après-midi avec le boot camp WP7.

Bewise Day Conference 2011 le jeudi 7 avril à Toulouse

Comme chaque année Bewise organise sa conférence technique sur Toulouse : la BDC. Si vous êtes dans la région, ça serait bête de rater une pareille occasion de découvrir et échanger sur les dernières technologies Microsoft.

Pour vous inscrire gratuitement : http://bdc2011.bewise.fr/inscription

Venez nombreux !

Dites Non aux UserControls !

Que ce soit dans Visual Studio, dans les samples, sur MSDN partout on nous dit “Pour vos applications XAML, découper vos interfaces utilisateur en UserControl réutilisable”.

Et bien je dis non !

Première raison : les performances. Le temps du calcul du layout d’un UserControl est couteux, et plus on encapsule des UserControl dans d’autres UserControl plus les performances se dégradent.

Comparons deux solutions qui visuellement permettrons d’avoir exactement le même résultat :

  • Dans un cas on encapsule 3 UserControl dans une grille,
  • dans l’autre cas 3 Grid dans une grille.

La figure ci-dessous montre ces deux exemples avec à gauche l’arbre visuel et à droite le code :

 Untitled-3

Résultat sur 100 itérations, le second exemple est 4 à 6 fois plus rapide !! On notera qu’on reste sur une échelle en millisecondes.

Seconde raison : pour les puristes l’utilisation du type UserControl est abusive. Je suis persuadé que vous avez le code ci-dessous (qui d’ailleurs est généré par Visual Studio) :

<UserControl …>
        < Grid x:Name=”LayoutRoot” >
</UserControl> 
 

En gros on utilise un UserControl pour y mettre une Grid, alors qu’un UserControl est un ContentControl et donc devrait être utilisé avec un DataTemplate.

La solution est de ne pas utiliser de UserControl mais directement l’élément dont vous avez besoin (par exemple une Grid). Pour faire cela il suffit de remplacer UserControl par Grid dans le fichier XAML et dans le code-behind comme le montre la figure suivante :

Untitled-2

Rassurez-vous, le designer continu à fonctionner normalement.

Je vous laisse répondre à la question : mais pourquoi a-t-on la fonction “Add UserControl” ?

WP7 – Scrollbar flickering

Si lorsque vous scrollez dans une ListBox la taille de votre ScrollBar change et la ScrollBar fait de petits sauts, vous allez surement apprécier la suite de ce post.

Si vous n’avez jamais rencontré le problème, vous pouvez toujours télécharger le code ci-dessous afin de mieux comprendre.

Télécharger l'application exemple

En fait le problème vient du fait que la ListBox est virtualisée et que les ListBoxItem n’ont pas la même taille.

Il faut savoir que la taille de la Scrollbar est calculée en fonction de deux paramètres :

  • La taille de la zone affichable (l’écran)
  • La taille de la zone à afficher (la hauteur de la ListBox)

Donc pour afficher la Scrollbar d’une ListBox, il est donc nécessaire que la ListBox soit en mesure de calculer sa hauteur.

Problème : les éléments sont virtualisés. Elle ne connait donc pas réellement la taille de tous ses éléments, elle va donc estimer sa hauteur à l’aide d’une formule ressemblant à ceci :

Nombre d’éléments * Hauteur d’un ListBoxItem

Si les ListBoxItem n’ont pas tous la même taille, le résultat du calcul ci-dessus va varier et donc la taille de la Scrollbar aussi. C’est cela qui créer cet effet très déplaisant pour l’utilisateur.

Pour contourner le problème vous avez deux solutions.

La première consiste à faire en sorte que tous vos éléments aient tous la même hauteur, soit en fixant la hauteur en pixel, soit en supprimant les éléments à hauteur variable comme les TextBlock avec TextWrapping.

La seconde, plus radicale, est de supprimer la virtualisation, mais attention vous devez être suûr que le nombre d’élément de la liste reste faible sous peine de vous retrouver avec une application très lente.

WP7 – La virtualisation d’interface

On entend beaucoup parler de virtualisation dans différents blogs sur Windows Phone 7 qui mélangent deux concepts de virtualisation : la virtualisation d’interface (UI Virtualization) et la virtualisation de donnée (Data Virtualisation).

Parce que ces deux notions sont importantes, on va commencer par parler de la virtualisation d’interface et de quelques trucs et astuces sur les VirtualizingStackPanel sur WP7.

Présentation

Le concept de virtualisation d’interface existe sur toutes les plateformes applicatives XAML : WPF, Silverlight et Silverlight For Windows Phone 7.

La virtualisation d’interface permet d’afficher une ListBox de plusieurs millions d’éléments instantanément et sans temps de chargement.

Le principe est simple : au lieu de créer des millions de ListBoxItem et des les binder, on va simplement créer ceux qui sont visibles. Ainsi pour une liste d’un million d’éléments, seuls une dizaine de ListBoxItem seront créés.

L’implémentation

Par défaut les ListBox sont virtualisées ou plus exactement elles utilisent un VirtualizingStackPanel qui s’occupe de virtualiser les ListBoxItem.

Il est possible de désactiver la virtualisation mais cela peut avoir de très lourdes conséquences sur les performances de votre application. Le code ci-dessous présente une solution qui consiste à remplacer la VirtualizatingStackPanel par défaut par un StackPanel :




    
    
        
             -->
                            
        
    

La plateforme WP7

Sur WP7, le VirtualizingStackPanel créé plus d’éléments que nécessaire afin de gérer les scrollings de l’utilisateur sans trop de problème.

Par exemple pour une liste qui affiche 10 éléments, le VirtualizingStackPanel créer 30 éléments. En moyenne il vous suffit de multiplier par trois le nombre d’éléments visibles pour avoir le nombre d’éléments créé.

A noter que les ListBoxItem sont recyclés automatiquement par le VirtualizingStackPanel ainsi une ListBox qui affiche un million d’éléments n’utilisera que 30 ListBoxItem.

Mais si votre ListBox est virtualisée et encore des problèmes de temps de chargement, la virtualisation de données sera peut être la solution (coming soon).

10 trucs sur moi

Je continue dans la foulée de Djeepy, Kosh, Ben, Mim qui dévoilent 10 trucs vraiment pas intéressant sur eux :p

1. A l’âge de 4 ans je m’étais déjà : troué la langue, ouvert l’arcade sourcilière, arracher 4 ongles dans une porte, ouvert le menton. Mais sinon j’étais plutôt calme dans l’ensemble.

2. Mon nom est Cyril Sansus, ça se prononce SAN-SUSSE et non pas SAN-SU. Oui … je vous laisse imaginer le calvaire quand j’étais plus jeune :)

3. Je dessine depuis l’âge de tout petit : crayon, bic, huile, gouache, acrylique, brush, pastel, 3DS Max, photoshop, painter. J’ai voulu me lancer dans le design automobile, mais le destin en a décidé autrement. Heureusement j’ai su faire de mon coté artistique un véritable atout dans mon travail (tiens, je devrais mettre cette phrase dans mon CV)

4. C’est un copain qui m’a enseigné les bases du C vers mes 18 ans. Ma première application fût une pyramide de texte, ma seconde un tracé de ligne (bresenham) et ma troisième un cube en 3D qui tournait. Avec tout ca j’ai fini comme stagiaire dans une société de jeux vidéo durant 1 an et demie et puis j’ai débarqué à Vertice, puis Bewise.

5. J’ai chez moi : un GameCube, une DS, une Wii, une PS2, une XBOX 360 et une PS3. Malgré tout ça je ne joue pas à WOW.

6. Mon surnom est Vko qui se prononce Vico. Vko comme le roi des patates, une longue histoire qui me suit depuis presque 15 ans.

7. J’ai travaillé dans un golf, je ramassais les balles du pratice dans mon petit tracteur. Je me tapais 15 bornes à vélo tout les week-ends pour me faire tirer dessus et gagner 3 cacahuettes.

8. 2007 fût une année affreuse avec une fin heureuse.

9. J’ai connu toute les coupes de cheveux : boule à zéro, rasé, brosse, mèche de 15cm avec le crane rasé (la pire de toute), cheveux mi-long, raie au milieu, etc…

10. J’aime cuisiner et je possède une bonne 10ène de livres dédiés à ce hobby.

Parce que ce jeu est complètement con, je passe le relais à Guillaume.

Mise en ligne des ressources / démo de la BDC

Retrouvez dés maintenant toutes les ressources autour de l’évènement majeur pour les développeurs .NET du sud qui a eut lieu en avril : la Bewise Developper Conference.

C’est ici que ca se passe : http://afterbdc.bewise.fr/.

PS : à noter la magnifique démo SL4 :)

[WindowsPhone7] Lecteur de flux RSS

Parce que j’aime pas tester à moitié, je me suis amusé à développer un petit lecteur de flux RSS avec un look qui vous rappellera surement quelque chose :)

image

La RC de Visual Studio est plutôt molle mais fonctionne correctement.

L’émulateur est pas mal, espérons toutefois que les performances sur Device soient meilleures.

Blend 4 Beta fonctionne bien … mais c’est l’outil sur lequel j’ai le moins travaillé.

Et le plus intéressant, la version Silverlight pour Mobile est hallucinante. On a l’impression d’être avec la Silverlight 4.0. Wouua !

Plus de Messages Page suivante »


Les 10 derniers blogs postés

- [ #Yammer ] From Mailbox to Yammer and back / De votre messagerie vers Yammer et retour ! par Le blog de Patrick [MVP SharePoint] le 09-15-2014, 11:31

- [ #Office 365 ] New service settings panel / Nouveau panneau de paramétrage des services par Le blog de Patrick [MVP SharePoint] le 09-11-2014, 08:50

- Problème de déploiement pour une démo SharePoint/TFS? par Blog de Jérémy Jeanson le 09-10-2014, 21:52

- [ #Office365 ] Delve first impressions / Premières impressions sur Delve par Le blog de Patrick [MVP SharePoint] le 09-09-2014, 16:57

- [ #Office365 ] How to change Administration console language ? / Comment changer la langue de la console d’administration ? par Le blog de Patrick [MVP SharePoint] le 09-09-2014, 08:25

- [ #SharePoint 2013 ] Suppression de bases de données en état “Pas de Réponse” par Le blog de Patrick [MVP SharePoint] le 09-04-2014, 14:10

- Changer l’adresse d’une ferme Office Web Apps associée à SharePoint par Blog de Jérémy Jeanson le 09-01-2014, 22:21

- Une ferme #SharePoint 2013 dans @Azure en quelques clics (1ère partie) ! par Le blog de Patrick [MVP SharePoint] le 08-28-2014, 18:52

- SharePoint 2013: Préparation de la migration - Création des site Templates dans 2010 et 2013 par Blog Technique de Romelard Fabrice le 08-20-2014, 16:31

- [ #Yammer ] How to change interface language ? Comment changer la langue de l’interface ? par Le blog de Patrick [MVP SharePoint] le 08-20-2014, 14:21