Tech Days 2013 – 10 tips pour améliorer les performances de vos applications Windows 8

Certainement la session la plus technique, et la plus intéressante, de mon programme Tech Days. En particulier, elle a comblé les quelques manques d’une autre session qui était censée être axée performance mais n’avait finalement que peu parlé de ce sujet (impression par ailleurs confirmé par un de mes contacts à Red Gate).

Nicolas Antoine est Senior Support Manager chez Microsoft, spécialisé dans le support des développeurs .NET. Bref, c’est lui que vous aurez au téléphone si le problème sur lequel vous êtes est VRAIMENT épineux…

Astuce 1 : gestion de l’état de l’application

L’application doit passer en mode running en 5 secondes maxi, sinon l’OS la supprime. Il faut gérer aussi le mode suspended, ainsi que le resuming, de façon à ne pas perdre de la donnée ou des choix utilisateurs lorsque l’OS suspend l’exécution d’une application en arrière plan ou la réactive.

Dans les applications natives, un programme tourne toujours, ce qui bouffe la batterie. Dans Windows 8, on ne peut plus se permettre ça, vu qu’on doit tourner sur des tablettes et des périphériques légers (au passage, il doit y avoir encore du ménage à faire dans les agents, qui eux tournent sans arrêt, pour que la batterie d’une Surface 8 Pro tienne aussi longtemps que celle d’un iPad, de puissance équivalente et pourtant avec une autonomie presque doublée).

Oui, j’ai dit du bien d’un produit Apple. Un début de maladie, certainement…

Evidemment, il faut tenir compte de ce mode de fonctionnement en sauvegardant les valeurs au bon endroit. Pour cela, la slide ci-dessous résume bien le choix :

7-SauvegardeData

Techniquement, jeter un œil sur e.suspendignoperation.getdeferral sur l’évènement onsuspending, auquel on s’abonne au lancement de l’application.

Bonne pratique de faire un save dès la modification du modèle de données (mode incrémental), plutôt que d’attendre qu’on soit appelé sur la mise en veille pour le faire, surtout qu’on a peu de temps pour réaliser cette opération avant que l’OS ne se fâche.

Astuce 2 : utiliser l’asynchronisme

async et await sont bien expliqués, pour une fois. Peut-être même un peu trop en détail, car expliquer qu’il y a une machine à état, et montrer IAsyncStateMachine pour bien comprendre, est une bonne idée, mais passer cinq minutes à montrer la progression dans une instance de machine à état n’était pas nécessaire à mon avis (ni à celui de mon voisin Eric, qui prenait des notes deux fois plus vite que moi avec sa Surface RT, alors que je galérais sur ce rogntudju de clavier virtuel Android).

Ce coup-ci, nous avons eu la bonne explication sur ce à quoi il fallait faire attention sur l’utilisation de l’asynchronisme. Voici le mauvais usage d’await :

8-BadAwait

Dans le code ci-dessus, on lance chacune des commandes en mode asynchrone, mais on attend à chaque fois la fin de cette dernière pour passer à l’itération suivante, et il n’y a donc aucune parallélisation.

A l’inverse, dans le code ci-dessous, on lance bien les cinq tâches en parallèle, et on attend plus bas que tout soit fini :

9-GoodAwait

Le conférencier précise bien qu’on pourrait faire un Task.WaitAll

Astuce 3 : chargement incrémental

ISupportIncrementalLoading est mise en place. La vue utilise automatiquement le support de cette interface si elle la détecte sur une collection qu’on lui binde.

Voir le blog de David Vernier pour un helper sur ObservableCollection.

Astuce 4 : placer les ressources en cache

Rien de spécial à dire…

Astuce 5 : les deux threads dans XAML

Une des astuces les plus riches d’enseignements. L’affichage de XAML utilise deux threads : celui pour l’UI et le thread Compositor.

10-PerfRender

Encore une fois, il y a découplage : il faut déléguer au maximum au compositor pour que l’UI continue son rôle, a savoir accepter le plus vite possible des inputs de l’utilisateur.

EnableFrameRateCounter permet de voir si les animations sont bien traitées hors UI : il vaut mieux que le première chiffre soit plus haut que le suivant (composition plutôt que UI). EnableDependentAnimation est utilisé pour rendre le développeur conscient du problème : les animations doivent être portées par des objets de transformation, et non par les objets affichés. La propriété doit activée pour que la seconde façon, moins performance, fonctionne, ce qui permet d’être sûr que le développeur est au courant que c’est potentiellement un problème.

Astuce 6 : optimisation XAML

Limiter la profondeur de scène. Limiter l’overdraw par utilisation correcte des templates.

Utiliser DebugSettings.IsOverdrawHeatMapEnabled pour voir si on reste bien en dessous des 3,7 couches de pixels seulement avant les premiers problèmes de perf. Pour cela, ne pas décomposer trop les contrôles en autres contrôles. C’est bien pour la maintenance, mais au final, ça pourrit l’application.

Astuce 7 : virtualiser l’UI

La virtualisation de l’UI permet de ne charger que les contrôles qui sont effectivement utiles à un moment donné à l’affichage. Il est possible d’économiser ainsi les contrôles, en affichant, même pour une liste énorme, que ceux qui sont à l’écran, plus quelques-uns des deux côtés pour ne pas avoir à attendre en cas de scroll.

11-VirtualisationUI

Sur des contrôles à taille variable, le système ne peut pas le faire pour nous. C’est le cas sur le ScrollViewer, par exemple, et il est donc important de borner le contenu.

Astuce 8 : mettre les pages en cache

NavigationCacheMode à mettre en Enabled pour que Windows remette la page telle qu’elle était quand on y revient, au lieu de tout recharger. C’est tout bête, mais ce n’est pas le comportement par défaut.

Il faut aussi rajouter un “if e.NavigationMode != NavigationMode.Back” à l’endroit qui chargeait le modèle, de façon qu’on fasse bien le premier chargement, mais qu’il ne soit plus réalisé aux navigations suivantes, sauf demande explicite de rafraichissement de la part de l’utilisateur. Le top est de rafraichir quand même, mais seulement avec les nouvelles données depuis le dernier chargement, histoire d’avoir le meilleur des deux modes.

Frame.CacheSize pour limiter ou augmenter le nombre de pages (10 par défaut). Sur ce coup-là, j’avoue ne pas avoir compris l’intérêt de le baisser : on ne va pas gagner de mémoire, vu que s’il n’y a que trois pages en cache, les sept slots restants seront vides…

Astuce 9: utiliser Performance Analyser dans VS 2012

Pour moi qui me targue de bien connaitre les problèmes de performance, j’aurais tendance à dire que ce n’est pas une astuce mais une bonne pratique de base : ne chercher à améliorer les performances que sur un bout de code qui nous a effectivement été désigné par le profileur comme celui qui posait le problème de performance.

Mais je suis d’accord que ça ne fait pas de mal de le rappeler. Le présentateur rappelle d’activer les symboles de debug dans les options pour que le profileur prenne en compte les fonctions .NET.

Astuce 10 : utiliser Windows Performance Analyzer

En complément de la précédente astuce. xperf pour la ligne de commande. L’analyseur de performance permet de voir le démarrage, le XAML chargé, etc., bref toutes les choses qu’il est difficile, voire impossible, de faire avec le profileur de Visual Studio.

Et au pire, il est toujours possible de se rabattre sur le débogueur en ligne de commande et SOS. Mais là, c’est pour ceux qui n’ont pas froid aux yeux… ou plus rien à perdre Sourire.

Au final, excellente session, très enrichissante. Je connais pas trop mal le sujet de la performance, mais pas beaucoup spécifiquement à WinRT et Windows 8, et j’ai appris plein de choses. Bref, à voir quand les webcasts sortiront, si vous n’y étiez pas…

Posted in .NET, Performance, Retours | Tagged | Leave a comment

Tech Days 2013 – Windows 8 et la sécurité

A cause d’un service “à la Parisienne” (30 minutes de retard pour servir un plat du jour), impossible de voir la session sur Gadgeteer, et pas plus de chance sur la meta-programmation. Fait suer… Du coup, obligé de se rabattre sur une session en amphithéâtre, où il y presque toujours de la place, sauf bien sûr pour Coding 4 Fun, où la queue menaçait de sortir du Palais des Congrès (Eric, il va falloir la faire dans l’amphi principale, celle-là Sourire).

Heureusement (car c’est un signe de qualité), c’est Bernard Ourghanlian qui présente. Toujours très clair, très érudit, un plaisir à l’écouter. Du coup, les notes sont un peu en vrac, car avec un bon orateur, on passe plus de temps à écouter qu’à prendre en note pendant les hésitations…

Windows 8 détecte si l’antivirus a passé sa période d’évaluation et n’a plus sa BD à jour.

Par défaut, pas de restriction pare-feu sur le trafic sortant. Par contre, pare feu intelligent pour gérer les capabilities déclarées par les applis d’un store. DirectAccess est mis en avant pour simplifier la configuration du pare-feu.

Windows 8 utilise le TPM pour construire une carte à puce virtuelle, par l’extension des canaux possibles pour l’authentification multifacteurs. Par exemple, un PC peut être utilisé comme matériel d’authentification. La portabilité des crédentités reste évidemment plus simple avec une vraie carte a puce, mais elles sont aussi plus facilement volables (c’est d’ailleurs pour cela qu’on la couple avec les accès aux bâtiments, la cantine, etc. : de façon que le propriétaire se rende vite compte de son absence).

Interdiction de l’export des certificats, opérations de chiffrement isolées et fonctions de protection additionnelles (autodestruction, etc.) sont les trois fonctionnalités les plus importantes des cartes à puce.

Sauvegarde de la clé de recouvrement dans Skydrive. Attention, les modifs dans la chaine de boot bloque BitLocker.

Contrôle d’accès dynamique pour le BYOD : cela passe par le support des revendications, plus générales que l’identification seulement Kerberos. Par exemple, un attribut d’identité peut être ‘je suis français’, ou ‘je suis majeur’. Donc, le contrôleur Windows ne gère plus que des groupes, mais le jeton Windows rajoute une section de type claims, et une autre de type terminal (il faut savoir si on peut faire confiance au device, en plus du user).

Windows 8 permet de gérer des expressions sur les groupes, ce qui évitera leur inflation. On pourra ainsi faire une ACL en fonction de si le terminal est géré par l’IT ou pas. Classification des ressources par cette grammaire SDDL, avec l’ACL sur la ressource qui dit qu’elle est par exemple ‘high impact’. Bref, une façon beaucoup plus claire d’exprimer des exigences de sécurité : au lieu de créer un groupe pour les utilisateurs de tablettes, un groupe pour les utilisateurs de tablette mais qui ont des droits élevés, etc., on peut créer des ACL sur le fait que la demande vienne d’une tablette, que la personne ait des droits élevés ET que la ressource demandée soit “high impact”. A voir comment ça se configure en vrai, et si ça n’est pas plus facile à se tromper, mais c’est clairement plus clair à la présentation.

A propos de sécurité, même si ça n’a rien à voir avec l’informatique mais plutôt la sécurité physique, voici ce que les Parisiens appelle un trottoir :

12-TrottoirParis

Il s’agit de la bande de goudron en dehors de la route et laissée libre par les scooters et motos, permettant aux vélos de se faufiler et aux piétons de se faire tuer…

Posted in Retours, Sécurité | Tagged | 2 Comments

Tech Days 2013 – Windows 8 : comment développer des applications efficaces et performantes pour rendre l’expérience utilisateur unique ?

Session présentée par Guillaume Brout (http://www.guillaumebrout.fr) et une seconde personne dont je n’ai pas noté le nom, qui renvoyait sur http://www.itelios.com, une SSII spécialisée dans le e-commerce.

On commence par une présentation rapide de l’architecture WinRT :

6-WinRT

Fichiers WinMD qui exposent les fonctionnalités COM : WinRT est à comparer à Win32, à savoir qu’il s’agit de fonctionnalités de base du système, appelées en JavaScript, en C++ ou en .NET. Pour rendre l’interop possible, ce ne sont pas des wrappers statiques, mais dynamiques qui sont créés, en se basant sur l’exposition des fonctionnalités par ces fameux fichiers WinMD, qui permettent de manipuler les objets COM sans avoir à recourir aux affres des interfaces IUnknown et consorts.

Intégration d’une application à l’OS par des vignettes dynamiques, comme par exemple le contrôle du son accessible depuis partout en surimpression.

Recherche, partage et paramétrage sont faits par contrats avec l’OS et les “charms”. Dans VS, on ajoute une classe de contrat, et il faut aussi déclarer dans le manifeste la fonctionnalité exposée.

On en revient toujours au découplage : après avoir séparé les transitions visuelles de l’application, Microsoft est allé plus loin en découplant ces contrats, ce qui paradoxalement permet une meilleure intégration au final, car toutes les applis suivent le même contrat et le résultat est donc homogène pour l’utilisateur.

A voir : NotificationsExtensions sur MSDN pour avoir des helpers pour les notifications de type toast.

Le point un peu décevant dans cette session : on ne parle performance qu’à partir de la 37ème minute, alors que le titre laissait à penser que c’était le but principal. Surtout, rien de vraiment bouleversant : du bon retour d’expérience, mais pas révolutionnaire. Par exemple, réaliser le stockage dans IsolatedStorage pour les faibles volumes, et dans une base de données embarquée SQLLite pour RT pour les cas plus conséquents.

Pour ce qui est des données à sauver au niveau applicatif, on peut utiliser la classe Windows.Storage.ApplicationData. On peut utiliser l’Extension Manager de VS pour intégrer SQLLite dans les références de l’application.

Autre point d’attention : l’asynchronisme. L’asynchronisme devient parallélisme en utilisant les Tasks. Pour ne pas casser la fluidité par la pagination, on utilise des collections virtuelles, qui se chargent au fur et a mesure du scrolling. Classe VirtualCollection disponible sur internet, utilisant les IObservableVector. Là encore, un tout petit peu de déception (ce n’est pas une critique, je sais à quel point c’est difficile de préparer une session, et quasi impossible de satisfaire tout le monde) : on n’a pas vu en profondeur à quoi il fallait faire attention pour ne pas perdre en perf à cause de l’asynchronisme. Le conférencier a expliqué que si on tombait dans un mauvais pattern, ça pouvait baisser la performance plutôt que de l’augmenter, mais il n’a pas expliqué lequel.

Heureusement, ça a été fait dans une autre session, qui est d’ailleurs également revenue avec une approche plus standard sur les collections virtuelles.

Posted in Performance, Retours | Tagged | Leave a comment

Tech Days 2013 – Identity as a Service (IDaaS), un service prêt à l’usage avec Windows Azure AD

Je me mettrai pas de notes complètes sur cette session, car je l’avoue, j’ai séché la majeure partie. Ce n’était pas ce que je m’attendais à voir, malheureusement. J’ai tout de même appris des choses, car c’était une bonne session, mais j’ai préféré partir un peu en avance et fureter sur les stands, et aller voir la communauté .NET que de rester jusqu’à la fin.

Windows Azure Active Directory est un service d’identification prêt a l’usage, mis à disposition sur Azure. Il se trouve que ce service est en fonction depuis deux ans, avec accès des massifs, autour de trente millions par heure.

Pour entrer un peu plus dans le détail, il s’agit d’un service multi locataire pour gestion d’identités et contrôle d’accès aux applications. Les utilisateurs des services SaaS Microsoft (Office 365, CRM Online, Intune, etc.) sont déjà dessus. http://login.microsoftonline.com est le portail web d’authentification.

Un truc intéressant est qu’il est possible de faire un lien avec un AD local. D’ailleurs, certaines applications nécessitent la projection d’attributs depuis l’AD local vers WAAD. Typiquement, une application métier peut avoir besoin de paramètres qui viennent de l’annuaire, mais ces attributs ne sont pas nécessairement gérés dans WAAD. Les gérer dans l’AD local permet de les mettre à jour plus facilement.

Posted in Retours | Tagged | Leave a comment

Tech Days 2013 – Eco conception logicielle : comment réduire par deux la consommation d’énergie d’une application ou d’un site web

Pour cette session, mes retours prendront un ton certainement un peu différent des précédents compte-rendu, dans le sens où j’ai eu la chance d’être un des présentateurs, avec Olivier Philippot de Kaliterre et Eric Mittelette, évangéliste en chef de Microsoft (et par voie de conséquence, notre dieu à tous) Sourire.

image

C’était un grand plaisir de présenter aux Tech Days, devant une salle bien remplie, et avec des gens curieux qui nous ont posé plein de questions à la fin. Important aussi de voir que ces sujets du GreenIT et de l’éco-conception logicielle attirent désormais plus qu’un public confidentiel.

Le message fort de cette session était qu’il est extrêmement facile de réaliser des gains substantiels d’énergie.

Olivier a commencé à le montrer en utilisant un système logiciel de mesure de la consommation sur une page web. L’optimisation des images et des CSS, voire la suppression de certaines ressources non utilisées a permis d’atteindre 45% de baisse de consommation. Au final, sur un site fortement sollicité comme celui d’un journal, ce sont 30 tonnes équivalent CO² qui sont économisés, soit 154 000 kms en voiture…

image image

J’ai ensuite pris le relai pour montrer une mesure physique (avec une simple prise Plugwise et un dongle USB pour recueillir la donnée) sur l’application qui me sert d’exemple dans mon livre sur la performance. Entre la version mal codée et celle correcte du point de vue de l’utilisation des ressources, on passe sur un scénario automatisé simplissime de 11 secondes avec un pic à 20 W à 6 secondes avec un pic à 6 W.

image

Au final, 83% de gain de consommation, soit 3000 € gagnés sur ce seul scénario replacé dans le cycle de vie global de l’application. Le tout sans formation particulière car il s’agit de respecter simplement 5 règles de base que n’importe qui se prétendant développeur connait :

  • Utiliser StringBuilder pour des concaténations nombreuses de chaînes
  • Ne pas faire des appels de services web ou de requêtes SQL en boucle
  • Sortir le plus rapidement possible des boucles
  • Ne réaliser que les opérations immédiatement utiles (lazy loading)
  • N’utiliser des exceptions que dans les cas effectivement exceptionels

Un autre message important, que nous n’avions pas préparé, mais qui est apparu dans la discussion, est l’effet de seuil important entre l’augmentation de performance par optimisation du code, et l’augmentation de performance par ajout de ressources. La première est “gratuite” et doit être favorisée, car elle aide sur toute la chaîne (nombre de machines, consommation électrique, besoin de climatisation, de locaux, etc.). La seconde est à n’utiliser que lorsque la première a été utilisée.

Comment savoir où on se place sur ce seuil et quand on l’a traversé trop vite ? Très simple : employez de VRAIS développeurs, des gens qui seront fiers de leur code, qui auront réalisé un travail de qualité, et sur lequel vous pouvez compter pour tirer la quintessence des ressources de la machine, avant de penser à rajouter un autre serveur.

Pour vérifier, il suffit de mesurer :

image image

Mais comment reconnait-on le bon chasseur développeur du mauvais ? Difficile à dire, mais quelques exemples parmi tant d’autres :

  • le bon développeur sait qu’il vaut mieux faire deux boucles sur la même liste pour réaliser deux traitements plutôt que de réaliser les deux traitements à chaque itération d’une seule boucle, car cette seconde solution réduit les chances d’optimisation du traitement par le cache du CPU.
  • le bon développeur ne met pas un mécanisme de cache sur un traitement tant qu’il n’a pas la preuve par un profileur que le gain compense effectivement le coût en termes d’utilisation de la mémoire et de complexité de mise à jour.
  • le bon développeur réfléchit LONGTEMPS à son code avant de taper la moindre ligne. Vous traverseriez un pont réalisé par un ouvrier qui n’a pas fait de calcul de résistance des matériaux avant de poser les poutrelles par dessus la rivière ?

Un autre moyen de trouver un bon développeur : regardez s’il est fier en cherchant le signe ci-dessous (il peut y avoir besoin, le cas échéant, de lui demander de retirer sa polaire élimée) Sourire

image

Posted in Retours | Tagged , | Leave a comment

Tech Days 2013 – Kinect en entreprise

Fabrice Barbin, de Synergiz, seul MVP Kinect en France, présente cette session qui n’est pas que technique, mais également sur les usages qui peuvent être faits de la Kinect pour des applications de terrain.

Kinect, ce n’est en effet pas que le capteur de mouvements de la XBox qui permet de jouer sans manette, mais également un matériel dédié au PC. Celui-ci est basé sur le même capteur, mais avec quelques toutes petites différences, en particulier le fait que l’usage commercial n’est possible que sur cette dernière version.

Kinect Studio enregistre et rejoue les gestes, ce qui est très pratique pour mettre en place des tests unitaires des développements. Le test est d’ailleurs un des aspects sur lesquels il faut faire bien attention lorsqu’on crée une application Kinect. En effet, en fonction des personnes, le même geste sera réalisée de plusieurs manières potentiellement très différentes. Il est important que l’algorithme prenne ceci en compte, et ne se base pas sur une version trop stricte du geste.

Fabrice insiste ensuite sur l’aspect “libérateur” de Kinect :

  • par l’hygiène (non contact)
  • par la capacité de navigation hors-horaire dans un stock
  • par l’aspect user-centric (passer les pubs sur un écran)
  • par l’économie (scan 3D abordable)
  • par l’adaptation au contexte

On peut détecter la proximité pour n’afficher que des grandes images lorsque la personne est loin, ou du texte en plus lorsqu’elle se rapproche. La gamification est également de mise, en rendant la technologie, et donc son utilisation, plus naturelle.

Éducation, santé et marketing sont dans l’ordre les trois domaines où la Kinect a à ce jour le plus d’utilisation :

  • Dans l’éducation, cela peut passer par l’éveil par le geste avant la connaissance du texte, l’utilisation exploratoire (cosmos, ADN, etc.)
  • Dans la santé, Kinect peut aider par la gestion des commandes sans contact (milieu aseptisé) ou par une approche plus ludique et moins technique des maladies pour rassurer les jeunes malades.
  • Dans le marketing, il s’agit de la prise de mesures, de l’essayage virtuel, de l’animation de lieu de vite et de l’accès au catalogue, voire au configurateur virtuel, ce qui donne accès a un spectre très large de matériels qu’il serait impossible de garder en stock.

Fabrice montre ensuite un usage de Kinect + Lync pour une borne d’accueil remplaçant un standard physique hors horaire. La personne cherche dans un annuaire et appelle la personne choisie, le tout par des gestes.

Je n’ai malheureusement pas eu le temps de prendre en photo le code montré, mais les classes .NET principale à utiliser sont SpeechRecognitionEngine et LyncClient pour ce qui est de la voix. Pour ce qui est de la reconnaissance des gestes, je ne crois pas qu’il ait été précisé s’il s’agissait des gestures reconnues en standard par le SDK Kinect ou si du code spécifique a été créé. Klynect est le nom de l’appli, il faudra voir si elle est open source.

La session finit par un retour d’expérience sur la borne B-Ki, qui est déjà utilisée en production. Il s’agit d’une borne interactive pilotée par Kinect. Elle embarque une couche unifiée de récupération des gestes, qui appelle des services indépendants, avec un cache pour les données en provenance d’office 365.

Un autre exemple est une vitrine interactive basée sur un automate a états finis. Dans les deux cas, Fabrice insiste sur l’importance du feedback, car les utilisateurs ne sont pas encore habitués à ce type d’interaction. Il cite l’exemple courant des utilisateurs qui essaient de manipuler l’interface en touchant l’écran. Comme quoi ces gestes, qui ne sont pourtant pas vieux, sont déjà très ancrés dans la culture informatique…

Il faut également faire attention à  la configuration des lieux : adapter pour un utilisateur séparé des spectateurs, sinon la Kinect a du mal à suivre la personne en charge de commander l’application. Une personne portant un sac peut également poser des problèmes de reconnaissance du squelette. Ces cas de non-reconnaissance doivent être correctement gérés et communiqués aux utilisateurs par un retour visuel, sinon ils risquent de croire que l’application ne fonctionne pas du tout. Dans les exemples montrés, l’interface affiche toujours un petit squelette en bas, avec un code couleur indiquant que la personne est trop près ou pas assez.

Enfin, Fabrice finit sur l’importance de calibrer les gestes (enfant / adulte, différence sur la position de la Kinect au sol, en haut, etc.). Comme il le faisait remarquer en début de session, peu de gestes sont innés, et les nuances de personne a personne sont très fortes.

Au final, session très intéressante : on aurait pu tomber sur une simple explication de quelques exemples du SDK (et c’est peut-être ce qu’attendaient quelques personnes), mais il s’agissait bien, comme le titre l’indiquait, de retours d’expérience de niveau industriel, ce qui, mais c’est un avis perso, était bien plus enrichissant.

Posted in Retours | Tagged , | Leave a comment

Tech Days 2013 – Session plénière du mercredi 13 février

Toujours le même groupe Rock pour nous accueillir, et franchement, ils sont bons :

4-Musiciens

Le Monde du Cloud a fait un excellent retour sur cette plénière, donc je me permets de vous renvoyer à leur article, même si je ne vais pas me défausser de mon compte-rendu, qui tient dans les quelques notes ci-dessous.

Le pitch était une approche interactive entre le responsable marketing et le DSI interne de Microsoft, le premier challengeant souvent le deuxième. On va voir comment la DSI répond, avec les produits MS évidemment (oui, on aurait été un peu surpris que le DSI de Microsoft nous déclare que l’informatique interne tournait en Linux…)

Les deux intervenants se mettent d’accord sur le fait que les tensions entre eux sont souvent des tensions entre smart (IT) et fast (métier). Le marketing a besoin de solutions rapides pour gagner des affaires, tandis que l’IT préfère naturellement réaliser de manière propre et architecturé. Le discours au final est qu’il est possible de grouper les deux, en utilisant les bons outils (sous-entendre bien sûr les nouveautés de Microsoft).

L’orateur principal cite Ford, qui a récemment publié un article sur Forbes (merci Sylvestre pour le lien) déclarant que toutes les entreprises sont désormais des entreprises de software. Il est vrai que, de plus en plus, non seulement les matériels embarquent de l’informatique (les voitures, mais pas seulement) mais les processus qui permettent à une entreprise de se différencier sont liés à l’informatique (Big Data, web marketing, etc.). Cela m’a immédiatement fait penser à la déclaration du maire de New York, Michael Bloomberg, qui a il y a quelques mois a déclaré qu’une de ses bonnes résolutions pour cette année était d’apprendre à programmer. J’ai déjà dit ce que j’avais à dire sur le danger de croire que Madame Michu peut devenir développeur en surfant sur Codacademy, mais bon… ça montre bien à quelle point le développement est en train de devenir pervasif. Certains pensaient que l’IT allait devenir une “commodity” (comprendre un simple prérequis technique qui ne participe plus à la différenciation d’une entreprise par rapport à ses concurrents). En pratique, c’est exactement l’inverse qui est en train de se produire, à savoir que l’informatique est à la base de nombreuses actions de différenciation.

On continue ensuite avec un dashboard sur les Tech Days, bon exemple des approches de type DataViz, permettant en un clin d’œil de comprendre la donnée plus en profondeur qu’un simple tableau le ferait.

5-DashboardTechDays

On passe ensuite sur la virtualisation, dont on rappelle qu’elle est la pierre angulaire de l’informatique de services qui se profile. Support de NUMA dans HyperV 3, et presque plus de limite en nombre de CPU virtuels, Live migration de machines, PRA intégré avec HyperV replica, avec gestion de la translation d’adresses, etc. Les annonces sont nombreuses…

Petit détour par PowerShell, dans lequel il va vraiment falloir que je me plonge, car il regorge de fonctionnalités très pratiques et que je n’utilise pas assez. Par exemple, Install-WindowsFeature pour installer une fonction Windows, y compris sur des machines distantes. L’Intellisense Powershell va jusqu’au contexte, par exemple en affichant la liste des process courants pour le paramètre de la fonction d’information sur les process. Ca, c’est balèze…

Orchestrator pour créer graphiquement des architectures physiques.

Le principe de l’ITaaS : découpler, par exemple sur une création d’un SharePoint, la création du site proprement dite, qui vient de l’utilisateur, et le provisioning qui est fait par l’IT. Il y a bien découplage du service, avec l’IT qui suit l’état de santé machine, et intervient avant les conséquences métier, et le métier qui est un utilisateur simple de la solution, sans vue de l’IT sous-jacente. On sent que les approches Cloud ont vraiment diffusé jusqu’à la moëlle du comportement des applications de Microsoft.

L’administration dans ce cas descend jusqu’au niveau profilage, y compris Intellitrace. Ca, c’est vraiment très fort : on voit une démo dans laquelle un plantage est suivi par l’administrateur jusqu’à la ligne de code qui la cause. Approche très Devops, dont on ne peut que s’inspirer si on travaille chez un éditeur de logiciels. On peut aller jusqu’au Business ScoreCard sur le SLA effectif !

Virtualisation et proactive monitoring comme pré-requis du cloud privé ou hybride. Dans AlwaysOn, les serveurs replica sont utilises pour le backup, etc. de façon a alléger les serveurs principaux.

SCCM peut déployer des .appx, des applis d’un store, même du Mac OS X. BYOD Intune gère la security policy, y compris pour du Android ou iOS : par exemple, autoriser APN, forcer MDP au déverrouillage, etc. Bref, ce qu’il faut pour que le BYOD soit moins perçu comme une sourde menace par l’IT.

DirectAccess permet de pousser des policies de sécurité sur les devices connectés, et est plus facile a paramétrer en version 2012. Windows To Go permet de streamer des applications. 180 000 utilisateurs de DirectAccess pour Microsoft, dont 95 000 employés.

On finit sur un vrai feu d’artifice à la Microsoft, avec un reporting des machines d’une infrastructure réalisé dans Visio, et qui permet de descendre visuellement dans des schémas d’architecture physique jusqu’à la machine ayant un problème. Très fort… mais le coup de grâce, c’est la démo finale d’un affichage de cartographie dynamique 3D dans Excel, en mode touch, et avec animation d’indicateurs. Le tout réalisé en trois clics de souris, aussi simplement que la création d’un graphique ou d’un tableau croisé dynamique. Je ne peux que vous conseiller de regarder les dernières minutes sur internet, car une description en texte ne rend rien…

Posted in Retours | Tagged | Leave a comment

Tech Days 2013 – Un petit mot sur l’ENI

Bon, je n’ai pas pour habitude de faire de la publicité sur ce blog qui est purement technique, mais les circonstances font que je me dois de mettre en avant ceux qui font les choses bien, et l’ENI mérite vraiment qu’on parle d’eux.

Logo - Editions ENI

Il faut d’abord que je vous donne un exemple de mauvais éditeur, de façon à bien faire comprendre en quoi l’ENI en est un excellent.

Que je vous explique… Je suis allé aux TechDays, et j’ai rencontré sur place une société d’édition dont je tairai le nom, à qui j’ai proposé de réaliser la traduction en français d’un de leurs bouquins qui le mérite vraiment. Leur réponse immédiate a été de me dire que ce bouquin n’était pas un best-seller en France (ben oui, il n’est disponible qu’en anglais) ni même aux USA, et qu’ils ne voyaient donc pas l’intérêt de le traduire.

Sur le fait qu’il ne fasse pas un carton, même dans sa langue natale, je n’étais pas très surpris. En effet, il s’agit d’un livre qui recueille les meilleurs articles en provenance d’un blog très influent. Il n’est donc pas illogique que les ventes ne soient pas énormes, vu que chacun peut avoir le contenu gratuitement. Mais seulement en anglais, ce qui me semblait justifier une traduction…

Je comprends bien qu’un éditeur doit faire des choix et gagner de l’argent, mais dans ce cas, j’ai un peu de mal à saisir leur attitude : ils ont un traducteur volontaire, donc ils peuvent être à peu près sûr de sa motivation. J’ai également traduit un de mes livres en anglais, donc pour ce qui est d’une traduction dans l’autre sens, ils pouvaient raisonnablement penser que ça se passerait bien. Vous pensez que c’est une raison de coût ? Non plus : je ne leur demandais pas de fixe, et leurs contrats ne sont d’ailleurs qu’aux royalties. Où était le risque pour eux ? Dans le suivi de la création du livre ? J’en ai déjà écrit plusieurs, je n’ai pas besoin que l’éditeur me tienne la main… J’ai même tendu la perche en expliquant que j’étais très motivé pour traduire ce livre, qu’il était à mon avis excellent, et que je me fichais des royalties, mais rien…

Ils ne veulent tout simplement pas faire ce bouquin parce qu’ils savent qu’il ne va pas leur rapporter BEAUCOUP. Ils ne veulent que du best-seller…

C’est ce qui m’a décidé à vous parler de l’ENI, car eux sont radicalement différents : ce sont des passionnés de l’édition, des gens prêts à prendre sans arrêt des risques pour améliorer leur contenu global, à publier un livre même s’il ne se vendra qu’à quelques centaines d’exemplaires, car il participe à la richesse de leur corpus. J’adore cet esprit Sourire.

Attention, ils ne vont pas non plus éditer un livre sur la corrélation entre le taux de natalité chez les babouins et l’architecture néogothique japonaise, juste pour la beauté du geste… Mais s’il y a un intérêt, ils se lancent ! Ils ne restent pas le nez dans leurs courbes de vente, à spéculer et tirer des plans sur la comète : ils font, ils réalisent ! Bref, ils font le vrai travail d’un éditeur pour que le livre n’est pas qu’un tas de papier qui permet de gagner de l’argent, mais un outil fondamental pour améliorer la diffusion des connaissances.

Ils sont chaque année aux TechDays, et je ne peux que vous encourager à aller les voir si vous avez un projet de livre. Ils sont ouverts, toute l’équipe est super sympa, et très compétente.

Personnellement, c’est presque plus pour eux que je souhaite le succès des bouquins que j’ai écrit pour l’ENI : vu le travail que ça représente, on ne le fait pas pour l’argent, et on est déjà très content et fier dès la parution du premier exemplaire. Tout ce qui se vend en plus, c’est bien pour l’auteur mais pas essentiel. Pour eux, c’est important, car ça leur permet de continuer à innover !

Et pour ce qui est de l’innovation et de l’allant, il faut savoir qu’ils impriment tout en numérique (donc pas de gâchis de papier pour des livres qui vont au pilon si invendus), qu’ils sortent entre 12 et 14 livres PAR MOIS, que leur offre de bibliothèque numérique contient tous les livres qu’ils éditent, ET CE DES LEUR SORTIE (pas comme d’autres qui ne les mettent dans leur bibliothèque numérique que trois mois après la sortie de l’e-book, pour faire payer la nouveauté), qu’ils n’hésitent pas à créer des collections complètes de nouveautés. Aux Tech Days, il y avait par exemple une toute nouvelle collection sur le marketing, avec des bouquins sur le web marketing, l’utilisation des réseaux sociaux, etc. J’avais envie de tout acheter, et je pense que mon comptable va avoir à mettre la main à la poche ces prochains jours… Il s’appelle Jean-Marc, mais je l’appelle Papa Noël Sourire.

Le fait que les livres soient écrits directement en français est également gage de qualité. Pour être bilingue, j’ai souvent vu des traductions qui mériteraient punition en place publique. Pas le cas chez ENI : tous les auteurs sont des spécialistes de leur sujet, et sélectionnés pour s’exprimer clairement.

Bref, vous aurez compris que je les aime bien. Et si ce panégyrique ne vous a pas convaincu, achetez sur le site ENI ne serait-ce que parce que vous achèterez français et local ! Moins de transport, moins de CO², moins d’engraissement des vendeurs internet américains Sourire. Je ne vois même plus un seul argument pour aller voir les autres…

Posted in Retours | Tagged | Leave a comment

Tech Days 2013 – L’état de la menace avancée (dite APT)

Même intervenant que sur la meilleure session sécurité de l’an passé, et celle-ci est encore de très haut niveau. Je n’ai pas noté son nom, car je suis arrivé un peu à la bourre, mais vous pourrez le retrouver facilement sur le site des Tech Days si cela vous intéresse. Le nom de l’article reprend mot pour mot le titre de la session dont je fais le compte-rendu rapide.

APT veut dire Advanced Persistant Threat. En gros, c’est pour désigner un type d’attaque informatique qui fait intervenir plusieurs vecteurs, et dans laquelle l’attaquant parvient à prendre le contrôle durable d’une infrastructure, en posant par exemple des rootkits sur plusieurs machines, de façon à réinfecter une machine dès qu’elle est nettoyée, ou en planquant des services malveillants de façon qu’ils soient plus difficilement détectables, l’idéal étant bien sûr que la victime ne se rende carrément pas compte qu’elle est infectée, ni même qu’elle a été attaquée. Au passage, dans le milieu de la sécurité, la blague a la mode est “les deux types d’entreprise sont celles qui ont été attaquées, et celles qui ne le savent pas”.

Intéressant concept de watering hole : le trou d’eau autour duquel se rassemblent les bêtes pour s’abreuver est un lieu particulier de vulnérabilité, et il a l’avantage de les rassembler toutes en un seul endroit. Il semble que des sites comme http://www.lequipe.fr soient des points d’eau pour de nombreuses entreprises… Du coup, si ce site est compromis par une page vérolée, cela pourrait d’après l’intervenant provoquer un crash du CAC 40 Sourire.

A la question “pourquoi y a-t-il autant de failles”, la réponse de l’intervenant est toute empreinte de bon sens : “parce que tout le monde développe en Java au lieu d’en ADA”. C’est sûr qu’avec de mauvais outils (du point de vue de la sécurité), un développeur ne peut pas faire tout le temps des miracles. Plutôt que de compter sur lui pour ne jamais oublier de valider la donnée, toujours canoniser les syntaxes, etc., ça serait plus simple avec des langages où la sécurité était dès le début partie prenante…

Etonnamment, cette année, on a entendu parler plusieurs fois d’attaques de type Pass The Hash, alors que ce genre d’attaque existe depuis bien longtemps. Pour expliquer rapidement de quoi il s’agit, lorsqu’on tape un mot de passe dans Windows, il est transformé en un condensat, plus souvent appelé par son nom anglais “hash” (ce qui rend quand même le nom de l’attaque plus marrant). Ceci permet de ne pas avoir le mot de passe en clair, mais simplement une chaîne qui ne peut pas être re-transformée en le mot de passe original, mais qui pourra être validée par Windows comme celle qui correspond au hash du vrai mot de passe, ou pas et dans ce cas-là, pas d’accès.

Le souci est qu’avec LM ou NTLM, les méthodes d’authentification préhistoriques de Windows, il suffit d’envoyer le hash pour s’identifier correctement. Il ne s’agit pas d’un challenge-response ou d’une méthode évoluée comme Kerberos. Or, comme il est difficile de forcer l’utilisation de Kerberos dans tous les clients Windows, on se retrouve à se trimballer encore ce genre de protocole, qui, si un attaquant trouve le hash en mémoire, est éminemment vulnérable.

Les smartcards ne sont pas nécessairement la panacée en termes de sécurité. Elles fonctionnent avec des mots de passe aléatoires, mais utilisant toujours le hash LM qui est stocké en mémoire et sensible aux mêmes attaques. Il faut donc empêcher l’accès des attaquants à la machine de toute façon, car tant que la session n’est pas fermée, il peut se loguer sur une autre connexion, et analyser la mémoire pour le retrouver et l’exploiter très simplement avec des outils trouvables facilement sur internet.

Il est à noter d’ailleurs que le mot de passe Windows est en mémoire en clair, ne serait-ce que pour le SSO, le RDP, et plus particulièrement le HTTPBasic qui en ont besoin. Plus particulièrement, parce que pour les premiers besoins qui sont Microsoft, on pourrait imaginer des moyens qui ne le rendraient pas nécessaire. Mais pour HTTPBasic, on est coincé : l’envoi du mot de passe se fait par un simple encodage Base64 du user suivi du mot de passe, donc il FAUT l’avoir quelque part. En pratique, il n’est pas vraiment en clair, et il faut décrypter la mémoire, mais si on est sur la session, on a la clé !

L’outil Mimikatz a des drivers signés Microsoft, ce qui lui permet de retrouver ces mots de passe, et ne pas être rejeté par la sécurité interne de Windows. Pour ces problèmes de “vrais faux certificats”, voir le rapport d’expertise sur intrusion chez Diginotar sur http://www.rijksoverheid.nl. Dans le même genre, l’outil Cachedump permet de retrouver les mots de passe ActiveDirectory stockés pour l’autorisation de login hors connexion.

Simple Assembly Explorer, Xenocode : outils à tester…

Pour empêcher la messagerie de bloquer un ZIP contenant un EXE, on peut lui mettre un mot de passe, la plupart décident alors qu’il vaut mieux le laisser passer malgré qu’elle ne puisse pas analyser le contenu. Office utilise par défaut VelvetSweatshop comme mot de passe…

Explorer est en général largement autorisé dans les pare-feu, et constitue donc une cible idéale pour une prise de contrôle.

Certains sites web sont suffisamment astucieux pour ne montrer des pages vérolées que si le client qui les accèdent est celui qu’elles veulent infecter, tout en présentant à tous les autres une version saine. Le traitement peut se faire par exemple de façon à ne montrer un code menaçant que lorsqu’on les appelle depuis un domaine précis, de façon a réduire la détection. Il faut d’ailleurs savoir qu’il n’est même plus nécessaire d’utiliser des cookies pour pister un utilisateur : les user agent sont tellement divers et variés qu’en les utilisant comme complément de l’adresse IP et de la résolution d’écran, on a une identification individuelle quasiment aussi efficace.

Une technique utilisée par certains antivirus pour contourner les analyses d’accès aux API sensibles consiste à ne pas appeler l’adresse mémoire de la fonction directement, mais l’adresse + 5. En effet, toutes les fonctions Windows commencent par un MOV EDI qui sert au patch dynamique. En pratique, ceci est très rarement utilisé par Microsoft, mais maintenant que c’est connu, les antivirus vont ajuster le tir.

Quand un malware utilise les commentaires d’un bitmap pour envoyer les commandes, le proxy ne le voit pas, et en plus purge les logs toutes les heures, perdant ainsi l’attaque !

Au passage, d’ailleurs, le conférencier explique que tous les moyens de détection basés sur les heures de modification des fichiers sont inefficaces de manière inhérente, car les pirates utilisent désormais souvent l’API SetFileTime pour faire croire que les fichiers qu’ils mettent en place ont été installés en même temps que l’OS.

L’Alternate Data Stream de NTFS est également oublié souvent par les détecteurs d’attaques. Pour info, il s’agit des $$DATA qu’on voit parfois apparaître dans les noms de fichiers. Un fichier peut en effet, en NTFS, embarquer plusieurs canaux d’information, même si en pratique, on n’en utilise quasiment jamais qu’un seul, à savoir celui correspondant au contenu.

Un virus peut contourner l’antivirus qui fonctionne par émulation en s’exécutant sur une socket, car les antivirus n’émulent pas encore le réseau, même local.

Et pour achever de nous faire rendre compte que dans le domaine de la sécurité, le jeu du chat et de la souris est bien parti pour durer encore quelques décennies au moins, une dernière information sur le fait que Nortel est reste piraté pendant 10 ans, car ça coutait trop cher de nettoyer tout le réseau par rapport aux dégâts effectifs causés par le pirate, dont ils tentaient de suivre tout de même l’activité, mais sans être capable de le virer de manière définitive.

Bref, excellente session où on apprend plein de choses en termes de sécurité. Pour les personnes qui ont besoin d’être au courant, je la recommande chaudement. Elle se passe normalement à chaque TechDays.

Posted in Retours | Tagged | Leave a comment

Tech Days 2013 – Les dernières avancées HTML 5 & CSS 3 en action !

C’est David Rousset qui présente cette session. Il commence par parler des animations, et des possibilités de CSS3 dans ce domaine. Il est désormais possible de composer des animations simples uniquement en CSS, sans avoir à recourir à du JavaScript.

Le Grid Layout est apparemment en cours de reprise par le W3C. Mozilla a manifesté un intérêt à l’implémenter, le seul problème étant qu’entre Firefox OS et Firefox Mobile, ils n’ont pas eu beaucoup de temps l’année passée, et ça ne se fera donc pas avant fin 2013.

Le travail sur le grid peut se faire en fraction unit plutôt qu’en pixels, ce qui permet de s’adapter relativement simplement aux différentes résolutions. Le layout est défini très simplement dans le CSS, en définissant les colonnes, les lignes, et en assignant les positions dans celles-ci aux différents éléments. Bon, quand on vient de XAML, tout ça paraît très simple, mais visiblement, dans le monde du web, ce genre de container est une révolution. Du coup, ça a vraiment du sens à ce que ça devienne une norme… Les Media Queries aident pour prendre en compte l’orientation. Il s’agit de condition qui peuvent être appliquées sur du CSS pour spécifier s’il doit s’appliquer en fonction de la résolution, de l’orientation de l’écran, etc.

Dans CSS3, il y a aussi les 3D transform, le multi colonnes, et le float positionning. Il est notable que les éléments 3D transform ne sont pas préfixés par “-ms” : on peut donc l’utiliser partout, en tout cas dans les navigateurs récents. Les animations CSS sont plus fluides qu’avec JQuery car elles sont accélérées matériellement par les navigateurs qui le supporte.

Toujours dans les animations, même si un peu plus compliqué, on peut faire de la transition, bref du morph de propriétés d’un état à un autre. Si on veut animer plus finement, on peut même faire du keyframe avec des courbes d’animation. On va finir par se retrouver avec Maya recréé dans IE si ça continue !

http://ie.microsoft.com/testdrive propose des outils graphiques pour générer ces CSS, ce qui rend le travail beaucoup plus simples, surtout pour des gens qui n’y connaissent rien, et qui sinon galèreraient non seulement avec le contenu, mais également avec la syntaxe.

On passe ensuite aux APIs HTML 5. Vu la densité, je n’ai pas eu le temps de tout prendre en notes, donc je mets une belle photo pour la liste, et je détaillerai plus bas celles en gras, que David Rousset explique plus particulièrement sur cette session :

3-HTML5

FileAPI permet comme son nom l’indique de gérer des fichiers de la machine locale, avec évidemment les restrictions de sécurité afférente, typiquement l’acceptation de l’utilisateur d’un accès donné. L’API peut charger du binaire, qui sera alors traité en JavaScript avec des streams comme on le ferait dans n’importe quel autre langage.

Il y a également la gestion du drag and drop. Attention, on ne parle pas du drag and drop à l’intérieur de la page, mais plutôt de la capacité de déplacer un élément du poste local sur le navigateur, et que celui-ci passe au contenu de la page cible la possibilité de réceptionner l’évènement, plutôt que ce soit le navigateur qui s’en occupe. Par exemple, si on déplace un fichier image, au lieu que le navigateur affiche l’image, il pourra la passer au conteneur de réception dans une page HTML.

Les formulaires ont également évolué en HTML5. En particulier, il existe de nouveaux types d’input, plus spécialisés. Ainsi, il est possible d’avoir un clavier adaptatif en fonction du type justement. Par exemple, un clavier avec pavé numérique quand on se trouve dans un champ n’acceptant que des nombres. Toujours dans les formulaires, la validation peut être désormais réalisée par HTML5, et on n’aura plus à recourir à JavaScript, sauf pour des cas réellement complexes. Il existe des pseudo classes CSS pour améliorer le look des messages de validation si on le souhaite.

Une autre API HTML5 est IndexedDB, qui stocke des clés-valeurs. D’après David Rousset, c’est en passe de prendre le dessus sur la norme d’Apple qui proposait un appel de type SQL. A voir si les normes confirmeront l’information. Edit suite échange avec David : IndexedDB est bien devenu le standard choisi par le W3C, et il est désormais implémenté par Microsoft sur IE, mais aussi Google dans Chrome et Mozilla dans Firefox. ne reste qu’Apple à faire bande à part avec WebSqlDB, pourtant obsolète suite à l’adoption du concurrent par le W3C…

Single page application pratique car on garde toujours le DOM, mais attention a la mémoire

On continue avec les problématiques de performance de JavaScript. A l’origine, l’exécution a été pensé monothread, d’où le blocage de l’affichage ou le warning ‘ce script prend trop de temps, voulez vous le killer ?’. Il sera désormais possible de créer des threads de work. Les webworkers sont supportés partout. La limitation est bien sur qu’il n’y a pas d’accès a la GUI ou au DOM.

Une dernière petite API pour la route : PointerEvents pour le touch. Il s’agit d’une proposition Microsoft, qui semble bien acceptée car celle poussée par Apple au début est désormais retenue par le même, pour des problèmes de brevets. Microsoft pousse une API souris stylet et touche unifiés. Les mots clés à utiliser sont MSPointer et MSGesture. Attention, il faut spécifier la zone qui traite différemment les événements “touch” par rapport au navigateur lui-même, sinon il ne peut pas savoir où le mouvement des doigts vers le bas signifie un scroll ou doit être passé au canvas pour traitement de l’évènement touch associé.

On finit cette session très intéressante par deux outils :

  • Modern.IE pour tester les applications web et qui, contrairement à ce que son nom laisse entendre, peut servir pour les autres navigateurs qu’IE
  • Browserstack pour valider automatiquement des pages web dans n machines virtuelles avec des OS et des navigateurs différents. Il y a une offre d’essai gratuite en ce moment. Pour ma part, je croyais avoir vu des plugins Firefox qui simulaient le comportement de différents navigateurs, mais ce n’est peut-être pas assez fin…
Posted in Retours | Tagged | Leave a comment