Emacs Chat 30: Fabrice Niessen (en français, partie 2)

| emacs-chat, emacs-chat-podcast, emacs, french

Nous avons parlé en direct avec Fabrice Niessen d'Emacs pour la deuxième fois. Voici ses notes.

Correction : J'ai voulu dire Speaches (un serveur de reconnaissance vocale) au lieu de speechd (un serveur de synthèse vocale)

Voici notre conversation précédente : Emacs Chat 28: Fabrice Niessen (en français)

Chapitres

  • 0:00 Introduction
  • 3:00 gptel
  • 13:42 diff
  • 17:52 gptel-commit-message
  • 23:30 docstrings
  • 24:03 hs-minor-mode - hideshow
  • 31:03 Super-whisper
  • 41:21 Dotfiler
  • 59:12 Enseignement d'Emacs

La transcription légèrement corrigée

Details

0:00 Introduction

Prot: Tu peux prendre le lien correct cette fois.

Fabrice: Ah, voilà, je suis prêt avec.

Sacha: Ah, ok. Ok. Nous sommes en direct.

Prot: Ah, nous sommes en direct. Très bien.

Sacha: Donc, je vais passer à vos notes. Bonjour à toutes et à tous et bienvenue au 30e épisode d'Emacs Chat. C'est la suite de notre conversation avec Fabrice Nissen. Merci de nouveau Fabrice d'être là et merci également à Prot de nous rejoindre. Donc, on continue. Lors de la conversation précédente, nous avons parlé de ton expérience sur Windows et sur WSL, des thèmes de publication vers HTML ou vers PDF, de ton kit de configuration Leuven, des petites améliorations et des automatisations et des formations et des cours particuliers en français, en anglais, en néerlandais et en espagnol. C'est incroyable, ça! Du coup, si ça ne te dérange pas, j'essaie d'en savoir plus sur ton flux de travail, puis repasser à une discussion sur l'enseignement d'Emacs, de nombreux changements et de grandes incertitudes à l'époque de l'IA. Qu'en penses-tu? Depuis notre conversation, tu as ajouté beaucoup de fonctions, d'outils, de préréglages (presets) de gptel à ta configuration. C'est un sujet très tendance YouTube a évidemment beaucoup de video de ce genre en anglais, mais pas encore en français, je pense. Peux-tu nous montrer ton flux de travail avec l'IA sur Emacs?

Fabrice: Volontiers. Merci pour l'invitation et l'image bouge. Merci pour l'invitation pour cette trentième fois. Donc, je vais partager mon écran.

Prot: Merci.

Fabrice: Alors, je tape share, voilà. Et donc, ce sera celui-ci. Est-ce que vous voyez mon écran ?

Prot: Oui, je peux voir ton écran.

Fabrice: Ok, très bien. Très bien.

3:00 gptel

Fabrice: Donc en fait, sur gptel, j'utilise pas encore beaucoup, beaucoup, beaucoup, mais de plus en plus. Je suis aussi un peu novice, un peu, mais j'ai effectivement, et récemment d'ailleurs, fait quelques petites améliorations de layout au standard. Donc j'ai, par exemple, utilisé le raccourci C-<F1> pour lancer… Je n'ai pas lancé le chat. Je vois que je n'ai pas ma dernière configuration. C'est peut-être l'occasion aussi de parler, juste un petit break. Vous voyez que j'utilise Helm. Je ne sais pas ce que vous utilisez vous. Je suis extrêmement content de Helm, ce qui me permet de taper. Je ne dois plus savoir où se trouve un fichier, dans quel répertoire. Il suffit que je connaisse quelques morceaux de son nom. Et je vais retrouver directement le fichier ou le buffer actif. Donc ici c'est gptel et ce sera le point el. Il est là. Donc ici, je vais lancer et je vais faire vb rapidement pour le keychord eval-buffer. Voilà, donc il est évalué. Donc je vais avoir un look un peu différent maintenant si je recommence. Voilà, C-<F1>. Donc on peut lui dire bonjour. C-c C-c pour envoyer. Voilà. Et donc ici il répond. Donc une petite utilisation que j'ai faite, c'est gptel-highlight-mode qui permet de mettre la réponse avec un certain fond et une petite barre ici dans la frange pour bien identifier la différence entre les questions et les réponses. Je peux lui demander d'écrire Un exemple de code Python. S'il fait comme d'habitude, il va faire la suite de Fibonacci. Voilà. Et donc, qu'est-ce qu'il a fait ? Ah non, les nombres premiers. Ici, c'est quelque chose que je commence à utiliser de plus en plus, le buffer de conversation gptel. Une petite customisation que j'ai faite. D'ailleurs, j'ai envoyé un issue à l'auteur de gptel pour éventuellement qu'il l'introduise directement dans... Dans gptel, c'est le fait de recoloriser les codes blocs dans les réponses en utilisant la couleur que j'ai dans mon thème pour Org Mode. Donc ici, c'est exactement comme dans un fichier Org Mode. J'ai le fond jaune pour le code et les délimiteurs ici, de début et de fin, en gris. Et ça, c'est très important, je trouve, pour mettre en évidence comme il faut le code bloc. Et le fait, bon ici ce n'est pas de l'Emacs Lisp, mais si j'avais demandé, si je pouvais demander de faire la version, donnez-moi la version de l'Emacs Lisp. C-c C-c. Et l'avantage évidemment de faire ici, donc à la fin de la réponse, il y a un scroll automatique vers le bas. Ah d'accord. Et ce qu'il fait aussi, c'est qu'il fait un formatting pour que ça reste moins de 80 caractères. Et donc ici, l'avantage, c'est que c'est dans Emacs et que c'est l'Emacs Lisp. Je peux directement faire C-x C-e. Et je pourrais tester les fonctions. Je pourrais faire ici. Ça me permet d'éviter de faire des copier-coller entre ChatGPT ou Copilot ou n'importe lequel. Ici j'ai tout directement là dedans. C'est extrêmement pratique.

Sacha: Tu as aussi des fonctions pour ajouter des contextes, des fonctions, d'autres choses dans ta configuration. Au lieu d'utilisation de conversation buffer, tu as aussi utilisé les fonctionnalités gptel dans ton code.

Fabrice: Il y a le rewrite que j'utilise parfois, ou alors pour répondre avec le contexte, il y a notamment le add context ou add context file. Je n'ai pas encore beaucoup joué avec, donc je sais qu'on peut aller dans Dired et puis faire gptel-add-file, add context file, je crois. Et je l’ai déjà bindé sur C-c g, donc tout ce qui est C-c g et c’est gptel. J’ai déjà utilisé le raccourci avec un petit a, donc C-c g a pour ajouter du contexte. Mais je ne l'ai pas encore vraiment utilisé, donc je n'ai pas encore beaucoup d'expérience avec. Par contre, je fais parfois dans des fichiers, je peux faire, si je prends un fichier Org, on peut aller dans le fichier ici avec mes petites notes d'aujourd'hui. Ça pourrait m'arriver ici de dire je veux traduire ces deux paragraphes en anglais par exemple. Je vais les sélectionner. Je vais faire C-u C-c RET pour avoir le menu de gptel. Là, je vais changer la directive puisque la directive ici c'est tu es un assistant, etc. Je vais changer la directive. Je vais en fait utiliser le S, Set System Message. Là, j'ai une série de prompt, en fait, de system prompt, de directives, ça s'appelle, sous gptel. Donc, une série de directives, de prompt qui sont prêts. Mais ici, je vais faire un spécifique. Donc, je vais encore faire une fois s. Et là, je vais taper, par exemple, traduit. Là, quand on a fini, on peut faire C-c C-c. Ici, on voit la directive qui est là. Pour l'instant, si je ne change rien, il va envoyer ma sélection et il va insérer la réponse. Là, je ne vois pas très bien. Il faut que je déplace un truc. Il va insérer la réponse à la fin. Je pourrais faire ça, par exemple, pour voir comment il a traduit. Comme ça, je garde au-dessus l'input. Je vais faire effectivement RET ici. Parfois, c'est un peu compliqué à lire.

Prot: Qu'est-ce qu'il m'a fait ?

Fabrice: On dirait qu'il a pris plus de lignes.

Sacha: Il y a un problème des démos en direct.

Fabrice: Je vais bien le refaire. C-u C-c RET. Je vais bien sectionner ma région. La directive est là. Donc, je vais faire ici Enter. Voilà. Donc j'ai vu que l'input était, la section était toujours sélectionnée, donc j’ai fait C-w pour l'entrée, et puis j'ai gardé ce qu'il y a. Donc ici, voilà, typiquement, il a fait le job facilement, donc je suis nouveau restant dans Directement dans Emacs, on fait des copies-coller avec d'autres interfaces externes.

Sacha: Je vois que tu peux aussi remplacer la sélection avec les résultats ou peut-être rediriger l'output à un autre tampon pour comparaison.

Fabrice: Exact. Donc, je n'ai pas encore tout utilisé, mais je pourrais ici essayer. On va essayer. On va traduire en français, par exemple. Donc, j'ai bien sélectionné. Je vais faire C-u C-c RET pour avoir de nouveau le menu. Ou alors, M-x, j'ai fait tel menu. Donc là, je vais changer et je vais mettre la directive 2 fois S. Et cette fois-ci, je vais traduire en français. C-c C-c, voilà. Et donc, je vais mettre ici le respond in place. Et donc, en théorie, il va écraser ma sélection par sa réponse. Donc, je vais faire le i ici. Et donc, en fait, il faut toujours lire la dernière ligne ici. On voit ce qu'il va faire. C'est un résumé de ce qu'il va faire en fonction des options qu'on a choisi. Donc ici, quand je vais faire ret, quand je vais faire return, il va remplacer la sélection avec la réponse. Donc je fais RET. Ah, et là j'ai peur. The conversation must end with a user message. Qu'est-ce qu'on va faire ? On va rester, on ne sait jamais. C-x C-x C-u RET Non, ce n'était pas ça. C-x u. C-x u. Voilà. C-x C-x C-u RET Ben si, c'est ça. Non, C-u C-c RET. Il y a trop de raccourcis. Je fais la sélection, voilà. C-u C-c RET. J'ai mon menu, j'ai ma directive en haut qui est bonne. Je vais faire le i, Replace, la sélection du response, RET. Bon, j'ai l'erreur. Donc là, il faudrait que je regarde un peu plus. Je n'ai pas beaucoup utilisé ça. Et en fait, justement, sur le rewrite, il faut que j'utilise aussi un peu plus pour du texte et pour du code. Et je sais qu'il y a plusieurs possibilités après.

13:42 diff

Fabrice: Il y a aussi moyen de dire, il va remplacer en théorie par le nouveau texte, mais il y a moyen de montrer aussi son changement sous forme de diff ou de ediff. Donc il y a moyen de dire accepte. J’ai vu qu’après on peut faire C-c C-a pour accepte, C-c C-e pour ediff, C-c C-d pour diff. Et donc il peut rouvrir différents buffers pour bien visualiser la différence. Si c'est une traduction, tout serait changé. Et si on modifie du code, par exemple, en disant rajoute-moi un paramètre, on a envie de voir vraiment la différence et de sûr qu'il n'a pas fait plus de choses que ce qu'on a demandé. Donc il y a moyen de faire un diff ou un ediff après.

Prot: C'est peut-être mieux comme ça avec Ediff.

Fabrice: Oui, moi j'aime beaucoup Ediff. D'ailleurs, c'est quelque chose, je ne crois pas que je l'ai montré l'autre fois. Donc ici, moi j’ai C-<f9> chez moi, c’est privé, pour lancer vc-dir sans me poser de questions sur quel est le répertoire qu'on veut analyser. Donc ici, je vais faire C-<f9>. Donc il me lance vc-dir sur le répertoire dans lequel je me trouvais. On voit que j'ai fait une modification dans le fichier readme. Si je fais égal, on voit un diff unifié avec les plus et les moins en dessous. Il faut toujours relire avant de committer les diffs parce que là il y a une ligne qui n'était pas prévue d'être committée en imaginant que je devais faire le commit. Je vais d'ailleurs effacer cette ligne. Ce qui est pratique ici dans tout ça, c'est que j'ai fait une modification, j'ai sauvé. Ce buffer-ci est le diff. Je n'ai pas besoin de retourner dans le vc-dir et de refaire un égal. Je peux faire g, faire refresh, il recalcule le contenu. Donc ici, j’ai fait g et simplement, il a recalculé le diff. Et je ne vois plus que le paragraphe qu'on devait traduire, qui a été effacé. Pour l'instant, c'est une possibilité. Et l'autre possibilité à partir de vc-dir. Pour l'instant, je n'utilise pas encore Magit parce que j'ai eu pendant des années des répertoires, des repos qui étaient sous SVN, subversion. Certains étaient déjà sous Git. Je voulais une seule interface pour gérer tous mes repositories. Et donc, j'ai tout construit sur vc-dir qui marche très bien. Voilà, je suis sûr que Magit, pour Git, est plus sophistiquée, plus jolie à regarder, sans doute. Mais en fait, je fais tout mon boulot ici avec vc-dir. Donc, si j'avais égal, j'ai un diff unifié. Ça, c'est standard, je crois. Si je fais grand E, ça, c’est pas standard. Ça m'appelle ediff. Donc là, directement, j'ai ediff, puis j'ai plus qu'à faire next. Voilà, next. Bon, j'ai qu'un changement ici. Ce paragraphe là qui a disparu. Donc ça c'est très pratique, directement pouvoir lancer Ediff à partir d'un fichier modifié. Et alors une petite chose que j'ai récemment rajoutée dans Git, c'est donc ici je viens de refaire un égal pour avoir un Ediff unifié. Donc ici j'ai le Le diff unifié où j'ai ce paragraphe-là qui est apparu. En fait, depuis n'importe quel diff, donc output qui est sous forme de diff avec des plus et des moins, Ici, c'est à partir de vc-diff. Ça pourrait être le résultat d'un Git diff dans un buffer. Ça pourrait être dans Magit. Je peux lancer la touche avec w, ça marche. Ça m'a lancé la génération d'un message de commit via gptel. J'ai écrit une petite fonction qui va envoyer tout ce buffer-là.

17:52 gptel-commit-message

Fabrice: Ça envoie le buffer en entier à gptel. En lui demandant de m'écrire un message de commit. C'est gptel-commit-message. Je l'ai mis sous GitHub. Il génère un message de commit à partir d'un fichier, d'un buffer diff. Il envoie tout ça et donc il a été généré n'importe comment, donc ce n'est pas lié à Magit. Parce qu'il y a beaucoup, il y a plusieurs solutions qui existent déjà dans MELPA et c'est lié souvent à Magit. Ou à Git, en fait, il faut avoir stagé les fichiers. Moi, je n'ai pas spécialement envie de mettre des fichiers, de les stager dans Git. J'ai envie de pouvoir simplement sélectionner moi-même ici dans l'interface un, deux, trois fichiers et regarder la différence pour ces fichiers-là. Génère-moi un message pour ces fichiers. Ici, dans le package, qui est tout petit, il fait une fonction. Il y a juste une fonction. Il y a le nom du buffer et la fonction. Derrière, je l’ai mappé sur w. Quand je suis dans le diff-mode-map, dans vc-dir, Je tape w pour write. Ça me gênait le fichier de ce message. Donc, si je reviens sur ton changement, voilà. Donc, j'avais ici, j'avais fait W à partir d'un buffer diff. Ça a envoyé via gptel, ça a envoyé le diff, ça a récupéré un message de commit, ça l'a mis dans le presse-papier et ça m'a ouvert un buffer, donc ça a rajouté un buffer à côté où je pouvais le voir. Je vais le refaire ici. Donc ça envoie, voilà. Et donc on voit, ça ouvre un buffer avec le message en bas. Et en fait, je peux très bien me dire, tiens, en fait, ce message-là, il ne me plaît pas trop. Puisqu'en fait, on a chaque fois des réponses différentes. Donc je peux très bien refaire W en haut. Il va réenvoyer le truc. Cette fois-ci, ça ressemble assez fort. Je vais le refaire. Il change un petit peu, il n'y a pas beaucoup de changement ici parce que ce n'est pas le même texte. Donc, remove personal introduction from readme.

Prot: Et il a copié aussi sur le kill ring.

Fabrice: Oui, exactement. Donc, maintenant, en fait, je n'ai plus qu'à refaire ctrl . Je suis déjà là-dessus. Je n'ai plus qu'à faire dans V, c'est dire, next action, c'est V. Pour dire, fais l'action suivante qui a du sens. Ici, puisque j'ai un fichier modifié, l'action suivante qui a du sens, c'est de committer. Donc, il m'ouvre un buffer pour pouvoir mettre mon message de commit. Donc, je fais simplement C-y. Et éventuellement, je vais un peu le modifier. C-c C-c, c’est envoyé. Et donc, c'est committé. Ça, j'utilise depuis quelques mois quand même, je dirais depuis 4, 5, 6 mois. Depuis cette période-là, je fais tous mes messages de commit avec gptel, l'intelligence artificielle. Et c'est merveilleux parce que ça a augmenté la qualité de mes messages de commit. C'est indéniable. Avant, je mettais souvent dans mes fichiers à moi « update ».

Sacha: Moi aussi.

Fabrice: Et en plus, non seulement j'ai un beau message qui dit vraiment ce qu'il y a, et je relis encore, non seulement avant de committer, je relis toujours. Au minimum, je fais égal pour voir la différence. Ou s'il y a beaucoup de différences, je vais faire un grand E pour pouvoir en Ediff comparer les versions avant et les versions après, systématiquement. Mais en plus, je fais générer mon message de commit et je lis aussi le message de commit. Voilà, pour voir qu'il a bien compris et qu'effectivement aussi, le résumé est correct par rapport à ce que j'ai fait. Parce que parfois, s'il y a eu des centaines de changements, je pourrais voir aussi quelque chose qui me tient. Il me parle de ça, c'est bizarre qu'il me dise que... Je ne sais pas, que j'ai enlevé un paragraphe, ce n'est pas normal. Voilà, ça pourrait aussi m'attirer l'attention sur, tiens, est-ce que je n'ai quand même pas trop vite lu le diff et donc d'aller voir des trucs. Donc, c'est vraiment... Ça change la qualité du commit sous Git. C'est vraiment quelque chose que je conseille à tout le monde. Et donc ici, pour vc-dir, il a fallu que j'écrive ma fonction moi-même, parce que les autres Git gptel commits, il faut avoir stagé les fichiers, donc ça regarde ce qu'on a stagé, et ça fait un message de commit par rapport à ce qu'on a stagé. Maintenant, on essaie de dire, on ne stage pas. On ne voit pas cette opération-là, ça se fait tout seul. Donc on a les fichiers modifiés et puis on fait le commit directement. Donc ça fait le git commit -a, git commit add… On ne passe pas par cette étape de staging. Et puis voilà, je trouve que c'est plus simple, simplement de sélectionner les fichiers, ceux que je veux, et puis de voir la différence, et puis de committer.

Prot: Oui, c'est mieux comme ça.

23:30 docstrings

Sacha: Tu utilises également gptel pour générer des docstrings. Peux-tu montrer ?

Fabrice: Alors, on pourrait aller dans un fichier. Par exemple, ce fichier de gptel-commit-message. Donc voilà. Donc, j'ai une seule fonction.

24:03 hs-minor-mode - hideshow

Fabrice: Et donc, chez moi, quand je rouvre par défaut, j'utilise aussi H.S. hs-minor-mode, hideshow. Donc, tous les corps des fonctions, etc., il les réduit. J'ai rajouté qui m'indique le nombre de lignes pour avoir quand même une petite idée, pas juste trois petits points, mais avoir une petite idée de ce qui se cache en dessous. Et donc après je fais metashifta chez moi, ce qui est visible mode. Donc ça m'ouvre. Il y a visible mode pour les fichiers Org avec les drawers et puis ça fait plusieurs choses visible mode et aussi HS show all. Donc ici, voilà, j'ai un message, j'ai une fonction, j'ai un message, un docstring et on va dire que j'ai écrit moi-même un docstring un peu plus bête. Je mets xxx à la place. Et donc, ce que je peux faire, c'est sélectionner toute la fonction. Oui, les métas, parenthèses, accolades, fréquentes. Ils ne sont pas toujours faciles sur un clavier français, d'ailleurs. Il faut faire le AltGr, tu vois. Le QWERTY est plus facile pour certains trucs. Donc ici, j'ai sélectionné, donc je vais faire C-u C-c RET. Donc je retombe sur le gptel menu. J'ai une directive traduite en français, donc ça, c'est pas très bon. Donc je vais changer la directive, donc je vais faire ici le s pour Set System Message. Encore une fois, le s, puisque on pourrait imaginer, si j'avais ça tout le temps, que j'ai write the string. Je n'ai pas de preset, de prompt avec ça, donc je vais essayer de le faire à la main. Je vais refaire S pour pouvoir moi-même éditer le message. Et donc ici, je vais taper à la place écrit un docstring correct montrant ce que la fonction fait. exactement. directive est correcte. Alors, je n’ai pas ?? le b, là, other buffer, ou je pourrais le mettre dans le kill ring aussi. On va le mettre dans le kill ring, par exemple, donc je vais faire k. Donc j’envoie la réponse dans le kill ring, k. Donc on lit bien, toujours en bas, ce qu'il va faire. Donc ici, quand je vais faire RET, il va envoyer les lignes sélectionnées avec la réponse dans le kill ring. Parfois, ce qui est dommage, c'est qu'on n'a pas un sablier comme des applications Windows. Voilà, ici, j'ai la réponse. C'est dommage qu'il n'y ait pas de sablier. Il y a tellement de choses qui passent sur l'echo area qu'on ne voit pas nécessairement ce qui se passe. Je vais remonter ici et on va imaginer, je vais directement effacer ça, faire C-y. Il a fait un peu trop. Alors, ben, voilà, ici en fait, c'est voilà, il faudrait je juste que j'édite un petit peu, voici un docstring correct. Il marque copié. Il faudrait voilà, il faudrait justement faire un prom pour lui dire ne me donne que le docstring sans répéter le nom de la fonction et cetera et cetera. Mais en gros, ouais, bah tout ça a l'air bon en fait hein. Ici, il m'avait rajouté du texte et des infos. Après, il explique ce qu'il a fait. Voilà. En gros, ça c'est bon. C'est juste que je ne sais pas pourquoi il a mal lié ceci.

Sacha: [Je me suis] trompée, peut-être. Tu as une fonction boost-gptel-generate-docstring dans ta configuration.

Fabrice: Ah ! Je ne l'ai pas encore testé, celle-là. Justement, avec la section de la fonction, je pense que ça ne marche pas toujours très bien. Il y a des choses qui ne marchent pas encore très bien. Il y a des choses qui sont en test un peu. Ça fait partie des tests. On peut réessayer. Je vais essayer de voir si elle marche. On voit ici qu'il a fait un docstring assez long, d'ailleurs. Un peu trop, à mon goût. En théorie, il doit détecter les bounds de la fonction et envoyer toute la fonction à gptel et avec un prompt. Ça a l'air de marcher assez bien. Sauf que de nouveau, il me fait plus, il me répète toute la fonction. Non, voilà, c'est ça, il me répète toute la fonction. Oui, jusque... Jusque l'interactif. Jusque là, oui, jusque l'interactif. Donc, c'est pas mal. Donc, oui, voilà, ça...

Prot: Oui, pas mal.

Fabrice: Voilà, hop. On peut voir, effectivement... Donc, ça, c'est nouveau, c'est... Enfin, c'est... Changez, changez, oui. Et donc l'interactive, je n'avais pas d'interactive apparemment. Si je devais l'avoir. Je ne sais pas si j'ai un interactive ou pas, donc je fais C-<f9>. Et on peut voir ce qu'il a modifié. On va le faire en vertical. Hop. Oui, si j'avais un interactif avant. Il considère, il n'est pas aligné au niveau du truc. Forcément, je devais avoir un interactif. Pour terminer ou pas avec tout ce qui est intelligence artificielle, j'ai un petit truc ici qui traîne sur l'écran. Ça fait une semaine que je l'essaye. J'ai déjà payé pour la version si il y avait trois jours d'essai et ça me paraît très bien.

31:03 Super-whisper

Fabrice: Donc c'est Super Whisper. Je vais le faire d'abord dans un Notepad par exemple pour vous montrer. Je l'ai mappé sur la touche Escape, ce qui n'est pas encore la meilleure touche. Je vais expliquer. Je voulais aussi pouvoir l'appeler à partir d'Emacs. J'aimerais bien que ce soit une touche assez facile, donc un peu une extrémité du clavier. La touche Escape, c'est une extrémité du clavier. Voilà, il n'y en a pas beaucoup, et puis il faut qu'elle ne soit pas utilisée dans Emacs, parce qu'il faut que je la fasse arriver dans Emacs. Et donc ici, quand je suis dans un endroit où on peut insérer du texte, donc ça pourrait être aussi en formulaire sur une page web, ici je suis dans Notepad, ça peut être dans Word, ça peut être n'importe où, je vais faire escape, et on voit à ce moment-là qu'il écoute.

Prot: On voit des ondulations là.

Sacha: Je ne le vois pas.

Prot: Je ne peux pas voir l'indication.

Sacha: Parce que tu vas partager seulement le fenêtre Emacs.

Fabrice: Je vais stopper la présentation et je vais faire un share.

Sacha: Je suis très curieuse à la reconnaissance vocale.

Fabrice: Voilà, screen 1. Voilà, ok.

Prot: Est-ce que vous le voyez ? Maintenant, oui. Oui, oui. Ok. On va bien danser dans le pad, ici.

Fabrice: Il y a une minute, j'ai fait Escape. Qui a lancé, donc, le Super Whisper. Et donc, on voit ici qu'il écoute, on voit des petites ondulations. Il y a une integration dans Notepad, aussi. Je le vois assez discret, d'ailleurs.

Sacha: Je pense que parce que tu as aussi, dans ton séance de réunion virtuelle, la reconnaissance vocale a du mal avec l'audio.

Fabrice: Je pense que ça va aller, mais en fait, c'est ça qui est bien. donc W-I-S-P-R. En fait, ça marchait bien, sauf qu'il y avait des conflits avec Emacs. Et que dans Emacs, de temps en temps, j'avais des caractères qui étaient générés de manière aléatoire donc j'ai compris que c'était Wispr parce qu'en j'étais désactivée, quand j'aie désinstallé Wispr, je n'avais plus de problème avec Emacs de config. Et Wispr, lui, il écoutait ce que tu disais et tu voyais afficher au fur et à mesure les mots.

Prot: Peut-être tu peux désactiver Whisper, parce que on ne peut pas écouter bien ce que tu dit. Peut-être maintenant...

Fabrice: Ok, excusez-moi, je n'avais pas compris, vous n'entendiez pas. Je n'avais pas compris, donc je vais réexpliquer. En fait, j'avais utilisé il y a quelques mois Wispr, W-I-S-P-R, et cette application-là, elle avait des conflits avec Emacs, donc j'avais des caractères qui généraient dans Emacs aléatoirement à un certain moment. Et quand je l'ai désinstallé, je n'ai plus eu ça, donc je ne sais pas pourquoi, mais il y avait des problèmes avec Emacs. Et l'application Wispr, elle écrivait les mots au fur et à mesure. SuperWhisper.com, je pense. Elle, elle écoute tout ce qu'on dit, donc je fais Escape pour l'activer, elle écoute tout ce que je dis, et puis quand je refais Escape, donc c'est un toggle, elle écrit tout d'un coup. Mais l'avantage, c'est qu'elle a du contexte. Et donc si je dis par exemple, je lui ai demandé comment ça va, en fait il va recopier, je lui ai demandé deux points, ouvrez les guillemets, comment ça va, point d'interrogation, fermez les guillemets. Parce qu'il interprète en fait, il reconstitue le paragraphe, le texte à la fin. Parfois, si je fais une faute et qu'il y a un autre orthographe, et puis je répète orthographe, il va comprendre que c'est le même mot. Il est assez malin, il remet le texte. de manière plus synthétique. Il met tous les mots, mais à la fin, au niveau typographie, etc., il met deux, trois petits points. Il met parfois des guillemets. Il comprend bien les questions. Je ne sais pas pourquoi ici, j'ai un caractère un peu spécial. Il y a quand même de temps en temps des fautes aussi. Tout à l'heure, je parlais de aléatoire. Il a marqué aléatoire. Oui, j'espère que j'ai cité tout à l'heure Donc voilà, il fallait marquer W, I, S, P, R. Et puis une fois, il a marqué c'est A, I, R. Bon, c'est pas parfait, mais en fait, ça marche et c'est beaucoup plus rapide quand même. Et j'écris une petite fonction qui marche dans WSL, en tout cas pour ma config, de telle façon que dans... Donc si je vais dans un buffer scratch, par exemple. Que dans Emacs, ça fait la même chose aussi quand je fais escape. Parfois, j'ai des problèmes de clipboard, donc le kill ring. Quand je fais le deuxième escape, parfois il me remet un vieux truc qui n'est pas ce que je viens de dire, donc il y a encore des choses à comprendre. Je vais essayer quand même juste une phrase, je fais ESC Je sais pas... Ah, voilà. Il se lance. Mais... Il se lance. Est-ce que cela marche ? Ah, tu vois, j'ai un problème. J'ai dit est-ce que cela marche ? Il vient de remettre système, il faut que je comprenne. Il y a des petites configurations dans Super Whisper à faire pour le presse-papier. C'est un peu plus compliqué avec le presse-papier Windows et le presse-papier Emacs. J'ai encore des petits réglages à faire, mais quand ça marchera bien, ce sera fantastique de pouvoir directement aussi dans Emacs utiliser ça. Il y a peut-être d'autres solutions d'ailleurs. Ici, il marche assez bien et le fait qu'il insère le truc une fois qu'on a fini de parler, ça fait quand même des phrases qui sont plus correctes. On hésite parfois, donc ça reconstitue un truc de meilleure qualité.

Sacha: En fait, j'utilise aussi la reconnaissance vocale sur Emacs et j'utilise le substitute de Prot pour corriger facilement les erreurs et sauver les remplaçantes.

Fabrice: Et ça marche bien, donc ?

Sacha: Oui, oui, oui, ça marche.

Fabrice: Tu es contente ?

Sacha: Oui, je suis très contente. Je l'utilise pour les sous-titres, dicter mon texte. Ça marche bien.

Fabrice: Mais il faudrait que je regarde ta configuration, alors. Pour m'en inspirer, pour faire des tests aussi.

Sacha: Si tu rediriges l'output de la reconnaissance vocale à Emacs, tu pourrais traiter avec Emacs Lisp pour faire des remplaçants.

Prot: process sentinel, il y a les processus qui...

Sacha: Oui, j'ai lancé un serveur de [Speaches] pour offrir un service de la reconnaissance vocale qui utilise aussi Whisper, le mode Whisper.

Fabrice: Oui, il y a beaucoup de belles choses qui vont arriver, c'est sûr. En fait, le problème maintenant, c'est que je n'aime plus quand je suis ici au bureau parce que j'ai des collègues, on est en open space, donc je ne peux pas utiliser ça. C'est ça le problème. Quand je suis à la maison, je peux parler, mais quand on est au bureau, on ne peut pas.

Sacha: Et dans ce temps, j'utilise avec les enregistrements que j'ai fait en marche, à pied, et d'autres environnements qui sont

Prot: Et quand il y a les autres gens, il peut comprendre seulement toi ou il écrit toutes les phrases de les autres gens aussi?

Fabrice: Je ne sais pas, en fait. Je ne l'utilise pas avec d'autres personnes. Et si je l'utilise, je vais utiliser le casque. Et je pense que le casque est assez... Le micro est assez directif. En gros, il n'y a quand même que moi qu'on entend, je pense. Il faudrait vraiment qu'il y ait des bruits assez forts pour que ça puisse passer aussi.

41:21 Dotfiler

Sacha: Je veux aussi consacrer du temps pour ton outil dotfiler pour gérer les fichiers professionnels et les fichiers personnels. Comment tu l'utilises-tu?

Fabrice: Oui, alors ça, ce n'est pas de l'Emacs. Par contre, c'est très utile, y compris pour Emacs. Et donc, j'ai écrit ici une petite note là-dessus. Je vais ouvrir l'HTML, par exemple. Donc, là, ici, vous voyez bien l'HTML, oui, OK. Donc, en fait, j'utilise le programme dotfiler, donc c'est son nom, c'est le nom du programme. Il y a un outil qui s'appelait Stow dans le temps qui fait, je pense, à peu près la même chose. Je ne sais pas très bien les différences entre les deux, d'ailleurs. Mais donc l'idée en fait c'est, j'ai des repositories, donc j'ai par exemple, et ça me sert notamment pour Org, donc justement j'ai un repository avec des fichiers Org personnels, j'ai un repository avec des fichiers Org professionnels, et en fait, dotfiler, en fait c'est plus clair ici dans mon explication, donc j'ai un repo A, Et sous le repo A, j'ai un répertoire Org, j'ai un répertoire bin, j'ai un répertoire Lisp. Repo B, je ne suis pas obligé d'avoir les trois. Donc, j'ai une autre structure, mais j'ai par exemple Org, bin, Lisp aussi, examples, peu importe. Et donc, quand on utilise dotfiler, Il va créer, donc tout ça est mis par défaut dans .dotfiles sous le home directory. C'est là que tous les repos se trouvent, ceux qui sont gérés par dotfiler. Et donc j'ai fait des clones, donc au début je vais faire, donc ici si je vais dans mes .dotfiles, c'est tous les repos que j'ai. Il y a des repos privés et des repos publics. Et je vais faire un dot add d'une URL Git. Par exemple, si je veux cloner un nouveau repository. Et donc, il va mettre sous .dotfiles, il va mettre repo c, par exemple. Donc, si j'ai fait un dot add. Donc, la commande, c'est dot update, dot add. Donc je vais faire un add d'un repo C. Donc le repo va être cloné localement sous dot files, un repo C. Et puis je vais faire un dot update. Donc quand l'update, imaginons au départ que j'avais que le repo A, et puis je fais ça, donc j'ajoute un repo B. Comment on va faire ? Donc au départ, quand je n'ai que le repo A, ce qu'il fait, c'est que tout ce qu'il trouve en dessous de chaque repo, Il les met directement via des symlinks sous le home directory. Donc le répertoire Org va se retrouver via un symlink sous le home directory. Le répertoire bin va se retrouver sous le home directory. Et pareil pour l'isp. Donc si je n'ai qu'un repo au début d'ailleurs et que je fais un update, dot update, donc il va créer des symlinks. Un dot update crée ou détruit des symlinks. Ça fait juste ça, en fonction de ce qui a évolué. Et donc la première fois, il va juste faire un symlink du répertoire tilde slash Org vers tilde.dotfiles repo a Org. Et il va faire la même chose avec bin, la même chose avec Lisp. Quand j'ai le deuxième repo, le repo b, que j'ai colonné, j'ai fait... dot add de ce repo-là. Puis je fais un update. À ce moment-là, évidemment, il y a deux répertoires Org qui doivent être symlinkés. Ils doivent avoir des liens symboliques dans le tilde. Donc, il ne peut plus faire ça au niveau du répertoire. Et donc, ce qu'il fait, c'est qu'il supprime le symlink qu'il avait sur le répertoire Org et il scanne tous les fichiers qui sont là-dedans et il va faire un symlink individuel, fichier par fichier. Donc si j'ai 10 fichiers ici, donc fichier 1, fichier 2, fichier 3, il va me faire des symlinks dans tilde Org fichier 1 vers le fichier 1 qui se trouve physiquement là. Et ainsi de suite pour tous les fichiers. Il va faire la même chose avec tous les fichiers qu'il va trouver ici. Et donc tous les fichiers qui se trouvaient dans repo A Org et dans repo B Org, via des symlinks, se retrouvent en fait dans tilde Org. Et pareil ici dans mon exemple avec bin et avec Lisp. Donc si je vais voir ici, si je vais dans mon répertoire bin, vous voyez, donc j'ai, je vais faire un peu plus petit, j'en ai des, enfin on ne va pas, ici, voilà, celui-ci, il vient de Archibus Reports, de ce repo-là. Celui-ci, il vient de Archibus, OIL, MCD, Datamodel, Diagram. Donc de ce repo-là. Ici, il vient de gitboost. Donc j'avais dans ces différents répertoires, j'avais un sous-répertoire bin. Donc dans ces différents repos, j'avais un sous-répertoire bin. Et tous ces fichiers qui se trouvent directement dans bin, sous les repos, se retrouvent in fine via des symlinks dans mon bin à moi, dans mon directory. Ce qui veut dire que dans ma configuration de mon shell, j'ai juste à dire path égale tilde slash bin de point $path. Et donc il va connaître tous mes petits scripts qui sont dans les bins d'un coup. Pour Org, Ça veut dire que, org-agenda-files, je fais pointer simplement vers tout ce qui se trouve dans ~/org. Et vu que dans ~/org, je retrouve tous les fichiers Org du repo A, du repo B, et ainsi de suite, j’ai une seule variable, un seul setq, et j'ai tous mes fichiers qui se retrouvent directement dedans. Et donc, quelle que soit la machine, si j'ai différentes machines, une machine pro, une machine perso. Sur ma machine perso, j'aurai mon repo privé et mon repo pro. Sur la machine professionnelle, j'aurai que le repo professionnel. En fait, mon fichier Emacs ne change pas. C'est le même fichier. Je dis juste scan tous les fichiers. Mon Emacs, en se lançant, il fait toujours un scan de tout ce qu'il y a. Donc, il va, org-agenda-files va regarder tout ce qu’il y a dans ~/org et tout ça est rajouté à mon org-agenda-files. Et donc, il va, à chaque lancement d'Emacs, il va voir tous les fichiers qui sont dans la configuration. Mais c'est le même fichier Emacs. Pour ça, il ne change pas. C'est le même fichier Emacs d'un côté ou de l'autre. Simplement d'aller voir tous les fichiers qui sont en ~/org. Et en fait, c'est des symlinks vers les fichiers qui sont dans un repo privé, un repo public, etc. Pareil avec le bin. Donc ça vient de 36 repositories. Pareil avec le Lisp. Justement, et ça me force un peu aussi à faire une structure un peu plus standard. Donc ici, si je vais dans… dans ~/.dotfiles gptel-commit-message. J'ai un répertoire. J'ai un répertoire Lisp. Et c'est dedans, donc c'est des lisps. J'ai ici le petit package, le petit fichier avec la fonction pour écrire le message de commit. Si je vais dans... Si je remonte... Je vais dans Emacs Leuven Lisp. Là, j'ai tous mes fichiers de configuration. Et tout ça se retrouve en fait dans ~/lisp. Grâce à symlink. Donc si je vais ici dans ~/lisp. Lisp. Voilà. Dotfiler, Emacs gptel, mon fichier de configuration, le nouveau avec gptel. Qu’il voit dans ~/lisp, en fait, physiquement, il est dans /home/fni/.dotfiles/emacs-leuven/lisp, il est physiquement là. Celui avec le gptel-commit-message, Physiquement, il est dans un autre repo, il est dans le repo gptel-commit-message, sous le répertoire Lisp. Donc en fait, en dessous de chaque repository, tous les fichiers qui sont là vont directement tel quel dans le home et tous les répertoires qui sont là vont directement tel quel dans le home. Donc en fait, il faut que je vois vraiment tous mes repos comme des puzzles, pièces de puzzle. Et tous les fichiers ou tous les répertoires à la racine de chaque repo vont se retrouver via des symlinks dans mon ~ Directement en tant que fichier. Par exemple, j’ai toujours un README.org dans chacun de mes repos. Là, c'est une exception parce que on peut dire celui-là n’essaie pas parce que j’ai README.org dans chacun de mes repos. Donc, il ne saurait pas créer des symlinks d'un README.org dans ~ vers tous les repositories. Celui-là, c'est une exception. On me dit de ne pas le symlinker. Et tous les autres fichiers se retrouvent directement dans mon ~ avec des symlinks. Et tous les répertoires, pareil. S'il y a des répertoires qui sont communs, donc j'ai chaque fois plusieurs fois des répertoires bin dans les repositories, donc à ce moment-là, il fait des symlinks sur les fichiers qui sont dans les répertoires bin. Et donc pour le Lisp, pareil, dans Emacs, j'ai juste dit de scanner tous les fichiers que j'ai dans ~ Lisp et de faire un load library. Donc je fais un dolist avec un find, etc., Et donc en une seule commande, qui reste la même sur la machine professionnelle et la machine privée, j'ai la même commande qui fait scanner tout contenu mon ~/lisp et donc dynamiquement, sur une machine, j'aurai potentiellement plus de fichiers Lisp ou pas, mais c'est la même commande et je n'ai pas de config particulier à faire. C'est juste en fonction des repositories que je vais cloner sur telle ou telle machine que j'aurai plus ou moins de fichiers disponibles et tout ça est caché.

Sacha: Il y a une question dans le chat. Ces liens sont gérés dans Git ?

Fabrice: Non, non. Imaginons... Je peux le montrer en live si tu veux. Je vais aller dans Emacs... Donc, cd. Donc dans .dotfiles, dans emacs-chat-sacha-chua. Donc dans ce répertoire-là, j'ai une image, j'ai quelques fichiers, d'accord ? Et je vais rajouter un fichier. Fichier des mots, .Org. Voilà, donc ici, maintenant, j'ai un fichier de plus dans ce repository. Je pourrais l'ajouter dans Git, etc. Mais je n'ai même pas besoin de faire ça, en fait. Pour les symlinks, je peux... Donc, pour l'instant, ce fichier Org, imaginons que j'ai des tâches dedans. Pour l'instant, il sera... Dans ce cas-là, d'ailleurs, je devrais... Enfin, je vais... Je vais créer un répertoire Org et je vais le déplacer, fichier des mots, temps Org.

Prot: Voilà.

Fabrice: Donc, ici, dans... Dans ce répertoire-là, j'ai ce fichier de démo et on peut imaginer que j'ai des tâches. J'aimerais bien voir ce fichier-là dans mon Org agenda files. Et pour l'instant, il n'est pas visible à partir de mon tilde. Il est physiquement là, mais il n'y a pas de symlink dessus. Pour que le symlink soit créé, je vais juste faire .dot files bin. Dans bin, il y a la commande dot. On peut voir son aide. Il y a dot update, dot status, dot add. Add, c'est pour ajouter un nouveau repository. Et update, c'est pour scanner le contenu des repositories et mettre à jour les liens. Ici, je vais faire dot update. Et alors, je vais faire moins skip pool parce que sinon, si on ne fait pas moins skip pool, il va en même temps pooler les repos. Donc, on va essayer que tout soit à jour. Donc ici, je vais faire le --skip-pull. Et on va voir qu'il va créer un lien, en fait, Vers ce fichier-là, voilà. Donc ici, il a créé, donc dans mon Org, donc dans mon tilde en fait, ça c'est mon tilde, donc dans ~/org, fichier-demo.Org, il l’a lié vers la position physique du chemin. Donc ça veut dire que maintenant, je peux dans Emacs, ici, donc si je fais C-x C-f, dans Org, donc c'est des fichiers, voilà. Il est directement là. Donc il est vide. Voilà, et donc ici, fichiers des mots, ça pointe dans mon type d'org, il pointe vers sa position physique. Donc les symlinks, c'est lui qui gère ça, c'est lui qui met à jour en fonction des fichiers ajoutés ou des fichiers supprimés. Il garde, il compare, voilà. Il y a tout ça dans les repos. Il y a tous ces symlinks qui existent à partir de ~ et il met à jour. Il rajoute ou il retire en fonction.

Prot: C'est Git qui garde toujours le fichier original.

Fabrice: Et donc dans Git, tu as les fichiers physiques. Git ne voit pas de symlinks, etc. Dans Git, tu as les fichiers physiques. Ici, si je vais... Imaginons que je mette Hello. Dans Git, je vais faire vc-dir, C-<f9>. C-<f9>. Qu'est-ce qui se passe ? Peut-être parce qu'il n'est pas... Ah oui, c'est parce que justement, je suis sur le Simlink, là, il faut que j'aille dans dotfiles. Donc c'était Emacs, chat, Sacha, voilà. Donc là, je fais C-<f9>. Et donc je vois que j'ai un nouveau fichier à ajouter. Et là, ce n'est pas un Simlink, ce sera le fichier physique. Donc au niveau Git, c'est les fichiers physiques dans des repos. Simplement, conventionnellement, tous mes repos vont se retrouver en dessous de ~/.dotfiles. C'est là qu'ils scannent tout ce qu'il y a en dessous de ~/.dotfiles. C'est là qu'ils scannent tous les repositories et qu'ils regardent le contenu de chaque repository. Si j'avais ton site web ou ta configuration, tu rajoutes un fichier, je vais faire dot update. Il va les puller Et puis, si tu as rajouté des fichiers, si tu as fait des modifications, il ne se passe rien. Au niveau des symlinks, il ne se passe rien. Puisque simplement, j'aurai la nouvelle version à jour dans mon clone, dans le sandbox. Mais s'il y a des nouveaux fichiers ou des fichiers qui ont été enlevés, il va rajouter ou effacer des symlinks. Maintenant, si j'efface ce fichier-là, donc un delete, je vais l’effacer de .dotfiles. Emacs. Sacha Chua, le chat. Donc je vais effacer le répertoire ou le fichier ici. Donc hash, yes. Voilà, le fichier n'existe plus dans mon repository. Donc je vais relancer dot update avec le --skip-pull. Il va montrer rm, voilà. Donc il vient d'effacer le symlink vers tilt Org. C'est génial parce qu'en fait, dans le temps, chaque fois que j'ai rajouté un repository, il fallait voir où se trouvent les bins, puis faire add dans le path de tous les bins. Ici, non, tout se retrouve, pour autant que ce soit directement dans le repository sous ./bin, ça va se retrouver après le symlink dans ~/bin. Et donc j'ai qu'à rajouter une fois le fait que Tiltbin est dans mon path. Donc ça pourrait marcher pour les manpaths, pour les fichiers d'info, enfin pour les lists, pour l'org, donc c'est extrêmement pratique pour ça.

59:12 Enseignement d'Emacs

Sacha: Pendant les dernières minutes, j'aimerais connaître ta point de vue sur l'enseignement d'Emacs. Comment tu structures ton cours pour ne pas noyer les gens sur les fonctionnalités?

Fabrice: Mon cours, je le vois plus comme étant un cours pour des gens qui connaissent déjà Emacs, donc c'est plutôt pour leur montrer des choses qu'ils ne connaissent peut-être pas parce qu'ils n'ont pas lu des dizaines ou des centaines ou des milliers de fichiers de configuration comme moi. Donc voilà, c'est des gens qui a priori connaissent déjà Emacs, donc ils savent faire enregistrer, ouvrir un fichier, Et simplement, je vais leur montrer des choses en plus, comme Helm. Moi, j'utilise Helm pour tout ce qui est la gestion des fichiers et des buffers. Je vais leur montrer aussi des fonctionnalités parfois qui sont peu utilisées ou parfois un peu cachées, donc peu utilisées comme les macros ou le multiple curseur qu'on ne connaît pas nécessairement et qui n'est pas standard, mais qui est facile à installer. ou l'édition rectangle, qui est standard, mais que pendant longtemps, je n'avais pas connu. Et donc voilà, je vais leur montrer des choses comme ça. A priori, c'est des gens qui connaissent déjà, donc ça va un peu plus vite. Maintenant, j'avais quand même une fois dans un de mes cours, Martin, qui ne me connaissait pas du tout Emacs. Son père connaissait Emacs, il l'avait amené de force presque. Si on écoute et qu'on suit, je repassais aussi. En fait, je réexpliquais tout depuis le début. J’avais des slides sur C-a, C-e, M-n, M-p, C-s, C-r. Je réexpliquais tout plus ou moins rapidement en fonction du niveau des gens, s'ils connaissent déjà. Je vais aller assez vite. En fait, c'est plus facile si les gens connaissent déjà pour aller plus vite. Sinon, il faudrait plus que deux jours de formation. En fait, j'ai quand même fait quatre jours de formation Emacs. Donc, c'est deux jours sur ce que j'appelle les fondamentaux. Tout ce qui est édition rectangle, macro, multiple curseur, donc avec des choses en plus. Et puis, deux jours plus orientés sur Org. Il y a tellement de choses dans Org. Il y a les Org agendas, le time blocking que j'utilise pour tout, pour mon temps, pour faire des factures derrière. Et puis il y a évidemment Babel, Tangling. Donc tout mon fichier de configuration Emacs, il est dans un fichier qui est tanglé. Un fichier de doc, la code littérée de programming de Knuth, où je décris pour un humain. Et puis j'ai des petits bouts de code qui vont se retrouver. dans des fichiers de code où il faut pour être exécuté. Mais l'objectif, c'est de faire un document qui soit lisible par un humain d'abord. Et donc, même en quatre jours, ça passe vite. Il y a trop à montrer.

Sacha: C'est aussi le point lié à des incertitudes économiques. Quels sont les avantages du coaching ou de l'enseignement humain par rapport à l'IA?

Fabrice: Donc, répète les avantages du coaching par rapport à l'IA.

Sacha: Parce qu'il est facile de poser des questions à l'IA gratuitement, mais je pense que tes formations, ton cours ont des avantages.

Fabrice: Absolument. En fait, dans tous les domaines, c'est comme ça. C'est que l'IA, si j'ai une question précise ou une question claire, il va pouvoir me répondre très facilement et de manière avec plein de détails, donc extrêmement fantastique. Mais l'IA, le problème, c'est qu'on ne sait pas ce qu'on ne sait pas. Et donc, dans la formation, je me doute que plein de gens, même qui sont des utilisateurs d'Emacs depuis 20 ans, Plein de gens ne connaissent pas l'édition rectangle, utilisent peu ou pas les macros, ne connaissent pas Wdired, le Dired mode éditable, par exemple. Si je mets des photos sur mon disque, je veux mettre la date de la photo dans le nom du fichier, je vais passer en mode direct éditable et je vais faire une petite macro qui va me copier la date. Et donc voilà, en fait, ChatGPT, si je dis, ChatGPT, explique-moi comment marche l'édition rectangle, il va l'expliquer. En fait, il ne va jamais répondre à dire, tiens, il y a l'édition rectangle que tu ne connais pas. C'est ça le problème. C'est justement de pouvoir juger ce que les gens savent et de ce qu'on pourrait leur apporter en plus. Et là, l'IA va être moins bonne parce qu'elle n'a pas des propositions comme ça de choses que tu ne connais pas. C'est de ce point de vue-là que c'est beaucoup plus pratique en encadrement personnel ou par groupe où on peut expliquer des choses qu'on pense que les gens ne savent pas et donc ils ne vont jamais poser la question à l'IA là-dessus, par définition.

Sacha: Merci beaucoup à vous deux, à tout le monde.

Fabrice: Merci beaucoup pour cette organisation, cette deuxième séance. Peut-être à une prochaine fois. Merci beaucoup en tout cas pour l'organisation, Sacha. Au revoir.

Prot: À la prochaine, au revoir.

Fabrice: Salut, je vais vite dans l'autre.

Chat

  • protesilaos: ​à bientôt!
  • julienlambe78: ​Bonjour de Belgique 🙂 Sacha, le volume de votre micro est un peu bas. Nous n'entendons pas bien vos questions. Pensez-vous pouvoir augmenter le volume un petit peu?
  • SaMusz73:​ ​synlinks `ln -s` et hardlinks `ln ` vers des fichiers sont gérés dans git ? J'ai cru comprendre que git gére assez mal ces symlinks
  • SaMusz73: Merci :)
  • JeromeVanLunter: ​​MERCI
  • SaMusz73: Merci à vous tous !
View Org source for this post

J'aime faire des erreurs pendant que j'apprends le français

| french

Je veux répondre à l'article récent de Prot sur l'apprentissage du français en deux parties : sur le fait de profiter des erreurs en apprenant et sur la motivation liée aux connexions.

Je me suis rendu compte qu'apprendre à faire de meilleures erreurs est une des raisons pour lesquelles j'aime l'apprentissage d'une langue étrangère. J'ai commencé à apprendre le français parce que ma fille a commencé à l'apprendre à l'école. Dans ce domaine, nous nous ressemblons assez. J'ai plus de motivation et de compréhension de mon processus d'apprentissage, et elle a la neuroplasticité d'un cerveau plus jeune. Donc, c'est une bonne occasion pour moi de montrer comment apprendre une chose difficile. Elle voit que j'utilise les cartes mémoire, elle lit parfois mon journal, elle me rejoint occasionnellement à mes séances avec mon tuteur. Elle voit que je travaille sur le sujet, mais elle voit aussi que nous le transformons en un jeu. Nous parlons du système de répétition espacée et de l'efficacité des moyens mnémotechniques, tels que les images vivantes et les phrases personnelles. Ses expériences et celles de ses camarades nous donnent des occasions de parler de l'effet Dunning-Kruger, de la surconfiance du débutant et de la vallée du désespoir par laquelle on doit passer. (Ce n'est pas si décourageant si on le connaît.) Pendant notre dîner, je partage mon plaisir en essayant des challenges comme mes entretiens d'Emacs Chat en français ou en écrivant des articles techniques. Les détails ne sont pas importants. Ce qui importe, c'est la joie d'apprendre, qui manque à l'école.

Pour ma fille en ce moment, l'apprentissage autodidacte sera peut-être plus important que l'éducation systémique. Donc il faut apprendre comment être guidé par les désirs, par les expériences et par les résultats. Notre cerveau a tendance à tomber profondément dans un nouveau loisir. C'est possible de l'enrichir en le liant à d'autres motivations. Un point de vue expérimental réduit la peur. Les erreurs et les remarques ne sont que des données.

Du coup, ma fille et moi approchons le français comme ça :

  • C'est une matière obligatoire à l'école.
  • Le cours collectif à l'école ne sera probablement pas efficace, selon l'expérience d'autres étudiants.
  • Nous pouvons nous amuser en contournant les limitations du système. C'est un acte de résistance.
  • Je vais l'aborder comme un laboratoire d'apprentissage, et elle est la bienvenue pour venir jouer avec moi.

Cette approche suffit pour ma fille en ce moment. Forcément, il y a des réflexions dont je ne parle pas avec elle (parce qu'elle va regarder Pokémon; elle est une enfant après tout). Ça me plaît de les explorer, et je les partage au cas où il y aurait quelque chose d'utile pour d'autres étudiants. :)

Désir : Dans mes intérêts, je suis fortement motivée par les connexions personnelles comme avec ma fille ou avec mon mari. Donc pendant qu'elle relit la série de bandes dessinées des Royaumes de Feu en anglais, je lis la même série en français. (Un jour, elle me dira « Arrête, maman ! Trouve ton propre intérêt ! » Jusqu'à ce moment-là, je la suis. Maintenant, elle partage constamment ses morceaux préférés dans les livres avec moi.) J'aime bien mes séances avec mon tuteur. J'apprécie vraiment les conversations d'Emacs Chat et les commentaires sur mes articles et mes vidéos. J'aime bien aussi les échanges de blogs et de vidéos avec Prot en français, et j'ai hâte de me connecter aux autres. En plus, je pense que les améliorations à mon flux de travail (particulièrement sur Emacs) peuvent servir à d'autres personnes qui apprennent une langue étrangère : plus directement s'ils apprennent aussi le français, mais même s'ils apprennent l'anglais ou d'autres langues. Les idées peuvent être utiles. Si je peux ancrer cet intérêt dans plus de connexions personnelles, il peut durer. Par conséquent, une grande partie de mon travail est de renforcer le désir d'apprendre, et mon désir d'apprécier, de me connecter, et d'aider d'autres personnes m'aide pour cela. Si un jour j'ai un rapport convivial avec des personnes, que ce soit en anglais ou en français, ce sera génial. Je pourrai coopérer avec d'autres étudiants de français pour nous améliorer ensemble, ou peut-être arriver à un niveau suffisant où des francophones seront plus à l'aise pour parler avec moi sur Emacs en échangeant mutuellement des connaissances.

Les expériences que j'adore :

  • Mon journal
  • Mes articles
  • Mes améliorations à mon flux de travail
  • Mes séances de prononciation
  • Mes séances de conversation
  • Mes diffusions en direct

Des expériences que je considère pour mes prochaines étapes :

  • Lire mes articles ou mon journal à voix haute, peut-être avec l'analyse de prononciation par l'IA pour identifier les phrases à peaufiner avec mon tuteur ?
  • Regarder des émissions sans sous-titres
  • Dicter à mon téléphone
  • Essayer d'autres tuteurs en plus de celui que j'ai déjà ; je peux consacrer le même budget que celui que j'ai mis à côté pour les activités extrascolaires de ma fille
  • Participer aux échanges de langue ou de connaissances : Avec des utilisateurs d'Emacs ? Avec les francophones natifs qui veulent améliorer leur niveau d'anglais ? Avec d'autres étudiants de français ? Je me demande comment profiter d'un temps un peu plus libre et prévisible une fois que ma fille s'habitue à l'école virtuelle. Quelqu'un veut me rejoindre pour des conversations privées ou publiques ?

Même si je vis de mes économies, je suis heureuse de consacrer un peu d'argent pour engager des tuteurs et soutenir de belles personnes. C'est un petit acte de résistance contre l'hyper-médiatisation de l'IA.

Les résultats, ce qui inclut les erreurs : Ma fille et moi avons parlé de nombreuses fois de l'importance de la gestion des erreurs pour mieux apprendre. Une partie de l'apprentissage est de sélectionner un bon niveau de travail. Trop facile, c'est ennuyeux. Trop dur, ça ne marche pas. Si on a un bon enseignant, il peut nous aider à choisir un bon niveau. Si on apprend soi-même, on doit calibrer son approche. Les erreurs sont les guides.

Il y a des sujets où on doit procéder très lentement pour éviter d'ancrer des erreurs, comme la musique ou les mathématiques. Ils demandent de la précision. Quand je travaille au piano, je ne dois pas me dépêcher, ou je ne fais que trébucher. D'abord la précision, puis la vitesse.

Je pense que l'apprentissage de la langue n'est pas exactement comme ça. On doit oser plus qu'on ne peut atteindre. Oui, c'est important d'éviter d'ancrer de mauvaises habitudes de prononciation ou d'expression, mais c'est plus important d'éviter d'être paralysé par la peur de faire des erreurs. Donc, c'est utile d'avoir beaucoup d'occasions de le pratiquer dans un contexte sécurisé, comme l'écriture ou mes conversations avec mon tuteur. L'écriture me donne l'opportunité d'identifier les erreurs de genre et de conjugaison, et de pratiquer des moyens mnémotechniques. Par exemple, le livre « Fluent Forever » conseille d'imaginer quelque chose exploser s'il est au masculin ou brûler s'il est au féminin. Les calques et les mots maladroits m'aident à apprendre davantage d'expressions natives et à savourer les différences entre les langues. C'est aussi utile d'agrandir graduellement ma zone de confort, comme dans mes conversations et mes diffusions en direct.

De mon côté, je sais que c'est mieux si je me focalise juste sur l'étape devant moi au lieu de m'inspirer de grands rêves. Petit à petit, seulement pour le plaisir actuel. J'ai l'immense privilège d'être détendue. En sachant que mon intérêt peut passer à d'autres sujets à un moment donné, j'essaie de partager des ressources en chemin. (Ça pourrait durer; je garde mon intérêt pour Emacs très longtemps.) Où se retrouvera-t-on ? Je ne sais pas, mais ce sera peut-être une bonne aventure. Voulez-vous me rejoindre ?

View Org source for this post

2026-08-31 Emacs news

| emacs, emacs-news

Lexical binding: If you've recently updated to Emacs 31 and you've gotten warnings about lexical-binding, add:

;;; -*- lexical-binding: t -*-

to the very top of your Emacs configuration files. Alternatively, you can suppress the warning with something like (add-to-list 'warning-suppress-types '(files missing-lexbind-cookie)). There are more details on lexical-binding in the Elisp info manual.

Emacs Carnival: Check out the entries for August in "The Search for Knowledge" and stay tuned for September's topic, "Games."

Links from reddit.com/r/emacs, r/orgmode, r/spacemacs, Mastodon #emacs, Bluesky #emacs, Hacker News, lobste.rs, programming.dev, lemmy.world, lemmy.ml, planet.emacslife.com, YouTube, the Emacs NEWS file, Emacs Calendar, and emacs-devel. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at sacha@sachachua.com. Thank you!

View Org source for this post

Emacs Carnival Aug 2026: Information management and knowledge graphs

This article was inspired by the Emacs Carnival on the search for knowledge. Thanks to Charlie Holland for hosting! It's a good excuse to reflect on how I manage my notes, which is something I'm really interested in.

Capture: I want to capture and publish what I'm learning as quickly as possible because my memory is not very reliable. I prefer plain text because that's easier to search, and it's easier to archive it for the long term. I'm away from my computer most of the time, so I use Orgzly Revived on my phone to capture short notes in my inbox.org or my posts.org drafts file. Once I'm back at my computer, I can develop these notes using Org Mode in Emacs. I use org-refile to move notes to other files like organizer.org. I use a few large Org files instead of a lot of small ones. For repetitive tasks like my workflows, I try to add as many details as possible to make the tasks easier to do even if I just do them once a year.

Search: I often use Google to search my public notes. Sharing my notes allows me to find things again easily. If I publish my notes, other people can benefit from them and even send me additional notes. Of course, I also have personal notes. I use org-refile to search titles or consult-ripgrep to navigate my private notes. I also use consult-line and isearch if I want to search for specific words in the body. These rely on exact matches, so if I try similar words, I might not be able to find what I'm looking for. That's why I'm interested in the p-search package or sentence embeddings for approximate search, but I haven't yet gotten around to setting up a good workflow for that. I'd love to have a system that automatically suggests links to my other posts, my configuration, and my private notes, which could help refresh my memory about things I've forgotten. But I haven't really gotten around to doing a proper evaluation of this yet; maybe when I have more free time.

Navigation: I use C-u org-refile to navigate through my headings wherever they are, as long as the files are in my org-refile-targets. I also reread my inbox and my drafts from time to time. I have a function sacha-blog-edit-org that opens the Org source code from a link, whether it's in my posts.org or only in the published copy of my Org source.

Linking: Many of my ideas are inspired by posts from other people, so when I find an interesting post on my phone, I send it to Orgzly Revived so I can add it to my inbox. This lets me include the link(s) in the post once I finally manage to write and publish it.

Sometimes it takes a lot of clicks to dig up someone's e-mail address or Mastodon handle, so I usually save those into my people.org file. I have a small function sacha-org-contacts-suggest-mentions that helps me get in touch with the author of the previous article and perhaps other people who might be interested using my people.org file, where I've specified regular expressions to match against the text of the message.

To help me link the post to other resources, I have functions for linking to:

(Hmm, I could automate links to other parts of my configuration that define functions I've used…)

My thoughts are often disconnected because my brain likes to jump from one thing to another. (Which is kind of obvious just from this post alone…) While writing an article, I add many ideas to my inbox. Come to think of it, I could add a link type to Org Mode that would resolve to a real link once the linked post is published, kind of like WikiWords, which could help me connect them. There are probably packages out there that already offer this this functionality.

Publishing: I use the 11ty static site generator with ox-11ty.el. When I publish a note, the Org source code is also copied to the same directory.

Visualization and Exploration

I've always wanted knowledge graphs like the one in Jerry's Brain. I think displaying the neighborhood around the current article is a bit more useful than a global overview (like those in ), which is impressive but a bit too difficult for me to use.

I also love large public knowledge gardens like Andy Matuschak's, even if there isn't a real map or graph. There are so many links, making it fun to explore. I like these inline links more than plain lists or connections without explanation. I'm also curious about the Anagora project, which tries to create a large network of personal knowledge graphs and make it easy to jump from one to another by subject or tag.

On the other hand, I don't want to invest a lot of effort into doing the necessary linking myself. Most of my posts (except the Emacs News newsletter and reviews) contain few links. If I stay at the category level, there'd be too many connections just to the topic of Emacs. Maybe I could convert the subcategories in my topic index into data for visualization… (The index really needs an update, though!)

I use other types of graphs frequently. I often draw while I'm writing. I make mind maps and sketchnotes. Actually, I really just end up throwing many words on a page, and then I move, connect, and organize them gradually. This is one of the ways I figure out what I want to say and how to organize it. From time to time, I include drawings in articles or publish them in my public sketchbook. It's nice when other people find these interesting.

I accumulate a lot of drafts in my posts.org file, which I sync with my phone via Syncthing to edit in Orgzly Revived. Sometimes I use a treemap visualization to see the sizes of forgotten drafts (which might be almost finished; they could just need tiny revisions or additions). (Hmm, I wonder how I can add the subtree size to Org headings…)

2026-08-29_08-16-41.png
Figure 1: A screenshot of my treemap for my current posts.org file

In addition, I like analyzing seasonal or annual trends in my posting frequency, which reassures me that busy summer days are normal and I'll have more free time soon:

Monthly trends
import json
import seaborn as sns
import re
from collections import defaultdict
import requests
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
with open('/home/sacha/proj/static-blog/_site/blog/all/index.json') as jsonfile:
    posts = json.load(jsonfile)
    jsonfile.close()
monthly_counts = defaultdict(lambda: defaultdict(int))
for post in posts:
    title = post.get("title", "")
    date_str = post.get("date", "")
    if re.search(r'emacs news', title, re.IGNORECASE):
        continue
    if date_str and len(date_str) >= 7:
        year = date_str[:4]
        month = int(date_str[5:7])
        monthly_counts[year][month] += 1
months_labels = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec']
years = ['2022', '2023', '2024', '2025', '2026']
df = pd.DataFrame(index=range(1, 13), data={'Month': months_labels})
for year in years:
    df[year] = [monthly_counts[year][m] for m in range(1, 13)]
df.iloc[8:, -1] = None
df_long = df.melt(id_vars=['Month'], value_vars=years, var_name='Year', value_name='Count')
num_old_years = len(years) - 1
gray_shades = np.linspace(0.8, 0.3, num_old_years)  # 0.8 is lighter, 0.3 is darker
custom_colors = {year: str(shade) for year, shade in zip(years[:-1], gray_shades)}
custom_colors['2026'] = "#000000"  # Force the current year to pure black
widths = {year: 1 for year in years}
widths['2026'] = 3
plt.figure(figsize=(10, 5))
ax = sns.lineplot(data=df_long, hue='Year', x='Month', y='Count', size='Year', palette=custom_colors, sizes=widths, sort=False)
ax.set_xticks(range(12))
ax.set_xticklabels(months_labels)
plt.title("Monthly post count (except for Emacs News)", fontsize=12, fontweight='bold')
plt.xlabel("Month", fontsize=10)
plt.ylabel("Count", fontsize=10)
plt.grid(True, linestyle='--', alpha=0.5)
plt.legend(loc='upper right')
plt.tight_layout()
plt.savefig('frequence-en.svg')
return df
  Month 2022 2023 2024 2025 2026
1 Jan 6 19 20 23 16.0
2 Feb 0 3 0 10 8.0
3 Mar 0 5 1 24 15.0
4 Apr 0 2 1 14 22.0
5 May 0 1 1 9 15.0
6 June 0 3 1 9 13.0
7 July 1 0 0 6 9.0
8 Aug 7 2 1 5 11.0
9 Sept 1 8 12 17 nan
10 Oct 2 12 29 11 nan
11 Nov 5 1 19 8 nan
12 Dec 4 15 6 6 nan
2026-08-30T08:43:30.119927 image/svg+xml Matplotlib v3.11.0, https://matplotlib.org/

and the gradual growth of my French vocabulary, according to my journal:

01_cumulative_vocab.png

Even though these aren't classic knowledge graphs, they help me see trends that aren't obvious from day to day.

Collective Knowledge

I'm more interested in the network of collective knowledge than in my personal notes. For more than ten years, I've been gathering and categorizing lots links for Emacs News, which makes them easy to skim. I love coming across so many ideas and people along the way. It's easy to do and doesn't take much time, so I've been able to continue it despite the interruptions of life as a mom. In terms of knowledge graphs, the newsletter helps connect nodes and people. I love occasionally hearing how one post has inspired another, and another, and then maybe a collaboration… That's the wonderful thing about creating links between people who appreciate similar things. If someday I have to stop doing this weekly newsletter, I really hope that someone else continues it.

Thanks to my link collection for Emacs News, I often come across opportunities to recommend an post or a person in response to a question or message. If I can find the post in my Emacs News archive with consult-line or isearch, I can paste the exact link. Occasionally, I want to introduce someone to someone else, which is a bit difficult on Mastodon because handles are often very different from real names. I note Mastodon handles in my people.org file, and I have a small function sacha-mastodon-insert-handle-from-contacts to complete them. I have another function sacha-mastodon-insert-interested-handles that adds people who might be interested based on regular expression matches in the message, just like when I write my posts.

In addition to the connections between articles and people, I'm also interested in the connections between subjects. Before learning one thing, what would be helpful to learn first? Once you get the hang of something, what's nearby and easy to learn next? This might be useful for giving advice or suggestions (like coaching!), or for self-directed learning. Everyone's got different needs and paths, so it's impossible to map one path that fits everyone. I started making a resource map for beginners, but I think it's still a bit intimidating, even for me. EmacsWiki is probably the natural home for this sort of thing, since that allows other people to find and add to the links. I just want a good way to back up the data, and I think I still need to resolve a problem I had with editing some pages. I'm also curious about trying to classify workflows by aspects, which could help someone find resources that are similar to their ideas.

I also want to identify gaps to focus on when I have free time. There are tons of resources for beginners since people tend to have similar information needs at that point, but because Emacs is super-customizable, there is a combinatorial explosion of possibilities at the intermediate level. I look forward to exploring my ideas and other people's questions too. It's difficult to find and navigate stuff, so if I start with personal improvements or concrete questions from specific people, that's probably better than writing in isolation. I'm sure that in the process of answering individual questions, common ideas and needs will emerge.

I also enjoy exploring other subjects. I'm learning French, and I'm having so much fun tinkering with my Emacs environment and learning process. One tip for beginners is to develop "language islands": words around a subject you're interested in. (Like the way I'm writing the current article in French to force myself to enrich my vocabulary.) I wonder how I can visualize these things… For example, if I get word lists sorted by frequency (maybe by analyzing the lexique database), I could create a matrix of squares for a heatmap or something… Hmm.

The kiddo's growing up, so my mom obligations are gradually decreasing too. I'm looking forward to spending more time exploring, writing down, and sharing interesting things!

View Org source for this post

Carnaval d'Emacs d'août 2026 : la gestion d'information et les graphes de connaissances

| emacs, french, org

Cet article est inspiré par le Carnaval d'Emacs sur la recherche de connaissances. Merci à Charlie Holland pour son accueil ! C'est une bonne occasion de réfléchir à la gestion de mes notes, qui est un de mes intérêts forts.

Saisir : Je souhaite saisir et publier ce que j'apprends aussitôt que possible parce que ma mémoire n'est pas fiable. Je préfère le format texte brut car il est le plus consultable et le plus archivable à long terme. Je suis loin de mon ordinateur la plupart du temps, donc j'utilise Orgzly Revived sur mon téléphone pour saisir des notes courtes dans ma boîte de réception inbox.org ou mon fichier de brouillons posts.org. Une fois que je suis sur mon ordinateur, je développe mes notes en utilisant Org Mode sur Emacs. J'utilise org-refile pour déplacer des notes vers d'autres fichiers comme organizer.org. J'utilise quelques grands fichiers Org. Pour les tâches répétitives comme mes flux de travail, j'y ajoute des détails autant que possible.

Chercher : Pour chercher mes notes publiques, j'utilise souvent Google. Les notes publiques me permettent de les récupérer facilement. Si je publie mes notes, d'autres personnes peuvent en profiter et les enrichir. Forcément, j'ai aussi des notes personnelles. J'utilise org-refile pour chercher par titres ou consult-ripgrep pour naviguer dans mes notes privées. J'utilise aussi consult-line et isearch si je veux chercher par mots dans le corps. Ils reposent sur des comparaisons exactes, mais si j'essaie des mots similaires, je ne peux pas trouver ce que je cherche. C'est la raison pour laquelle je m'intéresse au paquet p-search et aux plongements de phrases (embeddings) pour la recherche approximative, mais je n'ai pas encore mis en place un bon flux de travail. Je rêve d'un système pour suggérer automatiquement des liens vers mes autres articles, ma configuration et mes notes privées, ce qui peut me rafraîchir la mémoire sur des choses oubliées. Une vraie évaluation doit attendre d'avoir plus de temps libre.

Naviguer : J'utilise C-u org-refile pour naviguer dans mes sous-titres n'importe où dans mes fichiers org-refile-targets. Je relis aussi ma boîte de réception et mes brouillons de temps en temps. J'ai une fonction sacha-blog-edit-org qui ouvre le code source Org à partir d'un lien, même s'il est dans mon posts.org ou seulement dans la copie publiée.

Lier : Beaucoup de mes idées sont inspirées par des articles d'autres personnes, donc quand je trouve un article intéressant sur mon téléphone, je l'envoie à Orgzly Revived pour l'ajouter à ma boîte de réception. Ça me permet d'inclure le lien ou les liens dans l'article une fois que je réussis finalement à l'écrire et à le publier.

J'ai une petite fonction sacha-org-contacts-suggest-mentions qui m'aide à notifier l'auteur de l'article précédent et peut-être d'autres personnes qui sont potentiellement intéressées en utilisant mon fichier people.org, où j'ai spécifié des expressions régulières à comparer au texte.

Pour m'aider à lier l'article aux autres ressources, j'ai des fonctions pour lier :

(Hmm, je peux automatiser les liens vers les autres parties de ma configuration qui définissent les autres fonctions…)

Mes pensées sont souvent déconnectées à cause d'un cerveau qui aime sauter d'un sujet à l'autre.​ (Bien évidemment, même avec cet article…) En écrivant un article, j'ajoute de nombreuses idées dans ma boîte de réception. À bien y penser, je pourrais ajouter à Org Mode un genre de lien qui résoudra un vrai lien une fois que l'article lié sera publié, comme les WikiWords, ce qui peut m'aider à les connecter. Je sais qu'il y a des paquets qui offrent cette fonctionnalité.

Publier : J'utilise le générateur de site statique 11ty avec ox-11ty.el. Une fois que je publie une note, le code source org est aussi copié dans le même répertoire.

Visualisation et exploration

J'ai toujours envie de graphes de connaissances comme celui dans le cerveau de Jerry. Je pense que l'affichage du voisinage autour de l'article actuel est plus utile qu'un aperçu global (comme ceux de ) qui est impressionnant mais un peu trop difficile à utiliser.​

J'adore également les grands jardins publics de connaissances comme celui d'Andy Matuschak même si on n'a pas une véritable carte ou un graphe. La richesse des liens m'encourage à les explorer. Je préfère les liens intégrés plutôt que les listes ou les connexions ​sans explications. Je suis curieuse aussi du projet Anagora, qui essaye de créer un grand réseau de graphes de connaissances personnels et de faciliter le saut de l'un à l'autre par sujet.

Mais je ne veux pas investir trop d'efforts pour le faire moi-même. La majorité de mes articles (sauf le bulletin d'information Emacs News et les revues) contiennent peu de liens. Si je reste au niveau des catégories, il y a trop de points près d'Emacs. Je pourrais convertir les sous-catégories dans mon catalogue en données pour la visualisation… Quand même, le catalogue aurait bien besoin d'une mise à jour.

Il y a d'autres genres de graphes que j'utilise fréquemment. Je dessine souvent pendant que j'écris. Je fais des cartes mentales et des notes dessinées. En fait, c'est plutôt que je jette plusieurs mots sur une page et puis que je les déplace, les connecte, et les range graduellement. Je le fais pour découvrir ce que je veux dire et comment je peux les organiser. De temps en temps, j'inclus des dessins dans les articles ou les publie dans mon carnet de croquis public, et c'est une agréable surprise quand un de ces dessins intéresse d'autres personnes.

J'accumule beaucoup de brouillons dans mon fichier posts.org, que je synchronise avec mon téléphone via Syncthing pour éditer sur Orgzly Revived. De temps en temps, j'utilise une carte arborescente (ou treemap) pour visualiser les tailles des brouillons oubliés (et qui sont peut-être presque finalisés, il leur manque seulement une petite révision ou un ajout). (Hmm, je me demande comment je peux ajouter la taille du sous-arbre aux titres d'Org…)

2026-08-29_08-16-41.png
Figure 1: Une capture d'écran de ma carte arborescente pour mon fichier actuel posts.org

En plus, j'apprécie l'analyse des tendances saisonnières ou annuelles dans ma fréquence de publication (qui me rassure sur le fait que les journées chargées de l'été sont normales et je retrouverai bientôt un peu plus de temps libre):

Tendances mensuelles
import json
import seaborn as sns
import re
from collections import defaultdict
import requests
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
with open('/home/sacha/proj/static-blog/_site/blog/all/index.json') as jsonfile:
    posts = json.load(jsonfile)
    jsonfile.close()
monthly_counts = defaultdict(lambda: defaultdict(int))
for post in posts:
    title = post.get("title", "")
    date_str = post.get("date", "")
    if re.search(r'emacs news', title, re.IGNORECASE):
        continue
    if date_str and len(date_str) >= 7:
        year = date_str[:4]
        month = int(date_str[5:7])
        monthly_counts[year][month] += 1
months_labels = ['Jan', 'Fév', 'Mar', 'Avr', 'Mai', 'Juin', 'Juil', 'Août', 'Sept', 'Oct', 'Nov', 'Déc']
years = ['2022', '2023', '2024', '2025', '2026']
df = pd.DataFrame(index=range(1, 13), data={'Mois': months_labels})
for year in years:
    df[year] = [monthly_counts[year][m] for m in range(1, 13)]
df.iloc[8:, -1] = None
df_long = df.melt(id_vars=['Mois'], value_vars=years, var_name='Année', value_name='Compte')
num_old_years = len(years) - 1
gray_shades = np.linspace(0.8, 0.3, num_old_years)  # 0.8 is lighter, 0.3 is darker
custom_colors = {year: str(shade) for year, shade in zip(years[:-1], gray_shades)}
custom_colors['2026'] = "#000000"  # Force the current year to pure black
widths = {year: 1 for year in years}
widths['2026'] = 3
plt.figure(figsize=(10, 5))
ax = sns.lineplot(data=df_long, hue='Année', x='Mois', y='Compte', size='Année', palette=custom_colors, sizes=widths, sort=False)
ax.set_xticks(range(12))
ax.set_xticklabels(months_labels)
plt.title("Fréquence mensuelle des articles sur sachachua.com\n(hors Emacs News)", fontsize=12, fontweight='bold')
plt.xlabel("Mois", fontsize=10)
plt.ylabel("Nombre d'articles publiés", fontsize=10)
plt.grid(True, linestyle='--', alpha=0.5)
plt.legend(loc='upper right')
plt.tight_layout()
plt.savefig('frequence.svg')
return df
  Mois 2022 2023 2024 2025 2026
1 Jan 6 19 20 23 16.0
2 Fév 0 3 0 10 8.0
3 Mar 0 5 1 24 15.0
4 Avr 0 2 1 14 22.0
5 Mai 0 1 1 9 15.0
6 Juin 0 3 1 9 13.0
7 Juil 1 0 0 6 9.0
8 Août 7 2 1 5 11.0
9 Sept 1 8 12 17 nan
10 Oct 2 12 29 11 nan
11 Nov 5 1 19 8 nan
12 Déc 4 15 6 6 nan
2026-08-30T08:43:07.159204 image/svg+xml Matplotlib v3.11.0, https://matplotlib.org/

et la croissance graduelle de mon vocabulaire français selon mon journal:

01_cumulative_vocab.png

Bien qu'ils ne soient pas des graphes de connaissances classiques, ils m'aident à voir des tendances qui ne sont pas évidentes au jour le jour.

Savoir collectif

Je suis plus intéressée par le réseau de savoir collectif plutôt que par mes notes personnelles. Depuis plus de dix ans, je rassemble et catégorise de nombreux liens pour Emacs News, ce qui permet de les parcourir. J'adore rencontrer beaucoup d'idées et de nombreuses personnes en chemin. C'est facile à faire et cela ne demande pas trop de temps, donc j'ai pu continuer ainsi malgré les interruptions de ma vie de maman. En parlant de graphes de connaissances, le bulletin d'information sert à connecter des nœuds et des personnes. De temps en temps, je suis très contente d'entendre qu'un article en inspire un autre, et encore un autre, puis une collaboration… C'est le pouvoir de créer des liens entre les personnes qui apprécient des choses similaires. Si je deviens incapable de faire ce bulletin hebdomadaire, j'espère que quelqu'un le continuera.

Grâce à mon assemblage de liens pour Emacs News, je rencontre souvent des occasions de recommander un article ou une personne en réponse à une question ou un message. Si je peux trouver l'article dans mon fichier d'archive d'Emacs News avec consult-line ou isearch, je peux coller le lien exact. De temps en temps, je veux présenter une personne, ce qui est un peu difficile sur Mastodon parce que les noms de Mastodon sont souvent très différents de leurs vrais noms. Je note les noms de Mastodon dans mon fichier people.org, et j'ai une petite fonction sacha-mastodon-insert-handle-from-contacts pour compléter les noms de Mastodon. J'ai aussi une autre fonction sacha-mastodon-insert-interested-handles qui ajoute des personnes qui peuvent être intéressées sur la base des correspondances d'expressions régulières dans le message, comme quand j'écris mes articles.

En plus des connexions entre des articles et des personnes, je suis également intéressée par les connexions entre des sujets. Avant d'apprendre une chose, quels sujets doivent la précéder ? Quand on apprend une chose, qu'est-ce qui est proche et plus facile à apprendre par la suite ? C'est peut-être utile pour donner des conseils ou des suggestions en tant que coach, ou pour apprendre en mode autodidacte. Les besoins et les chemins diffèrent selon la personne, donc c'est impossible de tracer un parcours qui convient à tout le monde. J'ai commencé à faire une carte des ressources pour les débutants, mais je pense que c'est toujours un peu intimidant, même pour moi. La place naturelle de ces liens est peut-être EmacsWiki pour permettre aux autres personnes de les trouver et de les enrichir, si je trouve une façon de sauvegarder les données et si je résous le problème de l'édition de quelques pages. En plus, si j'étudie les flux de travail et que je les classifie par aspect, je pourrais aider quelqu'un à trouver des ressources qui sont similaires à ses idées.

Je veux aussi identifier des lacunes sur lesquelles me focaliser quand j'ai du temps libre. Il y a beaucoup de ressources pour les débutants, mais grâce à l'immense capacité de personnaliser Emacs, il y a une explosion combinatoire de possibilités au niveau intermédiaire. J'ai hâte d'explorer mes questions et d'autres. C'est difficile de trouver et de naviguer dans les informations, donc si je commence avec des améliorations personnelles ou des questions concrètes de personnes spécifiques, c'est mieux que d'écrire isolément. Je suis sûre qu'en répondant aux questions individuelles, les points communs émergeront.

Je suis aussi fascinée par mes études sur d'autres sujets. J'apprends le français et je m'amuse tellement à bricoler mon environnement Emacs et mon processus d'apprentissage. Un des conseils pour les débutants est de développer des îlots linguistiques : les mots autour d'un sujet passionnant. (Comme cet article-ci que j'écris en français pour me forcer à enrichir mon vocabulaire.) Je me demande comment visualiser ces choses… Par exemple, si je récupère des listes de mots triés par fréquence (peut-être en analysant la base de données lexique), je peux créer une matrice de carrés… Hmm…

Mes obligations de maman diminuent au fur et à mesure que ma fille grandit. J'espère pouvoir consacrer plus de temps à explorer, à saisir et à partager des choses intéressantes.

View Org source for this post

2026-08-24 Emacs news

| emacs, emacs-news

Emacs 31.1 has been released, whee! Also, Divya's post An Introduction to Canvas in GNU Emacs is really cool and I'm looking forward to that becoming generally available in Emacs 32. =)

Links from reddit.com/r/emacs, r/orgmode, r/spacemacs, Mastodon #emacs, Bluesky #emacs, Hacker News, lobste.rs, programming.dev, lemmy.world, lemmy.ml, planet.emacslife.com, YouTube, the Emacs NEWS file, Emacs Calendar, and emacs-devel. Thanks to Andrés Ramírez for emacs-devel links. Do you have an Emacs-related link or announcement? Please e-mail me at sacha@sachachua.com. Thank you!

View Org source for this post

Emacs Chat 29: Abdallah Maouche (en français)

| emacs-chat, emacs-chat-podcast, emacs, french

Nous allons parler en direct avec Abdallah Maouche (heiwiper) (heiwiper/emacs.d, Gitlab, Github) d'Emacs, de ses flux de travail, de sa configuration, et d'autres sujets en français. Je suis un peu intimidée, mais si vous posez vos questions dans le chat, je pense que nous pouvons survivre à mon faible niveau de français. =)

J'ai essayé de corriger la transcription, mais je crois qu'il y a encore beaucoup d'erreurs, donc n'hésitez pas à m'envoyer un message.

La transcription légèrement corrigée

Details

0:01 Introduction

Sacha: Ok, vous êtes en direct.

Prot: On a le nouveau lien ou c'est le même ?

Sacha: C'est le même lien que Google Meet mais je vais copier le nouveau lien. C'est YouTube.com, sachactube... C'est difficile. Oui.

Prot: Oui.

Sacha: Je ne peux pas poster le chat. Donc, je vais poster sur les conférences. Comment dire? Ah! Ajoutez un commentaire. Et je vais aussi ouvrir. Oui. Donc, le chat est ici. Je pense.

Prot: Ah, take two. J'ai trouvé. Oui, oui.

Abdallah: Oui, j'ai trouvé moi aussi.

Sacha: Ça marche? Merci beaucoup pour votre patience. L'introduction ! Bonjour à toutes et à tous et bienvenue dans le troisième épisode d'Emacs Chat en français et le vingt-neuvième épisode de la série. Notre invité aujourd'hui est Abdallah Maouche, qui s'est fait aussi appeler par son pseudo heiwiper. Il vit en Algérie et le français n'est pas sa langue maternelle, mais il s'y est assez courageusement avec nous. Si on se retrouve totalement bloqué, comme moi, justement, pas de souci, nous pouvons passer au franglais ou à l'anglais. Ce n'est pas grave. Bonjour Abdallah et encore merci d'être là.

Abdallah: Merci, merci beaucoup. Merci pour l'invitation. Ça me fait un grand plaisir de parler à vous deux, car je vous suis sur votre blog et sur la chaîne YouTube. Donc, j'ai très hâte de converser avec vous.

Sacha: Et merci aussi à Prot de se rejoindre à nous pour cette expérience. Nous faisons de notre mieux ensemble. Merci beaucoup.

Prot: Je t'en prie, je t'en prie. C'est parti. Oui, c'est magnifique, c'est magnifique.

3:13 Apprentissage

Sacha: Abdallah, contrairement aux invités précédents, tu utilises Emacs depuis seulement sept ans. Je plaisante. C'est déjà pas mal, c'est génial. Peux-tu me raconter ton parcours d'apprentissage d'Emacs moderne? Comment est-ce que tu l'as découvert?

Abdallah: Donc, ça a commencé environ 2019-2020. À ce moment, j'ai découvert Linux pour la première fois et j'ai commencé à explorer les applications open source. C'était quelque chose de nouveau pour moi. Donc, à un certain niveau, j'avais besoin d'un texte éditeur parce qu'en université, on avait utilisé des environnements de développement spécialisés pour des langages spécifiques. Par exemple, il y avait Eclipse pour Java et je pense CodeBlock, c'était pour C, C++. Et puis au master, il y avait tellement de langage que c'était difficile de garder le même flux de travail. Donc, je me suis rendu au répertoire des applications de distribution Linux que j'utilisais à l'époque. Et j'ai parcouru la liste et j'ai trouvé plusieurs éditeurs et parmi ces éditeurs, bien sûr Emacs. Je l'avais installé, j'ai installé tous les éditeurs en fait. Mais le problème c'est quand je l'ai testé, ça n'a pas vraiment, ça m'a pas plu. C'était un peu, l'interface graphique était un peu, je ne sais pas comment dire, un peu moche. Oui donc, et aussi il y avait le logo Emacs avec le GNU et le E ça ressemblait à le symbole Epsilon. Donc ça me rappelait un peu des maths et je voyais les keybindings avec les moins et tout. Je me suis dit c'est un éditeur pour les mathématiciens. Donc j'ai installé Atom et j'ai utilisé Atom. Après quelques mois, je pense, j'ai vu une vidéo à propos de Spacemacs. Parce que j'apprenais Game Engine Godot. Donc j'ai vu dans une chaîne Spacemacs et c'était très intéressant. Donc j'ai installé et j'ai appris les keybindings de Vim parce que c'est plus recommandé dans Spacemacs. Et je l'ai utilisé pour une période et puis je pense que j'ai J'ai changé la configuration pour utiliser les keybindings Emacs après parce que l'intégration de Evil, l'intégration des Vim keybindings n'était pas parfaite. Il y avait des trucs qui manquent et c'était un peu frustrant. Donc, j'ai dû switcher à Emacs Keybindings. Et je pense, après un certain temps, j'ai eu mal à configurer Spacemacs. La communauté était un peu trop petite. Oui, quand je rencontre des problèmes et je vais dans le Reddit d'Emacs, je ne sais pas comment appliquer les solutions à Spacemacs. Donc, je me suis dit, je vais devoir changer et utiliser Emacs, ce qu'on appelle Vanilla Emacs. Je pense que j'ai vu les vidéos de David Wilson. Est-ce que vous le connaissez?

Sacha: Oui, bien sûr.

Abdallah: Oui, System Crafters. C'est sa chaîne YouTube. Et j'ai suivi son tutoriel et depuis ce moment, je configure mon Emacs from scratch depuis le début. Et maintenant, j'ai une configuration, celle que je vous ai envoyée. Je l'ai publiée sur mon GitHub. Et je l'utilise quotidiennement pour les trucs personnels et au travail aussi.

Sacha: Les kits de débutants Spacemacs réduisent les peurs pour toi. Et après que tu [t'es] habitué à Emacs, tu repasses vers Emacs.

Abdallah: Oui, exactement. Je pense que le point important à l'époque, c'était l'interface graphique. Spacemacs avait une interface déjà configurée et c'était un peu attractif quand on voit la config Spacemacs. C'est pour ça que j'ai utilisé Atom, parce que c'était un peu aussi... Il avait une interface qui m'a plu.

Prot: Je crois que c'est aussi plus facile de découvrir les fonctionnalités avec quelque chose comme Spacemacs. Oui, je pense... Oui, c'est difficile.

Abdallah: Oui, parce qu'il y a des... La configuration de Spacemacs, c'est comme si... La configuration de Emacs avec beaucoup d'abstractions. C'est comme si on ajoute des couches de programmation, couche de langage, je ne sais pas, Java ou bien quelque chose comme ça. Donc, on va ignorer le fait qu'il y a des serveurs LSP et tout. En fait, il faut juste spécifier quel serveur tu veux utiliser et Spacemacs va configurer tout. Donc, c'est une abstraction de la configuration Emacs. Mais ça reste en Emacs Lisp.

Sacha: Est-ce que c'est difficile de traduire ta configuration de Spacemacs à ta propre configuration?

Abdallah: En fait, je ne connaissais pas assez Emacs Lisp, donc je n'ai pas essayé, mais ce n'était pas évident parce que Spacemacs, je pense que c'est C'est très différent de la configuration Emacs. Je pense qu'il y a beaucoup d'abstractions. Ce n'est pas évident de transférer la configuration et la traduire.

Prot: Parce que si Spacemacs utilise [les macros Emacs Lisp], tu dois connaître les macros. Autrement, tu ne peux pas transférer le même code.

Abdallah: Oui, évidemment, vous avez raison. Oui, les macros, c'est un peu sensible.

Sacha: J'aime bien ta configuration. Ta façon d'utiliser des variables pour simplifier ta configuration d'org-capture est une bonne idée. Peux-tu rendre cette section de ta configuration pour nous la montrer?

Abdallah: Oui, bien sûr. Je vais juste partager mon écran.

Sacha: J'avais piqué l'idée. C'est plus simple que mienne.

Prot: Voler à volonté.

Abdallah: Oui, bien sûr. C'est disponible dans GitHub, donc je pense que c'est... Ok, donc là, j'ai essayé de créer une configuration spécifique pour cette démo, juste pour montrer les différents trucs d'Org Mode et tout. Donc, on va aller vers la configuration des Org Capture, c'est ça ?

Sacha: Oui, org-capture-templates. Oui, oui. Oui, oui, oui, j'adore. J'adore l'utilisation de variables pour simplifier la configuration.

Abdallah: Oui, ce qui me plaît dans cette configuration, c'est que la partie où je définis le template, On dirait que c'est la note parce qu'il y a le titre et puis il y a des sauts de ligne et la concaténation ici, elle fait comme si c'est une note réelle. Et puis, la partie ici, ce n'est pas assez chargée parce que là, je définis juste la variable. Donc, je peux voir toutes mes captures dans une seule page. Je n'ai pas besoin de... Faire un scroll tout au long du fichier pour voir toutes les captures que j'ai définies.

Sacha: Ta variable heiwiper/org-jira-task est définie dans un autre fichier, je pense?

Abdallah: Non, j'ai transféré toutes les parties intéressantes dans un seul fichier juste pour la démonstration. Donc, vous pouvez l'avoir ici. Donc, cette template, elle me permet de créer une tâche et aussi associer le lien Jira pour cette tâche parce qu'on utilise Jira au travail. Donc, je vais vous montrer un exemple. Par exemple, ici, je vais... Bon, j'ai exécuté l'org-capture. Vous voyez ici, il y a plusieurs captures, ce qu'on a défini ici. Et là, il y a Jira Task. Donc, je vais cliquer le J. Et bon, vous pouvez ignorer ceci. On va voir le prompt. Donc ici, ce que je fais, c'est que je prends la tâche Jira que j'ai sur email ou bien sur le navigateur. Je copie le lien. Par exemple, on va faire un exemple. https://jira.com/... Et là, d'habitude, les tâches Jira, c'est quelque chose comme ça. On va dire BG comme si c'était un bug ou... et une référence. On va dire 1, 2, 3, 4. Et puis, je vais cliquer entrer. On suppose que celui-ci est le lien de la tâche. Et là, je vais copier le titre de la tâche. Là, je vais juste écrire quelque chose. Et puis là, j'ai quelques tags. Ça va me servir plus tard pour organiser les tâches. Donc j'ai Bugfix, Feature, Refactor, Enhancement. Je vais sélectionner Bugfix. Et là, vous pouvez voir la tâche finale. Il y a le lien de la tâche. On peut cliquer sur C-c C-o pour accéder directement à la tâche. Il y a aussi la description. Et ce que j'aime dans ce workflow, c'est que je peux écrire Des choses ici à propos de cette tâche. Par exemple, des fois, j'écris des commandes de shell pour exécuter un appel d'API ou quelque chose comme ça. Je vais écrire tout ici. Par exemple, curl. Je ne sais pas. Donc, c'est ça. Et puis, on clique sur C-c C-c pour sauvegarder. Et à ce point, j'ai sauvegardé la tâche. Je vais vous montrer l'agenda que j'ai spécifique pour les tâches. Vous pouvez voir ici Tasks by Type et Tasks by Service. On va dire Tasks by Type. Voici la tâche que j'ai définie. C'est bien catégorisé sous la section Bug fix. Et vous pouvez aussi l'avoir ici parce que là j'aime déplacer les tâches vers des fichiers spécifiques donc parfois je déplace les tâches ici pour avoir des fichiers un peu organisés.

Sacha: Tu as un fichier très organisé, je pense, parce que tu as aussi des comptes de tâches dans ta mode-line.

Abdallah: Ah oui. Oui, en fait, à propos de ce compteur, c'est quelque chose que je suis en train d'expérimenter avec. Donc, j'utilise une méthode para, je ne sais pas si vous avez entendu parler, pour organiser un peu mes notes et mes tâches. Et j'aime savoir combien de notes j'ai sur le fichier inbox. Parce que la plupart du temps, les tâches, je les déplace vers des autres fichiers parce que j'utilise l'application Orgzly. Donc, les tâches ne restent pas généralement dans ce fichier inbox. C'est plutôt les notes. Bon, je peux vous montrer le fichier ici, c'est juste un exemple. Mais c'est plutôt comme ça. Il y a des notes et des tâches. Voilà. Plus la tâche qu'on a créée maintenant. Et pour être honnête avec vous, j'ai jamais atteint le nombre zéro. D'habitude c'est 10, 20, mais ça n'augmente pas trop, parce que, généralement, c'est juste des notes. Ils sont disponibles au cas où je veux chercher les notes. Je me sens pas la pression de les déplacer. C'est just quand j'ai assez du temps J'ai le compteur devant moi et c'est bon, je vais devoir déplacer quelques notes puisque j'ai un peu de temps.

Sacha: De mon côté, je pense que ma boîte de réception a grandi constamment, sans cesse. Est-ce que tu as déjà ton bullet journal?

Abdallah: Oui, je l'ai utilisé il y a deux ans. J'ai aussi écrit un blog post à ce propos. Pour être honnête, c'était une expérience, mais je pense que ce n'est pas pour moi parce que j'ai arrêté après un an car je pense que j'ai besoin des notifications. Ce que je faisais, en fait, c'est que je pouvais garder la routine de voir mon journal chaque jour. Mais le problème, c'est que parfois, j'ai besoin de me rappeler que je dois faire quelque chose, par exemple, 12h30. Et je ne peux pas garder les tâches sur ma tête. Donc ce que je faisais, c'est chaque matin, je vois les tâches sur le bullet journal et je le déplace. Je les écris dans mon téléphone, in to do list. Mais c'est un peu pourquoi ne pas utiliser le téléphone.

Prot: C'est double de travail.

Abdallah: Oui, double de travail. J'ai essayé de l'intégrer avec Emacs en utilisant Org Journal, mais Le problème, c'est que j'utilise pas beaucoup l'ordinateur, donc c'est plutôt le téléphone. Donc la méthode Bullet Journal, c'était pas pour moi. Donc j'utilise maintenant Org Mode avec Orgzly et ça marche très bien.

Sacha: Est-ce que tu as aussi de l'agenda d'Orgzly Revived ou juste pour saisir les tâches?

Abdallah: J'ai pas bien compris.

Sacha: Orgzly a aussi des agendas. Maintenant, ton agenda sur ton ordinateur est bien organisé. Il a beaucoup de sections. Mais sur ton téléphone, tu utilises aussi Orgzly pour voir ton agenda?

Abdallah: En fait, mon agenda personnel est celui par défaut du Org Mode parce que ma vie personnelle est assez simple. Donc j'utilise l'agenda par défaut. L'agenda que je vous ai montré, c'est pour le travail seulement. Et pour le travail, je ne garde pas les notes dans Oxley, c'est juste dans l'ordinateur de travail. Donc dans mon cas, je pense que Orgzly, il fait le travail. Donc j'utilise le même agenda, c'est pour ça.

Prot: Et c'est plus facile comme ça, d'avoir l'agenda seulement à l'ordinateur. L'agenda plus organisé.

Abdallah: Oui, l'agenda de travail, c'est plus efficace.

Sacha: L'écran est plus grand.

Abdallah: Oui, et aussi pour les tâches en relation avec le travail, je n'ai pas besoin de mon téléphone pour les accéder. Quand je suis au travail, je vais voir sur mon PC, sinon ce n'est pas la peine.

Sacha: Utiliser Emacs pour d'autres intérêts comme l'apprentissage d'une langue étrangère ou...

Abdallah: En fait, j'ai passé par la phase de ce qu'on appelle Rabbit Hole, Emacs. Donc, je peux vous dire que j'utilisais Emacs pour plein de choses. J'ai même utilisé EXWM, le Window Manager. Oui. J'ai aussi utilisé l'autre, je ne me rappelle pas comment il s'appelait. C'était un Window Manager en Common Lisp, pas en Emacs Lisp. Je ne me rappelle pas de son nom, mais il est assez connu dans la communauté Lisp. Donc oui, j'utilisais plein d'autres trucs, mais pas pour l'apprentissage de langue. Mais avec le temps, j'essaie d'être plus pragmatique. Donc j'utilise les outils adaptés quand je trouve qu'il y a des difficultés ou bien il y a des problèmes. Par exemple, je vais vous donner un exemple réel. Je voulais utiliser Emacs pour envoyer des requêtes quand je fais du programmation pour tester des API et tout. Parce que c'est très efficace pour mon workflow. Je vais vous dire un exemple plus tard. Mais parfois, je rencontre des problèmes où il y a certains types de requêtes où ils ne sont pas supportés par le package qu'offre Emacs. Donc je me trouve avoir switché à un logiciel qui est adapté pour ce truc. Et donc dans ce cas, j'utilise plutôt les logiciels adaptés. Et pour l'exemple que je voulais mentionner, c'est que j'utilisais des macros pour envoyer des requêtes à travers Org Mode. Et puis je récupère des données de cette requête et pour exécuter une autre requête, juste pour simuler un workflow d'un utilisateur réel. C'était très utile parce que ça m'évite de cliquer plusieurs boutons dans plusieurs logiciels et j'exécute juste le macro Emacs et il fait tout et je vais juste voir le résultat.

Prot: C'est mieux comme ça.

Abdallah: Oui, c'est bien mieux. Plus efficace. Oui, bien sûr.

Sacha: Et moins d'erreurs. Je déteste le clic qui est nécessaire pour le flux de travail dans d'autres applications.

01: Oui.

Sacha: Ton flux de travail. J'aime les petites conditions que tu utilises dans ta configuration, comme helm-chart-template-p dans magic-mode-alist ou org-refile-target-verify-functions pour filtrer les tâches et ton-before-save Hook qui reformat le tampon selon le mode majeur. Dans ta configuration, quelles sont tes modifications préférées?

Abdallah: En fait, j'ai du mal à répondre à cette question parce que c'est tout le fichier qui est configuré et ça fonctionne un peu interconnecté. Donc, je ne peux pas vraiment choisir une partie préférée. Mais je vais dire les modifications qui ont relation avec Org Mode, c'est ce que j'aime trop parce que ça me facilite un peu le flux de travail avec Org Mode.

25:10 Compter les items dans l'inbox

Abdallah: Par exemple, celui-ci où je compte les items que j'ai dans l'inbox.

Sacha: Parce que nos auditeurs peuvent rater les petites icônes, les petites affiches dans ta mode-line avec les boîtes.

Abdallah: Ah oui, je ne sais pas s'il y a une méthode pour l'afficher un peu plus grand, mais c'est juste là, à côté du Org Agenda. Je vais changer ici pour montrer que ça compte ces lignes.

Sacha: C'est une bonne idée. Si tu accumules beaucoup de tâches, les chiffres dans ta mode line te harcèlent.

Abdallah: Oui, bien sûr. C'est toujours là pour me rappeler en cas où j'oublie de... En fait, mon Emacs actuel, il contient, je pense, environ 160. Mais attention, c'est juste parce que je viens de migrer mes notes depuis un autre logiciel. Après avoir migré vers Org Mode, j'ai utilisé AnyType pour les notes. Donc je viens juste de l'émigrer la semaine passée et j'ai pas eu assez de temps pour les déplacer. Donc là je sais que je dois les déplacer parce que sans eux c'est trop.

Sacha: Le problème de tout le monde.

Abdallah: Oui bien sûr.

Sacha: J'aime aussi ta fonction pour récupérer des données, app-core-get-device-ids-by-username. Il y a aussi une autre fonction app-core-delete-items-by-store-id qui semble utile pour ton travail. Tu utilises Emacs pour automatiser des fonctions et tu utilises le shell script.

27:36 Emacs Lisp et d'autres langages

Sacha: Dans quelle situation est-ce que tu préfères écrire ce genre de fonction dans Emacs Lisp plutôt que Shell ou un autre langage?

Abdallah: En fait, j'aime bien le langage Lisp en général. J'aime bien écrire en Lisp malgré que je n'ai pas assez de code base écrit en Lisp. J'ai un peu contribué à, enfin, 1 ou 2 Repos. Mais pour ces fonctions-là, je les générais avec l'intelligence artificielle parce que ça me facilite des tâches un peu répétitives, trop répétitives. Et pour optimiser un peu le temps et aussi pour pouvoir les appeler à travers Emacs. C'est très utile parce que juste en cliquant un bouton, je peux savoir l'information que je vais utiliser. Et je pense que c'est mieux comparé à un shell script où je dois savoir où est le shell script et aller l'exécuter et un peu ouvrir un terminal. Donc là, j'utilise Emacs pour programmer. Je peux appeler cette commande pour extraire une information. Il y a aussi le fait qu'il y a des prompts. Dans Emacs, donc je sais exactement ce que je dois fournir. Et ça me facilite trop le travail, surtout les tâches répétitives, parce que si ça ne répète pas, je ne vais pas écrire une fonction. Et puisque je suis intéressé juste aux résultats, donc je les génère en utilisant l'intelligence artificielle, puisque ça me donne un bon résultat. Je ne m'intéresse pas à ce que ça soit optimisé ou non.

29:32 L'intelligence artificiale

Sacha: Je me demande que tu utilises quelques interfaces pour l'IA dans Emacs comme aidemacs. Ah oui, oui. Qu'est-ce que tu penses?

Abdallah: En fait, je ne sais pas si tu as remarqué dans ma config, il y a pas mal de packages d'IA. J'ai dû utiliser la plupart pour les comparer. Parce qu'en fait, la partie plus difficile pour moi, c'est d'observer les changements qui sont faits par l'IA. Donc, j'ai utilisé tous les packages d'Emacs pour les comparer. Je pense que le meilleur package que j'ai utilisé était eca. Je ne sais pas si vous êtes au courant. Mais actuellement, j'utilise OpenCode dans Emacs. Donc, j'ouvre un terminal dans Emacs et j'utilise OpenCode. Ça me permet de mieux observer les changements et tout. Et parfois j'utilise gptel pour des petites questions sur Emacs sans avoir à ouvrir le terminal. Donc les packages que vous voyez dans ma config, c'est juste pour tester les différentes intégrations.

30:56 Les terminals

Prot: Et quel est le terminal de ton choix ?

Abdallah: Actuellement, j'ai migré vers Ghostel. Ça fait un mois, je pense. Mon problème, c'était Vterm, c'était très bien. Il a résolu tous mes problèmes. Mais il restait un seul problème, c'est les applications TUI. Ça ne marche pas bien sur Vterm. Donc, j'ai dû migrer vers Ghostel. Et là, ça marche très bien. Je peux vous montrer, par exemple, je vais ouvrir un exemple. Vim, par exemple. Bon, je ne sais pas si j'ai... Oui, mais je sais bien comment quitter, mais je ne vais pas ouvrir Vim. Bon, je ne sais pas si ça marche dans cette configuration, puisque c'est une nouvelle configuration. Peut-être je vais partager ma configuration originale pour juste vous montrer la différence.

Sacha: Je pense que tu as partagé seulement la fenêtre d'Emacs.

Abdallah: Oui, je vais changer vers l'autre fenêtre et je vais mettre sur que je ne partage pas quelque chose de sensible. Merci. D'accord, donc là... Est-ce que vous voyez la nouvelle fenêtre avec un... Oui. Parfait. D'accord, donc v-term... Ça doit compiler, d'accord. Je pense que j'ai lancé une mise à jour. Donc si je vais ouvrir Open Code ici. Je ne sais pas si ça va marcher bien. Ah oui, vous pouvez voir il y a un peu de décalage. Il y a ici le prompt. Là, c'est un peu bizarre. Oui, je vais ouvrir une autre fenêtre Ghostel juste pour vous donner une idée. Donc cette fenêtre est Ghostel, je vais ouvrir la même application. Donc là, vous remarquez déjà les couleurs, ils sont mieux que la session Vterm. Et oui, je pense que c'est clair que l'intégration est un peu mieux dans Ghostel. C'est très intéressant. Oui, parce que j'utilise pas mal de terminal TUI dans le travail, donc j'ai toujours une terminal ouvert, mais depuis que j'ai installé Ghostel, ce n'est plus le cas parce que je n'ai plus besoin d'une terminal pour ouvrir ces applications.

Sacha: Emacs assimile une autre fonction.

Abdallah: Oui.

34:14 Les jeux et les amusements

Sacha: Ça m'amuse quand je vois les jeux dans ta configuration et aussi la présence de Nyan Cat dans ta mode line. Quel est ton jeu préféré dans Emacs?

Abdallah: En fait, mon jeu préféré c'est Tetris. Le jeu du Emacs, oui. Celui qui est built-in. Mais j'ai découvert un truc, je ne sais pas si vous êtes au courant, mais le package Emacs de Fedora, il ne contient pas le jeu Tetris.

Prot: Oh non ! Seulement Tetris ? Les autres jeux ?

Abdallah: Oui, seulement Tetris. Parce qu'apparemment, il y a des trucs de copyright, je pense. Parce que j'ai cherché et j'ai trouvé que Ils l'ont enlevé parce qu'il y avait des trucs de droits. Mais les autres jeux que j'ai dans ma configuration, c'était juste pour les tester. Parfois, je lance Tetris, mais c'est rare.

Sacha: Le bricolage d'Emacs est un jeu aussi.

Abdallah: Oui, bien sûr. Et pour le Nyan Cat, je pense que ça fait un changement. Par exemple, quand tu es en train de travailler sur quelque chose, tu prends assez d'efforts et tout, et tu vois le Nyan Cat courir dans le mode line, ça te fait un peu du plaisir. Et je me rappelle que je dois relaxer. Oui.

36:07 La communauté

Sacha: Tu as des collègues qui utilisent Emacs aussi ? Ou tous les collègues pensent que tu es fou ?

Abdallah: Oui, je pense que c'est le deuxième cas. La communauté Emacs dans l'Algérie, ce n'est pas grande. J'ai seulement rencontré une seule personne dans ma vie qui utilise Emacs. Je n'ai même pas son contact, donc je l'ai juste rencontré dans une formation, je pense. Parce que je l'ai vu utiliser Magit. Je pense qu'il y a deux collègues qui utilisent Neovim. Je ne sais pas s'ils sont en train de nous regarder parce que j'ai partagé le lien avec eux. Donc s'ils sont en train de nous regarder, je leur passe le bonjour. Et je pense que les autres utilisent VS Code. Donc seulement ces deux utilisent Neovim et les autres VS Code. C'est tout.

Prot: Je crois que c'est le même partout.

Abdallah: Ah bon? Je pensais que c'est un peu différent en Europe ou bien en Amérique. Parce qu'il y a, quand je lis le feed de Sacha, je vois toujours des meets. Des événements organisés, oui. Et à chaque fois que je vois ces événements, je me dis peut-être il y aura un événement en Afrique ou bien en Afrique du Nord, mais il n'y a jamais un événement dans ces endroits. Je pense que c'est juste en Europe ou bien en Asie ou en Amérique.

Sacha: Les événements sont ouverts à tous, donc... Je pense que je vais à l'Emacs Berlin en ligne de temps en temps. Tu veux aussi le rejoindre?

Abdallah: Bon, rejoindre un événement dans l'Europe, c'est un peu compliqué. Donc, je peux seulement rejoindre virtuellement?

Sacha: Oui, bien sûr.

Abdallah: Mais je parlais des événements présentiels. Il n'y a pas d'événement présentiel dans ces régions. C'est juste en Europe.

Sacha: Je ne peux pas aller à l'événement présentiel.

Abdallah: Ah d'accord.

Sacha: Donc je me focalise aussi sur les événements virtuels.

Abdallah: Ah d'accord. Donc c'est le cas pour tous. Je pense que Prot aussi.

Prot: Je ne [connais] personne ici. Même que Vim.

Abdallah: Bon, mais je pense que... Est-ce que tu as des contacts avec des gens qui ont un peu le... Un peu de connaissances techniques dans la région où tu vis, parce que j'ai vu que c'est un peu éloigné de la ville et tout.

Prot: Oui, non, non. Ici, les gens ne sont pas techniques. Avec les ordinateurs. Ils sont plus techniques avec les autres choses. Par exemple, l'agriculture.

Abdallah: Ah oui, oui, bien sûr. Oui, donc... Ton cas est pire que moi, parce que moi je rencontre des gens, mais ils n'utilisent pas Emacs.

Sacha: Heureusement, la communauté Emacs est très bien en ligne, donc je ne me sens pas isolée.

Abdallah: Oui, oui, évidemment. Je pense que si la communauté en Reddit, je trouve que c'est rare qu'il y a une communauté qui est assez, comment dire? Donc tous les gens sont bien, ils parlent d'une bonne façon, ils te donnent des conseils. Il y a rarement ces commentaires toxiques qu'on trouve généralement sur Reddit. Donc c'est ce que j'aime dans la communauté Emacs. Et tout le monde, ils sont bien.

Prot: Est-ce que tous les gens veulent t'aider? Parce que tous les gens comprennent que Emacs est très difficile.

Abdallah: Oui, c'est le cas, oui. Je peux imaginer. Parce que j'ai partagé un post il y a quelques jours sur Magit et il y a plein de gens qui me donnaient des astuces parce que j'ai demandé s'il y avait des astuces supplémentaires. Ils m'ont donné des astuces. Il y avait même des paragraphes très longs. C'était très sympa, oui.

41:44 Accent

Sacha: En lisant ta configuration, j'ai aussi des questions sur le paquet accent pour saisir. Utilises-tu, au lieu de méthode de saisie ou input method sur Emacs ou sur ton système, qu'est-ce qui te plaît dedans?

Abdallah: En fait, je n'utilise pas le français souvent. Donc, et mon clavier est anglais. Donc, quand je veux écrire quelque chose en français, je vais juste écrire en anglais et puis ajouter des accents. Par exemple, je vais dire, je ne sais pas, j'étais dans un live stream et je vais aller ici, je vais faire Accent Menu. Je vais juste changer, sans devoir changer le clavier parce que je ne me rappelle pas l'emplacement des lettres accentuées dans le clavier. Donc je veux juste le faire dans Emacs et je le copie dans un autre navigateur ou bien quelque chose comme ça. J'ai seulement le clavier anglais et le clavier arabe parce que c'est totalement une différente méthode d'écrit. Est-ce que vous utilisez ce package puisque vous apprenez le français?

Prot: Moi non, moi j'utilise l'input method.

Abdallah: Ah d'accord. C'est quelque chose intégré dans Emacs j'imagine, parce que je pense que j'ai entendu parler. Oui, c'est exactement comme ça.

Sacha: Il y a peut-être une vidéo récente sur les méthodes d'input, non?

Abdallah: Je pense que c'est une fonctionnalité intégrée dans Emacs. C'est vrai? Parce que je me rappelle que j'ai une fois, je l'ai activé par accident.

Sacha: C-\.

Abdallah: Oui et je pouvais écrire en arabe dans Emacs. Et je me demandais pourquoi parce que le clavier était en anglais. C'était un peu... Mais c'est une fonctionnalité très intéressante. Je vais voir plus tard.

Sacha: Je pense que tu as répondu à toutes mes questions que j'ai préparées sur ta configuration, donc la conversation est libre. J'ai une question.

44:45 Tes prochaines étapes

Sacha: Quelles sont tes prochaines étapes pour apprendre Emacs? Qu'est-ce qui t'intrigue?

Abdallah: Actuellement, je veux apprendre, un peu me familiariser avec les macros parce que je les ai utilisés précédemment, comme je vous ai dit dans l'exemple. Mais je ne suis pas assez familier et je veux l'intégrer plus dans mon flux de travail pour un peu automatiser des trucs. Et je veux aussi... Je veux aussi apprendre Emacs Lisp. En fait, je connais le langage Lisp, donc c'est un peu facile, mais je trouve qu'il y a des fonctions très spécifiques d'Emacs qu'il faut apprendre pour maîtriser Emacs Lisp. Oui, c'est très intéressant, surtout pour pouvoir contribuer dans la communauté Emacs. J'ai voulu contribuer il y a quelques mois sur un package Emacs, mais j'ai trouvé qu'il fallait faire un peu [de] paperasse, paperwork parce que c'est en relation avec GNU. Et oui, donc c'était un peu difficile. Il fallait demander à mon employeur de signer quelques trucs et tout. Et il pense que je vais travailler ou quelque chose comme ça. Oui, donc c'était un peu difficile, mais je veux bien apprendre Emacs Lisp pour pouvoir contribuer et aussi pour faciliter des flux de travail personnels.

Sacha: Si tu veux aller contribuer à NonGNU ELPA, je pense que la paperasse n'est pas nécessaire.

Abdallah: Je pense que le package que j'allais contribuer à était sous la licence Emacs. Il s'appelle dape. C'est un debugger pour eglot. Il s'intègre avec eglot. Je pense que c'est une exigence dans le package lui-même.

Prot: C'est pour tous les paquets dans le répertoire GNU ELPA.

Abdallah: C'est le cas. Mais je pensais que c'était juste pour les packages qui sont intégrés dans Emacs. Parce que ce package, il était disponible sur GitHub, mais le maintainer, il exige que le code soit sous licence de GNU.

47:39 Org Mode et des tableaux

Abdallah: Aussi, j'aimerais bien manipuler Org Mode De plusieurs façons. Par exemple, récemment, j'ai un peu testé les tableaux. J'ai utilisé les tableaux pour essayer de gérer mes dépenses personnelles. Oui, c'était très intéressant. Parce que des fois, il y a des fonctionnalités dans Org Mode, même dans Emacs, où on ne sait pas vraiment ce qu'on va avoir comme fonctionnalités. Si on ne va pas vers le manuel, donc si tu ne lis pas le manuel, tu ne sais pas que cette fonctionnalité existe. Par exemple, les tableaux, si on ne va pas dans le manuel et on voit que les tableaux, il permet de faire des calculs et automatiser des formules, ça ne serait pas évident de savoir cette information parce que le format Markdown, il n'offre pas cette fonctionnalité. Je peux, je pense, vous montrer un exemple. Je pense que je l'ai quelque part sur cette démonstration. Là, je vais démontrer comment je cherche une note. Donc, je vais chercher « budget ». J'espère que je vais le trouver. D'accord, donc « monthly budget ». Là, j'ai changé les valeurs pour la vidéo. Mais vous pouvez voir par exemple là, j'ai des catégories de dépenses. J'ai par exemple le salaire ici et le salaire du mois. Par exemple, en cas où dans un certain mois, j'ai plus ou moins de ce chiffre. Et là, j'ai le nombre que je peux associer à ces catégories. Et ça diminue à chaque fois que je... J'associe un numéro ici. Par exemple, là, si je vais changer celle-ci en 4 et je vais faire un calcul, ça change toutes les valeurs ici pour savoir combien il nous reste pour la catégorie Savings. Si je vais augmenter, ça va aussi changer, je pense. Oui, vous remarquez que ça va changer ici. Donc, je peux associer parce qu'en fait, j'utilise la méthode Budget... Non.

Sacha: You Need A Budget.

Abdallah: Enveloppe. Enveloppe, budget. Oui, oui, oui.

Sacha: Moi aussi, moi aussi.

Abdallah: Ah, d'accord.

Sacha: Je connais le livre.

Abdallah: J'utilise cette méthode et chaque mois, je vois ce tableau et je commence à diminuer pour chaque catégorie et je mets l'argent dans chaque enveloppe pour m'organiser un peu. Et cela me permet de...

50:40 Ledger, Hledger, Gnucash

Sacha: Dans Emacs, j'utilise Ledger pour faire ça. J'utilise aussi le système d'enveloppe virtuelle pour gérer mes dépenses, mes économies. J'adore le système d'enveloppe virtuelle. Tu connais Ledger?

Abdallah: Ledger, oui. Ledger, le mode sur Emacs.

Sacha: Et aussi un outil, un outil de lien de commande.

Abdallah: Oui, oui, bien sûr. Je pense que c'était écrit par John Wiegley.

01: Oui, oui.

Abdallah: Je l'ai utilisé à un certain moment, j'ai oublié de mentionner. Donc, oui, je l'ai utilisé pendant, je pense, quelques années. C'était très intéressant. Mais mon problème, c'était la visualisation. Il y avait une intégration avec gnuplot, si je me rappelle bien. Mais c'était un peu compliqué à configurer et j'avais besoin de quelque chose de simple. Donc j'ai arrêté d'utiliser Ledger et j'utilise maintenant Gnucash.

Sacha: Je [connais] aussi hledger qui a beaucoup de visualisations sur l'interface web. Donc si tu veux des visualisations...

Abdallah: Il s'appelle comment?

Sacha: Hledger.

Abdallah: hledger, ok. Je vais noter.

Prot: Avec le h.

Sacha: Le format des données est assez pareil, mais il y a une interface web pour explorer des données.

Abdallah: Ah d'accord, je vois. C'est intéressant, je vais voir plus tard. Est-ce que vous avez utilisé Gnucash ?

Sacha: [J'ai utilisé Gnucash] il y a beaucoup d'années pour gérer les finances de mon entreprise, mais je préfère ledger parce que c'est dans Emacs.

02: Oui, oui.

Sacha: Donc, j'ai fait justement un fichier Org avec tous mes reports. Et une fois que j'ai fait les reports, je les laisse. Je les laisse pour juste reexecuter.

Abdallah: Est-ce que vous avez documenté votre méthode de gérer cela ?

Sacha: Oui, j'ai une blog post de mon système d'enveloppe virtuelle avec Ledger. Je vais t'envoyer le lien.

Abdallah: Oui, ce serait intéressant de voir.

Sacha: Tu peux utiliser ta transaction virtuelle et tu peux définir les règles pour ajouter ou [soustraire] des comptes [correspondants] pour chaque transaction.

Abdallah: En fait, je faisais exactement ça. C'est de créer des comptes virtuels et puis l'utiliser pour faire des budgets comme enveloppe budgeting. Oui, j'ai fait exactement ça. Je pense que je l'ai trouvé quelque part dans Reddit.

Sacha: Donc si j'importe les données de ma banque, presque toutes les transactions sont catégorisées automatiquement.

Abdallah: Ah d'accord, c'est très bien. J'ai toujours voulu avoir cette intégration mais les banques ici n'offrent pas des fonctionnalités similaires.

Sacha: J'ai téléchargé chaque [CSV] manuellement.

Abdallah: Ah, le fichier CSV?

Sacha: Oui, le fichier CSV.

Abdallah: Ah d'accord, donc vous allez manipuler le fichier CSV pour le convertir. D'accord, je vois, je vois.

Prot: Et c'est difficile de le convertir?

Sacha: Non, non, j'ai créé une fonction pour utiliser la bibliothèque pcsv pour [extraire] les données [du] fichier CSV et après ça traduire vers le format Ledger.

Abdallah: C'est très intéressant. En fait, ça aurait été très utile dans mon cas parce que je le fais manuellement actuellement. Bon, je n'ai pas tellement de transactions sur mon compte puisque je gère mon compte personnel. Mais quand même, ça prend, je dirais, deux heures par mois. Juste pour synchroniser un peu. Les deux comptes. Le compte de Gnucash et celui de banque.

Sacha: Apparemment, une bonne excuse pour automatiser avec Emacs.

Abdallah: Oui, peut-être. Mais je ne sais pas comment... Est-ce qu'il y a une façon d'importer les données dans Gnucash? Je pense qu'il y a une manière, mais je ne l'ai pas encore explorée. Et aussi, je me demande si... Comment vous... Vous déplacez les dépenses dans les catégories. Comment vous le programmez?

Sacha: Par le nom du payee.

Abdallah: Ah d'accord.

Sacha: Donc si j'achète les aliments au supermarché, le nom du payee est No Frills. J'assigne les catégories par le nom.

Abdallah: Oui, parce que c'est la partie un peu que je trouve un peu difficile à automatiser dans mon cas parce que je dois le faire manuellement et il n'y a pas de nom de payee. Oui, parce que le CSV que je peux exporter dans la banque, il ne contient qu'un numéro que je ne sais pas le numéro de compte, je pense. Oui, les banques ici ne sont pas assez développées. C'est pour ça. Tant que tu peux extraire ton argent et que tu peux faire des transactions en ligne, tu es super.

Sacha: Je pense que je dois réveiller ma fille pour notre grande aventure au parc d'attractions. Donc, un grand merci à tous les deux pour notre conversation et [ta] patience avec nos erreurs techniques. À la prochaine.

Abdallah: Ça m'a fait un grand plaisir de converser avec vous. J'espère que c'est demain pour vous et on se voit dans la prochaine.

Prot: À la prochaine à vous aussi et à bientôt. Merci. À bientôt. Au revoir.

View Org source for this post