Build 2018 – Bots, Intelligence Artificielle et Développement Windows

Les bots et l’intelligence artificielle sont une belle façon d’intégrer la technologie afin d’augmenter l’efficacité d’une entreprise pour son service à la clientèle. Évidemment, il faut recourir à des outils performants pour y arriver. Microsoft mise beaucoup sur la facilité de développement dans ce secteur. Il veut rendre accessible à tous les développeurs le développement de bots. Dans une autre présentation, on nous a présenté les mises à jour d’UWP qui, quant à elle, continue aussi de recevoir des investissements importants. Voyons un peu ce qui en retourne.

Conversational AI – What’s new?

Pour faire suite à la présentation de la veille principalement sur LUIS, cette présentation était davantage orientée sur les bots et sur l’intégration des différentes services cognitifs qui sont nécessaires pour offrir une expérience de chatbot.

Le Bot Framework a été mis à jour considérablement dans la dernière année. Il est constitué de trois piliers :

  1. BotBuilder SDK v4
  2. Azure Bot Service
  3. Bot Emulator

Le SDK permet essentiellement de créer un service Web API REST qui est appelé par un client bot. Il offre également tous les connecteurs facilitant l’intégration des services cognitifs de Microsoft pour rendre les bots intelligent et l’intégration avec les différents canaux comme Teams, Facebook, Slack et autres.

L’ajout important qui a été apporté est de pouvoir définir des middleware. C’est entre autres ce qui facilite la traduction machine en simultanée. Tous les messages peuvent passer dans un middleware de traduction à l’entrée et à la sortie.

Dispatch

IMG_3362

Dans les annonces dignes de mention, on retrouve l’ajout d’un module de répartition pour faciliter l’aiguillage d’une requête vers le bon service cognitif. Cet outil permet de faire un premier appel à une application LUIS pour qu’il aiguille la requête entre les différentes applications LUIS ou QnAMaker que nous aurions configurés. Voici un tutoriel qui permet de le faire.

Par ailleurs, un outil de ligne de commande est aussi fournit. Il permet de configurer l’application Dispatch et aussi de demander un rapport intéressant. Ce dernier indiquera quels énoncés sont susceptibles d’être ambiguës ou lesquels sont dupliqués dans plus d’un modèle de langage (LUIS vs QnAMaker par exemple). Il devient beaucoup plus facile de combiner les différents outils de langage dans un même bot.

Outillage

Un élément qui n’était pas nécessairement évident auparavant était de gérer les modèles de langage comme du code. Le DevOps étant omniprésent, même le développement d’intelligence artificielle suit la parade. Quatre outils ont été ajoutés pour développer les bots en ligne de commande :

  1. MSBot
    Permet de configurer un bot par ligne de commande
  2. LuDown
    Permet d’écrire nos énoncés en MarkDown. On utilise ensuite la ligne de commande pour mettre à jour LUIS côté serveur.
  3. LUIS CLI
    C’est ce qui permet de gérer les modèles LUIS comme du code. On peut exporter ou importer une application LUIS. Très utile dans un « Release pipeline ».
  4. Az Bot
    Pour contrôler les services bots d’Azure par ligne de commande. Bénéficie de la même intégration de gestion d’identité que les autres services Azure.

 IMG_3363

 

Project Conversation Learner (Research)

ProjectConvLearner

La fin de la présentation a été époustouflante. Un chercheur de Microsoft est venu présenté son projet. Il vise à entraîner les modèles de langage naturel de manière plus efficace. En effet, plutôt que de passer par de la saisie massive d’énoncé qui sont ensuite envoyé à LUIS, on utilise l’interface d’un chat bot pour envoyer nos énoncés. Le bot nous répond du mieux qu’il peut et on corrige les mauvaises réponses dans l’interface visuelle directement. Ce module permet aussi de revisiter les discussions passées et de corrigé les mauvais tirs du bot.

Évidemment, on ne sait pas si ce projet verra le jour et encore moins quand, mais on ne peut qu’espérer vu les possibilités impressionnantes qu’il apporterait.

ProjectConvLearnerCorrection

 

Rapidly Construct LOB Applications with UWP and VS 2017

Depuis plusieurs années, Microsoft fait la promotion de sa plateforme UWP (Universal Windows Applications). L’attrait le plus important de cette technologie est de pouvoir faire des applications qui s’exécutent sur de multiples appareils comme des téléphones, des PCs et aussi sur Xbox. Les efforts ont d’abord été mis sur les outils permettant de faciliter le développement pour les marchés de consommation personnelle au détriment des applications d’entreprise. Microsoft veut maintenant s’assurer que sa plateforme UWP devienne le premier choix de développement d’application Windows.  Si on combine cela avec le support de .NET Core dans WPF et WinForms et l’ajout des XAML Islands, on comprend que la voie est toute tracée pour converger vers le UWP.

Pour faire de UWP la meilleure plateforme de développement Windows, il fallait lui faire quelques modifications.

 

Densité

Par défaut, les layouts UWP sont très espacés. Il est donc difficile d’afficher beaucoup d’éléments dans un même écran. Les nouvelles versions de Windows vont densifier les contrôles visuels d’environ 33% par défaut. Pour ceux pour qui ça ne sera pas assez, un dictionnaire de ressources sera aussi mis à disposition pour densifier davantage. On parle ici du mode compacte.

IMG_3352

 

Gestion des thèmes de couleurs

La gestion des ensembles de couleurs est relativement difficile avec XAML. Il faut connaître les noms des différentes ressources à redéfinir et ne pas en oublier. Par ailleurs, il faut faire beaucoup de tâtonnement pour réussir à uniformiser le tout.

Afin de faciliter cette tâche fastidieuse, Microsoft développera un nouvel outil nommé ColorDemo (nom temporaire, ils sont ouverts aux suggestions :)). Cet outil permettra de changer les couleurs facilement dans une application qui affichera la plupart des contrôles visuels en simultané afin de voir le rendu. Une fois que l’on aura le bon résultat, on pourra exporter les configurations en XAML. Suffira alors d’importer le dictionnaire de ressource généré et le tour sera joué.

ColorDemo

 

Contrôles et validations

Pour faire de vraies applications de ligne d’affaires, il manquait quelques contrôles importants qui seront ajoutés:

  1. DataGrid
    Essentiellement celle qui existait en Silverlight. Elle sera en premier disponible via le Windows Community Toolkit et sera intégrée à la plateforme lorsqu’elle atteindra les standards de qualité.
  2. ComboBox éditable
  3. MenuBar et TreeView
    Ceux-ci seront disponibles via la librairie WinUI annoncée plus tôt durant la conférence.

UWP intégrera le support de l’interface INotifyDataErrorInfo qui était apparue en .NET 4.5 pour WPF. C’est réellement l’interface qui donne le plus de flexibilité pour la gestion des validations en XAML. C’est donc un ajout très important pour faire des formulaires de saisie. Par ailleurs, des gabarits (templates) par défaut seront fournis pour les différents contrôles afin d’afficher les messages d’erreur.

 

Ce qui manque…

J’ai été un peu déçu de voir le peu d’évolution autour de XAML Standard. Xamarin n’a publié qu’une librairie « façade » qui sera intégrée éventuellement. Pour le moment, il n’y a pas beaucoup d’avancé dans ce domaine et mon rêve d’avoir un XAML unifié pour le développement mobile et poste de travail m’apparaît peu réaliste à court ou moyen terme.

 

Varia UWP

SI vous ne connaissez pas Windows Template Studio, vous devez absolument regarder cet outil. Il facilite la création de projets en générant beaucoup de code qu’il faudrait autrement faire manuellement. Il supporte le MVVM avec la plupart des frameworks populaires.

L’application Van Arsdel fournit de bons exemples d’utilisation des contrôles UWP et peut servir d’inspiration pour définir votre propre application.

L’expérience de déploiement sera aussi améliorée avec l’arrivée de MSIX.

 

Conclusion

Encore une journée au Build 2018 qui a été bien replie. D’autres présentations de cette journée sont susceptibles de vous intéresser comme celle sur les Dev Spaces pour le développement microservices et Kubernetes. Je vous encourage à vous promener sur le site Channel9 pour y découvrir ce qui pourrait vous intéresser. Amusez-vous!

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

 

Microsoft Build 2018 – Jour 2

build-2018.jpgLa deuxième journée a comporté un bon nombre de sujets, mais a débuté par un Keynote de Joe Belfiore au sujet de Microsoft 365. Pour ma part, j’ai ensuite assisté à 4 autres présentations sur des sujets variés. Voici plus en détails ce qui a retenu mon attention.

Keynote 2 – Microsoft 365

IMG_3312

Joe Belfiore était sur la scène pour présenter Microsoft 365 qui se veut être un ensemble de solutions regroupant Office 365, Windows 10 avec mobilité et sécurité d’entreprise. La force de cet ensemble réside dans l’intégration des différentes technologies afin de créer une expérience des plus productives pour les utilisateurs.

Windows

Timeline-iOS-Android

Au cœur de Microsoft 365 se trouve Windows 10. Avec la livraison de Timeline, les utilisateurs sont capables de mettre en pause et de reprendre les activités là où ils étaient sur n’importe quel de leur appareil (PC Windows et téléphone intelligent). Il a été annoncé que Timeline ferait son apparition sur iOS et Android dans le futur. Malheureusement, aucune date n’a été précisée. Il est aussi possible pour les développeurs d’application d’ajouter des tâches dans Timeline afin d’augmenter la productivité. Le géant de Redmond a aussi annoncé qu’il comptait aller plus loin en facilitant davantage l’utilisation du téléphone à partir du PC. Il sera possible dans une prochaine version de Windows d’accéder facilement aux photos, vidéos, notifications et messages textes de son téléphone. On pourra aussi envoyer un message à partir de son PC si le téléphone est à portée de main.

Microsoft travaille également sur une application qui s’appelle Sets. Cette dernière permettra aux utilisateurs de regrouper les applications ouvertes reliées à une même tâche.

Windows pour les développeurs

Dans cette partie du Keynote, deux aspects ont retenu mon attention : UWP XAML Islands et .NET Core 3. Ces annonces ouvrent la porte à des stratégies de modernisation d’applications Windows existantes (WPF, WinForms) en permettant d’inclure des contrôles UWP facilement.

dotnet-core3

Quant à lui, .NET Core 3 permettra de compiler des applications WPF et WinForms. Deux avantages sont à noter :

  1. Performance accrue :
    Comme l’exécution se fait avec .NET Core, on bénéficie de tous les travaux d’optimisation effectués récemment.
  2. Déploiement flexible :
    Comme il n’est plus requis d’avoir le Framework .NET complet, les applications seront plus facile à installer. On pourra même inclure .NET Core dans l’exécutable directement.

Enfin, Windows UI Library a aussi été annoncé. Les contrôles natifs utilisés par Windows seront disponibles dans un paquet NuGet. Il faudra au minimum avoir a version Anniversary Update pour en bénéficier.

Développement Office et Microsoft Graph

Microsoft a rappelé que le développement Office est une belle façon d’augmenter la productivité des utilisateurs, surtout ceux qui sont dans Office 365. Les Adaptive Cards permettent d’intégrer des fonctionnalités des applications de lignes d’affaires à plusieurs endroits : Outlook, Teams, Skype, Messenger, etc..

Pour ce qui est du Graph, pas beaucoup de nouveau à part la disponibilité de certains contrôles UWP pour intégrer le contenu de certains éléments provenant du Graph dans les applications.

 

Bot intelligence, Speech Capabilities, and NLU best practices

IMG_3341

Comme j’ai vraiment apprécié découvrir cette plateforme l’an dernier et que c’est sans doute l’élément d’intelligence artificielle le plus propice à être utilisé dans tout type d’entreprise, j’avais hâte de découvrir les nouveautés.

IMG_3346

LUIS (Language Understanding Intelligent Services) est le service de Microsoft qui permet d’interpréter le langage naturel d’un humain. Très utile dans le développement de bot, il s’est vu amélioré de manière fascinante au cours de la dernière année.

L’intégration avec les services cognitifs très proches a été facilitée. L’utilisation des API de reconnaissance vocale et de reconnaissance des sentiments se résume à une case à cochée dans le portail web. D’ailleurs, la détection des sentiments est gratuite lorsque le service LUIS est utilisé.

LUIS est aussi capable d’apprendre par lui-même. Basé sur le Machine Learning, on doit lui apprendre quelques bases en lui donnant quelques exemples de phrases que l’on aimerait qu’il reconnaisse. Par la suite, au fur et à mesure que les utilisateurs l’utiliseront, il raffinera sa compréhension en conservant les exemples qui lui ont été soumis lors des vrais appels. C’est ce qu’on appel du Active Learning. Pour certains énoncés pour lesquels il sera moins certain, il proposera aux configurateurs de classifier ces derniers de manière à apprendre.

Finalement, les présentateurs ont énoncés quelques bonnes pratiques autour de la conception de bot :

IMG_3351

 

Mise à jour ASP.NET Core 2.1

La présentation de Daniel Roth s’est déroulé à un rythme d’enfer. La version 2.1 RC a été lancée et elle vient avec un GoLive qui permet de l’utiliser directement en production. Vous relater les nombreuses nouveautés récentes ne donnerait pas une expérience de lecture très intéressante. Je me contenterai de revenir sur quelques éléments.

Razor Class Libraries

Permettant de rendre plus modulaire une application web, il est possible de créer des asssemblies qui contiennent seulement des contrôleurs, des vues et modèles. C’était auparavant impossible. Cela ouvre la porte à quelques scénarios d’utilisation comme la gestion de l’identité fournit par l’équipe ASP.NET Core qui utilise justement cette façon de faire pour faciliter l’inclusion de l’authentification. Les éléments de menus, les pages de logins et de création de compte sont contenus dans un assembly distribué en paquet NuGet.

MVC Functionnal Testing

La version 2.1 d’ASP.NET Core facilite les tests de bout en bout en permettant d’exécuter toute la chaîne ASP.NET Core en mémoire sans avoir besoin de configurer un serveur web.

IHttpClientFactory

Avec l’ajout de cet interface, il est possible de gérer de manière centralisée les instances de classe HttpClient. On crée alors des classes wrapper qui sont composées d’une instance HttpClient et d’opérations spécifiques au service à appeler. On nomme ces wrappers des Typed Clients.

Cette fonctionnalité facilite l’intégration de Polly qui est une librairie open-source qui permet de facilement gérer les scénarios de gestion de résilience. Dans un monde microservice, ces facilités sont très importantes.

 

Conclusion

J’ai passé par-dessus certaines présentations comme les différentes options de conteneurs dans Azure et une mise à jour sur les développements Fluent sous Windows. Si vous voulez des détails, n’hésitez pas à communiquer avec moi ou à consulter les présentations sur le site Channel9. Encore une belle journée de trouvailles à venir!

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.

 

Build 2018 – Résumé Jour 1

IMG_3267[1]C’est avec grand plaisir que je participe à la conférence Build 2018 de Microsoft encore cette année. Ayant été très surpris par la teneur des présentations l’an dernier, les attentes étaient élevées pour la première journée. Voyons un peu ce qui a été marquant.

Keynote

Initiée par le grand patron de Microsoft, Satya Nadella, cette présentation comportait deux volets : partager la vision du géant mondial de l’informatique et présenter les nouveautés autour du cloud.

Microsoft veut assurément pénétrer de nouveaux marchés en attirant de nouveaux secteurs à consommer ses services d’infonuagique. La majorité des exemples démontrés dans la première partie du Keynote était orientés vers des périphériques pouvant bénéficier de l’intelligence artificielle ou des autres services Azure. On y a entendu les termes suivants : Intelligent Cloud et Intelligent Edge. Étant donné la charge de calcul importante requise par les algorithmes d’IA, Microsoft a présenté plusieurs façons d’exécuter du code provenant d’Azure au sein des appareils intelligents. Des drones et des caméras embarquant des technologies de reconnaissance visuelle ont retenu l’attention.

Plusieurs mises à jour sur les produits Azure ont été révélées, mais la démonstration la plus hallucinante a été celle d’une réunion à travers laquelle nous avons pu voir de la traduction simultanée, de la prise de note assurée par les applications, des intégrations entre les téléphones, les ordinateurs et des périphériques de réalité virtuelle. Je vous recommande d’y jeter un coup d’œil.

Une des annonces les plus inattendues durant cette présentation a été celle de l’intégration de Cortana et Alexa. Les deux assistants personnels que l’on croyait en compétition seront accessibles facilement sur les différentes plateformes. Il sera donc possible d’invoquer Alexa sur un PC Win10 et aussi d’utiliser Cortana sur un appareil Alexa.

Est ensuite apparu le mythique polo rouge. Scott Gu était présent pour faire plusieurs annonces au niveau d’Azure, mais a aussi laissé la place à Amanda Silver qui a fait une présentation plus qu’intéressante de Visual Studio Live Share. En bref, cette fonctionnalité disponible en preview dans VS 2017 permet de collaborer à 2 sur le même bout de code pour déboguer ou pour aider le développement. Ce qui est le plus étonnant, c’est que ça fonctionne pour tous les langages, sur Windows et sur Mac et avec Visual Studio et Visual Studio Code.

Scott Hanselman a aussi présenté AKS, le service géré Kubernetes dans Azure. L’élément intéressant a sans aucun doute été le Dev Space. Il permet au développeur de pouvoir tester dans un environnement kubernetes complet sans rien avoir sur son poste. Hit F5!

Scott Gu a aussi présenté plusieurs avancées dans IoT Hub, IoT Edge, Cognitive Services, Search API et Cosmos DB.

Visual Studio – présent et futur

IMG_3293[1]Pour cette présentation, mes attentes n’étaient pas élevées étant donné la maturité de l’IDE réputé. Bien que le malheur se soit abattu sur les démonstrations, j’ai été impressionné par la quantité de fonctionnalités impressionnantes qui ont été ajoutées à l’outil. Voici les points les plus marquants.

Visual Studio Live Share

IMG_3296[1]

Comme mentionné dans le Keynote, cette fonction permet de partager une session Visual Studio avec un collègue. Ce qui est intéressant de noté, c’est qu’il n’est pas nécessaire pour notre collègue d’avoir les sources et les binaires sur son poste pour participer. En effet, tout le code source est récupéré de l’ordinateur qui initie la session de partage. Durant ces sessions de partage, il est possible de voir le curseur de l’autre personne, de modifier le fichier de part et d’autre et aussi d’utiliser le débogueur. L’accès aux variables et aux outils de débogage standards est aussi supporté. Il est aussi possible de partager un serveur qui exécute le code qui est en édition. De cette façon, nul besoin de compiler le code sur la machine distante. Une session terminale peut aussi être initiée afin d’exécuter des commandes à distance comme l’exécution des tests.

Éléments de productivité

IMG_3294[1]

Plusieurs nouveautés présentes dans les mises à jour récentes de Visual Studio ont été présentées, mais ce qui a retenu mon attention est sans aucun doute IntelliCode. Cette fonctionnalité tire partie du Machine Learning pour analyser le code de plus de 2000 dépôts dans GitHub et proposer en premier les choix les plus propices dans l’IntelliSense. IntelliCode peut aussi générer un fichier EditorConfig en fonction des habitudes détectées dans le code. Il propose également à un réviseur de porter son attention sur différents aspects lors d’une pull request comme les variables mal utilisées (bugs potentiels) et les fichiers qui sont susceptibles de demander plus de corrections.

Un élément qui m’est apparu évident est aussi que l’écart se rétrécit entre ReSharper et Visual Studio. Plusieurs réusinages ont été ajoutés (TypeScript inclut) et plusieurs fonctionnalités pour naviguer plus facilement dans le code (Ctrl+T, Naviguer dans le code décompilé) font maintenant partie de l’outil de base.

Intégration des Pull Requests dans l’IDE

L’équipe Visual Studio ne s’est pas contentée d’intégrer la création et l’approbation des pull requests dans l’IDE. En plus, Visual Studio permet de réviser le code comme s’il faisait parti de notre solution. Ça donne le même effet que de déréserver du code avec TFVC. Toutefois, plutôt que de seulement voir la version finale, il est possible de voir les différences de différentes manières (inline, côte à côte, etc.). On y voit le résultat de l’exécution des tests (réussite et couverture) directement dans les fichiers modifiés. Il est aussi possible de déboguer le code contenu dans la pull request. Wow!

 

Mot de la fin

Voilà ce qui a retenu mon attention particulièrement pour cette première journée. En espérant que la deuxième journée sera tout aussi riche.

Faciliter le passage à l’architecture microservices

Microservices

Image : http://comunytek.com/en/introduction-to-microservices/

Quand on regarde les tendances de l’industrie actuelle, il est difficile de ne pas entendre parler d’infonuagique (cloud) et des microservices. Depuis quelques années, des leaders comme Netflix, LinkedIn, Twitter, Google, Amazon et Microsoft se sont imposés dans ces domaines et ont bien voulu partager leur savoir-faire en publiant des plateformes open-source et des articles. Bien que l’univers du cloud et des microservices requiert des changements dans la manière de gérer les technologies et les infrastructures, il faut aussi adapter l’architecture logicielle pour aborder ces nouveaux paradigmes correctement.

Dans le contexte d’une application existante, le passage au cloud et à l’architecture microservices doit se faire de manière itérative. Il n’est pas judicieux de tout changer en même temps, car il devient impossible de mesurer si l’investissement aura eu les bénéfices escomptés. Alors, par où commencer?

Selon Sam Newman, la bonne pratique est de commencer par modifier la structure du code petit à petit afin de tendre vers l’indépendance des déploiements. Qui dit indépendance des déploiement dit évidemment découplage. Alors on doit commencer à créer des plus petites unités de déploiement dans notre logiciel qui soient découplées les unes des autres. Ce genre de changement peut se faire sans contrainte d’infrastructure et sans impact sur la sécurité. Voyons donc en détail comment on peut se préparer à l’approche microservice dès aujourd’hui.

Définir les frontières d’un service

Le principal défi au niveau du design dans l’architecture microservice est de déterminer les frontières d’un service. On sait que le monolithe n’est pas une bonne idée. On sait aussi qu’il n’est peut-être pas optimal de créer un service par classe de logique d’affaire (aussi appelé classe du domaine). Alors on doit trouver le juste milieu. Mais comment? Il n’y a pas de réponse toute faite à ce sujet, mais l’élément qui revient le plus souvent dans la littérature est d’utiliser le concept du Bounded Context tiré du Domain Driven Design. Celui-ci serait trop long à décrire dans cet article, mais l’idée est de s’assurer que notre service est lié à une seule fonction d’affaire. Par exemple, dans un site de commerce en ligne, les fonctions de gestion des commandes et de gestion des livraisons ne devraient pas faire partie du même service. En effet, pour faire un lien avec le Single-Responsibility-Principle (SRP) des principes SOLID, un service ne devrait avoir qu’une seule raison de changer. Normalement, les fonctions d’affaires tendent à rester relativement stables dans une entreprise. C’est sans doute l’élément qui changera le moins souvent. C’est donc une bonne idée de créer des services qui sont alignés avec ces fonctions d’affaires afin de minimiser les changements de frontières qui pourraient survenir. Toutefois, la connaissance de notre domaine d’affaire peut évoluer et amener à faire des changements dans la topologie des services. Le découpage et le niveau de découplage du code peut rendre ces changements très pénibles ou très faciles. Il est donc important de s’y attarder.

Le problème avec le découpage en couche

Pendant plusieurs années, l’architecture n-tiers proposait de séparer les composants logiciels par couche applicative.

N-Tiers

Cette façon de faire permet d’ordonner et de structurer le code pour séparer les responsabilités. Toutefois, elle n’est pas orientée vers les tests automatisés, car elle rend difficile la substitution et elle n’encourage pas le SRP en n’étant pas alignée sur les fonctions d’affaires. Il est aussi difficile d’éviter de faire un gros spaghetti et de comprendre d’un coup d’œil quel est le but de l’application. Lorsqu’un développeur veut créer un service avec une ou plusieurs classes de logique d’affaires, il doit effectuer une analyse des dépendances entre les classes afin de mesurer l’impact du changement. Cette approche rend plus difficile l’évolution de l’architecture.

Cohésion forte, couplage faible

En SOA, c’est sans doute le principe qui fait le plus consensus. Un service doit rassembler des opérations à forte cohésion. Tous les éléments d’un même sujet devraient être traités dans le même service. De plus, chaque service devrait être faiblement couplé avec ses pairs. Ainsi, on tend à diminuer les vagues de changements. C’est ce principe que reprend Uncle Bob dans son livre Clean Architecture. Il applique ce principe non seulement au niveau des services, mais aussi au niveau des composants. Il énonce certains principes permettant d’évaluer la cohésion et le couplage afin de créer les bons regroupements dans le code.

En DDD, le principe de cohésion forte encourage à regrouper les éléments du domaine qui sont intimement liés en agrégats. Toutefois, le couplage entre ces derniers doit être évité. On doit également éviter le couplage avec les technologies. L’interface utilisateur ou le moteur de base de données utilisé doivent être traités comme des détails d’implémentation qui sont jetables. Ce qui va perdurer dans le temps, comme mentionné précédemment, c’est la logique d’affaire et non la version de notre SQL Server. L’emphase doit être mis sur l’isolation de notre logique d’affaire. Elle doit être pure.

Pour ce faire, différentes approches ont été documentées dans le passé. Hexagonal Architecture (Port and Adapter), Onion Architecture et Clean Architecture sont toutes des variantes, mais partent du même principe. On doit inverser les dépendances. Pour ma part, je trouve que l’appellation « architecture en oignon » est celle qui parle le plus. On veut ajouter des couches autour de notre domaine. On représente nos couches de la manière suivante :

OnionArch

http://jeffreypalermo.com/blog/the-onion-architecture-part-1/

Le sens des dépendances doit toujours être vers le centre. Une fois qu’on a intégré ce paradigme dans notre code (merci aux IoC Containers), on obtient une architecture testable et plus modulaire. Toutefois, reste encore à trouver une manière de regrouper ces différentes couches en composants.

Découpage en composants adapté aux microservices

Si on résume, le but est d’isoler les classes de domaine afin qu’elles soient indépendantes des détails d’implémentation comme les bases de données et les composants UI. Le réflexe que j’ai eu dans le passé a été de créer un composant séparé pour chaque élément d’infrastructure (UI, Données, Cross-cutting concern). En .NET, c’est le seul mécanisme qui permet d’éviter à une classe du domaine de pouvoir instancier une classe d’accès aux données directement. Le fait de faire une référence vers le domaine dans le composant d’accès aux données empêche donc d’avoir une référence dans l’autre sens, et donc, le domaine ne peut avoir de dépendance directe inverse, ce qui créerait une référence circulaire. Toutefois, cette approche n’est pas parfaite : elle ne permet pas d’hurler l’architecture. On peut toujours s’en tirer avec une nomenclature de composant, mais ce n’est pas ce qui a de plus évident. Par ailleurs, s’en sont suivi deux phénomènes intéressants :

  1. Les composants UI ne sont pas obligés de passer par le domaine pour accéder aux données, ce qui nuit à la centralisation de la logique d’affaire
    1. En effet, nous avons vite vu apparaître des classes de la couche UI qui accédaient directement aux données.
  2. Lors d’une modification au domaine, on devait effectuer des changements dans plus d’un composant, ce qui montre que la cohésion n’était peut-être pas au maximum.

Pour moi, le dernier chapitre du livre Clean Architecture de Uncle Bob est sans doute le plus révélateur. Écrit par Simon Brown (auteur du framework C4), ce chapitre décrit une manière de regrouper les classes différemment. Il propose de regrouper dans un même composant les éléments suivants :

  1. Couche service (pas confondre avec le projet Web API ou WCF qui sont plus du UI d’une certaine façon)
  2. Accès aux données

Dans ce composant, la seule chose qui demeure publique est la porte d’entrée du composant. On obtient une architecture comme celle qui suit :

MSFinal

(En pâle, les types qui sont internes)

Brown propose de tirer profit du compilateur pour faire respecter l’architecture en rendant internal les éléments d’accès aux données et les classes du domaine. On obtient une architecture plus parlante. Juste en regardant les composants on comprends où se trouve la gestion des commandes. Aussi, le découplage demeure inchangé. Par ailleurs, il devient facile de déplacer un concept d’un service vers un autre. On vient ainsi se donner de la flexibilité quand vient le temps de revoir le découpage des services en approche microservices. Pas d’analyse d’impact très longue, tout est dans le composant. C’est une façon d’adapter notre architecture en prévision d’une migration vers les microservices.

Les plus malins auront toutefois noté qu’il devient plus facile d’instancier une classe d’infrastructure et donc de ne pas respecter le sens des dépendances. C’est en effet un compromis, mais puisque ce problème ne peut pas se propager à l’extérieur du composant, on peut découvrir les fautes et le redressement sera en général plus rapide. On y gagne toutefois une plus forte cohésion et on évite de disperser la logique d’affaire.

Comme ces composants sont très autonomes, il devient facile de déployer ces derniers de différentes façons. L’évolution d’un composant comme celui-là peut être confié à une équipe indépendante étant donné qu’il a très peu de dépendances externes.

Conclusion

Même si l’adoption de l’approche microservice comporte de nombreux enjeux, il est possible de commencer dès aujourd’hui à se préparer dans notre code patrimonial. Une fois l’indépendance du code obtenu, il faut s’attaquer aux bases de données, ce qui n’est pas une mince affaire non plus. Comme la route est longue, ça nous force à travailler là où les gains sont les plus nécessaires. L’architecture microservice n’est pas une destination, mais plutôt un outil qu’on doit utiliser pour atteindre des objectifs spécifiques.