//Build 2018 – Adaptive Cards in Bot, Windows, Outlook and your own application

L’objectif d’une Card est de publier du contenu au sein d’une autre application, il y a donc 2 acteurs : l’auteur du contenu et le conteneur en charge du rendu. Il existe déjà des formats de Card (Twitter, Open Graph, Messenger…) mais qui sont relativement rigides, et le problème d’intégrer un HTML Canvas donnerait trop de liberté, d’où l’idée des Adaptive Cards !

On démarre par une belle démo des différentes expériences utilisateurs dans un Bot, dans Teams, dans le Notification Center de Windows, dans une app UWP, dans Outlook et même Cortana ! Les sources de la démo sont sur https://github.com/matthidinger/ContosoScubaBot.

Au passage, on apprend que le support des Adaptive Cards est déjà sur la version Web d’Outlook Web, et arrivera à la fin du mois sur Outlook Desktop.

Une Adaptive Card a donc un rendu natif et adapté à son conteneur, peut être créer à faible cout, et uniquement via une déclaration JSON décrivant le contenu, les actions, les champs de saisie, de la voix…

La seconde démo nous montre comment créer son Adaptive Card sur http://adaptivecards.io/visualizer . Ils travaillent aussi sur un designer http://acdesignerbeta.azurewebsites.net/ pour créer son fichier JSON plus simplement.

Pour la troisième démo, on voit la construction de bout en bout d’une Adaptive Card « Hello Word » pour Outlook :

  1. Création du modèle dans le designer en ligne
  2. Utilisation d’une Azure Function
  3. Test d’envoi depuis https://messagecardplayground.azurewebsites.net/
  4. Affichage dans Outlook O365
  5. Puis dans Outlook Deskop où le contenu a été mis à jour

Pour construire ses Cards dans son back-end, on peut utiliser les objets C#, parser des templates JSON, utiliser des vues Razor pour générer le JSON ou des composants .acx en NodeJS.

On continue par le rendu d’une Adaptive Card dans son application via les SDK disponibles pour JS/HTML, WPF, UWP, iOS ou Android (Xamarin et ReactNative à venir). Là aussi, on a un fichier host.config pour déclarer comment le rendu doit se faire dans l’application. Ensuite on doit brancher les évènements si la Card contient des actions.

On finit par Adaptive Card V2 (en construction)

  • Inclure simplement des sous Cards juste par une URL vers du contenu décrits via des schémas comme ceux de schema.org (exemple restaurant)
  • Utiliser une bibliothèque de templates
  • Transformer côté client un contenu pour le binder sur son template
  • Gérer un état de la Card en rappelant le fournisseur du contenu

 

Une super session à revoir pour ceux qui veulent se lancer sur le sujet !

//Build 2018 – Behind the scenes: Sets on Windows 10 and Your Phone

Behind the scenes: Sets on Windows 10 and Your Phone
Megan Brown, Shawn Henry

This session showed the features of Project Rome, which exists for quite some time, and how Microsoft leveraged those inside the new Sets and Nearby Share features of Windows 10 and the Your Phone app.

20180508_220917710_iOS.jpg

Project Rome aims at simplifying cross device interaction. It supports a wide range of devices: phone, PC, Xbox, etc.
It allows those devices to communicate between them, being either near by to each other or connected to the cloud.

Project Rome also uses Microsoft Graph to share data between devices.

An SDK is available on Android/iOS/Windows, but the Xamarin SDK is outdated and will be available by next year.

The session was separated into 5 key features:
20180508_221726332_iOS.jpg
Nearby Share allows to share data or files between devices that are near each other. Project Rome will automatically choose the best way for those devices to communicate (Bluetooth, Wifi, Cloud)
Useful for sending a picture from a phone to the PC
Only a handful lines of a code are needed to add this feature to our apps.

20180508_222639812_iOS.jpg
Discovery and Launch allows to discover our devices connected to the cloud and run commands on them at distance.
For instance, we can ask our PC to open a word file directly from our phone.

20180508_223445901_iOS.jpg
This one uses Microsoft Graph to store the activities of the user (such as opening an item in our app) and retrieving it elsewhere. Windows Timeline uses this feature.

20180508_224225138_iOS.jpg
AppService API allows to call a background service on another device (Android or iOS) and retrieve a result. This uses FCM on Android.

20180508_224937350_iOS.jpg
Remote Sessions allows to create a session between multiple devices and to send and receive data while the session is active. This way we can put live collaboration inside our apps.

20180508_225240594_iOS.jpg

//Build 2018 – Visual Studio and Xamarin: The future of app development

Visual Studio and Xamarin: The future of app development
Miguel de Icaza

In this dense but really interesting session, Miguel gave us a complete tour of how to do mobile app development in Xamarin today, as well as what will be the new features of Xamarin.

For the simplicity of this article, I will only list the new tools available and what will be available in the next version of Xamarin.

Don’t hesitate to watch to great session on Channel9 to see all the key points to take into account when designing your mobile apps to optimize user retention.

Announcements :

    • Simplified templates with a new Visual Studio Wizard
    • Automatic Android SDK Management in Visual Studio
    • The XAML editor of Xamarin.Forms is now the same as WPF/UWP
    • Android Designer (Split View Designer of AXML files) now available as a Preview Release
    • Faster build/deploy time when debugging Android apps with Eager Deployment (build and deploy are made in parallel
    • Hyper-V now supports official Android Emulators
    • Visual Studio can now simplifies iOS provisioning by using fastlane
    • Better profiling tools are available in Xamarin
    • Xamarin.iOS can now be compiled with a Full Static Mode to have better performance and memory usage
    • Xamarin.Forms 3.0 is released and comes with CSS / Flex Layout / Visual State Manager / Support for Right to Left languages
    • Xamarin Essentials is a new NuGet package containing most of the most used features for simpler cross platform developments
    • Elmish.XamarinForms is a new framework to make Xamarin a more functional friendly environment (with F#) by writing your app like React (functions return a new view instead of modifying it)
    • Ooui is Xamarin.Forms in the Browser thanks to Web Assembly

20180508_204350043_iOS.jpg20180508_205215943_iOS.jpg20180508_205421734_iOS.jpg20180508_205757867_iOS.jpg20180508_211729360_iOS.jpg20180508_212117449_iOS.jpg20180508_212242391_iOS.jpg20180508_212525352_iOS.jpg20180508_212939499_iOS.jpg

//Build 2018 – Continuous Monitoring for DevOps with Azure Application Insights & Log Analytics

La session commence par un courte introduction sur l’importance du monitoring dans le cycle DevOps, et avant tout pourquoi monitorer son application :

  1. Pour rendre visible l’état général de son application
  2. Pour trouver et résoudre les problèmes
  3. Pour l’optimiser en apprenant

azure-monitoring

Et pour monitorer son application, Azure propose des outils out-of-the-box analysant à la fois des données opérationnelles et des données applicatives. Tous outils peuvent être personnalisés pour surveiller des scénarios spécifiques.

La suite était une longue série d’exemples d’usage des outils sur le portail :

  • L’écran Health d’un nœud Kubernetes avec un drill-down vers Log Analytics pour regarder en détail les évènements liés
  • La configuration d’alertes sur des métriques avec en preview le choix de seuils dynamiques (déterminés par du ML sur les données historiques) plutôt qu’un seuil statique unique
  • Les différents choix d’action sur les alertes : email, sms, déclenchement d’un Logic App, lien vers son ITSM…
  • L’écran Application Map d’un site Web pour suivre les différentes ressources Azure liées et leurs interactions
  • L’écran Failures pour analyser les exceptions, voir le détail d’un transaction de bout en bout, ouvrir un snapshot de debug dans Visual Studio avec les données captées en production, ouvrir un ticket dans VSTS…
  • Le Live Metrics Stream
  • L’ajout de tâches de monitoring dans une release VSTS : ajout d’AppInsights, configuration d’alerte, ajout d’un tag de version dans AppInsights
  • L’écran Users pour analyser l’usage du site
  • L’enregistrement de chemin d’analyse dans un Workbook partageable
  • Et plein d’exemples de requête sur les données AppInsights (un cours Pluralsight devrait sortir sur le sujet !)

J’ajouterai le lien vers la vidéo parce que c’était vraiment riche !

//Build 2018 – Building event-driven Serverless Apps with Azure Functions and Azure Cosmos DB

Building event-driven Serverless Apps with Azure Functions and Azure Cosmos DB
Rafat Sarosh

In this session, Rafat Sarosh explained how to make a completely serverless backend with only Azure Functions and Azure Cosmos DB (with its ChangeFeed feature).

Despite being a very trendy subject, I found this session to be a little boring.
Not enough demos, not really explaining why use Azure Cosmos DB, and the speaker was not dynamic enough.

Azure Functions is part of the new FaaS offering of Azure that help make truly serverless development.
20180508_173113225_iOS.jpg

Azure Functions has 2 runtimes available. Version 1.x which is already GA (General Availability) and 2.x which is currently in preview.

Rafat demoed the tooling in the func CLI, Visual Studio and the Azure Portal to create new functions from templates. Those have been around for quite some time now.

Despite Azure Functions being serverless, you still have the choice to host them on your own App Service in Azure. This has the advantage to control a few scaling/performance options like AlwaysOn. By default, the Hosting Plan (no App Service) will put your functions to sleep if not used for 5 min.

20180508_175144928_iOS.jpg

Azure Functions has a trigger for Azure Cosmos DB that allows it to monitor for changes with the ChangeFeed functionality of Azure Cosmos DB and call a function when new content is available.
That allows to create automated workflows.

20180508_182239971_iOS.jpg

At the end of the session, 2 companies (Johnson Controls and Asos) explained their usage of both Azure Functions and Azure Cosmos DB.

20180508_182643760_iOS.jpg

//Build 2018 – Application modernization in Azure

L’objectif de la session est de montrer comment et pourquoi moderniser ses applications en les migrant dans Azure. Et pour cela on distingue 3 chemins :

  • Du IaaS avec du lift and shift de VM dans le cloud
  • Du lift and shift avec des containers PaaS cette fois
  • Ou un refactoring plus profond de son architecture applicative pour la rendre « cloud optimized »

Dans chaque cas on cherche à optimiser la valeur créée en simplifiant les déploiements ou la maintenance, en réduisant les coûts, en se rendant plus agile, etc. Et chaque cas a sa part d’avantages.

modernize-azure

 

# Lift & Shift de machines virtuelles

C’est simple et rapide, et même si on ne profite pas de toute la richesse du cloud, on peut quand même obtenir des gains notamment en simplifiant son infrastructure et sa maintenance.

# La containerisation

(je ne sais pas si c’est très français comme mot ??)

Ça reste du lift and shift, mais on ne se préoccupe plus de la gestion des serveurs. En plus de gagner en agilité sur le déploiement et son orchestration, on facilite la montée en charge, et l’isolation des services… Par contre il y a un effort supplémentaire à faire pour « packager » le container.

On présente ensuite plusieurs solutions de containers sur Azure :

  • ACI (Azure Container Instances)
  • AKS (Azure Kubernetes Services) qui peut être combiner à ACI
  • Service Fabric (peut s’utiliser OnPrem, sur des serveurs dédiés dans Azure ou désormais avec Service Fabric Mesh complètement géré par Azure)
  • Des solutions tierces comme Pivotal ou Docker

Pour démontrer tout ça, le speaker prend un site 3 tiers : WebForms + WCF + SQL Server DB. Les tiers Web et WCF sont passés dans un container Docker pour Service Fabric en utilisant le tooling intégré à VS2017 juste en quelques clics. La base de données est migrée en SQL Azure et le tout bascule dans Azure en peu de temps.

# La modernisation

Cette fois on cherche à profiter du cloud à 100%, mais ça a évidemment un impact fort sur le code existant. Le but final est d’arriver à une architecture Serverless et Event-Driven ! Et donc c’est là qu’arrive Azure Event Grid, les CloudEvents qui normalisent les échanges, Azure Functions, Logic Apps…, et CosmosDB pour le stockage distribué.

serverless-azure

Pour compléter on a aussi à notre disposition des services prêts à l’emploi comme tous les Cognitives Services personnalisables pour ajouter de la valeur à notre application.

On revient sur la démo de l’app WebForms pour y ajouter une Logic App qui capture des tweets dans une base CosmosDB avec de l’analyse de sentiments via Cognitive Services, et une ASP.NET Core Web API dans le même container que le site pour récupérer les derniers tweets analysées sur une nouvelle page du site.

La démo complète est disponible sur https://aka.ms/smarthotel360

 

//Build 2018 – Serverless in action

On commence par un rappel du concept « Serverless », qui est encore une fois présenté comme l’évolution qui suit le PaaS. Avec une approche Serverless, on oublie totalement la notion de hébergement, on ne paie plus que lorsque son code est exécuté, et donc on conçoit des applications « event-driven ». La platform Azure Serverless :

img_20180508_111438.jpg

La suite de la session sera un duel de Trip&Tricks entre les 2 speakers ! Voilà celles que j’ai retenues :

  1. La création d’une Azure Function en quelques clics à partir des templates à disposition depuis le portail Azure directement, VS ou VS Code
  2. L’utilisation d’un binding CosmosDB de sortie que l’on configure simplement via des attributs sur les paramètres de la fonction
  3. Utiliser des variables d’environnement en local avec le fichier local.settings.json
  4. Simplifier son API avec des Function Proxies pour proposer une API unifiée qui peut utiliser différentes API back-end (ou une réponse par défaut si on est en cours de développement)
  5. Partager proprement des ressources entre plusieurs exécutions (par exemple pour ne pas recréer un HttpClient à chaque fois, http://aka.ms/antipattern) juste en utilisant des variables statiques !
  6. Améliorer le temps de démarrage initial en réduisant les dépendances à charger, en utilisant un App Service Plan dédié, en déployant un ZIP (plutôt pour les fonctions en JS)
  7. Paramétrer le nombre d’exécution en parallèle sur une instance avec le fichier host.json

Une session orientée pratique, vraiment intéressante (et c’est le #5 qui a gagne le vote du public !).