XHTML.net

Technology talks by Loïc d’Anterroches

News, articles, PHP, scripts, XHTML/CSS, …

Emacs et org-mode pour votre gestionnaire de choses à faire (TODO list)

# By Loïc d'Anterroches, August 29, 2010.


Ce WE, j’ai pris le temps d’optimiser ma gestion de mes choses à faire, j’ai encore du travail, mais cela avance. Le but est d’augmenter ma productivité en coupant les phases lentes ou non efficaces. Si vous suivez tous les gourous et coachs, ils vous diront que pour devenir une référence dans votre domaine, pour réussir, il faut être bon dans le domaine et passionné. La combinaison "bon + passionné" permet de facilement mettre les heures qu’il faut dedans pour devenir excellent. Pourtant, pour être productif il faut appliquer la méthode inverse. Vous ne pouvez pas faire mieux que ce que vous faites déjà très bien, il faut au contraire diminuer les phases lentes et les pertes de temps, cela laisse plus de temps pour là où vous excellez mais aussi plus de temps pour faire d’autres choses intéressantes.

C’est le principe de la méthode TPM ou Total Productive Maintenance. TPM vient de l’industrie (c’est la méthode Toyota), l’idée est simple, regarder la productivité d’une machine ou ligne de production tout au long de sa vie. Cela veut dire faire une analyse fine dans la journée du temps réellement passé à faire chaque opération et classifier chaque opération pour avoir le décompte du temps sur la maintenance, la production, les incidents, etc. Cette première analyse permet déjà de constater que bien souvent, une ligne de production ne tourne guère au dessus de 80% du temps pour produire. À partir de ces informations, on peut alors commencer à agir.

"If you can not measure it, you can not improve it." Lord Kelvin

Dans cette dynamique, j’ai donc décidé de mieux suivre l’utilisation de mon temps dans ma journée. Si je peux produire autant mais mieux pour avoir plus de temps pour ma famille, cela serait très bien. Ma dynamique est celle d’une réduction du travail en multi-tâches et de la suppression des opérations répétitives et inutiles. J’utilise maintenant de plus en plus Conkeror pour naviguer sur Internet, cela réduit mon utilisation de la souris et j’ai décidé de me remettre à Getting Things Done couplé à un suivi de mon temps passé à faire les choses.

Pour cela, j’ai remis en place org-mode pour GTD. Il y a 3 ou 4 ans, peut-être même plus, j’avais utilisé avec succès le mode planner d’emacs, mais certaines limitations m’avaient finalement poussé à l’arrêter. En 4 ans, la situation a bien changé et org-mode répond à tous mes besoins que voici :

  • gestion d’une liste de choses à faire ;
  • pour chaque chose à faire, possibilité d’avoir des points de second niveau ;
  • pour chaque tâche, possibilité d’associer une date limite ou une date pour commencer ou les deux ;
  • possibilité de compter le temps passer sur chaque tâche et de faire un rapport ;
  • possibilité d’associer des labels et un statut pour chaque tâche.

Avec tout cela, l’ensemble de l’information tient dans un simple fichier texte facilement éditable sans emacs. Encore mieux, le format étant simple et structuré, org-mode me donne un joli plan de ma semaine en fonction de ce que j’ai défini dans mes tâches :

org-mode avec plan de la semaine sous emacs

Dans le buffer du haut, vous pouvez voir le fichier texte, certaines lignes sont cachées automatiquement par org-mode et la coloration permet de vite se repérer. Dans le buffer du bas, vous voyez comment org-mode interprète ce fichier texte pour en sortir mon plan de la semaine. C’est simple et élégant.

Pour cette semaine, il me reste à continuer la transition vers Conkeror. Je dois pour cela, entre autre, transférer mes mots de passe et mes sessions qui sont aujourd’hui sous Firefox, ce n’est pas très amusant car j’en ai beaucoup.

Conkeror, un autre navigateur web

# By Loïc d'Anterroches, August 28, 2010.

Par le truchement d’un billet sur la productivité des programmeurs, j’ai découvert Conkeror. Conkeror n’est pas un navigateur ordinaire, c’est un navigateur avec une navigation entièrement au clavier, utilisant des raccourcis très proches d’emacs et vi. Comme vous pouvez le constater sur la capture suivante, pas de boutons, rien. juste la page.

Capture d'écran de Conkeror

Pour "cliquer" sur un lien, il suffit de rechercher le texte du lien Ctrl+S textedulien et de taper sur la touche entrée ou de demander la liste des liens n ; puis de taper le numéro du lien. Dans la capture suivante, j’ai demandé le lien 24.

Demander un lien avec Conkeror

Cette navigation ultra-rapide, sans bouger les mains du clavier est déjà une amélioration extraordinaire. Si vous avez l’habitude de naviguer dans votre code avec votre clavier et sans souris, vous trouverez très rapidement vos automatismes avec Conkeror. Vous allez très rapidement vous sentir plus agile avec votre navigateur.

Mais maintenant, si vous êtes un programmeur, vous trouverez encore mieux. Par exemple, j’utilise le service d’Instapaper pour me garder une liste d’articles et billets intéressants à lire. Je peux en tapant Meta + x puis insta + Tab demander à envoyer la page courante vers Instapaper. Je peux aussi sélectionner un lien (comme dans la vue précédente) et demander d’envoyer ce lien vers Instapaper (je note même la page de référence du lien pour ne pas oublier). J’ai codé les fonctions pour faire cela en moins de 10 minutes !

Bien entendu, vous pouvez interagir avec votre propre site web si vous avez un gestionnaire de liens en ligne, etc. Suivant le principe d’emacs/vi vous avez un minibuffer pour afficher des informations intéressantes ou demander des informations. C’est simple, élégant et très rapide. Le seul défaut pour le moment est la gestion des bookmarks. On peut bookmarker mais ce n’est pas très efficace. Je vais donc coder une petite interface pour mes liens, cela fait longtemps que je voulais faire cela, c’est une bonne occasion.

Je vous recommande donc chaudement Conkeror.

Fonctions pour Instapaper à mettre dans ~/.conkerorrc
interactive("instapaper", "Send the current page to InstaPaper.",
            function (I) {
                check_buffer(I.buffer, content_buffer);
                let posturl = 'https://www.instapaper.com/api/add?' +
		'username=MYUSERNAME&' +
		'password=MYPASSWORD&url=' +
                    encodeURIComponent(I.window.content.location.href)
                    '&selection=' +
                    encodeURIComponent(
                        yield I.minibuffer.read(
                            $prompt = "Description (optional): "));
                try {
      		    var content = yield send_http_request(load_spec({uri: posturl}));
		    if (content.responseText == "201") {
		       I.window.minibuffer.message("InstaPaper ok!");
		    } else {
		       I.window.minibuffer.message("Error.");
		    }
                } catch (e) { 
                    I.window.minibuffer.message("Error.");
		}
		});

interactive("instapaper-link", "Send the current link to InstaPaper.",
            function (I) {
              bo = yield read_browser_object(I) ;
              mylink = load_spec_uri_string(load_spec(encodeURIComponent(bo)));
              check_buffer(I.buffer, content_buffer);
              let posturl = 'https://www.instapaper.com/api/add?' +
                            'username=MYUSERNAME&' +
                            'password=MYPASSWORD&url=' + mylink +
                            '&selection=' + encodeURIComponent(
                                  yield I.minibuffer.read(
                                   $prompt = "Description (optional): ",
				  $initial_value = "From: "+ I.buffer.title +" ("+I.window.content.location.href+")" ));
                try {
		    var content = yield send_http_request(load_spec({uri: posturl}));
		    if (content.responseText == "201") {
		       I.window.minibuffer.message("InstaPaper ok!");
		    } else {
		       I.window.minibuffer.message("Error.");
		    }
                } catch (e) { 
                    I.window.minibuffer.message("Error.");
		}
            }, $browser_object = browser_object_links);

Moins de logiciels dans la vie de tous les jours

# By Loïc d'Anterroches, August 27, 2010.

Comme certains le savent, je suis plutôt tendance minimalisme. Tout ce que je développe va dans la direction d’être le plus simple et le plus efficace possible. Un logiciel pour faire une chose et bien la faire.

Par contre, au fil du temps, j’ai découvert un problème avec cette approche. Je finis par avoir trop de logiciels ouverts, chaque logiciel gère à sa manière ses données et au final, les informations que je gère sont dans des silos difficilement intégrables (il est toujours possible de bricoler une API ou autre, mais cela reste difficile).

Conclusion, j’ai décidé de revenir au texte. En gros, je vis dans Emacs et je manipule facilement du texte, alors pourquoi ne pas doucement intégrer mes outils dans Emacs ? Le but est de minimiser les changements de contexte, minimiser les pertes de temps pour transférer l’information d’un logiciel à un autre et bien entendu garder mes données dans un format facilement transférable entre différents systèmes.

À l’instant, j’ai Firefox, Thunderbird, un client IRC, Evince, Emacs bien entendu, Nautilus, des shells, Getting Things Gnome et un test de Conkeror. Il faut que j’arrive à avoir moins pour faire mieux.

Les problèmes que j’ai en ce moment :

  • Avec Thunderbird, je dois maintenir une petite liste de réponses "standard" pour mes clients via une extension "quick text", je ne peux pas la maintenir avec Emacs ou un éditeur de texte. Je dois souvent copier/coller entre Emacs et Thunderbird pour répondre aux questions.
  • Avec Getting Things Gnome, je peux gérer mes TODO, mais cela veut dire passer de mon application X vers GTG, copier/coller l’info ou taper, puis repasser vers l’autre application (qui est souvent Emacs).
  • Quand je veux écrire un billet, je dois venir taper mon texte dans mon logiciel de blog. C’est un textarea qui fait la correction orthographique, mais qui n’a pas tous les bindings que j’aime d’Emacs.
  • etc…

Le problème de base est aussi: Pourquoi toujours utiliser des bases de données ?

Très souvent, les données sont dans une base de données alors qu’un stockage dans un simple fichier texte serait suffisant. Les informations sont aussi très souvent dans un format qui force l’utilisation d’un logiciel particulier pour interagir avec. Par exemple, un fichier .odt force l’utilisation d’un logiciel de traitement de texte assez sophistiqué dans la plupart des cas.

Si je fais l’inventaire des documents que j’édite, je constate que je pourrais facilement n’utiliser que des fichiers textes (éventuellement en utilisant la syntaxe Markdown) pour répondre à l’ensemble de mes besoins. En rajoutant un gabarit et une moulinette qui sort un fichier PDF, ma correspondance professionnelle garderait son allure.

Conclusion, je me pose sérieusement la question de couper dans mon utilisation logicielle pour n’utiliser plus qu’un nombre réduit. Cela implique une meilleure gestion de mes données pour avoir un format de stockage simple (fichiers texte utf-8) et ainsi me libérer des problèmes de migration entre les différentes versions et de transfert entre les différents outils.

Sur ma "short liste" des logiciels à garder :

  • Emacs avec org-mode pour la gestion de mes TODOs et éventuellement un client IMAP pour supprimer Thunderbird et éventuellement un client IRC.
  • Conkeror pour avoir un navigateur minimaliste quand je ne développe pas (Firefox et Chromium restent les meilleurs outils pour cela).

Est-ce que c’est faisable? Je ne sais pas, mais essayer ne devrait pas avoir trop d’inconvénients et je vais apprendre à coder en Lisp au passage.

La molécule Chlordécone

# By Loïc d'Anterroches, August 24, 2010.

Certains diront que le Chlore déconne, ils n’auront pas totalement tord. La molécule est très jolie mais uniquement sur le papier. C’est un cyclo-chloro-oxygéné et effectivement, je préfèrerais ne jamais avoir été en contact avec elle.

Chlordécone sur Cheméo

Achat d'un Kindle

# By Loïc d'Anterroches, August 13, 2010.

J’avais un Kindle v2 que j’ai malheureusement cassé après 25 jours d’utilisations. Stupide. La bonne nouvelle est qu’Amazon m’a repris ce Kindle (car cassé dans les 30 jours) et m’a remboursé l’intégralité du coût avec un malus de 40$. La bonne affaire, car 3 mois plus tard, la nouvelle version était annoncée. J’ai de la chance, le remboursement me paye la nouvelle version (Wifi simple, pas de 3G).

Je suis particulièrement content de l’amélioration du "clic" pour passer d’une page à une autre. C’est un argument de vente du nouveau, ils annoncent que cela fait moins de bruit… chouette. Par contre, cette fois-ci je prends une pochette qui va avec, histoire de ne pas le faire tomber.

Le Kindle devient merveilleux une fois combiné avec InstaPaper. Cela me permet de facilement me constituer mon "magazine" que je peux ensuite lire le soir ou quand j’ai du temps bloqué. C’est nettement plus agréable de lire les nouvelles et les articles intéressants en prenant un café sur mon balcon que d’être assis devant mon ordinateur. J’aime le soleil (bon en ce moment c’est plutôt la flotte) et avec le Kindle je peux lire dehors.

Note : en pratique je suis un mauvais client pour Amazon, je préfère toujours acheter la version papier des livres si c’est possible. Mon utilisation du Kindle est vraiment pour éviter de passer trop de temps devant mon ordinateur et donc être plus présent dans les pièces à vivre de la maison. Cela change tout de suite l’ambiance dans la famille, je ne suis pas dans son bureau mais je lis dans le salon pendant que les enfants jouent. Je peux aussi facilement m’arrêter pour jouer avec eux et reprendre, comme avec le journal.

Logo of Plume CMS