• Une Extension Turtle pour l’IDE Zed

    Je viens de publier la première version d’une extension Zed pour le format Turtle.

    Zed ?

    Zed est un éditeur de texte / IDE très cool créé par les créateurs d’Atom et Tree-Sitter. Il est écrit en Rust et a attiré mon attention parce qu’il est très très léger, il a des keybindings Vim, JetBrains, VSCode, Helix et Emacs et un bon système d’extensions. Il a de multiples avantages (du moins à mon avis) sur la concurrence. Il s’appuie sur les points forts d’autres IDE tout en étant très agréable à utiliser. Il intègre des fonctionalités de pair-programming et de développement à distance nativement, ce qui est très pratique.

    Plus important encore, il n’est pas détenu par une entreprise dirigée par des multimilliardaires soutenant le fascisme qui finira par arrêter le développement ou mettre le produit derrière un paywall une fois que le monde entier y sera accro. Et oui, il propose de l’IA, les MCP et l’édition agentique si c’est votre truc, mais c’est quelque chose que vous pouvez désactiver, ce que j’ai fait.

    Zed est petit à petit en train de me faire oublier Emacs (et c’est pas rien). Vous devriez vraiment l’essayer. Arrêtez de lire ceci et téléchargez-le !

    Turtle ?

    C’est le format de fichier RDF que j’utilise beaucoup au travail. Il rend les triplets de graphe RDF dans un format lisible, le rendant plus facile à gérer que le RDF/XML brut ou les autres formats de fichiers de web sémantique JSON-LD.

    Continuer la lecture   

  • Installer Ghost avec Podman sur un VPS

    J’ai récemment migré ce site web / blog de Jekyll vers Ghost, juste pour l’essayer après avoir entendu beaucoup de bonnes choses à son sujet récemment.

    J’avais ce petit VPS personnel sous la main, j’ai donc décidé de lui donner un peu d’espace là-bas, et d’utiliser Podman (et sa fonctionnalité quadlets) pour le configurer. Cela exploite Systemd pour exécuter vos images docker. Voici un guide rapide, si quelqu’un est intéressé :

    Évidemment, vous avez besoin d’un VPS avec accès SSH. Son pare-feu doit être ouvert au web sur le port 443. Mon VPS fonctionne sous Ubuntu, donc mes commandes d’installation prennent en compte ce contexte. J’ai également choisi d’utiliser le mode root pour exécuter les quadlets, mais d’autres options sont possibles.

    Continuer la lecture   

  • Introduction à Barley, le sérialiseur éclair

    Les origines

    L’entreprise pour laquelle je travaillais avait une API vieillissante en v1 qui était très mal conçue et lente dans son implémentation. Elle servait 4 plateformes frontend (un site web, deux applications mobiles et un outil d’administration). Étant dans un environnement de startup, notre équipe devait aller vite, mais c’était au détriment de la performance et de la maintenabilité. C’était la situation quand je suis arrivé.

    Retourner des objets JSON était très fastidieux. On utilisait une méthode custom disponible dans chaque modèle qui construisait un Hash imbriqué, basé sur les attributs que vous lui donniez. C’est vite devenu un vrai bordel à gérer avec de mauvaises performances et des implications de sécurité préoccupantes. C’était difficile à maintenir, le nommage des variables et le comportement de la fameuse méthode étaient étranges, et donc nous avons entrepris de nous en débarrasser et sommes passés à une sorte de DSL de sérialiseur qui a été progressivement introduit pour remplacer l’usine à gaz.

    Plus tard, nous avons décidé de refactorer notre API avec une nouvelle version pour nous débarrasser de cet encombrante dette technique. Quelques exigences ont rapidement émergé, parmi lesquelles :

    • L’API V2 devrait être facile à maintenir, avec des conventions de nommage claires et un namespacing
    • Puisqu’il s’agit d’une API interne, elle devrait être étroitement couplée à l’utilisation et à la plateforme prévues
    • L’API V2 devrait utiliser une sorte de DSL de vue pour générer les payloads JSON
    • L’API V2 devrait être aussi prévisible que possible en termes de typage et de formatage
    • L’API V2 devrait être super rapide par défaut. Ce devrait être la dernière chose que nous devons optimiser
    Continuer la lecture   

  • Travaillez pour la réussite de votre manager

    En tant que développeurs logiciels, nous sommes constamment chargés d’estimer le temps qu’il faudra pour accomplir des tâches ou livrer une fonctionnalité. Cependant, estimer le temps et l’effort requis pour le développement logiciel est notoirement difficile. L’imprévisibilité des défis techniques, les exigences changeantes et les obstacles imprévus signifient souvent que nos meilleurs efforts pour estimer peuvent encore mener à la frustration quand les choses ne se passent pas comme prévu.

    L’idée d’écrire cet article m’est venue en lisant le livre de Robert C. Martin The Clean Coder, dans lequel il explique que les estimations sont intrinsèquement imprécises. C’est particulièrement vrai dans l’industrie logicielle, où les problèmes sont souvent complexes et les obstacles que nous rencontrons sont, par essence, imprévisibles. Bien que nous puissions avoir une idée approximative du temps qu’une tâche prendra, il n’y a aucun moyen de prévoir toutes les complications qui pourraient survenir en cours de route.

    Cependant, ce que font les vrais professionnels, par opposition à simplement estimer, c’est s’engager sur des délais. Selon Robert C. Martin, bien que nous puissions estimer en interne, nous devons également nous engager sur une date ou un délai spécifique. Ce niveau de responsabilité nécessite maturité et responsabilisation. C’est une chose de donner une estimation, mais c’en est une autre de s’engager sur une date, connaissant les défis qui nous attendent. C’est cet engagement, plutôt qu’une simple estimation, que nous, en tant que développeurs logiciels, devons apprendre à maîtriser.

    Continuer la lecture   

  • Du chaos à la clarté : Mon parcours avec le TDAH, TickTick et PARA

    J’ai un TDAH.

    Si vous voulez en savoir plus sur ce que c’est, regardez cette vidéo en anglais. L’idée, c’est que mon attention ne fonctionne pas comme celle de la plupart des gens. Elle est soit dispersée dans mille directions, soit concentrée au laser sur un sujet.

    Je suis le genre de personne qui va au magasin pour du lait et rentre chez lui sans - pas parce que je suis stupide, fatigué ou distrait. Ce n’est pas ponctuel ; j’ai un trouble de l’attention.

    Le défi

    Ce trouble impacte plusieurs domaines de ma vie de manière importante. J’ai du mal à changer de contexte, à planifier à l’avance et à prendre des décisions dans certaines situations.

    Avant d’être diagnostiqué, je savais que je manquais des compétences organisationnelles que je voyais chez les autres. Je ne semblais pas pouvoir finir les choses, du moins pas à long terme. Je pensais que j’étais paresseux et j’attribuais ma procrastination à cela. Mais voilà le truc - je ne suis pas paresseux. Je travaille incroyablement dur. Parfois, je suis tellement absorbé par mon travail que je perds toute notion du temps. J’ai passé des heures, des jours, et même des semaines à travailler presque sans arrêt.

    J’ai donc commencé à chercher des solutions pour compenser mon manque d’organisation. J’ai exploré tellement de techniques et d’applications que je suis devenu un peu expert en gestion des tâches et suivi du temps. J’avais besoin du bon outil.

    Continuer la lecture   

  • Suivez et déboguez vos requêtes SQL ActiveRecord avec des annotations

    J’ai récemment découvert une fonctionnalité pratique introduite dans Rails 6. Cette fonctionnalité vous permet d’annoter vos requêtes SQL avec des commentaires directement intégrés dans la requête elle-même. Je sais, je suis un peu en retard à la fête, mais je soupçonne que je ne suis pas le seul, alors voici un récapitulatif rapide.

    Dans notre application, nous avons un hash profondément imbriqué appelé public_data qui est souvent utilisé pour rendre le payload JSON d’un enregistrement, ainsi que ses associations, dans le contrôleur.

    Ce hash public_data est construit à partir d’un mélange d’attributs et de méthodes de modèle. Cependant, il appelle également les méthodes public_data des modèles associés, qui peuvent, à leur tour, rappeler la public_data du modèle d’origine. Cette complexité circulaire a été un défi, et bien que nous ayons commencé à passer au gem Barley serializer pour une meilleure structure, nous comptons toujours sur cette méthode dans certaines parties de notre codebase pour la compatibilité ascendante.

    Donc, lorsque @user.public_data est appelé dans le contrôleur, il déclenche souvent une longue chaîne de requêtes de base de données. Traquer où une relation spécifique est appelée - que ce soit dans User, Profile, ou Subscription - peut être intimidant.

    Bien que les logs Rails soient utiles, ils nécessitent de trier la sortie pour corréler l’entrée de log avec la requête SQL. Cela devient encore plus délicat lors du débogage dans des environnements distants et de la recherche dans de vastes logs dans des outils comme New Relic ou CloudWatch.

    Entrez ActiveRecord::Relation#annotate

    Continuer la lecture   

  • Atteignez la "Ruby Zenitude"

    La communauté Ruby est pleine de tout un tas de ressources assez sympa pour apprendre les spécificités du langage. Un petit outil vers lequel je reviens régulièrement et que je propose à tous les devs junior qui cherchent à découvrir le langage, c’est Ruby Koans.

    Un Koan, c’est, dans la philosophie Zen, un échange entre un maître et son disciple qui fait avancer le disciple vers la plénitude, le zen. Ce projet github vous propose de faire la même chose, en ruby.

    Continuer la lecture   

  • Bonnes pratiques Ruby - Les arguments de méthode

    Aujourd’hui, on va parler arguments de méthodes et bonnes pratiques.

    Pour avoir un code lisible et maintenable, il faut suivre quelques règles concernant l’ordre de ces arguments.

    Continuer la lecture   

  • Aimez vos messages d'erreur comme vous-même

    Photo par Michael Dziedzic sur Unsplash

    Apprenez à détester, puis à aimer les messages d’erreur.

    Stack Overflow overflow

    J’ai perdu tellement de temps sur Stack Overflow.

    A vrai dire, Stack Overflow, c’est génial, et la connaissance du développement logiciel ne serait pas si avancée et si répandue sans sa grande influence. Ce que je veux dire, c’est que je me suis souvent retrouvé à répéter le schéma sans fin de ‘Hé, j’ai une erreur… Wow, tellement de mots… Googlons ça. Stack Overflow l’a ! Voyons ce qu’ils disent’

    Je ne parle pas du fameux syndrome du copier-coller de Stack Overflow, ni ne rejette les excellentes réponses produites par les grands développeurs là-bas, mais plutôt de l’étape manquante dans l’exemple ci-dessus : donner du sens au message d’erreur moi-même avant de chercher une réponse toute faite.

    Continuer la lecture   

  • Écrire du code pour votre futur vous

    Photo par Debby Hudson sur Unsplash

    Nous écrivons tous du mauvais code. Soyons honnêtes. Même si nous faisons de notre mieux pour écrire le code le plus efficace et le mieux conçu, il nous arrive tous d’écrire cette méthode sale dont nous ne sommes pas si fiers et que nous redoutons de devoir déboguer le mois prochain, ou l’année prochaine.

    Je ne vais pas parler de ce code, car il est si facile à repérer et il n’y a pas besoin d’écrire à ce sujet. Ce qui m’intéresse, c’est le code qui semble correct quand vous avez fini de taper, mais qui vous reviendra à la tronche un jour. Il finit par être difficile à maintenir, à étendre ou même à comprendre. Après des années de codage, j’ai établi un ensemble de petits warnings qui m’alertent chaque fois que je me dirige vers une impasse.

    Continuer la lecture   

  • Ce que j’ai appris de la migration d'Heroku vers un cluster Kubernetes

    Photo par Markus Spiske sur Unsplash

    Une partie de la mission qui m’a été confiée à mon arrivée dans mon entreprise actuelle était la migration complète de notre hébergement Rails d’un service Heroku vers une solution Kubernetes. C’était ma première expérience de migration d’une stack de production, et ma première expérience avec Kubernetes également. Et au cas où vous penseriez que la tâche n’était pas assez intimidante, le précédent et unique développeur a décidé de partir pour une autre opportunité quelques semaines après mon arrivée.

    Ce départ a été vite oublié avec l’embauche par l’entreprise d’un autre développeur qui avait déjà fait la transition d’une app vers Kubernetes. J’ai donc suivi un cours sur Udemy, lu la documentation de Kubernetes en profondeur, pris des notes, et joué avec un cluster de test. Puis je me suis lancé dans le voyage de la transition.

    Six mois plus tard, la transition Heroku-Kubernetes est maintenant terminée. J’ai acquis beaucoup d’expérience. Et je pense qu’il est temps de la partager.

    Continuer la lecture   

  • Une alternative au callback after_initialize d'ActiveRecord

    Callback hell

    Je jouais avec des formulaires imbriqués dynamiques avec Stimulus aujourd’hui et je suis tombé sur un vide laissé par les callbacks ActiveRecord de Rails.

    Continuer la lecture   

  • Chaîner des conditions dans les expressions régulières

    Regexp hell

    J’ai récemment dû effectuer une vérification semi-complexe sur une chaîne de caractères pour la valider.

    En gros, j’ai cette méthode de modèle qui produit un numéro de série basé sur l’ID de l’objet. Les valeurs de retour valides pour cette méthode sont L00000002, L00000587 ou L00014522. En résumé, elles doivent être constituées d’un L majuscule suivi de 8 chiffres composés de l’id de l’objet complété avec des zéros.

    Je devais donc trouver un moyen de créer simplement un matcher pour cela à utiliser dans ma spec de modèle. J’aurais pu construire deux attentes, une pour la longueur et une pour la composition. Mais j’ai simplement décidé de croire que les expressions régulières sont suffisamment puissantes pour faire les deux en même temps. Je me suis donc rendu sur rubular et j’ai commencé à bidouiller et à chercher sur Google.

    Continuer la lecture   

  • Un pas dans le vide ?

    Le pas de foi Comme j’en parlais dans un article précedent, je me suis engagé dans une démarche de reconversion professionnelle.

    Après deux tentatives infructueuses, je me retrouve désormais embauché comme développeur fullstack dans une boite très sympa de la région de poitiers. La demande de dispo a été envoyée hier, les collègues sont désormais tous au courant, et je me retrouve face à un nouveau défi sous forme de nouveau départ. Et c’est une situation très déstablisante - pour le moment.

    Continuer la lecture   

  • Les liens du jeudi - Episode 2

    Image par Free-Photos de Pixabay

    Deuxième épisode des liens du jeudi. Au menu, on Dockerise rails, on covoiture et on rationalise.

    Continuer la lecture   

  • Empêcher Devise d'envoyer des emails de confirmation

    Image par Antonios Ntoumas de Pixabay

    Je suis sur le point de publier un énorme projet Rails sur lequel je travaille depuis un bon moment. Ce projet est destiné à remplacer une ancienne application qui gère une base de données de clients avec des emails. Le nouveau projet Rails utilise Devise pour l’authentification.

    Avant de déployer la mise à jour finale sur le serveur de production, nous devons trouver un moyen d’importer les utilisateurs sans envoyer d’emails de confirmation, mais en les laissant non confirmés jusqu’à ce qu’ils se connectent réellement au nouveau système et fournissent un mot de passe. Les nouvelles inscriptions doivent également rester confirmables.

    Continuer la lecture   

  • Les liens du jeudi - Episode 1

    Image par analogicus de Pixabay

    Je poste régulièrement mes trouvailles sur le net… Voici le premier épisode. Enjoy !

    Continuer la lecture   

  • Genèse d'une reconversion

    Image by Mohamed Hassan on Pixabay

    “Il était temps!” diront mes amis.

    Si je suis resté enseignant dans l’Éducation Nationale si longtemps, c’est que je ne les avais jamais vraiment écoutés. L’objectif de ce post n’étant pas de vous faire part de mes 19 années de passionnantes périgrinations, je me contenterai de dire que j’ai choisi l’enseignement par pragmatisme plus que par vocation. En soi, c’était une erreur.

    Le moment est venu, donc, de quitter l’enseignement et de se tourner vers le développement informatique à plein temps. Pour le moment, rien n’est fait. Je suis encore en poste, je corrige des copies, j’anime des cours… Mes collègues, ma hérarchie et mes élèves ne savent rien de ma décision. Le temps viendra.

    J’ai l’intention de venir ici faire le point régulièrement, partager mes réflexions sur cette transformation, à la fois pour me permettre de formaliser mon évolution, mais aussi pour donner un coup de pouce à d’autres qui seraient dans une situation analogue.

    Continuer la lecture   

  • Crystal, l'avenir de Ruby

    /img/ruby2crystal.png

    Cela fait quelques mois que je suis de près le développement d’un langage informatique qui a fait son apparition il y a quelques années déjà : Crystal.

    Je suis vraiment un grand fan de code. Au point parfois de regarder mon IDE en me disant : “c’est beauuuuu…” Mais du coup, mon côté esthète me pousse vers des langages dont la syntaxe est fluide, concise et intuitive. C’est cette envie de joli code qui m’a poussé à abandonner PHP, ses $variables, ses -> et ses ; en fin de ligne. Beuark. J’ai aussi longtemps snobé le Javascript, pour à peu près les mêmes raisons, même s’il est difficile de s’en passer ! Il a été sauvé quand j’ai découvert SandardJS et appris que les points-virgules du Javascript étaient optionnels, car oui, je suis point-virgule-phobe et je l’assume. Je peux désormais lire mon code Javascript sans être pris de spasmes.

    Je suis tombé dans le Ruby il y a une grosse dizaine d’années, en pleine hype Ruby on Rails, attiré par ces tutos qui montraient comment monter un blog en 3 minutes 27 chrono. J’ai appris à dompter la bête au fil des ans, et j’ai appris à apprécier l’expressivité de ce langage. Cette flexibilité, elle vient du fait que Ruby propose plusieurs manières de faire la même chose. Ce langage ne contraint pas le développeur dans un mode de pensée unique, il le laisse libre de s’attaquer à un problème de la manière qui lui semble la plus adaptée. C’est ce qui donne Ruby cette impression d’être un langage informatique lisible par les humains.

    Mais Ruby a ses limites.

    Continuer la lecture   

  • D'abord, je bois le café...

    …Ensuite, je fais les choses.

    Voici un fond d’écran que j’ai créé. N’hésitez pas à le télécharger…

    Continuer la lecture   

  • Deepin, ça a de la Gueule (mais pas que) !

    Deepin Desktop Environment

    Ca fait maintenant un petit moment que je me suis tourné vers un nouvel environnement de travail sous Linux appelé Deepin Desktop Environment. Ce petit bijou esthétique est l’émanation d’une distribution Chinoise appelée tout simplement ‘Deepin’ basée sur Debian. Pour autant, Deepin en tant qu’environnement est disponible sur plusieurs plateformes, dont Manjaro, que j’utilise. La sortie de la version 15.8 est l’occasion pour moi de faire la point sur ce que Deepin a à proposer. C’est beau, certes, mais est-ce que le ramage vaut le plumage ?

    Chantons.

    Continuer la lecture   

  • Utiliser l’application electron Mastodon (Linux)

    Mastodon

    Voici un rapide tutoriel pour utiliser l’appli electron développée pour accéder à Mastodon. Je me concentre sur Linux/Ubuntu, car c’est le système que j’utilise. Néanmoins, il suffira probablement d’adapter ces étapes à votre environnement (Windows, MacOS, autres distributions Linux) pour pouvoir l’utiliser sur ces plateformes.

    Ce tutoriel concerne la version 0.2.1.

    Continuer la lecture   

  • Pourquoi Mastodon cartonne chez les Frenchies

    Mastodon cartonne en France

    Tout le monde en parle. Bon, pas tout le monde, OK, mais pas mal de monde, en fait. Depuis quelques jours, les journaux spécialisés dans le numérique et les réseaux sociaux publient des articles qui vantent les mérites de Mastodon, ce réseau social qui semble vouloir faire de l’ombre à Twitter. Même France Info en a parlé.

    Il y a quelques mois, j’ai vu apparaître sur Hacker News un post du créateur de Mastodon. Il nous invitait à tester et rejoindre le petit réseau social qui, selon lui, avait les armes pour offrir une alternative crédible à Twitter.

    C’est ce que j’ai fait. Mais à l’époque, pas d’appli Android digne de ce nom, peu de monde sur les serveurs… Ca me faisait penser à Twitter à ses débuts, avec une timeline mondiale qui défilait, mais personne que je connaisse. Après deux ou trois toots, j’ai oublié, en me disant que ce service web finirait par avoir la même destinée que App.net.

    Mais ces derniers jours, voyant que la hype prenait forme en France, j’ai décidé de m’y remettre. Et mine de rien, il y a de plus en plus de monde, les applis Android (et iOS) sont utilisables, et la communauté semble ouverte, conviviale et désireuse d’aider ceux qui débutent.

    Ce qui (me) frappe, surtout, c’est la très forte présence francophone. Du coup, je me suis demandé pourquoi ça nous plaisait bien, à nous, les frenchies.

    Continuer la lecture   

  • Un plugin Coda pour Symfony2

    (English below) J’ai créé un petit plugin Coda pour lancer les commandes Symfony2 les plus courantes. C’est un travail en cours, pour l’instant très basique. Mais on peut installer Symfony directement depuis Coda, sans toucher à une ligne de code, pourvu que Git soit installé. Vous pouvez télécharger le plugin sur GitHub.

    Continuer la lecture   

  • On démarre avec Symfony2

    J’ai décidé de créer un projet avec Symfony 2. Je vais donc en profiter pour mettre quelques notes à ce sujet sur ce blog, au fur et à mesure des bugs que j’ai rencontré. Cela fait trop longtemps que je corrige des bugs, et que, une fois confronté au même problème 6 mois plus tard, je reprends la méthode « essai/erreur » pour le résoudre… Désormais, tout (ou presque) sera consigné ici, et consultable par tous ! Pour démarrer, je vais expliquer comment j’ai installé Symfony2 sous OS X Lion, et créé un simple accès à la base de données en CRUD (Create, Read, Update, Delete).

    Continuer la lecture   

  • CSS et Javascript au régime avec Smaller

    L’une des étapes de la création d’un site web qui s’avère assez cruciale est l’optimisation du contenu afin de permettre un chargement rapide des pages dans les navigateurs. Un site qui se charge rapidement est aussi un site qui fera plaisir à Google et ses amis, qui du coup le fera monter dans les résultats de recherche. Outre l’optimisation des images, on peut aussi penser à “minifier” le javascript et le CSS. Cela allège les transferts de données entre le serveur et le client. On y gagne quelques octets, ce qui est peut-être négligeable pour un petit site, mais si on est un peu ambitieux, et soucieux de produire un travail soigné, on se préparera à recevoir une avalanche de requêtes le jour où ledit site sortira de l’anonymat !

    Continuer la lecture   

  • MongoDB, l'avènement du noSQL

    La mise en place d’une base de données relationnelle peut être un vrai casse-tête. Si on s’est déjà lancé dans un projet d’envergure, on se rend vite compte que non seulement la période de planification du projet est primordiale, mais surtout que dès qu’on veut opérer un changement quelquonque sur la structure de la base, il faut répercuter ces changements dans toutes les requêtes SQL du projet, parfois revoir les jointures… bref, tout ça pour ajouter la fonction ‘tag’ qui n’était pas dans le projet initial, ça peut faire mal, et surtout ça fait perdre du temps.

    Arrive MongoDB. Arrive le noSQL. Arrive la modélisation du monde réél. Arrive un cachet d’aspirine.

    Continuer la lecture   

RSS

Mastodon (personal thoughts, mostly French)

Mastodon