Build 2019 – Jour 3 – Azure Functions, Windows Terminal & Web Assembly

20190507_120058.jpg

Cette dernière journée a été marquée par quelques présentations un peu moins intéressantes, mais je traite dans cet article des sujets qui sont en plein effervescence. Alors au menu : Azure Functions, Windows Terminal et Web Assembly (Wasm).

Azure Functions

Les Azure functions sont au coeur de l’offre de service serverless de Azure. Elles offrent la possibilité d’exécuter du code sans se soucier de l’infrastructure sous-jacente. L’élasticité (scaling) et la gestion des ressources est la sous la responsabilité d’Azure. Suffit de fournir un script ou un bout de code et Azure nous permet de l’exécuter.

Les gros avantages de cette plateforme sont son modèle de micro-facturation et son architecture pilotée par les événements (Event-driven architecture, EDA). Vous êtes facturés seulement lorsque le code s’exécute. C’est l’avantage que propose la plupart des plateformes serverless. Pour ce qui est de l’EDA, elle est facilitée, car Azure permet de déclencher des functions à partir d’une multitude d’événements déjà pré-configurés. Il peut s’agir d’un message qui a été ajouté dans une file de messages ou encore d’un changement de données dans CosmosDB. Bref, les possibilités sont grandes et les coûts sont presques négligeables dans certains cas.

Durable functions

J’ai appris durant la conférence que l’offre des Durable Function n’était pas seulement pour permettre l’exécution plus longue de certaines fonctions. En fait, ce modèle de programmation ouvre la porte à différents scénarios d’orchestration ou de coordination entre les éléments serverless. Certains patrons sont intégrés de belle manière au langage de programmation et permettent de définir des workflows simples à l’aide seulement d’Azure Functions. C’est donc une alternative simple aux applications Logic Apps.

20190508_143352

Pour plus de détails

Nouveautés

La plus grande nouveauté est sans doute KEDA qui permet, entre autres, de déployer des Azure Functions dans Kubernetes directement. Le projet permettra de tirer profit de plusieurs événements provenants de Kubernetes ou de l’extérieur des clusters pour effectuer la gestion automatique du scaling et de l’exécution de nos Azure Functions.

Par ailleurs, certaines fonctionnalités sont très récentes pour les Azure Functions comme l’ajout d’un plan Premium, le support du langage PowerShell et le support de l’injection de dépendances.

20190508_144740.jpg

Windows Terminal

20190508_102026.jpg

Microsoft a annoncé qu’il travaillait sur un nouveau terminal et sur une nouvelle console de ligne de commande qui sera aussi open-source. C’est littéralement du code de Windows qui se retrouve sur GitHub! À titre d’exemple, voici les principaux ajouts qui seront fait prochainement :

  1. Ctrl+Scroll : Ajuster le zoom
  2. Ctrl+Shift+Scroll : Ajuster la transparence de la fenêtre
  3. Amélioration du copier-coller
  4. Fichier de profil en JSON pouvant être partagés et distribués pour conserver nos personnalisations
  5. Support des onglets

Le code est déjà disponible sur GitHub et ils accepteront les Pull Requests éventuellement, ce qui veut dire qu’on peut tous participer au développement de Windows ! Après seulement 48 heures, le dépôt comptait déjà plus de 25 000 étoiles. Je prévois un problème de capacité du côté de Microsoft quand viendra le temps de gérer les demandes. Pour vous mettre l’eau à la bouche, voici le vidéo qui a été présenté pour illustrer la direction qu’ils veulent prendre.

Web Assembly

Ça fait déjà un petit moment que je tente de créer un buzz dans ma région autour de cette nouvelle technologie qui, selon moi, va littéralement révolutionner plusieurs paradigmes dans le web et même dans d’autres sphères de l’informatique.

Jérome Laban est le CTO de la plateforme Uno et travaille pour nventive à Montréal. Il nous présentait les dernières avancées de Web Assembly (WASM) dans le monde .NET. Microsoft travaille à créer un framework SPA en .NET avec Blazor, mais d’autres initiatives sont en cours également comme Uno et Ooui.

Il existe deux façons d’afficher des éléments visuels dans le navigateur présentement :

  1. Utiliser les canvas HTML 5 pour dessiner des pixels
  2. Générer du HTML

Dépendemment des scénarios d’utilisation, une approche peut être plus adaptée que l’autre. Avec l’utilisation des canvas, il a été possible d’exécuter une version de Windows 2000 dans le navigateur (lien). Du côté de Uno platform, ils ont optés pour l’approche de génération HTML.

20190508_091308

Pour ceux qui veulent tester WASM avec un projet .NET, le paquet nuget Uno.Wasm.Bootstrap vous permet d’ajouter des outils de compilation qui génèrent des artéfacts permettant d’exécuter votre application .NET dans le navigateur.

20190508_085312.jpg

La démo de la fin qui générait du code à l’aide de Roslyn directement dans la navigateur était aussi très impressionnante. Une petite application console qui utilisait EF Core et SQLite a été compilée dans le navigateur pour ensuite être exécutée localement.

Pour ceux qui n’ont pas encore regardé les possibilités de WASM, vous devez absolument le faire!

Conclusion

C’est ce qui met fin à mon aventure à la conférence Build 2019. Encore une fois, une expérience incroyable qui s’est terminée avec un party dans le stade de football des Seahawks de la NFL.

Microsoft continue sa stratégie d’être de plus en plus ouvert afin d’être le plus inclusif possible en intégrant des produits open-source de plus en plus et en continuant d’être transpartent sur ses projets comme c’est le cas avec Windows Terminal. C’est aussi un élément qui ressort de manière générale quand on discute avec les gens des équipes de réalisation. Ils veulent avoir du feedback sur ce qu’ils développent. On voit bien qu’ils ont pris le virage agile et DevOps très au sérieux. Ce sont tous ces types de rétroactions qui leur permettent de demeurer au devant des autres compagnies.

Comme dirait le monsieur avec le polo rouge : There’s never been a better time to be a developer.

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

Build 2019 – Jour 2

Écrire un article résumant une journée complète de conférences qui n’aurait pas l’air de sauter du coq à l’âne n’est pas une tâche facile. Pourtant, je pense que l’information recueillie aujourd’hui est très pertinente. C’est pourquoi je vous propose des résumés des différentes présentations intéressantes auxquelles j’ai assisté aujourd’hui à la deuxième journée de la conférence Build 2019 de Microsoft.

Productivité avec Visual Studio 2019

20190507_153018 (2).jpg

Le but n’était pas de vous énumérer toutes les améliorations de VS 2019 comme une liste d’épicerie, je mentionnerai seulement celles qui m’apparaissent plus pertinentes. Pour la liste complète, vous pouvez consulter les notes de livraison.

Depuis la version 2017, Visual Studio améliore sans cesse ses performances. Il gère de mieux en mieux les solutions de grande taille et la nouvelle expérience de démarrage ainsi que les filtres de solutions sont dans cette lignée.

Les Code lens sont maintenant offertes dans la version Community et sont aussi extensibles. Il est maintenant possible de créer ses propres Code lens!!!

On peut aussi voir ou éditer les fichiers de projet avec un banal double-clique. Know it, learn it, love it!

Aperçu de certaines fonctions

Dans les versions Preview, certaines fonctions sont disponibles pour recueillir le feedback. L’ajout de l’auto-complétion dans les chaînes de caractères RegEx a notamment retenu mon attention.

Aussi, IntelliCode a été livré formellement, mais certaines nouvelles fonctionnalités sont déjà en route.

Pour rappel, IntelliCode permet d’utiliser le Machine Learning pour améliorer l’expérience des développeurs. Entre autres, les éléments d’intellisense les plus populaires, dans le contexte de notre curseur, apparaîssent en premier.

Il sera prochainement possible d’entraîner le modèle d’IntelliCode avec notre propre code pour qu’il soit en mesure de nous aider avec les classes que nous développons nous-mêmes. L’exécution se fait localement pour plus de confidentialité. Il sera également possible de partager le modèle ainsi généré avec nos collègues au besoin.

Toute les équipes finissent par avoir une convention de style pour le code. Le fichier .editorconfig permet aux utilisateurs de VS de personnaliser cette expérience. Toutefois, il peut être difficile de répertorier toutes ces conventions. IntelliCode viendra à la rescousse et permettra de générer un fichier .editorconfig basé sur les conventions informelles de notre base de code.

JAM Stack + Azure Functions

Cette présentation était constituée d’une série de démos pour montrer l’intégration des différents outils de la JAM Stack telle que vue par John Papa et Matt Hernandez. Cet acronyme sert à désigner un ensemble de technologies qui fonctionnent bien ensembles. On parle ici de Javascript, APIs et Markup.

20190507_083546

Les démos ont servi à montrer comment il était facile de développer une application Angular dans VS Code qui repose sur un back-end Azure Functions écrit en TypeScript dans le même répertoire que l’application Angular. En plus des capacités formidables d’édition web, VS Code est un excellent outil pour développer et déboguer les Azure Functions localement sur notre poste. La démo utilisait NodeJS pour l’exécution locale et les présentateurs ont montré comment démarrer l’Azure Function et l’application web dans le navigateur en même temps en appuyant sur F5. L’utlisation du fichier launch.json étant la clé.

Les présentateurs ont aussi utilisé les extensions VS Code pour déployer leur application dans Azure directement, ce qui procure une expérience très intuitive et une boucle de rétroaction rapide. Ils ont terminés en montrant comment Azure DevOps pouvait être utilisé simplement pour assembler des artéfacts de déploiement et ensuite les déployer vers les ressources Azure. Dans le pipeline de build, l’utilisation des tâches npm permet de réutiliser le même outillage que l’environnement local pour la partie Angular. Bref, l’intégration est très intéressante et semble assez mature.

Windows Subsystem for Linux v2 (WSL2)

Microsoft a annoncé la nouvelle version de son Windows Subsystem for Linux : WSL 2. Les deux principaux avantages sont la performance et la compatibilité avec les fonctionnalités natives des distributions Linux. Le tout repose sur l’utilisation de la virtualisation légère qu’ils appellent Lightweight utility VM qui est rendu possible avec les travaux qui ont été faits pour le support des conteneurs dans Windows. Une VM Linux est donc démarrée par la couche WSL 2 qui s’occupe d’abstraire les détails pour nous. C’est pourquoi Microsoft distribuera les versions du noyau Linux via les Windows Update. Qui aurait dit que cela se produirait un jour? Toutes les distribution de Linux seront exécutées dans une seule VM en utilisant les fonctionnalités natives qui soutiennent les technologies des conteneurs sous Linux. Il est donc possible d’accéder aux fichiers Windows à partir de WSL et aussi d’accéder aux fichiers de la VM Linux à partir de Windows comme si de rien n’était. Les avancées de WSL 2 permettent aussi l’utilisation de Docker dans WSL directement.

20190507_104059.jpg

À la fin de la présentation, un rappel a été fait sur le mode « remote » de VS Code. Ce dernier permet d’exécuter l’interface utilisateur sous windows, mais de déléguer l’ensemble de l’exécution au WSL. Pour en savoir plus

Développement de microservices avec AKS, GitHub et Azure Pipelines

Microsoft est sérieux pour ce qui est de l’intégration de Kubernetes dans ses différentes plateformes. En plus de l’expérience du portail Azure en constante amélioration, les outils de développement demeurent une priorité. Dans une présentation comportant plusieurs démos, nous avons vu à quel point il est facile d’itérer rapidement dans un contexte AKS avec Visual Studio. Le débogage d’un conteneur dans AKS est possible directement à partir de notre IDE favori. Une possibilité incroyable est aussi de pouvoir modifier notre application sans avoir à regénérer notre image de conteneur et à la publier dans AKS. L’exécution se fait localement et AKS route les appels vers notre machine de développement, ce qui accélère grandement le développement. Tout cela est rendu possible grâce à DevSpaces : des espaces de développement isolés dans un cluster partagé. Un développeur peut alors modifier un composant et le tester sans impact sur les autres personnes qui effectuent des essais dans le même environnement.

20190507_130315

Des outils de ligne de commande ont été ajoutés à la CLI Azure pour faciliter le démarrage. Par exemple,  pour configurer notre espace, les lignes de commande suivantes sont suffisantes :

az aks use-dev-spaces -g [resourceGroupName] -n [clusterName]

az azds prep

az azds up

Il est donc facile de démarrer rapidement avec AKS dans Azure.

Des ajouts intéressants ont été fait dans Azure DevOps qui permettent de voir nos environnements Kubernetes directement dans le portail Azure DevOps.

Screenshot_20190507-225111_Chrome (2).jpg

Toujours dans le but d’accélérer le démarrage avec AKS, Azure DevOps fournit maintenant un assistant de création de pipeline pour AKS. Ce dernier automatise la création des fichiers azure-pipelines.yaml et des manifestes requis par Kubernetes pour déployer notre application. Le tout est alors archivé dans notre dépôt de code pour être modifié comme du code par la suite.

Un scénario qui est vraiment intéressant avec tous ces ajouts est celui de pouvoir effectuer des tests manuels dans un espace DevSpaces AKS basé sur une Pull Request. En détectant qu’un pipeline de déploiement a été déclenché à partir d’une Pull Request, on peut concevoir notre pipeline de sorte qu’il crée un espace DevSpaces à la volée pour nos tests. Toutes ces étapes sont intégrées également dans GitHub.

Conclusion

En plus des nouveautés mentionnées plus haut, une foule d’autres sujets ont capté mon attention comme l’annonce de l’API Management d’Azure qui permettra de fédérer des gateways on-prem avec Azure à l’aide de conteneurs.

De plus, les discussions avec les équipes des différentes produits sont très intéressantes pour obtenir des réponses détaillées sur une foule de sujets.

Encore une autre belle journée en perspective demain. Au menu, Web Assembly et plus!

 

Build 2019 – Jour 1

20190506_104437

De retour avec un article portant sur la conférence Build de Microsoft encore cette année. Avec beaucoup de plaisir, j’ai la chance d’y assister en direct de Seattle avec plusieurs collègues.

La première journée a été marquée par plusieurs annonces importantes au niveau d’Azure et de .NET. Voici ce que j’ai retenu de cette première journée de conférence.

Azure Keynote

20190506_110228.jpg

Scott Guthrie a orchestré le keynote technique portant sur Azure et certains outils de développement. Portant son légendaire polo rouge, il a procédé à plusieurs annonces qui ne sont pas négligeables. Pour les gens qui suivent les nouveautés de manière assidue, rien n’est apparu comme révolutionnaire, mais je pense que c’est du à la cadence de livraison rapide à laquelle Microsoft nous a maintenant habitué. Voyons quand même les éléments dignes de mention.

Annonce de Visual Studio Online

Microsoft fournit maintenant un éditeur web en ligne pour Azure DevOps. Il agira en tant que companion aux éditeurs VS Code et Visual Studio. Des fonctionnalités comme Live Share et IntelliCode sont à prévoir éventuellement.

20190506_112245.jpg

Outillage Azure DevOps

Donovan Brown est revenu sur différents ajouts récents dans l’outillage entourant Azure DevOps comme l’outil Azure CLI qui inclut des extensions pour Azure DevOps. Aussi, l’annonce importante a été celle de pouvoir unifier les pipelines CI/CD dans un seul et même pipeline. Tout ça se fera en YAML. Avec l’ajout récent d’un soutien visuel pour la configuration des tâches, l’expérience devient très intéressante.
Suite à l’acquisition de GitHub, Microsoft continue d’améliorer l’intégration entre GitHub et Azure DevOps en fournissant maintenant des ensembles de licences pour MSDN et GitHub Enterprise ainsi que la possibilité d’utiliser Azure AD pour s’authentifier dans GitHub.

Nouveaux services Azure

Plusieurs services Azure ont été annoncés en aperçu ou en disponibilité générale, mais j’ai noté particulièrement les ajouts à AppService qui disposera d’une intégration VNet pour les applications basées sur Linux. Nos applications .NET Core pourront donc utiliser la même intégration VNet qui est actuellement en aperçu du côté Windows (v2).20190506_113521.jpg

Quelques nouveautés du côté AKS sont aussi digne de mention. Pour commencer, la disponibilité générale des kubelets virtuels. Aussi, il faut voir Kubernetes Event-Driven Auto-scaling (KEDA). Il s’agit de pouvoir gérer l’élasticité des clusters Kubernetes à l’aide des événements disponibles dans Azure et des Azure Functions. Par ailleurs, ces dernières pourront aussi être exécutées sous Kubernetes dans des conteneurs.

20190506_113728.jpg

Plusieurs services de bases de données ont été bonifiés pour offrir des capacités « hyperscale ». Pour les énormes besoins en terme de données ou de performance, les BD opérationnelles pourront utiliser des ressources de grande envergure (Disponible pour SQL Server, MySQL et PostgresSQL).

Power Platform

Microsoft met beaucoup de l’avant les technologies Microsoft 365 dans sa conférence comme les Power Apps, Microsoft Flow et Power BI. Le but de Power Apps est d’offir la possibilité aux organisations de fournir des solutions logicielles sans nécessairement avoir recours à des développeurs. Au minimum, leur tâche sera dramatiquement réduite. Une démo a d’ailleurs été faite démontrant la possibilité de créer une application mobile à partir d’un outil de conception web. Pour en savoir plus, consultez le site PowerApps.

20190506_123049.jpg

.NET Platform Roadmap

20190506_135216

Une session avec les « lower Scotts » avait lieu aujourd’hui au sujet des nouveautés dans le monde .NET. Il faut dire que la grosse nouvelle a été publiée un peu plus tôt dans la journée lorsque .NET 5 a été révélé. Il y aura une seule version de .NET à partir de 2020 pour développer sur toutes les plateformes (Windows, Linux et MacOS). Notons en particulier les possibilités d’interopérabilité avec Java et Swift et les options de compilation JIT et Ahead of Time (AOT). .NET 5 sera la suite de .NET Core. Les applications .NET Framework peuvent donc continuer leur migration vers .NET Core selon les besoins. À noter que la version .NET 4.8 demeurera supportée avec les différentes versions de Windows.

D’autres nouveautés ont aussi été relatées comme ML.NET 1.0 et son Model Builder. Ce dernier permet de créer et entraîner des modèles de machine learning localement sur notre machine. Un assistant facile d’utilisation est rendu disponible directement dans Visual Studio. Les outils .NET pour Apache Spark ont aussi été démontrés de manière complète avec des performances meilleures que Python.

20190506_142125.jpg

Pour ce qui est de .NET Core 3 qui supporte WinForms, WPF et UWP, Microsoft garde le cap et rappel les avantages de migrer nos applications vers .NET Core :

20190506_143501.jpg

Un bref rappel a aussi été fait pour les plus récentes nouveautés de ASP.NET Core 3 comme :

Windows Containers

Pour finir, une session a eu lieu sur l’état des conteneurs dans Windows. C’est définitivement Windows 2019 qui offre le meilleur support pour les conteneurs Windows, mais il m’est apparu assez clair que la maturité n’était pas au rendez-vous. Les tailles d’images demeurent volumineuses et la complexité d’utilisation est plus grande que du côté Linux. Actuellement, il n’est pas possible de récupérer les logs émis par le processus dans le conteneur de manière standard dans StdOut, ce qui limite plusieurs scénarios. À terme, on pourra y retrouver les journaux applicatifs des événements (EventLog) ainsi que certains logs IIS, ce qui est quand même pas mal du tout. Les avancées les plus intéressantes sont du côté de AKS qui permettra d’avoir des noeuds mixtes Windows et Linux.

Conclusion

C’est une première journée très chargée que nous avons eu et nous en attendons une autre semblable demain. Bien qu’il n’y aura pas de keynote à suivre, de multiples présentations très intéressantes tourneront autour d’Azure, .NET et Kubernetes. Stay tuned!

DevOpsDays Montréal 2018 – Jour 2

IMG_3767.JPG

Dans mon précédent article, je suis revenu sur les faits saillants de la première journée de la nouvelle conférence DevOpsDays Montréal. C’est maintenant le temps de faire le tour de la deuxième journée. Au menu, nous avions Keynotes, API Gateway, changement de culture et sécurité. Let’s go!

Industry 4.0 – Daniel Koffler

Pour faire suite à la conférence d’hier portant sur les changements menant à la discontinuité, Koffler a présenté les changements que subissaient présentement les secteurs manufacturiers et industriels. La quatrième révolution industrielle est en marche et elle se nomme cyber-physique. Après la vapeur, l’électricité et l’électronique, cette révolution est reliée à l’interconnexion des éléments automatisés.

cyberPhysicalRevolution

(image : https://people.duke.edu/~mp275/research/evm.html)

Pour Koffler, ces secteurs ont besoins des pratiques DevOps et ils auront besoin des habiletés des gens experts dans le DevOps. Rien pour régler le problème de main-d’œuvre…

Voyage en Tanzanie – Adrian Hooper

En relatant son voyage en Tanzanie, Hooper rappelle les fondements du développement agile et DevOps. Livrez fréquemment, mais pour une bonne raison : parler aux utilisateurs. L’intention est de leur parler afin de comprendre leurs besoins et de pouvoir réagir au feedback obtenu rapidement.

Étouffez-vous ? Un cas d’API Gateway – Alex Gervais

Alex Gervais a été le seul à faire sa présentation en français. Ce n’est pas la seule chose qui m’a plus, au contraire. Il a présenté un retour d’expérience sur l’introduction d’un API Gateway dans leur solution kubernetes. Étape par étape, il a expliqué le chemin qu’ils avaient pris chez AppDirect pour en arriver à utiliser ambassador.

Pour cette entreprise, les principes suivants étaient très importants :

  • Pas de dépendances à un fournisseur cloud
  • Pratiques gitops
  • Architecture cloud-native

C’est pourquoi ils ont utilisé Kubernetes pour gérer leur infrastructure. Toutefois, l’exposition de leurs différents services était faite au départ de manière traditionnelle avec un balanceur de charge. Ils géraient leurs entrées DNS et les ports d’accès des nœuds de manière statique, ce qui est vite devenu compliqué. En plus, ils ont voulu simplifier l’API exposé à leurs clients afin d’abstraire différents détails internes. Ils en sont donc venus à opter pour un API Gateway.

APIGateway.JPG

Implementing DevOps in an International multi-cultural and multi-geography environment – Jesse Hurkens

Malgré le titre, cette présentation a davantage parlé de l’importance de la culture DevOps au sein d’une entreprise. M. Hurkens a marqué avec énergie qu’il ne suffit pas d’avoir un beau « pipeline » DevOps pour avoir un vrai succès. C’est d’abord une affaire de culture et il faut que cette culture change, au besoin, pour accueillir les échecs et en apprendre. Mais par où commencer?

IMG_3772

Il recommande d’initier ce changement par un petit projet qui, lorsqu’il aura eu son succès, pourra rayonner sur les autres. La pollinisation peut se faire de manière organique et elle créera une fondation solide dans l’organisation. Un truc intéressant qu’il mentionne est de donner des objectifs communs à tous les silos de notre organisation afin de faire travailler les gens dans la même direction.

Voici aussi les principaux challenges qu’il note dans les entreprises qui amorcent le voyage DevOps :
IMG_3773

Security Considerations for Containers as a Service (CaaS) and Serverless Architectures – Tsvi Korren

Cette présentation a été selon moi une des mieux structurée. Le présentateur a réussi à bien expliquer les enjeux de sécurité autour du serverless et des conteneurs hébergés et gérés. Si j’essais de résumé, l’enjeu est que l’abstraction de l’infrastructure demande aux spécialistes de sécurité de revoir leurs mécanismes de mitigation des risques. Traditionnellement, on avait l’habitude de mettre en place des antivirus et des contrôles d’accès à l’exécution, mais il n’est pas toujours aussi facile de bien contrôler ces éléments dans un monde où on a aucune visibilité sur ce qui héberge notre code. Comme l’OS et le runtime d’exécution est complètement abstrait, on ne peut pas le sécuriser.

Il propose donc quelques mesures qui peuvent aider comme de baser les images docker sur les versions les plus légères des OS et d’intégrer les validations de sécurité dans le pipeline de livraison. (« Shift-left »).

IMG_3776

Comme ce n’est pas suffisant, il recommande de faire en sorte que si un conteneur est compromis, qu’il ne donne pas accès à de multiples ressources. On doit donc pratiquer la micro-segmentation et donner les accès qui sont vraiment requis à chaque ressource. (Shift-up).

IMG_3775.JPG

Pour finir, voici les différents contrôles de sécurité généraux qu’il recommande :
IMG_3777.JPG

Le DevSecOps a encore de la maturité à prendre, mais certains outils sont déjà utilisables dans nos pipelines de développement pour détecter les vulnérabilités dans les images Docker que l’on construit et que l’on déploie. En voici quelques exemples :

  1. Microscanner
  2. Kube-Hunter
  3. Kube-bench
  4. Arachni

Conclusion

La conférence s’est achevée avec des Open Spaces qui ont été assez diversifiés. Pour moi, cette conférence a été grandement teintée d’infrastructure et de gestion des opérations. J’avais une conception du DevOps un peu plus équilibrée entre le développement et les opérations. Peut-être que c’est seulement parce que les pratiques en émergences sont surtout du côté de l’infrastructure. Je me demande maintenant s’il faut voir le DevOps comme étant plutôt les pratiques de développement adoptées par les gens des opérations… Mon côté développeur s’est senti un peu délaissé durant ces deux jours… Malgré tout, c’est une conférence que je recommande pour ceux qui veulent apprendre des expériences des autres et aussi à ceux qui veulent partager ou faire des rencontres.

DevOpsDays Montréal 2018 – Jour 1

logoDevOpsDays

J’ai la chance de participer à la conférence DevOpsDays Montréal 2018 qui en est à sa première édition. Comme cette conférence est relativement nouvelle, je vous décrirai les présentations auxquelles j’ai assisté, mais je tenterai aussi de dépeindre un peu l’ambiance et l’organisation de l’événement en guise de conclusion.

KeyNote #1 – Alistair Croll

Dans sa conférence principale, M. Croll a placé les bases qui justifient, selon lui, l’adoption des pratiques DevOps et surtout, le changement de culture que les entreprises doivent prendre pour survivre. En relatant les évolutions fulgurantes dans plusieurs domaines comme l’agriculture et l’émergence de nouveau modèles comme la rémunération pour les youtubeurs, il a mis l’emphase sur la discontinuité. Pour lui, ce qu’il faut surveiller, ce ne sont pas les éléments de rupture ou perturbateurs dans notre marché, mais plutôt ceux qui vont mener à discontinuer certaines façons de faire ou certains produits. Chaque industrie et chaque entreprise doit se poser les bonnes questions pour être en mesure d’innover.

Traditionnellement, les entreprises commençaient par avoir du succès en développant un procédé ou une approche et faisaient en sorte de l’étendre à plus grande échelle par la suite. Exemple : trouver une façon de vendre un produit facilement et ensuite engager plusieurs vendeurs qui adopteront la même approche pour vendre les mêmes produits. Cependant, le passé n’est plus garant du futur. L’adaptation l’est.

Pour la plupart des organisations d’aujourd’hui, la performance passe par les TI. Tout est maintenant TI. C’est donc logique de devoir automatiser et améliorer les processus TI pour être en mesure de s’adapter aux changements qui surviennent rapidement tout en innovant. Le DevOps est la clé pour y arriver. Les autres compagnies vont le faire. À vous de choisir votre destiné.

Shaky to solid: a test-based approach to legacy code – Catherine Proulx (CNRC)

Cette présentation avait pour but d’indiquer aux gens que le code legacy est inévitable et que l’on doit le considérer et surtout le respecter. On ne peut pas penser tout refaire le code qui ne répond pas aux critères de qualité actuels sur cette seule base.

La seule façon de prendre le contrôle du code legacy et d’inverser la vapeur est d’ajouter des tests automatisés. Mme Proulx propose de commencer par la correction des anomalies plutôt que de viser une approche TDD sur l’ensemble d’un système. Lorsqu’on travaille sur une anomalie, il est recommandé d’ajouter des tests pour d’abord prouver qu’elle existe et aussi prouver que nous avons bel et bien réglé le problème avec notre modification. Elle ne croit pas aux projets qui visent à ajouter des tests sur une partie majeure d’une application. Ça doit se faire de manière itérative, un changement à la fois.

Elle mentionne aussi qu’il faut faire attention à la métrique de couverture de code. Étant déjà discutable en contexte d’un nouveau développement, elle ne représente pas grand chose dans un contexte de code patrimonial. Comme il y forcément un paquet de bouts de code qui ne sont pas couverts par des tests automatisés, on ne peut s’y fier pour nous donner un sentiment de sécurité.

Catherine Proulx fait aussi mention d’un type de tests qu’elle utilise avec du code patrimonial. Elle le nomme « test canary ». Ça ressemble davantage aux tests de caractérisation que présente Michael Feathers dans son livre « Working Effectively with Legacy Code« . Ces tests permettent de comprendre ce que fait un bout de code patrimonial avant de le modifier. Une fois ce harnais de sécurité en place, on peut procéder à la modification avec confiance.

Mme Proulx a aussi profité de l’occasion pour mentionner que les tests manuels ne sont pas choses du passé. Bien que plusieurs se plaisent à dire qu’il faut tout automatiser, elle n’a pas vu un endroit encore où les tests manuels ont été annihilés. Elle dit même que plutôt que de les appeler tests manuels, certaines firmes les appellent maintenant tests utilisateurs. 🙂

Burnout: community problem & community solution – Jason Yee (DataDog)

M. Yee a présenté les enjeux du surmenage et de l’épuisement professionnel. Il a donné plusieurs conseils sur la manière de le détecter et sur les façons de le prévenir. Une multitude de ressources ont été citées. Vous pouvez trouver sa présentation à l’adresse suivante.

http://bit.ly/dodyul-burnout

IMG_3763[1]
Le lien avec le DevOps était un peu tiré par les cheveux. En se référant à une autre présentation, il dit que le DevOps, par sa stabilité, crée un climat plus serein dans les équipes de développement et qu’il contribuerait donc à diminuer le taux d’épuisement.

L’élément le plus troublant dans la présentation selon moi a été le parallèle qu’il a fait entre le CAP Theorem pour les systèmes distribués et celui pour la vraie vie. Il y trois composantes : Famille, Travail et Santé physique. Malheureusement, pour ceux qui croient à ce théorème, on ne peut avoir que deux des trois composantes à la fois.

Next Generation Config Mgmt: The Language – James Shubin

Cette présentation portait sur un projet open source créé par le présentateur. Il vise à rendre dynamique la gestion de la configuration à différents niveau à l’aide de la programmation réactive et d’un nouveau langage inventé pour l’occasion. Basé sur Etcd, on peut y définir des règles définissant la configuration à différents niveau de nos VMs ou cluster.

Ce projet demeure expérimental pour le moment, mais il est vrai qu’il y a du potentiel à ce niveau. Par exemple, on peut définir des règles beaucoup plus complexes d’auto-scaling basées sur autre chose que le CPU et la mémoire. La seule limite est l’imagination des développeurs. Reste à voir si ce projet connaîtra l’envol que son créateur lui souhaite.

https://github.com/purpleidea/mgmt

Open Spaces

J’ai découvert ce concept aujourd’hui. En bref, on a proposé aux participants à la conférence de cibler des sujets dont ils voulaient parler. Les gens se sont regroupés autours des sujets qu’ils jugeaient les plus intéressants afin de discuté.

Pour ma part, la séance que j’ai le plus apprécié est Scaling Kubernetes. Certaines personnes ont partagé leur expérience autour de Kubernetes, Docker, Istio, Weave Net etc. Il semble, bien que l’engouement soit présent, qu’il n’est pas si facile de faire fonctionner ces technologies. Il a été fait mention de plusieurs problématiques dans le déploiement de Kubernetes à plus grande échelle comme la latence DNS, la segmentation réseau complexe et la gestion des clusters proprement dite.

Le découpage des cluster et namespace semble être un enjeu de taille. Est-ce qu’il est mieux d’avoir un gros cluster en production ou plusieurs? Le groupe penchait plutôt vers le plusieurs. Toutefois, en avoir trop occasionne une maintenance difficile et ardue. La question n’a pas été réglée.

Mon constat est que ces technologies fonctionnent, mais elles ont un coût important en apprentissage et en maintenance. Les efforts et la complexité demeurent considérables. Soyez prêts à configurer des vnet, des politiques réseaux et des ingress/egress à profusion. Et bonne chance quand surviendra une mise à jour de ces technologies. Ce qui devrait arriver… il y a tout juste une minute… 🙂

Conclusion

Les présentations ont été un peu légères à mon avis, mais c’est quand même réussi pour une première journée de conférence. L’ambiance est conviviale et dynamique. Les fournisseurs commerciaux ont peut-être une trop grande place, mais la conférence n’aurait pas lieu sans eux. Je souhaite que cette conférence puisse prendre de la maturité afin de rendre justice au DevOps. Je pense qu’on pourrait y ajouter un peu de professionnalisme, mais les intentions sont louables. Je suis convaincu que ça s’améliorera dans le futur vu le succès de l’édition 2018.

À suivre demain pour le résumé de la deuxième journée!

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!