Article écrit par Clément Alexandre
Après l’édition virtuelle de l’an dernier, Ouidou Nord a de nouveau envoyé une bien belle délégation à Varsovie où se tenait l’ElixirConf EU 2021. L’occasion de prendre la température de la communauté et des prochaines évolutions du langage et des différents outils.
N’installons aucun suspense : pas de killer feature en vue au niveau du langage, le leitmotiv c’est stabilité et évolution en douceur.
Varsovie
Partis tous les trois sans a priori particulier, nous avons unanimement apprécié la ville qui nous a offert une belle randonnée urbaine ainsi qu’une petite incursion dans la vie nocturne du quartier de Powiśle qui valait le détour : ici on ne fait pas la fête à moitié…
L’organisation de l’ElixirConf EU et rencontres avec la communauté
L’ElixirConf EU n’en est pas à son coup d’essai puisque c’est la 7e édition de l’événement qui nous était proposée. Équipes dynamiques et sponsors de qualité, voilà de quoi mettre dans les meilleures conditions un peu plus de 200 participants sur site (et à peu près autant à distance).
Ambiance studieuse et échanges courtois au programme.
Les talks
Sans détailler chaque talk, la liste en étant résumé sur le site officiel de l’ElixirConf EU, nous allons retranscrire les thèmes abordés et les notes que nous avons ramenées (celles-ci étant donc soumises à notre interprétation et peuvent ne pas exactement refléter les propos ou intentions des différents intervenants).
Keynote d’ouverture
Saša Jurić nous propose une approche communicative du code. En effet, on pourrait communiquer davantage à nos collègues à travers le code plutôt que les commentaires.
Il s’agit d’éviter tout bruit en se forçant à rédiger le code comme des phrases. Exemple avec les tests, on va privilégier le test des comportements plutôt que des algorithmes où aucune instruction intermédiaire ne devrait entraver la lecture des assertions.
De même, la spécification des paramètres et chaque méthode devraient être comprises lors de leur découverte dans un contexte parfaitement isolé.
CQRS / Eventsourcing
Là aussi quelques talks se sont inscrits dans le cadre de l’event sourcing et du CQRS.
Pour le premier, l’event sourcing était surtout un contexte, on nous proposait surtout de découvrir l’usage de macros en mettant en place un code qui soit dogmatique et introspectif, pour éviter toute abstraction et tout besoin de configuration : un consumer nommé UserCreatedConsumer
, sera automatiquement enregistré dans l’application et employé à consommer les évènements «UserCreated».
Ça peut sembler basique, mais dans une infrastructure complexe, cela peut faire la différence en termes de maintenabilité.
On a envie de s’intéresser à Broadway plus en détails !
Le deuxième talk prenait pour exemple un système de transaction bancaire, voici les slides très détaillés.
Enfin, petit coup de cœur pour le talk «Love your crash dumps» (slides ici) qui fait un usage de l’incroyable outil Livebook pour visualiser confortablement l’état précis d’un système au moment de son crash.
Pour ce faire, il parse le crash dump de la machine virtuelle, qui n’est rien d’autre qu’une capture à l’instant T des informations de la VM qu’on peut d’ailleurs interroger et mettre en forme à tout moment.
Les résultats construits en quelques minutes sont pertinents vis-à-vis des outils d’analyse déjà existants sur la plateforme Erlang et Livebook rend l’approche très ludique.
Building a real-time collaborative editor with Phoenix
Sheharyar Naseer s’est proposé de nous montrer comment écrire, en Phoenix, un éditeur collaboratif simpliste mais capable de synchroniser les différentes occurrences en temps réel de manière efficace.
Cet éditeur se base naturellement sur les fonctionnalités offertes par OTP et les fonctionnalités de PubSub livrées avec Phoenix.
Le plus gros défi était de pouvoir s’assurer que les modifications d’un utilisateur ne viennent pas écraser les modifications qu’un autre utilisateur aurait faites entre temps. Il fallait donc mettre en place un serveur de document capable de rejouer les modifications dans le bon ordre pour tout le monde.
Pour ce faire, plutôt que d’envoyer l’ensemble du contenu d’un utilisateur après chaque modification à travers les websockets, Sheharyar a utilisé une bibliothèque créée pour l’occasion permettant de générer des deltas optimisés qui ont pour avantage de n’envoyer que le strict minimum pour appliquer la différence. C’est donc plus sûr et aussi moins gourmand en termes de bande passante.
Vous retrouverez les slides ici.
Going Multi-Node with ExUnit
Devon Cestes nous explique qu’il a eu besoin d’optimiser une suite de tests qu’il trouvait trop lente. Pour ce faire il a commencé par la paralléliser puis l’a distribuée pour accélérer son exécution.
Il n’y est pas allé par quatre chemins puisque pour arriver à son but, il a décidé de monkey-patcher la bibliothèque de tests ExUnit.
Il commence par nous montrer les résultats de sa suite de tests de départ, puis exécutés en parallèle et finalement en mode distribué.
Une des parties les plus intéressantes était l’explication sur comment il est possible de distribuer le code métier et de test sur les différents nœuds.
Les gains de performances sont, comme vous devez vous en douter, très significatifs.
Exercism.org V3
Vous connaissez certainement déjà la plateforme exercism.org pour y avoir passé pas mal de temps à parfaire vos connaissances de développeurs. Si cela n’est pas le cas voici une bonne description du service (directement extraite de la documentation officielle):
Exercism est un projet open source, à but non lucratif, construit par des personnes de tous horizons. Avec plus de cent mainteneurs dévoués et des milliers de contributeurs, notre objectif est de créer la meilleure plateforme gratuite d’apprentissage du code sur le web.
Depuis début 2020, l’équipe travaille sur une nouvelle version de la plateforme, la V3, sortie le 1er septembre 2021. Pour cette occasion Angelika Tyborska (une des contributrices du track elixir) est venue nous en parler pendant l’ElixirConf. Vous pouvez retrouver les slides du talk relatif à Exercism.
Pour vous faire un résumé rapide, voici les points forts de cette nouvelle version qui nous poussent à en parler et à vous la conseiller :
- plus de 55 langages supportés dont Elixir bien sûr
- un éditeur web avec système d’audit et de
linter
du code automatisé (ce qui évite l’attente des retours des mentors) - une formation complète et hiérarchisée par langage (ce n’est plus juste des exercices)
- une UI/UX vraiment agréable (ce point est vraiment subjectif mais important à mentionner)
- une cohérence entre la formation théorique et l’accès aux exercices
- possibilité de choisir entre l’utilisation du CLI dédié ou le web
Je vous laisse le soin de découvrir cette plateforme qui va vous permettre d’apprendre ou de perfectionner l’usage d’un nouveau langage.
Doing weird things with Ecto
Nikola Begedin commence sa session en nous expliquant que l’équipe d’Ecto a vite détecté qu’une sous partie d’Ecto pourrait être utile dans des situations où aucune base SQL n’est utilisée. C’est pourquoi ils ont séparé la partie purement SQL (ecto_sql) de la partie qui gère les schémas et les validations (ecto).
On peut donc utiliser Ecto pour valider des données qui ne viennent pas ou n’iront pas dans une base SQL.
Nikola nous présente donc comment faire du nettoyage et de la pré-validation de paramètres sans être rattaché à une table SQL où il utilise Ecto.Schema
pour gérer des schémas embarqués et Ecto.Changeset
pour les validations.
Il continue avec une utilisation dans le contexte d’une base de données où les opérations à effectuer sont complexes de par la manipulation de nombreuses données et où il est difficile de tout faire en une seule requête.
Pour gérer ce genre de cas, Nikola nous montre qu’il est possible, à travers Ecto, d’utiliser des tables temporaires en coordination avec Ecto.Multi
.
Il souligne ensuite la puissance des macros pour mettre en œuvre des requêtes, notamment pour gérer des systèmes de filtres dynamiques. C’était selon moi la partie la plus intéressante de cette présentation et j’utiliserai certainement la technique présentée à l’avenir.
Vous pouvez trouver les slides ici.
The pillars of Metaprogramming in Elixir
Elixir est un langage qui se base très largement sur la méta-programmation. En tant que développeur Elixir, on utilise ces macros au quotidien sans même y faire attention, par exemple en utilisant Ecto ou encore Plug.
Adi Iyengar nous montre en quoi Elixir est un langage dynamique et comment les macros peuvent nous faciliter le développement au quotidien.
On y voit les usages les plus basiques, les bonnes et mauvaises pratiques pour finir sur les exemples les plus avancés. Au passage on a le droit à quelques explications sur la gestion de l’AST.
On ressort de cette présentation en sachant que les trois piliers de la méta-programmation en Elixir sont les quoted literals, les macros et les callbacks déclenchés à la compilation.
Debugging Elixir Code – The Tools, The Mindset
Michał Buszkiewicz commence sa présentation en expliquant que le debugging est inévitable. Il nous présente d’abord les différents outils disponibles dans l’éco-système Erlang / Elixir, leurs forces et faiblesses.
Ces outils sont l’observateur, le traçage de messages et d’appels de fonctions et le debuggueur pas à pas en ce qui concerne le monde Erlang.
Pour le monde Elixir, on aura les mêmes outils que pour l’écosystème Erlang mais aussi IEx.pry
, IEx.break!
, le bon vieux IO.inspect
et le dashboard Phoenix.
Venant de Ruby, il nous montre comment il faisait pour venir facilement inspecter une partie du code qui pouvait venir d’une bibliothèque tierce. Sa technique consistait à monkey-patcher l’endroit du code qui l’intéressait pour y ajouter un appel à pry
puis revenir au code initial grâce à super
.
Selon lui, chacun de ces outils présente des aspects intéressants et l’idéal serait de les avoir tous en un. Quand on développe en Elixir, on passera souvent par Pry
qui n’est pas réellement un debugger pas à pas.
Le reste de sa présentation va donc consister à nous montrer comment IEx peut être enrichi pour offrir des fonctionnalités de debug plus avancées. Ses ajouts relèvent du hack mais prouvent qu’on peut encore faire avancer cet outil pour qu’il nous soit encore plus utile au quotidien.
Vous pourrez trouver les slides avec tous les détails ici
Keynote de clôture
Pour clôturer cette ElixirConf, c’était José Valim (le créateur du langage) au micro dans le rôle de l’animateur.
Il transmettait les questions du public et y répondait avec Chris McCord (le créateur du framework web Phoenix qui était lui en direct des USA).
Pas grand-chose à se mettre sous la dent : aucune nouvelle fonctionnalité en vue pour le langage Elixir ! L’ambition est de capitaliser sur la stabilité de son API, et de gagner en temps de compilation et en outillage d’analyse de code pour aider au débuggage, ou encore de réduire la codebase en supprimant petit à petit les dépréciations.
Du côté de Phoenix, on accueille la release 1.6, avec le templating HEEx par défaut (il permet l’écriture des templates sous forme de composants, voir l’annonce ici), les générateurs d’authentification, et on regarde en direction de la release 1.0 de LiveView.
Petit sondage pour terminer sur un sujet sensible : les participants veulent en majorité une plus grande intégration du typage dans le langage ; c’est là qu’on voit que la communauté n’est pas / plus spécialement issue du monde de Ruby…
Pour avoir du nouveau contenu dans l’écosystème Elixir, c’est donc bel et bien les outils et des librairies (Elixir Nx) qu’il va falloir suivre de près !
On se dit à l’an prochain à Londres pour l’ElixirConf EU 2022 et à tout de suite pour l’ElixirConf US les 12 et 13 octobre prochains.