Elixir & Phoenix en français
Des articles en français sur Elixir, Phoenix, LiveView, Ecto et OTP.
L’écosystème Elixir est riche en contenu anglophone et presque vide en français : c’est ce trou que ces articles essaient de combler, en partant de problèmes concrets rencontrés en écrivant du code.
Ce blog accompagne un dépôt de ressources et de notes : liste de librairies commentée, parcours d’apprentissage, glossaire FR ↔ EN et Livebooks exécutables.
Articles
-
Arrêter de déboguer avec des Logger.info : iex, IO.inspect, dbg, pry
Il existe un réflexe universel, et il est mauvais : Logger.info("panier = #{inspect(panier)}") Trois défauts, qu’on ne voit pas tant qu’on n’a pas essayé autre chose. Il casse le pipe — il faut sortir la valeur du ... -
La liste chaînée n'est pas le mauvais outil, c'est la matière première
Un précédent article posait le problème : une liste chaînée est lente en accès par index, et un vecteur y répond mieux. En le partageant sur l’Elixir Forum, j’ai reçu deux réponses qui déplacent la question — :queue e... -
Des tests concurrents avec une base de données : comment, et jusqu'où
Dans la plupart des langages, faire tourner une suite de tests en parallèle contre une base de données relève de l’acrobatie : bases séparées, schémas dédiés, verrous, nettoyage entre chaque test. Beaucoup d’équipes y... -
« Let it crash » ne veut pas dire ce que vous croyez
Vous avez lu la formule dix fois. On la sort à chaque discussion sur Elixir, souvent en haussant les épaules, comme une excentricité de la BEAM : « let it crash », laissez planter. Et presque toujours, elle est compr... -
Les hooks JavaScript de LiveView : la frontière et ses règles
LiveView tient une promesse rare : construire une interface réactive sans écrire de JavaScript. Elle tient presque toujours — et puis vient le jour où il faut du glisser-déposer, une carte, un éditeur de texte riche, ... -
Les pannes silencieuses de LiveView
Un bug qui plante est un bug facile. Il y a une erreur, une trace, un fichier, une ligne. On ouvre, on corrige. Les pires sont ceux dont l’information se perd en route. Tantôt le serveur n’a rien vu passer et les jou... -
L'immutabilité ne coûte pas ce que vous croyez
C’est l’objection réflexe de quiconque arrive d’un langage impératif. On explique qu’en Elixir les données sont immuables, qu’ajouter un élément à une liste de dix mille entrées produit une nouvelle liste — et l’inter... -
Structurer un projet Elixir : ce que le compilateur ne vérifie pas
Créez un projet, mettez le module MonApp.Comptes dans lib/nimportequoi.ex, compilez. Ça marche. Renommez le fichier en zzz.ex, recompilez. Ça marche encore. C’est déroutant quand on vient de Ruby ou de Python, où le ... -
Brancher un notebook sur une application qui tourne
Quelque chose ne va pas en production. Les journaux montrent le symptôme sans la cause. Vous ouvrez un iex distant, vous tapez une ligne, puis une autre, vous remontez dans l’historique, vous perdez le fil. Une heure ... -
Un outil interne en trente lignes, dans un notebook
Vous ouvrez iex, vous tapez dix lignes pour interroger une API ou compter des lignes en base, vous lisez la réponse dans un IO.inspect, vous fermez le terminal. Le lendemain, il faut tout retaper. Et le collègue à qui... -
Le HTML en base de données est un piège
Votre application a besoin d’un champ de texte riche. Du gras, des listes, des liens, quelques images. Vous branchez un éditeur, il vous rend du HTML, vous le passez dans un filtre à balises et vous le rangez dans une... -
Aja : quand la liste chaînée n'est plus le bon outil
En Elixir, [1, 2, 3] n’est pas un tableau. C’est une liste chaînée : trois cellules, chacune contenant une valeur et un pointeur vers la suivante. Cette structure a des qualités immenses — elle est immuable à moindre ... -
Composer des requêtes Ecto : la fonction qui prend une query et en renvoie une
En Ecto, from(a in Article, where: a.publie == true) ne parle à personne. Ça ne touche pas la base, ça n’ouvre pas de connexion : ça construit une struct Ecto.Query. Le SQL n’est produit qu’au moment du Repo.all. Ce ... -
Lire une stacktrace Elixir sans paniquer
Un mur de texte rouge dans le terminal, c’est intimidant les premières fois. Puis on réalise qu’une erreur Elixir a toujours exactement la même forme, et que le type d’erreur oriente à lui seul l’essentiel du diagnost... -
Les streams LiveView : arrêter de garder 500 lignes en mémoire
Vous affichez un flux d’activité, une table de résultats, une liste de messages. Le réflexe LiveView, c’est assign(socket, :articles, Blog.liste_articles()). Ça marche parfaitement — et ça coûte plus cher qu’on ne le ... -
Ecto.Multi : composer une transaction sans se noyer dans les with
Créer un utilisateur, lui créer un profil, l’inscrire à une newsletter. Trois écritures qui doivent réussir ensemble : s’il en manque une, on ne veut aucune des trois en base. Le réflexe, quand on arrive d’un autre la...