Nouveautés de Entity Framework Core 2.0

Qu’est-ce que EF Core ?

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

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

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

EF_landscape

Quel avenir pour Entity Framework?

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

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

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

EF_EFCore

Les nouvelles fonctionnalités

Les fonctions

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

Voici un exemple d’utilisation:

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

Global query filter

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

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

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

Flexible Mapping

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

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

Voici une illustration :

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

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

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

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

Compiled queries

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

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

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

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

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

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

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

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

Context pooling

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

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

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

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

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

Microsoft Build 2017–Résumé des conférences jour 3

La troisième journée de la conférence comporte beaucoup moins de grandes annonces du côté des innovations, mais elle ne manque pas d’intérêt pour autant. Plusieurs présentations ont retenu mon attention lors de cette journée. Voici un survol de ce que j’ai apprécié.

Future of Visual Studio

IMG_2051[1].JPG

Aujourd’hui, les outils de développements sont tellement évolués qu’il est difficile d’y ajouter énormément de fonctionnalités. Combiné à un rythme de livraison beaucoup plus rapide qu’auparavant, ce genre de présentation est constitué d’un paquet de petits trucs et astuces. Il est donc difficile de tout vous relater dans un article, mais je vais me concentrer sur les éléments importants.

Productivité

La première partie de la présentation a porté sur les différents ajouts de productivité qui ont été fait à Visual Studio. Quelques nouveaux refactorings comme la possibilité d’ajouter une vérification pour les références nulles dans les méthodes et la possibilité de convertir automatiquement vers les interpolations de chaînes de caractères lorsque c’est possible. Un rappel a aussi été fait sur la possibilité de filtrer les éléments dans l’intellisense. Aussi, la fonction de recherche des références dans le code a été améliorée. La fenêtre des résultats présente les éléments trouvés dans une arborescence décrivant le composant et la classe contenant la méthode trouvée.

FindAllRef

Une extension permettant d’afficher la liste des erreurs et des avertissements directement dans la fenêtre d’archivage du code (Check-in/Commit) verra aussi bientôt le jour. Pour ceux qui n’auraient pas encore le réflexe de réviser le travail avant d’archiver. On y verra donc aussi les informations produites par les différents outils d’analyse statique de code.

D’autres extensions ont été ajoutées pour permettre de créer automatiquement les configurations d’assemblage (Build) et de déploiement (Release) dans VSTS. Disponible sur le menu contextuel du projet dans l’explorateur de solution, on peut entrer les informations Azure pour spécifier les destinations du déploiement directement. Il est aussi possible, par un menu contextuel semblable, de générer le projet docker-compose automatiquement pour rendre compatible notre application avec cette technologie.

Une nouvelle fonctionnalité de Visual Studio 2017 est le support natif pour les fichiers EditorConfig (.editorConfig). Ces fichiers qui résident dans le répertoire de projet servent à personnaliser les paramètres des éditeurs de texte. On peut ainsi indiquer le caractère de saut de ligne (et d’autres options) par type de fichier. Pour plus de détails, voir le projet sur GitHub.

Développement Linux

Le sous-système Linux Ubuntu était déjà disponible sur Windows 10 sans virtualisation. L’ajout de Fedora et de Suse montre que Microsoft veut devenir le leader des outils de développement pour toutes les plateformes. L’équipe Visual Studio a ainsi ajouté des facilités pour déboguer du code destiné à Linux directement sur Windows. En créant un canal SSH vers le sous-système Linux, Visual Studio peut donc s’accrocher au processus Linux pour une expérience de débogage ultime.IMG_2055[1].JPG

https://www.hanselman.com/blog/WritingAndDebuggingLinuxCApplicationsFromVisualStudioUsingTheWindowsSubsystemForLinux.aspx

 

 

Open Q&A: Moving 65,000 Microsofties to DevOps on the public cloud

IMG_2057[1].JPGJ’ai assisté à cette présentation qui était en fait une tribune où l’on pouvait poser des questions à des employés de Microsoft qui ont vécu le passage au DevOps à l’interne. Les panélistes provenaient des équipes Bing, Skype, Azure et Windows. Il a été question du passage à Git pour les équipes (avantages/inconvénients) et de l’adoption des pratiques d’intégration continue et de déploiement continue dans le cloud. Il a été intéressant de voir que les questionnements sur Git sont les mêmes que nous avons eu à mon emploi actuel. Dans tous les sujets, l’idée qui revenait sans cesse était de trouver la balance entre les avantages et les inconvénients.

Pour le passage à Git, ils ont à peu près tous optés pour une approche impliquant un champion dans chaque équipe. Cette personne était responsable de faciliter la transition à Git pour son équipe et de remonter les enjeux à la coordination lorsque nécessaire. Par ailleurs, il a été noté qu’il est difficile de trouver le juste milieu entre la gouvernance/standardisation et la flexibilité/autonomie. L’idée est de commencer à quelque part et d’ajuster les pratiques et les outils lorsque le besoin s’en fait sentir. Pour l’aspect gouvernance, ils recommandent une façon de faire que je prônais moi-même déjà : créer une autoroute. Si le chemin pour l’adoption est déjà tracé et qu’il est rapide, efficace et répond aux besoins à 80%, les gens embarquerons naturellement. Il faut donc opter pour la préconfiguration des outils plutôt que de tenter de mettre des contrôles en place.

 

Blockchain on Azure

Je me suis rendu à cette présentation dans le but d’en apprendre plus sur ce qu’est le Blockchain. Cette technologie repose sur le même genre de technologies que Bitcoin. Elle pourrait bien révolutionner le monde complètement en facilitant les échanges transactionnels de toutes sortes. C’est donc avec toute la volonté d’apprendre possible que j’ai assisté à cette conférence. Malheureusement, j’ai du m’avouer vaincu. J’ai du vérifier plusieurs fois si du sang ne s’échappait pas de mon nez ou de mes oreilles. Le contenu était vraiment complexe. Voici toutefois le contenu que j’ai retenu.

Le Blockchain est une technologie immature qui repose sur les piliers suivants :

  1. Chiffrage
  2. Ledger
  3. Base de données distribuées
  4. Partagés entre les organisatons/individus

Blockchain2.png

Microsoft est en train de développer des outils permettant d’abstraire la complexité de cette technologie. Il supporte déjà plus d’une technologie de Blockchain dans Azure et compte rendre plus accessible leur utilisation. Un Blockchain est constitué d’une partie donnée (document avec propriété fixe et dynamiques), d’une partie logique (permettant de faire des calculs déterministes, et de son stockage (ledger). Cette structure commence à se formaliser autour du concept de Cryptlet qui vient encadrer comment séparer et sécuriser la séparation des constituants.

Blockchain.png

Je sais que mon résumé est flou et décousu, mais je vous invite à écouter la présentation pour avoir plus de détails.

Modern Front-End web development in Visual Studio 2017

C’est avec cette présentation du très connu Mads Kristensen que j’ai terminé ma conférence. Il était là pour nous parler de comment Microsoft se positionnait pour offrir des outils de développement web adaptés aux façons de faire qui émergent dans l’industrie. Certains diront que l’utilisation de Sublime, NPM, WebPack, Bower, Gulp et Grunt n’est pas nouvelle. Microsoft continue quand même d’intégrer certains de ces outils dans Visual Studio.

Trucs et astuces

Ce qui est bien avec Mads Kristensen, c’est qu’il accorde beaucoup d’importance aux détails. Voici quelques trucs qu’ils nous a révélés :

  1. Le débogueur Javascript pour chrome est disponible et facilitera la vie de plusieurs.
  2. L’utilisation de l’outil TypeScript dans Visual Studio peut servir même si on ne fait pas de Javascript :
    1. L’activation de l’outil (V 2.x) permet entre autres de valider certaines erreurs comme l’oubli d’un point-virgule ou les variables non déclarées dans les fichiers .js.
    2. On peut aussi transpiler le code ES2105 vers ES5

Récupération des librairies

Microsoft travaille depuis un moment sur une extension à Visual Studio qui s’appelle Library Installer. Via un fichier Library.json présent dans le répertoire du site web, cet outils permet de récupérer une librairie de cdnjs, mais aussi de filtrer pour seulement obtenir les fichiers nécessaires. Si vous avez besoin de jQuery et non de son cousin jQuery UI ou si vous voulez récupérer seulement la version minifiée, cet outil permet de le faire. Il permet également de configurer l’emplacement de destination.

L’extension fonctionne avec un modèle fournisseur. C’est donc dire qu’il peut récupérer les fichiers de multiples sources différentes. Pour le moment, cdnjs et filesystem sont les deux seuls fournisseurs disponibles. Toutefois, la communauté s’empressera probablement de créer les autres fournisseurs rapidement.

L’extension sera intégré à Visual Studio 2017 de manière native dans les prochaines semaines.

https://github.com/aspnet/LibraryInstaller

Conclusion

Voilà ce qui met fin à mon séjour à la conférence Microsoft Build 2017. Ce fut une expérience inimaginable. La quantité de matière à absorber était impressionnante et l’ambiance formidable. Je souhaite un jour y retourner pour vous transmettre encore une fois l’information le mieux possible.

En espérant que vous avez apprécié!

Présentation du projet Rome

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

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

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

Bill_Buxton

+ appareils = + problèmes

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

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

Project Rome se compose :

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

Activités, cartes et ligne du temps

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

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

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

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

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

Développer avec le projet Rome

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

Ces SDK couvrent plusieurs aspects dont voici les principaux :

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

Les opportunités

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

Plusieurs types d’applications peuvent profiter du projet Rome :

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

Rome ne s’est pas fait en 1 jour

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

Rome_1jour

Microsoft Build 2017 – Jour 2

Encore plein de choses intéressantes ont été présentées lors de la deuxième journée de la conférence Microsoft Build 2017. Traitant de sujets un peu différents, voici ce que j’ai retenu.

Keynote 2

IMG_2013[1].JPG

Windows Story Remix

La présentation a débuté avec un élément inattendu : Microsoft Story Remix. Une application qui sera disponible dans la nouvelle version de Windows 10 : Fall Creators Update. Cette application permettra aux gens de créer des histoires à partir de contenu multimédia. Par ailleurs, il sera possible de le faire de manière collaborative. Par exemple, tous les parents d’une équipe de soccer pourront téléverser les images et les vidéos d’une partie pour en faire une histoire qui aura l’air d’une bande annonce d’un film d’Hollywood. On pourra même y ajouter de la réalité augmentée!!!

Voir le lien.

Annonces en vrac

Le Keynote a été parsemé d’annonces que je trouvais intéressantes de vous relater.

  1. iTunes sera disponible sur le Windows Store
  2. En plus d’Ubuntu, Suse et Fedora seront intégrés sur Windows
  3. Xamarin Live Player : nouvelle façon de déboguer les applications Xamarin sur les périphériques sans émulateurs (le détail plus loin dans l’article)

 

Réalité mixte

Pour ajouter à ses lunettes HoloLens, Microsoft a développé des « motion controllers » permettant d’interagir plus efficacement avec les éléments de réalité virtuelle. Par ailleurs, Acer fournira un ensemble comprenant un casque de réalité virtuelle ainsi que les « motion controllers » avant Noël 2017 pour seulement 400$ US.

La démo la plus surprenante pour moi, originaire du Québec, a sans doute été celle du Cirque du Soleil. Ils ont présenté comment ils ont utilisés HoloLens pour améliorer la conception des décors de leurs futurs spectacles.

Xamarin

IMG_2015.JPG

J’ai assisté à deux présentations Xamarin au cours de la journée. En résumé : un nouveau débogueur, partage d’éléments Xamarin et faciliter le développement.

Débogueur

Leur nouveau débogueur est des plus impressionnants. Il s’agit en fait du Xamarin Live Player. Contrairement à un émulateur, il faut jumeler notre téléphone ou tablette à Visual Studio. Ce faisant, l’exécution se fait sur le périphérique par connexion sans fil. Beaucoup plus rapide et plus intéressant que d’utiliser les émulateurs.

Partage d’éléments Xamarin

Grâce au projet embeddinator-4000, il est possible de compiler nos libraries Xamarin en éléments qui seront directement appelables par des application iOS ou Android développées en objective-C ou en Java. Par ailleurs, il sera possible d’utiliser des éléments Xamarin.Forms dans des composants Xamarin Native. Toutes ces nouveautés permettront beaucoup de nouvelles possibilités aux développeurs.

Selon ce qui a été présenté, il sera aussi possible d’exécuter des applications Xamarin.Forms et Xamarin Native sur Mac, UWP et WPF.

Faciliter le développement

L’annonce la plus importante de la journée autour de Xamarin et XAML est celle de XAML Standard 1.0. Cette spécification permettra d’unifier le XAML qu’on retrouve dans UWP et dans Xamarin.Forms. C’est cependant très embryonnaire, mais c’est définitivement à suivre. Voir le lien. Je me demande bien pourquoi WPF n’est pas dans la portée…

Plusieurs éléments ont été ajoutés aux outils pour faciliter la création d’application iOS (Certificats, création des profiles, etc.) pour éviter d’utiliser les portails web de Apple (Fastlane).

Typescript

IMG_2028[1].JPG

La conférence de Anders Heilsberg a fait le tour des nouveautés de TypeScript. La détection des variables non initialisées et la possibilité de spécifier si une variable peut être définie à null ou à undefined m’est apparue très pratique.

Pour ma part, je crois que Typescript devrait être utilisé en premier lieu et désactivé seulement lorsqu’il est vraiment requis de le faire. Je rêve d’un monde où on considèrera que le javascript sans typescript est l’équivalent d’utiliser le mot-clé unsafe en C#.

Conclusion

Il me resterait encore des choses à dire sur le machine learning, mais je le garde pour une prochaine fois. Entre temps, restez branchez pour le résumé de la troisième journée!

Microsoft Build 2017 – Résumé des conférences – Jour 1

La première journée a été bien remplie avec le Keynote impressionnant, les conférences multiples et le Hub à découvrir. Voici ce que je retiens de ma première journée.

Conférences

Navigating the AI Revolution

IMG_1972.JPGJe dois être franc, cette présentation n’a pas été la meilleure. J’ai eu du mal à saisir le propos. Je vous suggère donc de choisir autre chose à regarder si le coeur vous en dit.

Les présentateurs ont quand même expliqué ce qu’était le machine learning. Il faut le voir comme un enfant qui grandit. On ne peut pas dicter les comportements à adopter et être certain qu’ils seront respectés. Chaque enfant (et même chaque être humain) se forme son propre modèle de la réalité et interprète ce qui l’entoure en fonction des expériences qu’il a vécu. C’est un peu ce que le machine learning tente de faire avec les ordinateurs. On leur soumet différents intrants qui seront interprétés pour fournir un résultat conséquent.

Il a aussi été question d’une façon d’approcher le machine learning en utilisant les outils Microsoft. Il est recommandé de commencer avec les Cognitive Services qui sont des éléments de machine learning pré-configurés. Si vous êtes un Data Scientist, le Azure Machine Learning Studio est plus complexe, mais risque de mieux desservir votre besoin.

ASP.NET Core 2.0 Preview

Cette présentation était un incontournable pour moi afin de voir Scott Hanselman en personne. J’ai été ravi de la performance de cette légende dans le domaine. Pour ce qui est du contenu, voici en vrac ce que j’ai retenu.

IMG_1980.JPG

Performance

ASP.NET Core était déjà connu pour être très rapide et compétitif comme plateforme web se comparant à NodeJS et les autres. Les performances ont quand même été améliorées d’environ 25% pour ce qui est du débit des requêtes. En plus, le démarrage à froid a passé de 7 à moins de 1 seconde!

Razor Pages

Le concept des pages Razor est très intéressant. Pour certaines pages simples, il est parfois lourd de devoir créer un contrôleur, un modèle et une vue pour afficher quelques éléments. C’est à ce moment que les pages Razor entrent en jeu. On peut avoir dans un même fichier : la vue et le code. On pourrait croire que c’est le retour des Web Pages, mais il n’en est rien. En fait, le code qui se trouvera dans une page pourra être facilement déplacé dans un contrôleur si un jour le besoin s’en fait sentir. Comme le contrôleur est absent, quelques ajouts ont été fait pour permettre de configurer les routes à l’aide de l’instruction @Page. Vous pouvez voir tous les ajouts en suivant le lien.

Convention plutôt que Configuration

Beaucoup d’efforts ont été faits pour alléger le code nécessaire pour démarrer une application ASP.NET Core. Ainsi, toute la plomberie de configuration de l’hébergement de l’application et de Kestrel a été simplifiée pour favoriser les conventions. Suffit de créer un fichier appsettings.json dans le répertoire de l’application pour qu’il soit lu. Plus besoin d’instrumenter le code.

Packages de packages

Pour ceux qui suivent un peu .NET Core, vous aurez remarqué que la gestion des paquets NuGet est un travail plutôt lourd et fastidieux. Pour faciliter le tout, il est maintenant possible de référencer des super-packages dans le fichier csproj. On peut donc utiliser l’instruction PackageReference= »Microsoft.AspNetCore.All » pour obtenir l’ensemble des éléments nécessaires.

Visual Basic

Il est maintenant possible de créer des applications .NET Core avec Visual Basic .NET. (Pas ASP.NET Core pour le moment)

Comment utiliser ASP.NET Core 2.0?

Il est requis d’avoir un nouveau Visual Studio 2017.3 Preview. Il devra également être installé en côte-à-côte.

 

Snapshot Debugging And Profiling in Azure

IMG_1989.JPG

Debugging

Déboguer et profiler en production? Pourquoi pas!? Microsoft a créé un débogueur permettant de déboguer en production de manière non intrusive (Seulement pour Azure). Dans Visual Studio, les développeurs qui ont les accès nécessaires pourront définir des snappoints. Contrairement aux points d’arrêts, ils permettront de recueillir de l’information sur la pile des appels et les variables en mémoire sans interrompre l’exécution. Une fois que l’exécution rencontrera le snappoint, Visual Studio sera notifié et il suffira de télécharger les informations pour commencer à déboguer. On peut aussi récupérer des snapshot à partir des exceptions qui ont été journalisées dans Application Insights.

Combien de vous avez déjà dû déployer une nouvelle version de votre application pour ajouter seulement des nouveaux logs? Avec les snappoints, il est possible de les convertir en instructions de journalisation qui seront exécutées sur le serveur sans redéployer le code!

Profiling

Un profiler en production a aussi été présenté permettant de faire de l’échantillonnage pour un total de 2 minutes à chaque heure. Avec ces données, le profileur affiche l’arbre des appels en indiquant les pertes de temps les plus importantes. Tout ça est disponible dans le portail web de Application Insights.

Conclusion

Une première journée bien remplie! J’ai aussi assisté à la conférence Cortana Skills, mais je laisse le soin à Laurent de décrire plus en détails le sujet étant donné qu’il a assisté à plusieurs autres conférences autour du même sujet.

Beaucoup de choses nouvelles à apprendre mais, pour la plupart, ce sont des versions « preview ». Il faudra donc être patients!

Build 2017–Keynote d’ouverture

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

Grands pouvoirs = grandes responsabilités

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

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

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

Intelligent Cloud et Intelligent Edge

IntelCloudIntelEdge

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

Architecture de code sans serveur

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

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

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

Les services Azure et les démos

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

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

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

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

Laurent Docquir

Microsoft Build 2017–KeyNote Jour 1

Photo of Seattle skyline

J’ai la chance cette année d’assister à la conférence Microsoft Build 2017 à Seattle. La conférence du géant de l’informatique qui présente les dernières nouveautés en terme de plateforme et d’outils. Voyons un peu ce que j’ai retenu du premier Keynote.

Les Scotts

Après la présentation de Satya Nadella présentant la stratégie de Microsoft sur l’évolution des technologies, nous avons eu la chance de voir apparaître Scott Guthrie et Scott Hanselman. Il a avoué qu’il était difficile pour les développeurs d’apprendre tout ce qui émerge et encore plus de réussir à en tirer le plein potentiel. Pour ce faire, Microsoft compte bien fournir ce qu’il faut pour faciliter le travail.

Hanselman

Le dynamique présentateur a commencé par présenter l’arrivée de Azure Cloud Shell. Rien de moins qu’un shell Bash hébergé directement dans le portail Azure. Par ailleurs, il permet même d’utiliser un éditeur comme VIM, à condition de savoir comment le fermer :). Cette démonstration était encore plus impressionante avec la partie mobile. Une application mobile pour Azure (compatible iOS et Android) a été développée. Elle permet même d’utiliser le shell ! C’est donc une console préinstallée, pré-authentifiée et intégrée qui est maintenant disponible.

IMG_1953.JPG

Scott Hanselman a ensuite enchaîné avec la présentation de Snapshot Debugging pour Azure. Cet outil permet de déboguer en production ! Plus besoin de redéployer les binaires pour ajouter de la trace dans les logs ! Plutôt que de fonctionner avec le principe de breakpoints, on parle plutôt de snappoints qui effectuent un snapshot de la pile des appels et de la mémoire pour permettre aux développeurs de déboguer en différé. Il m’a même semblé voir une intégration de cela avec les code lens.

On a aussi annoncé la disponibilité des outils Azure dans Visual Studio for Mac et le lancement officiel de ce dernier.

Guthrie

Le vice-président exécutif a annoncé l’arrivée de nouvelles bases de données en mode SaaS. PostgreSQL et MySQL s’ajoutent à SQL Server. Il a aussi annoncer le Database Migration Service pour SQL Server qui est supposé rendre transparent la migration d’une base de donnée SQL Server dans le cloud. Un élément qui m’a semblé très intéressant est l’annonce de CosmosDB. Il s’agit en fait d’un renommage de DocumentDB et de son amélioration. Il est désormais possible de répliquer les données sur des multiples sites avec une latence presque inexistante. MongoDB, Gremlin Graph et les autres peuvent maintenant être répliquées sur plus d’une région Azure sans effort. Tout ça vient en plus avec un SLA plus généreux que la compétition (selon Microsoft).

IMG_1960

The Gu a aussi annoncé la disponibilité des outils de développement dans Visual Studio pour le développement et le débogage des Azure Functions.

IMG_1962

Il a terminé en invitant Julia White a présenter Azure Stack qui permet d’héberger son propre cloud sur site. Des exemples d’utilisation ont été présentées.

En terminant

Le reste du Keynote a été consacré à l’intelligence artificielle sous plusieurs facettes : reconnaissance vidéo, d’image, vocale; utilisation de bot intégrés dans Microsoft Teams et autres. Difficile de rester indifférent face à l’ampleur de la révolution que nous sommes en train de vivre. D’autres publications suivront!

Pour les autres détails présentés lors du Keynote comme les éléments sur l’intelligence artificielle, allez lire l’article de Laurent Docquir qui relate tout ce qui manque dans ce présent article.