Le Post Infeeny

Les articles des consultants et experts Infeeny

Retour sur la conférence NCRAFTS 2014

Pendant que certains de mes collègues participaient au hackaton organisé par Microsoft pour l’évènement //publish, j’ai pour ma part eu le plaisir de me rendre à la première édition de la conférence NCRAFTS organisée le 16 mai dernier par l’association ALT.NET. Cette association promeut les solutions alternatives en .NET et une vision du développement informatique axée autant sur l’artisanat que sur l’ingénierie. Je vous propose donc un compte-rendu de ce que j’ai pu glaner au cours des session auxquelles j’ai pu assister.

Session de Robert Pickering – « F# Type Providers, the future of meta-programming in .NET »

Cette session était centrée sur la présentation et l’utilisation d’une nouveauté de F# 3.0 : les Type Providers. Ça peut paraître peu pour une session entière, mais c’était néanmoins plutôt intéressant, d’autant que Robert sait expliquer les choses clairement.

Les Type Providers sont des classes implémentant l’interface ITypeProvider qui vont permettre d’injecter dans le compilateur F# de nouveaux types. Cela permet de pouvoir manipuler des formats de données ou d’autres langages sans avoir à passer par de la génération de code ou de la réflexion.

Un exemple sera plus parlant. Imaginons que vous souhaitez ouvrir un fichier CSV. La méthode la plus simple et élégante que je connaisse est d’utiliser le paquet NuGet CSVHelper. Cette librairie vous permet de mapper un fichier CSV vers des POCOs. Ça se fait sans douleur, mais vous devez néanmoins créer vous-même les classes représentant les données, ainsi que les classes de mapping qui vont indiquer à CSVHelper comment lire les données.

En F#, vous pouvez vous épargner tout ce code grâce aux Type Providers. Pour cela il vous suffit d’implémenter un Type Provider sachant analyser la structure d’un fichier CSV et générer automatiquement le modèle objet correspondant. Les exemples de Robert laissaient penser que c’était relativement complexe, mais certainement moins que de créer sa propre implémentation de LINQ. Une fois votre implémentation créée, il vous suffit de la faire pointer vers votre fichier CSV, vous aurez alors accès au contenu de celui-ci à travers des types pré-générés, et pour lesquels vous aurez même droit à l’IntelliSense.

A l’usage, ça donne ça :

#r "../../../bin/FSharp.Data.dll"
open FSharp.Data

let cities = new CsvProvider<"../data/my-file.csv">()

for city in cities.Rows do
  let cityCapital = city.Capital

La beauté de la chose est que vous pouvez ré-utiliser votre provider avec tous les fichiers CSV imaginables. Des paramètres vous permettent d’indiquer les éléments de configuration éventuels (séparateur virgule ou point-virgule). Microsoft fourni déjà dans l’assembly FSharp.Data un certain nombre de providers clef-en-main. Par exemple pour lire des données provenant de SQL Server, du JSON, ou du OData, mais aussi pour s’interfacer avec des langages comme JavaScript, TypeScript ou R.

Robert a d’ailleurs fait une démonstration sur le langage R, mais j’avoue n’y rien connaître et n’avoir pas tout saisi. Je vous laisse vous documenter si ça vous intéresse.

Autre détail intéressant, Robert a fait une démonstration du provider JSON, et a expliqué que celui-ci faisait de la résolution de type intelligente. Si par exemple vous avez une collection d’objet, et qu’une certaine propriété de ces objet a parfois la valeur « 3 », et parfois la valeur « 12.6 », le provider va naturellement définir le type de cette propriété comme étant un decimal.

Dernière démo : Robert avait conçu sa propre implémentation du fameux test « FizzBuzz » avec un Type Provider. A l’usage, il avait accès à un type déroulant les chiffres de 1 à… potentiellement l’infini. Chaque type contenait une seule propriété correspondant soit au chiffre suivant, soit évidemment au fameux principe de ce test.

1.2.Fizz.4.Buzz.Fizz.7.8.Fizz.Buzz.11.Fizz.13.14.FizzBuzz.16

Évidemment pouvoir faire tout ça en F# est intéressant, mais ce serait aussi utile à nous autres développeurs C#. Justement la session suivante était consacrée à Roslyn, et j’ai profité de la séance de questions/réponses pour demander au conférencier si ce nouveau compilateur permettrait de reproduire les Type Providers dans notre langage favori. La réponse est non, car pour permettre cette fonctionnalité, il faut pouvoir participer à la compilation du code afin d’injecter les nouveaux types directement dans le compilateur, ce que Roslyn ne permet pas, du moins pour l’instant.

Session de Jean-Baptiste Evain – « Real World Roslyn »

Jean-Baptiste a participé au développement de Mono, a écrit lui-même Mono.Cecil, et a fondé sa propre société de création d’outils pour nous autres développeurs : Syntax Tree. Il connaît donc plutôt bien le fonctionnement du compilateur .NET. Sa session était consacrée à la présentation du nouveau compilateur « Roslyn », qui pour rappel est maintenant 100% open-source.

Pour vous dire la vérité, j’avais déjà assisté à cette même session qu’avait déjà donné Jean-Baptiste pour ALT.NET il y a deux ans de ça. Ce n’était pas exactement une redite néanmoins, puisque Jean-Baptiste a fait une démonstration de ce que Roslyn permet de faire en matière de diagnostique et de correction de code. Par exemple, vous pouvez utiliser Roslyn pour analyser une solution, détecter et afficher à l’utilisateur la présence d’un défaut dans son code (en soulignant celui-ci) et lui proposer de réparer celui-ci automatiquement. On peut imaginer de nombreux usages pour ce type d’outil. Jean-Baptiste a notamment évoqué la possibilité de distribuer dans les paquets NuGet du code permettant de monter automatiquement en version, en corrigeant l’emploi de méthodes obsolètes provenant des précédentes versions du paquet, ou encore de distribuer des tutoriels permettant d’apprendre en « live » comment utiliser une librairie.

Bien sûr, Roslyn venant tout juste de sortir en version définitive, tout cela n’est que pure conjectures, mais on sent déjà un intérêt important de la communauté à l’égard de ce nouveau compilateur. Notez aussi que la longue gestion du projet (environ 5 ans) est due au fait que Microsoft a dû s’assurer que n’importe quel code C# donnerait le même code MSIL en étant passé à la moulinette de l’ancien comme du nouveau compilateur.

En plus de la question sur les Type Providers en F# évoquée plus haut, Jean-Baptiste a bien voulu répondre à d’autres questions que je me posais depuis longtemps sur Roslyn. Notamment, il m’a expliqué que ce nouveau compilateur fonctionnait avec toutes les précédentes versions de C#, et qu’il était possible d’indiquer avec un paramètre laquelle on souhaitait viser éventuellement. A partir de maintenant, ce nouveau compilateur devrait être le seul à être mis à jour par les équipes de Microsoft, aux dépends de l’ancien, bien que les deux co-existeront pendant encore quelques temps. Enfin, je n’avais jamais très bien compris le principe selon lequel Roslyn est un « compilateur C# développé en C# ». C’est un peu comme la poule et l’œuf : qui est arrivé en premier? En fait, il s’avère que la version initiale de Roslyn a dû être compilée avec l’ancien compilateur C# (qui lui-même en son temps avait dû être compilé avec le compilateur C++) jusqu’à ce qu’il soit « auto-suffisant » et puisse se compiler lui-même.

Une session très intéressante donc, avec quelqu’un qui maîtrise particulièrement bien son sujet.

Session de Simone Chiaretta et Hugo Lattanzi – « Katana + Owin »

Il y a quelques jours a été annoncé le contenu de la prochaine livraison d’ASP.NET, appelée la vNext. Cela tombe bien, car cette session présentée par les deux italiens Simone et Hugo, avait pour thème Katana et Owin, qui sont amenés à devenir deux pierre angulaires du futur d’ASP.NET.

J’avais déjà eu l’occasion de me documenter pas mal sur le sujet, donc ça relevait plutôt d’une révision, mais j’ai apprécié la manière dont les deux conférenciers ont présenté le découpage du pipeline ASP.NET, à savoir Host/Server/Middleware/Application. C’était très clair et bien que ces technologies ne soient pas encore beaucoup exploitées, on comprenait bien leur intérêt. En l’occurrence, elles vont permettre de gérer un serveur web, Katana, plus léger qu’IIS, permettant de mieux monter en charge. La communauté pourra aussi plus facilement déployer de nouveaux plugins. A titre d’exemple, pour utiliser les Web Sockets avec IIS, il faut obligatoirement disposer au minimum de la version 8 de celui-ci, et donc de Windows Server 2012. Katana , qui est opensource et dont le code est disponible sur CodePlex, est donc plus ouvert qu’IIS qui est très monolithique.

Qu’on ne s’y trompe pas : IIS va bien sûr continuer à exister, mais Microsoft commence à mettre en place les briques qui lui permettront dans le futur de mettre à jour plus facilement ses assemblies, de les déployer grâce à NuGet, et de permettre à la communauté de développer plus facilement des plugins.

Seul petit regret, qu’Helios n’ait pas été évoqué. Ce projet de Microsoft, pour l’instant certes très confidentiel, vise à sortir la DLL System.Web du Framework .NET afin de permettre de mettre à jour la pile web plus facilement et surtout plus rapidement. En effet, celle-ci est pour l’instant liée au framework, tant et si bien qu’il faut attendre une mise à jour complète de celui-ci pour bénéficier de nouveautés ou de patchs.

Session de Jérémie Chassaing – « DDD + Event Sourcing + F# »

Jérémie nous a fait une grosse démo d’implémentation du célèbre jeu de cartes UNO, développée en F#, et en appliquant les principes du Domain Driven Design (DDD) et de l’Event Sourcing. C’est surtout ce dernier pattern qui m’intéressait car je n’en avais jamais entendu parler, alors qu’il a été évoqué à deux reprises pendant cette conférence NCRAFTS.

C’est assez difficile de faire un compte-rendu de cette session qui était composée quasi intégralement de code. Le mieux je pense est d’aller consulter celui-ci lorsque Jérémie le rendra disponible, ce qui ne saurait tarder. Comme il l’a expliqué, le F# est un langage qui s’applique bien au DDD, et qui permet de construire des systèmes assez complexes avec relativement peu de lignes de code.

Nous avons tout de même eu droit à une présentation rapide de l’Event Sourcing, Jérémie faisant une distinction entre celui-ci et ce qu’il appelle le Common Sourcing. Son implémentation était différente de celle que suggère Martin Fowler sur son site, et d’après lui, plus simple et plus souple. Ce que j’en ai compris, l’Event Soucing consiste à stocker dans un « Event Store » des évènements représentant les différents stades par lesquels a pu passer une entité, afin notamment de pouvoir reproduire son état à un moment T. L’implémentation ressemble en fait beaucoup à ce que font les bases de données traditionnelles avec leur journal transactionnel : elles stockent les requêtes en écriture au fur et à mesure qu’elles arrivent, et les appliquent sur les données dans un second pipeline, ceci de manière à garantir leur intégrité.

Une session à creuser donc, qui mettait en évidence le goût de la communauté pour le DDD, le F#, et donc l’Event Sourcing.

Session de Greg Young – « Polyglot Data »

Dernière session de la journée, plus généraliste car davantage orientée « retour d’expérience ». Le site de la conférence NCRAFTS présentait la photo d’un Greg Young en costume fraîchement rasé, aussi quelle ne fut pas ma surprise de voir débarquer ce grand gaillard tatoué, et pour le coup, pas du tout rasé. Mais ce que j’ai particulièrement apprécié, c’est qu’il a du charisme à revendre : sa session allait vite et on ne s’ennuyait pas un seul instant.

Greg est lui aussi un apôtre de l’Event Sourcing, mais aussi du CQRS. Il nous a fait remarquer que les bases de données sont généralement optimisées pour améliorer les performances sur l’écriture, alors que l’écrasante majorité des systèmes effectuent beaucoup plus de lecture, souvent selon un facteur de cent contre un (au minimum). Il a aussi expliqué qu’on parle beaucoup des bases de données NoSQL ces temps-ci (et a taclé MongoDB au passage), mais qui se souvient encore des bases orientées Objet apparues il y a une quinzaine d’années? Personne. Parce qu’à l’usage il s’est avéré que ces bases étaient très douées pour manipuler un modèle objet, mais pas du tout pour permettre la génération de rapports, qui est pourtant un besoin très courant. Sa conclusion : les différents types de bases de données ont toutes des avantages et des inconvénients, et il convient de bien choisir celle ou celles qui seront les plus adaptées à nos besoins. D’ailleurs il prêche l’utilisation de différentes bases de données sur un même projet, car il est aujourd’hui très courant d’avoir des besoins assez différents à traiter, que ce soit sous forme de modèle relationnel, ou de graphe d’objets.

Côté Event Sourcing, il a démontré que ce pattern s’appliquait bien sur les projets nécessitant du message queuing, notamment pour remplacer avantageusement MSMQ. Mais ce n’est pas vraiment ma partie et je ne saurais pas vraiment vous restituer sa réflexion.

Je ne connaissais pas Greg mais il semble assez célèbre dans la communauté .NET, et il donnait à la suite de la conférence un workshop de trois jours consacré au DDD/CQRS. Au vu de cette session je pense que ça valait largement le coup d’y assister.

Conclusion

A l’issue de cette journée, mon premier constat est qu’il semble que la mode soit aux présentations PowerPoint dessinées à la main, n’utilisant pas les templates standards, et avec beaucoup d’illustrations plein écran. 🙂

En dehors de ça, certaines tendances bien résumées par la session de Greg Young ressortaient clairement de cette conférence. La communauté alternative des développeurs .NET (comprendre : qui cherche à sortir du « happy path » proposé par Microsoft) a pris goût au DDD, semble penser que la programmation fonctionnelle proposée par F# va prendre de plus en plus d’importance, et que l’Event Sourcing est une solution élégante à beaucoup de problèmes de gestion transactionnelle.

Une autre session à laquelle je n’ai malheureusement pas pu assister portait sur les monoïdes, et d’après les retours que j’ai eu, il semble qu’elle ait reçu un assez bon accueil. Renseignez-vous donc sur le sujet. Le workshop intitulé « Event Storming », portant sur une technique d’analyse de domaine métier, a aussi eu d’assez bonnes appréciations.

Je félicite les organisateurs Rui Carvalho et Radwane Hassen ainsi que toute leur équipe pour cette conférence qui s’est avérée pour ma part très enrichissante, et j’espère qu’ils remettront ça très vite. En attendant, n’oubliez pas que l’association ALT.NET organise régulièrement des conférences (vous pouvez d’ailleurs leur proposer des sujets) ainsi que des « coding breakfast » environ une fois par mois qui sont l’occasion de se challenger et d’apprendre de nouvelles techniques de programmation.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :