vendredi 25 janvier 2019

Questionnement sur ma responsabilité en tant que développeur

Depuis peu, je suis un développeur. Je code depuis un moment, mais il est assez nouveau que j'ai des gens utilisant mon code. J'ai contribué au logiciel anki (à hauteur de 18 lignes de code, selon github). Mais surtout, j'ai créé 34 add-on pour Anki.

Ces add-ons ont des retours positifs quasi-unanime. L'unique retour négatif est accompagné d'une critique disant que mon add-on ne fait pas quelque chose que mon add-on disait explicitement ne pas faire. Et que d'ailleurs, depuis, il fait.

Ces add-ons ont, au total, été téléchargé 6000 fois. Dont un unique add-on qui a été téléchargé 3000 fois à lui tout seul. J'ignore combien de gens utilisent réellement ces add-ons. Est-ce que comme moi, des gens ont anki installé sur plusieurs ordis, et donc ont téléchargé plein de fois le même add-on. J'ignore si les mises à jours des add-ons sont compté comme des téléchargements. Bref, le vrai nombre de gens utilisant actuellement mon code est bien plus faible. Mais ça reste considérablement plus grand que tout ce que j'ai pu coder pour mon travail de recherche.

Ce qui fait que pour la 1ère fois, je me pose des questions sur mes responsabilités en tant que développeur. Ça ne sera jamais des questions aussi importantes qu'un dévelopeur de système embarqué dans un véhicule, où qu'un logiciel qui indique qui mettre en prison ou non. Dans le pire des cas, j'empêche l'utilisateurice d'apprendre correctement des choses. Mais bon, ça serait dommage quand même.

Add-ons innoffensif

La plus part de mes add-ons ne font absolument rien de mal. Je vais à titre d'exemple expliquer mes 3 add-ons les plus téléchargés.

Mon add-on téléchargé 2987 fois affiche des informations à côté de chaque deck dans la fenêtre principale. Certaines méta-donné ne présentent aucun intérêt selon moi, mais m'ont été demandées. Par exemple, le nombre de cates jeunes/matures (i.e. dont le délai est inférieur ou supérieur à 3 semaines). D'autres me paraissent très importantes et devrait selon moi directement être donné par anki. Par exemple le nombre de cartes qui n'ont jamais été vues une seule fois.

Le deuxième add-on, téléchargé 793 fois, permet de copier une note. D'ailleurs, l'add-on n'est pas de moi à la base. Moi je l'ai juste modifié pour que l'add-on puisse copier les méta-donné en plus des données. Et pour qu'il soit compatible avec la nouvelle version d'anki. J'ai un add-on qui, dans le log de suppression, rajoute un nouveau champ expliquant pourquoi la suppression à eu lieu. Normalement, tu essayes d'éviter de dupliquer de l'information, donc copier une note est en général une mauvaise idée. Mais de temps en temps, c'est pratique, par exemple pour séparer une note en deux notes. Tu copies d'abord. Puis une fois la copie finit, tu nettoyes les deux notes séparément.

Le 3ème add-on, téléchargé 367 fois, change la compilation du LaTeX. Plus précisément, ça change le moment où Anki compile le LaTeX. Par défaut, anki compile le LaTeX uniquement quand il a besoin de l'afficher. Le souci étant que si tu révises sur ton téléphone portable, comme celui-ci n'a pas de compilateur LaTeX, tu ne peux pas voir ta cartes. Avec mon add-on, la compilation est faite dès que la carte est crée sur l'ordinateur. Comme ça la carte est directement visible sur le portable quand tu en as envie. Par ailleurs, compiler tôt permet de prévenir rapidement si le LaTeX a une erreur, et donc de corriger l'erreur rapidement.

Un add-on maléfique.

Pour rappel, l'idée fondatrice d'anki est la suivante: tu veux apprendre quelque chose par cœur. Pour ça tu dois le réviser régulièrement. Anki planifie les révision pour qu'elles arrivent peu avant le moment où tu aurais oublié l'information. Donc tu dois surtout faire les révision quand Anki pense que c'est le moment de les faire.

Une demande régulière des utilisateurice est de pouvoir partir en vacance une semaine sans avoir une semaine entière de révision à faire en revenant. Donc repousser toutes les cartes d'une semaine. C'est une super mauvaise idée, parce que si tu fais ça, tu casses tout le principe de base d'anki. Et d'ailleurs, c'est pas grave, si tu as du retard, anki en tient compte, et s'adapte. Peut-être qu'il te faudra 3 ou 4 jours pour rattraper tout ton retard lié à la semaine que tu n'as pas faites, mais après ces 4 jours, tout sera redevenu normal.

Eh bien, j'ai créé un add-on qui reporte les cartes d'une semaine (ou d'autant de jours que tu veux, même un nombre négatif de jours). J'ai aidé les gens à saborder le principe fondateur d'anki. Ils ont l'impression d'avoir une tâche plus simple. Mais en réalité, ils se bousillent le processus d'apprentissage. Par conséquent, j'ai pas mal hésiter à créer cet add-on.

Ma rationalisation, c'est que des témoignages concordant indiquent que, quand, en revenant de vacances, des utilisateurices voient qu'ils ont plusieurs centaines ou milliers cartes à revoir, ça leur fait peur. Ils repoussent anki, prennent plus de retard et finalement abandonnent. J'ai donc estimé - et c'est ce que j'explique dans la description de l'add-on, que cet add-on était un moindre mal. Qu'il corrigeait un comportement irrational humain et évitait l'abandon total.

Un add-on dangereux

La base de donnée d'anki est horrible. Toute la configuration d'anki est stocké dans une table, comprenant une unique ligne. Chaque colomne correspondant à la configuration d'un paramètre, stocké en json.

Comme j'utilise beaucoup anki, j'ai des configurations assez complexe. Le json est stocké de façon «condensé» sur une seule ligne. Si j'essaye de copier ce json et de le mettre dans emacs, emacs plante. Visiblement, il n'aime pas les lignes qui font plus d'un million de caractère.

J'ai donc créé un add-on qui explose le json et créé une base de donnée digne de ce nom. Comme ça on peut enfin lire la base de données avec des outils standard. Et je suis en train de créer l'outil inverse. Qui recrée une base de donnée exploitable par anki à partir de ma base de donnée lisible. L'idée de base étant que la base de données lisible serve à ce que tu puisse faire des modifications simplement à la main ou à l'aide de requête sql. Et que ces modifications soient ensuite prise en compte par anki.

Il y a deux types de soucis. Le premier, c'est une erreur immédiate. Si la personne utilisant l'add-on n'a pas crée de copie de sauvegarde d'anki, puis qu'il synchronise sa base de données vers le serveur, il peut rapidement perdre pas mal de chose. C'est un risque assez faible, puisqu'anki créé, à chaque fois qu'il est éteint, une copie de sauvegarde. Donc l'utilisaterice devrait, au pire, perdre les modifications faites depuis la dernière fois qu'anki a été allumé ou synchronisé. J'ai moi même été victime de cette erreur. J'ai testé la synchronization avec une base de donnée dans un état étrange. Et bien, laissez moi vous dire que mon téléphone n'a pas aimé. Heureusement, j'avais des back-up et j'ai pu tout réparer.

Le second souci arrive si en plus l'erreur porte sur une unique note, ou sur un type de note peu utilisé, l'erreur peut ne pas être détecté avant très longtemps. Voir ne pas être détecté du tout, si quelque chose disparaît sans laisser de trace, ça peut prendre du temps de réaliser qu'il y a un manque. Je suis donc en train d'aider des gens, potentiellement moi, à ce tirer une balle dans le pieds.

Tout ça arrivera certainement un jour, et ça m'inquiète d'en être partiellement responsable. Bien sûr, l'étape où la base anki est recréée vérifie les erreurs les plus évidentes. Ainsi, la base de donnée vérifie l'unicité des champs qui doivent être unique. Et je vérifie aussi que les listes qui contiennent un élément numéro 4 contiennent aussi un élément numéro 3. Mais je ne peux pas tout vérifier, puisque je ne sais pas à l'avance ce que les utilisateurice voudront faire, et donc quels changements seront normaux ou non.

mercredi 2 janvier 2019

Note on an introduction on Anki given a 35C3

This post is a comment about a self-organised workshop Introduction to anki I gave at #35C3 (35th Chaos Communication Congress, a congress of 17k hackers). This workshop was announced on the anki's subredd where I asked for ideas. I received a lot of useful feedback from this subreddit and from the related discord server. The main audience of the current blog post is thus those person, already in anki's community. This post contains idea in random order.

Lire la suite...

samedi 29 septembre 2018

Programmation et ligne de commande avec anki

Voici comment j'utilise anki pour me souvenir de notions de programmations et de ligne de commande.

Lire la suite...

Clôture d'un ensemble dans anki

Il y a un type de note dans Anki qui me pose particulièrement problème, que je ne sais vraiment pas comment régler: indiquer les opérations admises par une structure précise.

Lire la suite...

Une carte anki standard

Ce billet contient la liste des champs présent dans presque toutes mes notes. Je commence par les champs qui ne sont qu'une information pour aider, mais ne correspondant à aucune question. Une règle extrêmement importante, tout ces champs doivent systématiquement avoir la même place dans la liste des champs. Chez moi, page est toujours le premier champ, partout. Comme ça, quand je change le type de note, si l'information page est déjà rentré, elle sera toujours présente au bon endroit.

Lire la suite...

mardi 25 septembre 2018

Apprendre des définitions avec Anki

Apprendre une définition avec Anki est un processus qui peut être tellement complexes qu'il mérite un billet à elles toutes seuls. D'autant que c'est un sujet des plus importants. Plus d'un tiers de mes notes, et près de la moitié de mes cartes sont des définitions. Je tenterai d'utiliser des exemples vraiment basiques, mais certains problèmes n'arrivent que dans des cas complexes. Je vous prie de m'excuser si certains exemples ne sont pas compréhensibles.

Lire la suite...

mercredi 12 septembre 2018

Se souvenir des gens à l'aide d'Anki

Anki a changé beaucoup de chose à ma vie. La principale étant que maintenant, je suis capable de retenir le nom et le visage des gens !

Lire la suite...

mercredi 5 septembre 2018

Using anki to learn names and people

Anki changed my life in a lot of way. But the most obvious one is that now, I do recall people's name[1] !

Note

[1] Actually, it's still a little bit complicated because of my trans friend who change their first name. But appart from this case, I actually do remember names now.

Lire la suite...

Anki and learning which require practice (origami, knot, instrument...)

I use anki to learn things which require practice. Origami, drawing, music, rope (nodes and shibari). Music will be considered in another text.

I consider two kinds of practical knowledge, the one requiring making choices (like drawing, or music) and the one requiring knowing by earth some technics you'll repeat many time (ropes, music, origami). I don' have any idea how to deal with the first kind of knowledge, thus I'll only consider the second kind.

I don't know what is the best way to learn either one practical thing I must repeat. I use different techniques for knots and for origami. I'm not yet sure which one works best.

Lire la suite...

How I failed learning lyrics with anki

I tried to learn lyrics of song I love[1] using anki. This is one of my biggest failure.

I begin by explaining the technical reason of the failure, then the human one. And finally, the problem that is specific to learning songs.

Note

[1] Sometime song I hate too. At least song with which I have a love-hate relation.

Lire la suite...

mardi 30 janvier 2018

Hundred's of deck in Anki: why it can be useful

I am going to try to explain why I do have hundreds of deck and subdecks. Furthermore, why I believe there is currently no better way to achieve my goal with anky. The best way to use anki is to use.

Lire la suite...

vendredi 5 janvier 2018

Lists in anki: desiderata and partial solution

In this text, I assume you are familiar with anki, and in particular know what is a field, a card, a card's type (aka template), a note and a note's type (aka a model), and that you have an idea of what are the rules used by anki to decide which cards should be generated or not.

There is one big limitation in anki, it concerns lists[1]. Here I list my trouble, the existing work arounds I know, their limits, and the functionnality I would really want. Sadly, this functionnality seems to require such a big modification of anki's underlying model that I fear that no add-on can answer my request. In particular if I want this request to also be satisfied in smartphone's application, which does not allows to add add-ons.

Learning a list of things is hard, but it's something I sometime want to do. A poem/song is just a list of line. Sometime, a mathematical notions have 4 distinct names. E.g. a pullback is also called a fiber product, a fibered product and a Cartesian square. In some othe case, a mathematical objects admits many distinct definitions[2]. E.g. I've got 5 definitions of left-trivial monoids. And I'd also wanted to see if I can learn the list of the prime number less than 100. Mostly to see how hard it is to learn an arbitrary list.

Notes

[1] I assume here that sets are list, with an arbitrary order

[2] This is in general considered to be a proof that the object is really interesting

Lire la suite...

mardi 29 novembre 2016

Logiciel de mémorisation pour les mathématiques

En traînant sur less wrong, j'ai découvert un truc que, visiblement, beaucoup de gens autour de moi connaissait - mais pas moi. Anki, un logiciel pour aider à la mémorisation, partant du principe que pour se souvenir des choses, il faut les revoir juste avant de les oublier, et que plus on les a revu, plus on met longtemps avant de les oublier. Il semblerait qu'en général, il soit principalement employé pour l'apprentissage de vocabulaire étranger. Je m'en vais vous expliquer comment je l'utilise pour les mathématiques. Sachez déjà que vous pouvez trouver un(des) example(s) de mes decks ici

Lire la suite...