Exécution de code natif dans le navigateur. Tsunami en vue

Web Assembly, Blazor and Co.

Lors de cette édition 2019 de la conférence Build, l’exécution de code natif dans le navigateur a été un bon sujet de discussion. Plusieurs grosses sessions y ont été consacrées. J’ai participé à plusieurs d’entre elles et vous fait un petit retour sur ce que j’ai appris et ce que je pense. N’hésitez pas à me partager vos remarques et commentaires.

WebAssembly (Wasm) est une specification qui définit un format de représentation binaire de code exécutable optimisé et ouvert pour le web. Pour les développeurs .NET ou Java que nous sommes, c’est l’équivalent du IL ou du ByteCode. L’objectif visé est de permettre l’exécution de code natif sur le web.

Aujourd’hui les principaux navigateurs PC ou mobiles du marché implémentent déjà WebAssembly 1.0. Et si vous avez un doute sur les capacités de la technologie, jetez un oeil à la capture d’écran suivante dans laquelle un système d’exploitation Windows 2000 complet tourne à l’intérieur d’une page web. Bluffant!

20190508_084109 (2)
Windows 2000 Professionnel s’exécute à l’intérieur du page HTML!

Pourquoi Web Assembly pourrait être la prochaine révolution du Web?

Voici les principales raisons pour lesquelles WebAssembly a toutes ses chances de percer.

Il offre des performances qui dépassent de loin ce que peut faire Javascript. Il utilise des interfaces qui lui donnent accès aux ressources matérielles communes aux différents types d’appareils. Javascript est interprété et n’exploite pas le multithreading à l’intérieur du navigateur. WebAssembly a moins de limitations de ce côté.

Il offre les mêmes garanties d’isolation (sandboxing) que Javascript. Le code binaire se voit contraint aux mêmes limitations que les scripts (pas d’accès aux systèmes de fichiers, aux processus, à la mémoire etc.). Donc on fait du natif au moins aussi secure que Javascript.

L’exécution de code WebAssembly est disponible par défaut car il fait partie du navigateur. Nul besoin de télécharger des runtimes. C’est un bon avantage par rapport à certaines technologies comme Silverlight ou encore Flash. On se facilite grandement la vie pour le déploiement, la disponibilité et la gestion des versions.

Il garantit une portabilité du code à travers les plateformes. Le même fichier binaire s’exécute dans tous les navigateurs sans adaptation. Il faut savoir que Wasm n’est pas limité à s’exécuter dans des navigateurs. Il est déjà aujourd’hui utilisé dans d’autres contextes comme dans le Blockchain par exemple. C’est juste qu’aujourd’hui l’engouement a pas mal pris du côté de la communauté Web qui y voit de l’intérêt. À terme, Wasm devrait même devenir une cible de compilation dans votre IDE préféré au même titre que x86, x64 ou ARM!

Wasm est un standard du W3C. Le groupe de travail est composé entre autres de représentants des principaux navigateurs du marché. Nul doute que cela contribuer positivement à son adoption, à sa compatibilité et à sa pérennité.

Comment exploiter Web Assembly ?

Aujourd’hui des langages comme C/C++/RUST et Go possèdent déjà du tooling pour produire du binaire au format Wasm. Ce sont des langages qui sont des citoyens de premières classes pour Web Assembly.

WebAssemblyStudio
WebAssembly Studio vous permet de compiler et d’exécuter du code C dans votre navigateur.

Mais qu’en est-il du C# et du code .NET ?

C’est là que les équipes Xamarin et .NET Core entrent en jeux.

L’équipe Xamarin a produit une version du runtime Mono au format Wasm qui fonctionne dans le compilateur et qui est capable de transformer à la volée du code IL .NET vers WebAssembly. Pour ceux qui ne sont pas familier avec Mono, il s’agit d’une implémentation alternative du Framework .NET qui tourne sous Mac, Linux, iOS et Android. Elle est conforme .NET Standard 2.0. Mono est donc le socle technique qui permet l’exécution de code .NET à l’intérieur du navigateur.

20190508_085124 (2)

Du côté de l’équipe ASP.NET Core, on s’est penchés sur la faisabilité et l’opportunité de proposer un rendu client basé sur une réutilisation de certaines technologies disponibles. Elle a donc démarré un projet expérimental dont le nom de code est Blazor. Objectif: proposer les vues Razor de ASP.NET dans le navigateur. Sur les derniers mois, les livraisons à la communauté ont été très fréquentes pour partager les avancées réalisées et récolter du feedback. Après 9 itérations, l’intérêt et la faisabilité ont été prouvées. L’équipe ASP.NET vient d’officialiser sont support.

20190507_142801 (2)
Blazor offre deux modes de fonctionnement pour le rendu. Aujourd’hui, seul le rendu server-side est supporté. Le client-side nécessite encore quelques optimisations.

Je suis allé voir la session de Daniel Roth durant laquelle il a démontré une application web réalisée avec Blazor. C’est durant cette présentation que j’ai vraiment pu prendre la mesure de l’intérêt de cette technologie:

  • Tout d’abord Blazor et le support de .NET en général dans le navigateur permet de réutiliser du code qu’on a déjà éventuellement écrit comme des contrôles utilisateurs, des routines de validation, de la logique d’affaire.
  • On peut utiliser toutes les librairies disponibles sur Nuget.org qui sont compatibles .NET Standard 2.0. C’est un gros plus.
  • On peux valoriser nos connaissances du langage C# et de .NET pour faire du code client! Pas de nécessité de se développer une seconde expertise dans un langage Javascript.

Je trouve que ce dernier point est important pour les entreprises qui ont fortement investi dans la formation de leurs employés ces dernières années.

20190507_142715 (3)
L’application Blazzing Pizza exploite pleinement Blazor pour le rendu. Tapez le lien dans votre navigateur pour accéder au code et aux explications.

La plateforme Uno

La compagnie nventive, basée à Montréal, a développé une plateforme qui s’appelle Uno et qui elle aussi offre une option d’exécution dans le navigateur.

Uno propose d’utiliser la technologie XAML introduite par WPF pour concevoir l’interface de votre application quelque soit la plateforme sur laquelle elle doit fonctionner ultimement. Elle s’appuit sur un tooling de conversion qui va produire un rendu équivalent, mais en utilisant des fonctionnalités natives aux plateformes cibles. Ainsi, par exemple, le Button XAML deviendra un DIV dans votre navigateur.

Uno possède déjà une bonne maturité et une notoriété grandissante. nventive l’utilise depuis longtemps pour développer des applications mobiles pour de grandes entreprises partout dans le monde (UPS, Red Bull etc). C’est assez récemment que l’équipe a développé le support pour Web Assembly.

En conclusion

En revenant du Build, je suis pas mal convaincu que nous allons beaucoup entendre parler de Web Assembly dans les mois qui viennent. Le tooling autour de C# et de .NET va certainement évoluer rapidement et cela va valoir la peine de se pencher sur cette technologie qui a tellement à offrir.

Je retiens aussi que pour les entreprises qui veulent préserver leurs investissements dans le temps que c’est une technologie qui offre des perspectives uniques en terme de réutilisation de code et de réutilisation des connaissances des développeurs.

I believe

Build 2019 –Top 5 des petits outils innovants pour les dev

All developer things with Scott Hanselman

J’ai assisté à cette session qui avait pour but de donner un peu de visibilité à certains projets ou expérimentations qui n’étaient pas encore suffisamment finalisés ou positionnés pour avoir leurs propres sessions à la conférence Build. C’est Scott Hanselman qui a eu cette bonne idée pour les faire connaitre et récolter rapidement du feedback. Pour certains d’ailleurs, l’engouement de la communauté sera clé pour leur survie.

Voici donc mon top 5 coup de cœur. N’hésitez pas à me partager vos avis et commentaires.

No 1: Try .NET

L’objectif de Try .NET est de vous permettre de proposer du contenu interactif dans lequel le lecteur peut interagir avec du code .NET, le modifier et l’exécuter directement depuis son navigateur. On parle ici d’une exécution locale qui ne requiert pas de communications vers un quelconque serveur qui exécuterait le code et retournerait les résultats! Ce projet utilise la technologie Blazor.

Cela peut sembler anodin écrit aussi simplement mais cette technologie rend possible certains scénarios d’utilisation très intéressants. En voici deux exemples:

  1. Vous vous apprêtez à donner un atelier ou un dojo de formation sur C#. Vous devez prévoir des machines pour les participants, installer Visual Studio sur chacune d’elles, s’assurer que vous avez des licences etc. Avec Try .NET, les choses sont beaucoup plus simples. Tout ce qu’il vous faut, c’est un navigateur web. Les participants l’utilisent pour visualiser le contenu de la formation et écrire les bouts de code qui correspondent à ce qui est demandé dans les exercices. Ils peuvent éditer le code, l’exécuter et valider qu’ils obtiennent bien les résultats attendus.

  2. Vous fournissez une librairie de code via Nuget et vous désirez publier une documentation interactive qui permet à vos futurs consommateurs de découvrir des exemples d’utilisation qu’ils peuvent exécuter live sans avoir à installer ou configurer quoi que ce soit. Mieux encore, ils peuvent modifier les codes exemples et expérimenter votre librairie directement à partir de la page de documentation!

Comment ça fonctionne ?

En tant que fournisseur de contenu, vous écrivez vos documents au format Markdown (MD). Ceux-ci mélangent habillement le texte et des sections de code délimitées par une succession de trois accents graves (« `). Vous pouvez déposer ces fichiers dans un repo Git pour les rendre accessibles à vos consommateurs. Bien que cela n’a pas été explicitement dit lors de la session, j’imagine qu’il sera possible aussi d’exposer ce contenu sur un site. Ci dessous

trydotnet_md
Une section de code imbriquée dans le texte explicatif

En tant que consommateur, vous téléchargez le contenu sur votre poste de travail (git clone par exemple), ensuite vous lancez une invite de commandes, vous vous déplacez dans le répertoire qui contient les fichiers MD et vous exécutez la commande dotnet try. Votre navigateur démarre, effectue son rendu et vous pouvez commencer à lire le contenu et surtout expérimenter le code.

trydotnet_json
Version interactive de la documentation de Newtonsoft.Json dans laquelle vous pouvez directement essayer des codes exemples qui utilisent la librairies!

Comment puis-je l’essayer ?

Try .NET est un projet open source disponible sur Github à l’adresse suivante : https://github.com/dotnet/try

Si vous voulez l’essayer, il y a déjà trois exemples de contenus interactifs. Clonez le repo à l’adresse suivante https://github.com/dotnet/try/tree/master/Samples

En conclusion

Je trouve que c’est un outil fabuleux qui ouvre des perspectives très intéressantes pour offrir du contenu interactif dont le but est d’apprendre, de parfaire sa connaissance ou d’expérimenter .NET. C’est un outil idéal pour les équipes dont la mission est de former, soutenir ou outiller d’autres équipes de développement.

Microsoft va mesurer l’engouement de la communauté pour ce projet. N’hésitez pas à l’essayer et à y contribuer.

No 2 : Le retour (timide) des Windows Powertoys

Si par le passé, vous avez déjà utilisé des Powertoys sur d’anciens systèmes d’exploitation comme Windows 95, NT ou Windows XP, il est probable que vous en gardiez un excellent souvenir. Les powertoys sont de petits outils qui améliorent votre productivité ou votre efficacité. Le genre d’outils pour lesquels on développe rapidement une addiction.

Windows 10 n’a jamais eu de Powertoys officiels… jusqu’à maintenant

Deux premiers ont été présentés. Il n’y a pas encore de quoi pavoiser mais c’est une excellente nouvelle et un bon début.

Le premier se nomme MTND (Ugh!) et permet de déplacer une fenêtre dans un nouveau bureau créé à la volée. Il suffit de laisser le pointeur de la souris au-dessus de l’icône qui permet de maximiser une fenêtre. Après une fraction de seconde, un bouton apparait. Si vous cliquez dessus, la fenêtre est déplacée vers un nouveau bureau et occupe le plein écran.

powertoy_MTND
Permet de déplacer votre fenêtre

Le second se nomme Windows Key Shortcut Guide et permet d’afficher une carte des raccourcis Win + touche du clavier disponibles sous Windows 10. Super utile si on tient compte que la plupart d’entre nous ne connait pas 10% des raccourcis disponibles!

shortcut_guide
La liste des raccourcis Windows apparaît en plein écran

Ils seront open source et disponibles sur Github à l’été 2019 à l’adresse suivante : https://github.com/Microsoft/Powertoys

Actuellement la page README.MD du repo liste les prochains powertoys qui sont au carnet de produit. Je vous laisse le soin de les découvrir!

No 3 : DOS but not DOS

DOS but not DOS est une réécriture complète de l’invite de commandes CMD que nous avons depuis la nuit des temps sous Windows.

Vous allez me dire : « Pourquoi une nouvelle version ? » Hé bien en voici les motivations principales

  • La vitesse d’affichage a été grandement améliorée par l’utilisation de DirectX/DirectWrite. Vous bénéficiez maintenant de l’accélération matérielle de votre carte graphique. À première vue, cela semble étrange d’améliorer la vitesse d’affichage d’une boîte DOS. Mais finalement pas tant que cela: il se trouve que le défilement de texte est pour beaucoup responsable de la lenteur d’exécution de scripts en mode interactif. Pour s’en convaincre il suffit de visualiser l’exécution d’un dir /s sur un répertoire volumineux! Le temps d’exécution dans la nouvelle fenêtre de commande est visiblement plus rapide.
  • L’utilisation de DirectX permet de proposer une fenêtre de commandes avec un look et des fonctions plus modernes : possibilité de zoomer sur le contenu, effets de transparence pour le fond de fenêtre. Rien d’essentiel mais c’est visuellement plus attrayant. Durant la démo, le présentateur a aussi annoncé la venue prochaine d’une nouvelle police de caractères à taille fixe dont le nom est Cascadia Code. La mise à disposition d’une nouvelle police de caractère un événement assez rare qui mérite d’être souligné.

  • Elle s’intègre parfaitement au nouveau Windows Terminal qui propose des onglets dans lesquels on peut ouvrir simultanément plusieurs fenêtres de terminal de types différents comme Powershell, Ubuntu ou encore Azure Cloud Shell

DosbutnotDOS
Pour démontrer la vitesse d’affichage, l’équipe a développé une version de Pong en mode texte avec des émojis

No 4 : Exécutables .NET autoportants

Cette fonctionnalité avait déjà été présentée l’année dernière mais ne s’est toujours pas rendue entre nos mains depuis. Le principe est de produire un exécutable .NET qui contient toutes les dépendances nécessaires à son exécution en ce compris le framework .NET ciblé. L’énorme intérêt est clairement la portabilité de votre application qui s’exécutera aisément sur n’importe quelle machine Windows.

L’inconvénient par contre est que l’exécutable a une taille considérable (168Mb durant la démo). Scott a expliqué que certaines optimisations de type Tree Shaking devaient encore être faites pour éliminer de l’EXE les DLLs du framework qui ne sont pas utilisées par l’application.

Quoi qu’il en soit c’est une fonctionnalité intéressante qui va permettre aux entreprises qui ont de grosses applications Windows Forms ou WPF, de continuer à les distribuer aisément sous Windows 10.

No 5 : Configuration des préférences de nettoyage du code par profil.

Visual Studio 2019 va permettre la configuration de profil de nettoyage dans lequel vous allez pouvoir indiquer quels types de nettoyage de code doivent être exécutés dans tel ou tel contexte. C’est une addition intéressante qui permettra d’adapter le ré usinage en fonction d’un projet, en fonction du fait que vous travaillez sur un projet professionnel ou personnel etc.

cleanup_profiles
L’écran qui permet de configurer les options de nettoyage pour chaque profils

Le présent et le futur de la plateforme .NET

net_robot

Hier j’ai assisté à la présentation de Scott Hanselman et Scott Hunter à propos du roadmap de .NET et des outils de développement. Voici les faits saillants

Commençons d’abord par un constat: je ne me souviens pas avoir vu une seule diapositive à propos du Framework .NET. Une version 4.8 est en préparation mais clairement ce n’est plus là que se passe le show. Aujourd’hui j’ai pu m’entretenir de ce point avec Immo Landwerth qui est le Program Manager de .NET. Il m’a confirmé que pour l’instant il n’y avait pas de plan pour une version subséquente mais que cela ne voulait pas dire pour autant qu’il n’y en aurait plus dans le futur. Clairement le focus est sur .NET Core.

Pas de panique, les bonnes nouvelles s’en viennent 🙂

Tout d’abord .NET se porte très bien. Sur la dernière année, Microsoft a mesuré un gain de 1 millions de développeurs .NET actifs supplémentaires. Ce gain impressionnant peut être attribué à plusieurs facteurs:

  • Le succès grandissant de .NET Core et ASP .NET Core
  • La politique d’ouverture menée par Microsoft incluant le virage open source amorcé par la compagnie
  • Le fait que .NET Core et C# est un duo gagnant en termes de polyvalence. Aujourd’hui .NET Core et C# permettent de développer des applications et services web, des applications consoles et de l’IoT. Très bientôt d’autres types de développement seront supportés. Plus à ce sujet dans la suite de ce billet.

.NET Core 2.1

Fraîchement sorti, .NET Core 2.1 apporte son lot d’améliorations dans le framework proprement dit mais aussi à la périphérie avec Entity Framework Core et ASP .NET Core.

Digne de mention:

  • L’introduction de la classe Span<T> permet d’optimiser les scénarios de transformation de sous-ensemble de données stockées dans des zones de mémoires contigües et ce sans compromis sur la performance.
  • Optimisation des communications réseaux. Des améliorations notables ont été réalisées dans l’implémentation des Socket, des classes HttpClient et SslStream qui permettent de gains de 200% sur certains benchmark, principalement sous Linux.
  • Introduction du Windows Compatibilty Pack qui donne accès à quelques 20 000 fonctions API de Windows complémentaires au lot que .NET Standard 2.0 apportait déjà. Ce pack devrait faciliter la migration d’applications à .NET Core.

.NET Core 2.1 s’immisce aussi dans le développement IoT. Tout d’abord il est compatible avec les processeurs ARM32 ce qui lui permet de s’exécuter sur des cartes électronique ou appareils IoT comme le Raspberry Pi. Il peut aussi s’exécuter sur Ubuntu (>= v18.04), sur la distribution Alpine (>= v3.7) et Windows 10 IoT et dans des containers Linux.

Les téléviseurs Samsung qui embarquent l’OS Tizen 4.0 sont maintenant capables d’exécuter des applications .NET Core. Scott Hanselman nous demande de ne pas coller des stickers .NET Core sur les téléviseurs Samsung présents dans les Showrooms de nos magasins favoris 🙂

Le futur

core30.jpg

La prochaine version majeure de .NET Core sera la v3.0. L’intérêt principal de cette version réside dans le fait qu’elle va élargir notre terrain de jeu puisqu’il sera dès lors possible de développer des applications de bureau (UWP, WinForms et WPF) et des applications d’intelligence artificielle grâce au support du framework ML .NET

Les applications de bureaux

Revenons au support des applications de bureau. C’est une annonce majeure. Non seulement nous pourrons porter nos applications Winforms et WPF vers .NET Core mais aussi nous pourrons les améliorer en exploitant les nouveaux contrôles UWP Fluent Design au travers des XAML Islands. Cela permettra de rendre les applications patrimoniales plus attractives, plus conviviales et mieux intégrées à Windows 10.

Mais ce n’est pas tout: .NET Core offre des gains de performances qui rendent les applications de bureau jusqu’à 2.5x plus rapides. Durant la démo, une application Winforms a été exécuté à la fois en .NET 4.x et en .NET Core 2.1. La différence de performance était clairement perceptible. Cette vélocité accrue pourrait être un autre incitatif à convertir une application de bureau vers .NET Core.

Cerise sur le gâteau, Microsoft planche aussi sur un moyen d’empaqueter une application .NET Core dans une sorte de conteneur applicatif (rien à voir avec les conteneurs Docker je précise) Le conteneur prendra la forme d’un exécutable qui contiendra l’application elle-même, les parties de .NET Core nécessaires à son exécution ainsi que les librairies externes utilisées. L’objectif est de permettre l’exécution côte-à-côte de plusieurs applications utilisant des versions différentes de .NET Core. Dans sa version finale, l’outil de packaging sera capable d’identifier les espaces de noms et références externes qui ne sont pas exploités afin de réduire au maximum la taille du conteneur.

Machine Learning .NET (ML .NET)

ML .NET est un framework de machine learning utilisé en interne depuis plusieurs années chez Microsoft qui se trouve maintenant être out-sourcé. .NET Core permettra d’en tirer parti. Voici l’URL officielle du site collaboratif qui vous permettra d’en savoir plus.

Les outils

Microsoft veut clairement offrir les meilleurs outils de développement quelques soient les langages et plateformes utilisés. 3 IDE sont offerts: Visual Studio, Visual Studio Mac et VS Code.

Voici quelques améliorations de Visual Studio à venir:

  • Amélioration du fonctionnement du test runner de Visual Studio avec des mises à jour asynchrones des résultats de l’exécution des tests alors que ceux-ci sont en cours d’exécution.
  • Possibilité de faire du pas à pas dans le code de librairies Nuget en allant directement télécharger le source correspondant dans le répo Git d’où est issus le composant. Cela est rendu possible par l’introduction de l’URL du répo et de l’identifiant du commit ayant servi à la création du paquet Nuget directement dans le fichier .nuspec
    nuspec_git
  • Prise en charge des fichiers .editorconfig dans lesquels il est possible de définir ses conventions d’écriture de code. Le compilateur Roslyn interprète les paramètres présents dans ces fichiers et vérifie que les conventions sont respectées. Pour chaque règle il est possible d’indiquer le niveau de sévérité associé: ne rien faire, générer un avertissement ou générer une erreur.
  • Les développeurs Web vont finalement pouvoir profiter de fonctions de ré-usinage de code à l’intérieur de pages aspx et razor.
  • VS permettra de construire des images Docker en se passant du projet Docker-compose
  • Une extension de Visual Studio va permettre le support de Kubernetes et le déploiement d’images dans AKS.

La vidéo de cette présentation est maintenant disponible sur Channel 9

 

MS Build 2018 Day 1

msbuild2018

Le keynote de cette édition 2018 du Build m’est apparu moins riche que l’année dernière en termes de nouveautés et de percées technologiques sans pour autant me décevoir. J’ai eu une impression de continuité dans le message et la perception que Microsoft confirmait et affinait sa vision du futur. Voici les points qui ont retenu mon attention.

Aujourd’hui l’informatique est omniprésente. Le monde est sur le point de devenir un ordinateur géant, hyper connecté, générant des masses de données. L’informatique fait partie de notre quotidien que ce soit au travail ou dans la vie privée. Ce monde présente beaucoup d’opportunités et nous mettra devant nos responsabilités en tant qu’humains. La mission que Microsoft se donne est de fournir les plateformes et les outils aux individus et entreprises pour concevoir les solutions de demain.

La stratégie de Microsoft repose sur 3 grands piliers:

  1. Le respect de la vie privée. Il s’agit d’un droit fondamental qui doit être respecté. Microsoft s’engage à fournir des plateformes et des outils qui facilitent la traçabilité et la mise en place de la conformité qui assure ce respect de la vie privée.
  2. La cybersécurité. Évidemment dans un monde connecté d’aujourd’hui, il est nécessaire d’investir dans la sécurité et la cryptographie. Il faut fournir des outils et des librairies qui facilitent le développement d’applications sécurisées.
  3. L’étique de l’intelligence artificielle. Qu’est ce que la machine fait et qu’est-ce qu’elle devrait faire. S’assurer que les innovations sont accessibles au plus grand nombre et qu’elles préservent les droits de l’homme.

Ces trois grands piliers devraient être des préoccupations collectives. La contribution de Microsoft à ce niveau est de rendre les outils et les technologies disponibles au plus grand nombre et pas seulement dans les mains de deux ou trois grandes entreprises. La stratégie d’ouverture et d’open sourcing de ses technologies se poursuit.

Azure se porte bien.

L’offre infonuagique de Microsoft est au top:

  • 90% des compagnies qui composent le fortune 500 utilisent Microsoft Azure pour gérer leurs affaires.
  • Les développeurs aiment l’homogénéité de la plateforme et ses services que ce soit pour la conception, l’exploitation et la configuration
  • En 2017 pas moins de 130 services et fonctionnalités majeures ont été mises en place. 70 seront mises en place et/ou annoncés pendant la conférence Build

Intelligent cloud – intelligent edge

D’ici 2020, 20 milliards d’appareils intelligents connectés devraient être en fonction. C’est 3x plus que le nombre d’humains vivant sur terre aujourd’hui. Tous ces appareils connectés vont générer des volumes de données astronomiques que même le cloud ne pourra pas digérer tels quels. L’idée est donc de déporter certains traitements du cloud (intelligent cloud) vers ces appareils (intelligent edge). Par exemple un appareil ne transmettra pas intégralement un flux vidéo vers le cloud pour y être analysé. Plutôt le flux sera analysé en local sur l’appareil et seules les informations pertinentes identifiées seront transmises vers le cloud. Cela permettra de diminuer drastiquement les volumes échangés.

Dans ce domaine Microsoft a effectué quelques annonces qui montrent clairement qu’il ne s’agit pas que d’un concept mais qu’il y a du concret à venir prochainement:

  • Le runtime IoT Edge va être rendu open source pour favoriser son portage partout où cela sera nécessaire. A terme cela viendra augmenter l’offre d’appareils capables d’exécuter localement des modèles jusque-là destinés à être exécutés dans le cloud.
  • Un partenariat avec Qualcomm pour produire une caméra intelligente capable d’analyser en temps réel le flux audio et vidéo avec des modèles personnalisés entrainés dans le cloud et déployés directement dans la caméra. Le tout viendra avec un SDK permettant à tous d’exploiter la technologie.
  • Le projet Kinect pour Azure consiste à livrer un matériel compact inspiré de la Kinect et influencé par HoloLens qui permettra l’analyse du champ de vision, l’évaluation du relief, la reconnaissance d’objets ainsi que des mouvements du corps. Prometteur.
  • Un partenariat avec Dji pour intégrer la technologie IoT Edge dans un drone high tech. DJI fournira un API pour Windows 10 permettant de contrôler le plan de vol ainsi que de récupérer les données émises par le drone.
  • Un kit de développement pour la gestion de la parole qui sera supporté par plusieurs fabricants dont Roobo par exemple qui fournit un haut-parleur intelligent capable de supprimer le bruit ambiant dans un flux audio pour améliorer l’efficacité de la reconnaissance vocale dans les environnements bruyants.
  • Project Brainwave est une offre azure qui permet de tourner des modèles AI sur des FPGA. Le temps de latence HW est diminué de 5x. La vitesse d’exécution constatée est 10 à 12x supérieure à un CPU classique!

Les agents conversationnels (aka Chatbots)

Les agents conversationnels représentent une nouvelle catégorie d’applications dont tout le monde veut. Toutes les compagnies veulent en développer des personnalisés qui répondent très précisément à leurs besoins.

C’est un domaine dans lequel il y a encore beaucoup d’innovations à venir pour améliorer la richesse d’interaction avec l’humain mais aussi pour permettre à ces agents de converser entre eux! Pas moins de 100 nouvelles fonctionnalités ont été introduites pour améliorer leurs personnalisations.

Microsoft supporte aujourd’hui 16 canaux différents pour déployer les applications créées avec son Bot Framework. Cela permet d’augmenter la portée de nos applications conversationnelles.

Cortana + Alexa

cortana_alexa

Un grand moment de ce keynote a été l’annonce du partenariat signé entre Microsoft et Amazon pour permettre à leurs Ai respectives, Cortana et Alexa, d’interagir entres elles. La démonstration sur scène a été sans faille et très probante. C’est un passage que vous pourriez avoir envie de regarder. Tous ces scénarios de productivité qui impliquent la reconnaissance vocale pour effectuer des tâches comme ajouter un article à la liste d’épicerie ou céduler un rendez-vous sont encore perçus comme de la science-fiction et pourtant sont déjà bien réels.

Lors d’une conversation avec Alexa, on peut lui demander de passer le contrôle à Cortana et vice et versa. Cortana est implantée dans Windows 10, au coeur des applications Office et bientôt dans Microsoft Teams. Cela ouvre des horizons plus larges.

Visual Studio Live Share

vsliveshare

Dans le domaine de la productivité des développeurs, Microsoft a annoncé l’arrivée de Visual Studio Live Share. Visual Studio Live Share est une extension qui permet de partager son environnement de développement avec une autre personne pour obtenir de l’assistance. Au départ je m’attendais à quelque chose du genre logiciel de prise de contrôle à distance optimisé pour développeur. La démo a finalement dépassé de loin mes attentes. Voici une liste des fonctionnalités et caractéristiques les plus intéressantes:

  1. L’extension fonctionne aussi bien pour Visual Studio 2017, Visual Studio for Mac ainsi que pour VS Code. Lors du partage, chaque personne utilise l’outil qui lui convient le mieux.
  2. Le développeur qui a besoin d’aide, invoque l’extension pour générer une URL qu’il transfère ensuite si à la personne qui va aider pour lui permettre de rejoindre la session.
  3. La personne qui aide peut suivre l’activité du développeur pour voir et comprendre. Elle garde cependant une autonomie pour effectuer des recherches et analyses dans le code sans impacter le développeur. Elle peut par exemple ouvrir d’autres fichiers de la solution du développeur. À tout moment, elle peut se resynchroniser avec l’activité du développeur.
  4. Les sessions de débogage sont partagées. La personne qui aide peut mettre des points d’arrêts à distance dans le code, inspecter le contenu de variables et utiliser la plupart des fenêtres du débogueur.
  5. Cerise sur le gâteau, dans le cas de débogage de services ou sites web, il est possible de les rendre accessibles à la personne qui aide et ce même s’ils sont hébergés localement sur le poste du développeur! Absolument bluffant.

VSTS et DevOps

VSTS_DevOps

Quelques démos très intéressantes qui démontrent l’efficacité et le degré d’intégration de tous les outils fournis dans la plateforme azure:

  1. Démonstration de l’intégration de AppCenter avec GitHub ou comment construire un pipeline DevOps fonctionnel en 3 minutes. Sur base de l’URL du repo GitHub qui contient l’application mobile, l’outil de Microsoft clone le repo, analyse le code, identifie le langage de développement utilisé, les plateformes mobiles ciblées et génère un pipeline CI-CD sans intervention humaine ou presque. La compilation démarre, l’application est déployée sur tous les appareils du marché.
  2. Démonstration du projet DevOps par Donovan Brown. Cette démo mérite d’être vue rien que pour la prestation de Donovan. Un vrai showman. La démo consiste à créer un pipeline CI-CD pour une nouvelle application. On commence par choisir le langage de développement, ensuite les framework principaux et finalement la plateforme d’exécution (AKS ou App Service). Click Finish et quelques secondes plus tard tout est configuré, il ne reste plus qu’à coder.
  3. Release Gates permet de gérer le déploiement incrémental d’une application en utilisant plusieurs groupes de consommateurs cibles. Un lien est fait avec les mécanismes de surveillance pour éventuellement arrêter la propagation de l’application à d’autres groupes quand les métriques mettent en lumière des problématiques.
  4. Il est maintenant possible de créer une branche dans un repo Git directement à partir d’un work item de carnet de sprint. L’intérêt réside dans le fait que la branche est associée au work item pour une traçabilité accrue.

 

Développeur T-shaped

Lors de cette première journée du DevOps Enterprise Summit 2017, à plusieurs reprises dans différentes sessions, le concept de « T-shaped developer » a été cité.

Ce que les entreprises cherchent aujourd’hui ce sont des candidats qui sont à la fois pointus dans un domaine particulier et qui ont, en complément, des connaissances générales dans domaines connexes. Un développeur doit pouvoir œuvrer en marge du code, il doit faire preuve de polyvalence: écrire des tests automatisés, monter des scripts de déploiement, comprendre les outils intégration et livraison continue, avoir une culture…

Les développeurs T-Shaped sont prisés des équipes DevOps où leur polyvalence est mise à profit. Ils transcendent les silos que l’on rencontre habituellement dans les équipes classiques où les membres tiennent des rôles précis dont ils ne sortent pas ou peu: analystes fonctionnels, développeurs, testeurs, opérateurs etc.

Dans « T-Shaped developer », la barre verticale du ‘ T ‘ fait référence à la profondeur de l’expertise tandis que la barre horizontale du ‘ T ‘ fait référence à l’étendue des connaissances générales.

t-shaped_dev

On parle parfois aussi de développeur « Full Stack ». L’idée de base est similaire à ce qui a trait à l’étendue des compétences. Cependant les lectures que j’ai faites à ce propos me laissent à penser qu’on parle plus de la capacité à pouvoir développer dans différents contextes comme les interfaces graphiques (web ou app), les services, les API web, l’accès aux données, la logique d’affaire etc.

Voici quelques lectures complémentaires sur le sujet:

 

 

Nouveautés de Entity Framework Core 2.0

Qu’est-ce que EF Core ?

EF Core 2.0 est un framework qui permet de faire le lien entre le modèle d’une base de données relationnelle et un modèle orienté objet en mémoire. EF vous affranchit d’écrire le code SQL qui permet de charger des données de la BD vers les objets et d’appliquer les changements apportés à vos objets dans la BD.

EF Core est léger, extensible et portable. Il tourne sous Windows, Linux, MacOs, iPhone, Android et toute la gamme des appareils Windows : Xbox, Windows Phone, Surface etc

La prochaine version à venir est la 2.0. Elle s’appuiera sur .NET Core 2.0. A ce propos, Rowan Miller a été assez clair sur le fait que les efforts d’innovations se concentreront sur Entity Framework Core alors que Entity Framework 6 (disponible uniquement sous Windows et Full framework) bénéficiera uniquement des correctifs nécessaires à son bon fonctionnement.

EF_landscape

Quel avenir pour Entity Framework?

Entity Framework a été introduit pour la première fois avec .NET Framework 3.5. Il y a eu un certain nombre de livraisons depuis et nous sommes maintenant en version 6.1.

Entity Framework cible le Framework .NET et est donc uniquement destiné aux applications Windows. EF Core est une implémentation plus récente qui se base sur .NET Standard et donc destiné à une audience plus large.

Les deux framework continueront leurs évolutions en parallèle. Il n’y a donc pas lieu de paniquer d’autant qu’actuellement il y a 90% d’utilisateurs de Entity Framework pour 10% d’utilisateurs de EF Core.

EF_EFCore

Les nouvelles fonctionnalités

Les fonctions

EF Core introduit un nouveau point d’extensibilité qui sont les fonctions. Les fonctions sont accessibles via une propriété appelée Functions sur l’objet EF. Elles permettent d’utiliser des opérateurs ou des fonctions SQL directement dans une requête LINQ. Microsoft ouvrira le bal avec l’implémentation d’une fonction Like qui correspond au LIKE du langage SQL.

Voici un exemple d’utilisation:

var villes = from v in context.Villes
             where EF.Functions.Like(v.Nom, “%QU”)
             select v

Global query filter

Un filtre de requête global est une expression qu’on peut associer à une entité dans le but qu’elle soit automatiquement injectée à chaque fois qu’une requête SELECT concernant cette entité est exécutée.

Par exemple si dans un contexte de vente, je travaille toujours avec des articles en stock et disponibles à la vente, je pourrai écrire ce qui suit :

public class ContexteVente : DbContext
{
	public DbSet<Article> Articles { get; set; }
	public DbSet<Vente> Ventes { get; set; }
	protected override void OnModelCreating(ModelBuilder modelBuilder)
	{
		modelBuilder.Entity<Articles>()
			.HasQueryFilter(a => a. EstDisponibleVente && a.Quantite > 0);
	}
}

Flexible Mapping

Il arrive parfois qu’une entité possède un attribut qu’il ne fait pas de sens d’exposer au travers d’une propriété publique. Par exemple cet attribut pourrait avoir une utilisation réservée pour le système et on ne désire pas donner la possibilité au développeur de la manipuler. Le flexible mapping fait référence au fait qu’il sera possible de faire le lien entre une colonne d’une table et un champ privé d’une entité.

Dans mon exemple précédent, la propriété EstDisponibleVente est un booléen que je pourrais décider de ne pas rendre accessible en modification. Je pourrais donc dégrader cette propriété publique vers un champ privé et ensuite introduire une propriété conceptuelle dans le modèle pour quand même être en mesure de l’utiliser sous la couverte.

Voici une illustration :

public class Article
{
	bool _estDisponibleVente;
	int Quantite {get; set;}
	//...
}

public class ContexteVente : DbContext
{
	public DbSet<Article> Articles { get; set; }
	public DbSet<Vente> Ventes { get; set; }

	protected override void OnModelCreating(ModelBuilder modelBuilder)
	{
		modelBuilder.Entity<Articles>()
			.Property<bool>("EstDisponibleVente");
			.HasField("_estDisponibleVente");

		modelBuilder.Entity<Articles>()
			.HasQueryFilter(a => EF.Property(a,"EstDisponibleVente") && a.Quantite > 0);
	}
}

Compiled queries

Il sera bientôt possible de compiler une requête LINQ via du code. Vous vous en doutez, l’objectif sera de gagner en performance quand on se trouve à exécuter une requête un grand nombre de fois.

Le processus qui permet de déterminer l’ordre SQL associé à une requête LINQ se fait en 4 étapes :

  1. Construire l’arbre de la requête LINQ
  2. Calculer un hash de l’arbre
  3. Utiliser ce hash pour interroger la cache pour récupérer la requête SQL correspondante
  4. Si la requête SQL n’est pas dans la cache, alors la construire et la placer dans la cache

Les étapes 3 et 4 sont optimales puisque la requête SQL sera construite une seule fois pour plusieurs exécutions. Par contre, dans EF Core 1.1, les étapes 1 et 2 sont répétées à chaque exécution.

La compilation des requêtes permettent de s’assurer que les étapes 1 et 2 ne sont exécutées qu’une seule fois.

Voici un exemple de code qui montre comment précompiler:

private static Func _customerById =
	EF.CompileQuery((CustomerContext db, int id) =>
		db.Customers
		.Include(c => c.Address)
		.Single(c => c.Id == id));
...

using (var db = new CustomerContext())
{
	var customer = _customerById(db, 147);
}

Context pooling

Il s’agit encore là d’une optimisation interne du framework par rapport à l’exécution de requêtes. EF Core 1.1 crée systématiquement un nouveau contexte à chaque nouvelle exécution d’une requête LINQ. Dans 2.0 il sera possible d’activer l’utilisation d’un pool de contextes au sein de l’injecteur de dépendance. De cette manière chaque contrôleur de requête se fera injecter une instance de contexte existante plutôt que dans créer une.

Cette optimisation s’active en appelant la méthode AddDbContextPool sur la classe ServiceCollectionen remplacement d’une appel à AddDbContext.

Durant la démonstration, un test de charge de requêtes LINQ sans pool de contexte donnait à une vitesse de traitement d’un peu plus ou moins 9000 requêtes par seconde. L’activation du pool permettait de monter aux environs de 11200 requêtes par seconde.

Cette optimisation n’est pas active par défaut parce qu’elle pourrait avoir un impact sur votre code. En effet EF Core nettoie l’instance du contexte avant de le replacer dans le pool. Ceci implique que l’optimisation rend impossible l’utilisation du contexte comme un moyen de persister de l’information entre deux requêtes. Pour des scénarios avancés d’utilisation du contexte, l’optimisation ne fonctionne pas!

Ce billet est un résumé de la session donnée par Rowan Miller lors du Build 2017 sur les nouveautés de Entity Framework Core 2.0.

Présentation du projet Rome

Dans mon précédent billet, j’expliquais que nous nous dirigions vers un monde ou l’interface utilisateur ne se limiterait pas à une application sur un appareil mais s’étendrait sur plusieurs appareils. Aujourd’hui nous disposons déjà d’une multitude d’appareils intelligents : téléphones, PC de bureau, consoles de jeux, système embarqué dans les véhicules.

J’ai assisté à deux sessions en lien avec le projet Rome. Elles m’ont permis de me rendre compte que l’intention était même d’aller plus loin que de partager l’expérience utilisateur sur plusieurs appareils.

La première présentation a débuté sur une citation de Bill Buxton, chercheur Microsoft, que je vous laisse regarder ci-dessous

Bill_Buxton

+ appareils = + problèmes

Il est un fait que nous utilisons plusieurs appareils au cours d’une même journée. Microsoft avance qu’environ 42% des utilisateurs commencent des activités sur un appareil et les finalisent sur un autre. Pouvoir suivre l’activité d’un utilisateur dans ses différents contextes est très difficile, lui permettre de reprendre ses activités dans un contexte différent l’est encore plus.

Le projet Rome vise justement à fournir les outils qui vont permettre maximiser l’engagement avec nos utilisateurs à travers les applications, les appareils et les plateformes qu’ils utilisent.

Project Rome se compose :

  1. D’un runtime à installer sur les appareils qui permet de lancer des applications et de faire communiquer des applications entre elles.
  2. De services d’infrastructure dans le Cloud qui permettent de stocker les utilisateurs, leurs appareils et leurs activités. C’est la technologie Microsoft Graph qui est derrière.
  3. D’un modèle applicatif qui permet de développer des applications qui profitent des opportunités offertes par le runtime.

Activités, cartes et ligne du temps

Une application qui utilise le projet Rome peut enregistrer dans le Cloud des traces d’activités d’un utilisateur. Ces traces viennent nourrir un fil d’activités qui sert de base à la construction d’une ligne du temps des actions passées pour cet utilisateur.

Il y a deux manières d’exploiter le fil des activités enregistrées :

  1. Cortana, l’intelligence artificielle développée par Microsoft, est en mesure d’accéder aux activités passées pour vous proposer de les continuer. Ainsi par exemple si je commence à lire un article sur mon PC, Cortana me proposera d’en continuer la lecture sur mon téléphone intelligent et défilera même le texte pour me laisser là où j’avais arrêté ma lecture. Cortana est disponible sur Windows 10, Windows Phone, iOS et Android.
    Cortana
  2. Sous peu l’application Microsoft Timeline vous permettra de visualiser votre fil d’activités. Il vous sera possible d’en sélectionner une et de la reprendre. La photo ci-dessous montre l’interface de Microsoft Timeline
    Timeline

Dans les deux photos ci-dessus vous pouvez voir que chaque activité est représentée par une carte visuelle. Le rendu de la carte est adapté en fonction du contexte de l’utilisateur. Sur un téléphone, la carte sera sommaire, sur un écran d’ordinateur elle affichera plus d’informations avec une mise en page plus sophistiquée.

Il est possible de développer nos propres cartes grâce à la technologie Adaptative Cards.

Développer avec le projet Rome

Le projet Rome offre différents SDK, un par plateforme (PC, Window Phone, iOs, Android). Les librairies offertes supportent plusieurs framework et langages dont notamment .NET, Java et Javascript.

Ces SDK couvrent plusieurs aspects dont voici les principaux :

  • Les fonctions de découverte d’appareils permettent d’interroger Microsoft Graph pour obtenir les appareils d’un utilisateur. Il y a aussi la possibilité de découvrir les appareils à proximité via Bluetooth.
  • Les fonctions qui permettent de lancer des commandes sur des appareils distants (RemoteLauncher).
  • Les fonctions qui permettent à deux applications d’ouvrir un canal de communication et de s’échanger des messages. Les deux applications peuvent s’exécuter sur un même appareil ou sur deux appareils différents. Cette fonctionnalité permet à une application de devenir un service puisqu’elle devient capable de recevoir des requêtes, de les traiter et d’envoyer éventuellement une réponse.
  • Les fonctions qui permettent d’accéder à Microsoft Graph pour créer, lire ou effacer des activités et des appareils. Microsoft Graph peut être consommé directement via un API REST ou via un modèle objet client.

Les opportunités

Le projet Rome offre la possibilité de garder le contact avec un utilisateur alors qu’il change de contexte.

Plusieurs types d’applications peuvent profiter du projet Rome :

  • Les applications d’édition de documents comme Word, Powerpoint, Illustrator peuvent s’en servir pour permettre aux utilisateurs de travailler sur ces documents dans plusieurs contextes.
  • Les applications multimédia peuvent s’en servir pour continuer la lecture d’un document multimédia sur un autre appareil.
  • Les applications d’entreprise peuvent s’en servir pour permettre à un utilisateur de disposer des informations qui lui sont utiles quel que soit l’appareil sur lequel il travaille. Un utilisateur pourrait commencer à saisir des informations de bases sur son téléphone ou sur une tablette alors qu’il est en visite chez un client. De retour au bureau, il pourrait compléter la saisie du dossier sur son PC.
  • Les jeux peuvent s’en servir pour permettre à un commencer à jouer sur une plateforme pour ensuite la continuer sur une autre.

Rome ne s’est pas fait en 1 jour

Project Rome avait déjà été démontré au Build 2016. A cette époque seul le SDK pour Windows avait été dévoilé. Aujourd’hui les SDK pour iOS, Android et MS Graph sont disponibles en preview. Nous n’avons pas eu de date précise pour la disponibilité d’une version finale mais on peut raisonnablement penser que cela coïncidera avec la prochaine mise à jour de Windows 10 appelée Windows 10 Fall Creators Update à venir Q3 2017.

Rome_1jour

Build 2017–Keynote d’ouverture

Je suis en ce moment à Seattle pour assister à la conférence Microsoft Build 2017. Je profite du calme de ma chambre d’hôtel pour faire un petit résumé des éléments  dévoilés lors du keynote d’ouverture de la conférence. Si vous n’avez pas la chance de pouvoir la suivre en ligne, peut-être ce résumé vous sera-t-il utile.

Grands pouvoirs = grandes responsabilités

Dans son allocution d’introduction, Satya Nadella, CEO actuel de Microsoft, nous a rappelé à quel point les technologies avaient évolué au cours de ces dernières décennies. Avant l’avènement du web, le volume de transfert de données était de l’ordre de 100 Gb par jour. Aujourd’hui le volume de données transféré à chaque seconde est 17.5 millions de fois plus élevé! D’ici à 2020 il y a aura 25 milliard d’appareils intelligents sur la planète. Jamais les développeurs n’auront eu autant d’impact sur la société… Avec de grands pouvoirs viennent de grandes responsabilités. Il est de notre de devoir de nous assurer que la technologie sera exploitée pour servir l’humanité. Dans sa vision, Satya Nadella nous a expliqué que pour tenir le cap, il faut se tenir à trois principes de base:

  • Habiliter l’être humain, lui permettre de se dépasser
  • Rendre la technologie accessible au plus grand nombre pour leur permettre de contribuer et de vivre dans la société de demain
  • Mettre un point d’honneur à renforcer la confiance dans la technologie

C’est la mission que Microsoft se donne: permettre à chaque personne à chaque organisation sur la planète de se dépasser. Elle offre les services et l’écosystème qui permet de développer des applications qui touchent le plus grand nombre.

Intelligent Cloud et Intelligent Edge

IntelCloudIntelEdge

Satya Nadella a ensuite expliqué qu’un changement de paradigme est en cours et qu’il aura un impact profond sur la manière dont nous concevrons nos applications. Nous passons d’un monde mobile-first + Cloud-first vers un monde Intelligent Cloud et Intelligent Edge. Aujourd’hui l’expérience mobile d’un utilisateur se matérialise par l’utilisation d’une application sur un téléphone intelligent (mobile-first) et s’appuie sur de la logique hébergée dans le Cloud (Cloud-first). Demain l’expérience de ce même utilisateur se matérialisera sur une multitude d’appareils en périphérie du Cloud, ce que Microsoft appelle le Edge. Le volume de données qui va être généré dans le Edge sera énorme et il nécessitera de déporter l’exécution d’algorithmes d’intelligence artificielle du Cloud vers le Edge pour des raisons de performance et d’autonomie. L’intelligence artificielle sera au cœur des applications futures.

Architecture de code sans serveur

Pour offrir de la logique qui est mobile, qui peut s’exécuter là où on en a besoin, cela demande de la découpler des serveurs sur lesquels elle s’exécute! C’est ce qu’on appelle de l’architecture de code sans serveur (Serverless code architecture).

Microsoft offre d’ores et déjà deux technologies qui permettent ce découplage:

  • Azure Functions qui permet d’exécuter du code en réponse à l’occurrence d’un événement (par exemple la publication d’un tweet). Une centaine de types d’événements sont exploitables aujourd’hui.
  • Azure Logic Apps qui permet de développer des solutions d’intégration par l’exécution de processus ou de flux de travail à la demande

Les services Azure et les démos

Le keynote a été l’occasion de mettre en avant quelques-uns des services Azure.  L’accent a été mis sur les services d’intelligence artificielle et cognitifs ainsi que sur les services IoT.

Je dois dire que les démos étaient impressionnantes pour la plupart. Si vous avez un peu de temps je vous conseille de les visionner dans cette vidéo en ligne. Voici une sélection de celles qui m’ont marqué :

  1. @ 52 min 50 sec. La présentation d’un bracelet destiné à Emma qui est atteinte de la maladie de Parkinson. Ce projet IoT lui a permis de retrouver l’usage de sa main pour l’écriture et le dessin. Une vidéo poignante et pleine d’espoir qui démontre à quel point la technologie peut être utile et avoir un impact positif sur la vie de certaines personnes.
  2. @ 32 min. Démonstration de la reconnaissance d’objets en continu dans une vidéo avec la détection d’intention et la levée d’alertes pour prévenir d’un danger imminent. Cela pourrait passer pour de la science-fiction mais c’est bien réel.
  3. @ 42 min 28 sec. Démonstration de ce que pourrait être une expérience utilisateur combinée sur plusieurs types d’appareils. Démontre l’efficacité de Cortana et l’étendue de ses compétences (Cortana Skills).
  4. @ 2h34m10s. Démonstration du complément de traduction pour Powerpoint. Ce complément permet de traduire en temps réel la voix du présentateur dans la langue maternelle des personnes qui suivent la présentation à distance. Le texte traduit s’affiche sous forme de sous-titres. Effet Waouw garantit.

Je termine mon billet avec ces démonstrations. Je tiens à préciser qu’il y a eu plus de contenu dans le Keynote que ce que je relate ici. Mon collègue Karol Deland, aussi présent au Build, a pris soin de couvrir d’autres aspects du Keynote.

Laurent Docquir