Mon flux de travail de programmation
| emacsen français
Pour le Carnaval d'Emacs de juillet sur la programmation (merci à AndyDrop de l'accueillir !) :
Je m'occupe principalement de ma fille (particulièrement pendant les pauses scolaires comme l'été), donc mon temps, mon attention et mon énergie sont très limités. Je dois avancer petit à petit car c'est difficile de trouver plus d'une heure pour du travail profond. Je suis chanceuse si je finis une ou deux de mes propres tâches pendant la journée.
Presque toute ma programmation est pour mes propres objectifs à l'exception de quelques heures de temps en temps quand je travaille comme consultante. Pour mon client, j'écris des prototypes en utilisant JavaScript (ou Python, rarement).
Je préfère écrire la plupart de mes outils dans Emacs Lisp parce qu'Emacs me donne une interface interactive et l'intégration potentielle avec tous mes autres outils Emacs. Ça signifie que je peux peut-être en tirer un grand bénéfice pour un petit effort.
À cause de mes limites, je suis souvent interrompue. Utiliser Org Mode me permet d'inclure des notes et des liens en cours de route, ce qui est absolument essentiel pour moi car j'oublie souvent ce à quoi je pensais une fois que je peux retourner à ma tâche après les interruptions d'autres idées ou de mes activités de maman. Si je finalise la tâche (ou au moins avance un peu), je l'ajouterai à ma configuration ou à mes notes, comme un flux de travail. Par exemple, mes tâches récentes ont inclus :
- Extraire mes tentatives de virelangues de mon enregistrement pour en faire une courte vidéo pour m'aider à me réécouter et pour suivre ma progression ; j'ai utilisé subed-record
- Compter mes tâches par état avec org-ql pour écrire un article
Je commence souvent par une tâche dans ma boîte de
réception Org Mode, où j'ajoute un ou plusieurs blocs de code, ce qui
est facilité par la configuration de la variable
org-structure-template-alist où je remplace l'entrée pour « l » par « src emacs-lisp » au lieu de
« export latex », comme ça :
(setq org-structure-template-alist
'(("a" . "export ascii")
("C" . "center")
("c" . "comment")
("d" . "my_details")
("e" . "example")
("E" . "export")
("m" . "export md")
("M" . "media-post")
("h" . "export html")
("j" . "src js :spookfox t")
("l" . "src emacs-lisp")
("p" . "src python")
("n" . "notes")
("q" . "quote")
("s" . "src")
("S" . "src sh")
("u" . "update")
("v" . "verse")))
De temps en temps, la tâche est plus facile si j'utilise des bibliothèques qui sont disponibles seulement pour Python ou JavaScript. Par exemple, Python a beaucoup de fonctions pour analyser des données ou faire des visualisations, et JavaScript est utile pour modifier des sites. Heureusement, je peux les utiliser avec les commandes shell-command-to-string ou make-process. Je peux aussi utiliser d'autres blocs de source et je peux rediriger les résultats vers d'autres blocs en utilisant la directive #+NAME et les paramètres :results et :var. Ça signifie que je peux choisir le langage le plus efficace. Par exemple, quand je veux analyser mes entrées de journal en français, j'utilise Python parce que la bibliothèque SpaCy peut identifier et classifier les lemmes de chaque mot et Pandas et Matplotlib peuvent les visualiser.
L'interaction directe avec des sites est facilitée par Spookfox, qui me permet de contrôler le navigateur Firefox d'Emacs, y compris l'exécution de JavaScript. (Ma configuration) Par exemple, je l'utilise pour extraire des données d'une page ou simplifier le code HTML pour le copier dans un document.
Si je veux utiliser la fonctionnalité en ligne de commande (comme mes scripts pour utiliser la reconnaissance vocale pour transcrire les enregistrements longs), j'écris un script séparé au lieu d'utiliser Org Mode.
L'implémentation d'une idée génère naturellement plusieurs idées. Je m'y habitue. Je ne finaliserai jamais ma liste de tâches. De temps en temps, je relis mes tâches et j'annule les tâches dont je n'ai pas besoin ou dont je n'ai pas envie.
Un jour, je voudrais configurer un flux de travail moderne avec toutes les améliorations que d'autres utilisateurs aiment, comme LSP ou Eglot, et je veux aussi finaliser des correctifs pour contribuer à Emacs et à des paquets. Mais pour le moment, ça suffit pour m'aider à survivre à cette étape de ma vie.
English
For the July Emacs Carnival on programming (thanks to AndyDrop for hosting!):
I mainly take care of the kiddo (especially when she doesn't have school, like this summer), so my time, attention, and energy are pretty limited. I have to make progress a little at a time because it's hard to find more than an hour for deep work. I'm lucky if I finish one or two of my own tasks during the day.
Almost all of my programming is for my personal stuff, except for a few hours from time to time when I work as a consultant. For my client, I write prototypes using JavaScript (or occasionally Python).
I prefer to write most of my tools in Emacs Lisp because Emacs gives me an interactive interface and I can integrate things with all my other Emacs tools. This means I can potentially get a big benefit for a small effort.
Because of my constraints, I often have to deal with interruptions. Using Org Mode allows me to include notes and links along the way, which is essential for me because once I've finally gotten back to my task after interruptions from other ideas or from family life, I've often forgotten what I was thinking about. If I actually finish the task (or at least make a little progress), I add it to my configuration or my workflow notes. For example, I recently:
- Extracted my tongue twister attempts from my recording to make a short video so that I could re-listen to it and track my progress; I used subed-record
- Counted my tasks by status with org-ql in preparation for writing a post
I often start with a task in my Org Mode inbox. I add one or more code blocks. This is easier since I've configured the org-structure-template-alist variable to replace the entry for "l" with "src emacs-lisp" instead of "export latex", like this:
(setq org-structure-template-alist
'(("a" . "export ascii")
("C" . "center")
("c" . "comment")
("d" . "my_details")
("e" . "example")
("E" . "export")
("m" . "export md")
("M" . "media-post")
("h" . "export html")
("j" . "src js :spookfox t")
("l" . "src emacs-lisp")
("p" . "src python")
("n" . "notes")
("q" . "quote")
("s" . "src")
("S" . "src sh")
("u" . "update")
("v" . "verse")))
Sometimes it's easier to do something if I use libraries that are only available for Python or JavaScript. For example, Python has a lot of functions for analyzing data or creating visualizations, and JavaScript is useful for modifying websites. Good thing I can use them with the shell-command-to-string or make-process commands. I can also use other source blocks and pipe the results to other blocks using the #+NAME keyword and the :results and :var parameters. This means I can choose whichever language makes sense. For example, when I want to analyze my journal entries in French, I use Python because the SpaCy library can identify and classify the lemmas of each word, and Pandas and Matplotlib can visualize them.
I use Spookfox to interact directly with websites. This allows me to control the Firefox browser from Emacs, including executing JavaScript. (My configuration) For example, I use it to extract data from a page or simplify the HTML code to copy it into a document.
If I want to use this from the command-line (like my scripts that use speech recognition to transcribe long recordings), I write a separate script instead of using Org Mode.
Implementing one idea naturally leads to several more ideas. I'm mostly used to that now. =) I'll never finish my to-do list, and that's okay. From time to time, I review my tasks and cancel the ones I don't need or don't want.
One day, I'd like to set up a modern workflow with all the enhancements that other folks enjoy, like LSP or Eglot. I also want to actually finish patches so I can contribute to Emacs and other packages. For now, this is just enough to help me survive this stage of my life!