samedi 29 septembre 2018

Programmation et ligne de commande avec anki

Concernant la programmation, j'ai entendu le conseil suivant. Quand tu as besoin de regarder quelque chose sur internet, tu rajoutes immédiatement ce que tu as trouvé dans anki, comme ça tu n'auras jamais besoin de chercher quelque chose deux fois. Ça serait une super bonne idée si ajouter quelque chose à anki était effectivement super rapide. Personellement, ça me demande probablement une minute, réouvrir anki, trouver le bon deck, rentrer toutes les informations. Ça me couperait trop dans ce que je développe, et surtout, trop souvent. Donc, comme pour tout le reste, je rentre beaucoup d'information à la fois.

Quand des pages contiennent toutes les informations de manière à peu près ordonné, comme la référence du CSS, c'est très pratique. Je peux rapidement obtenir un fichier CSV à partir de ça, puis importer toutes ces informations dans anki. Malheureusement, pour les pages man, même si la mise en forme et souvent la même, il semble qu'il n'existe aucune base de donnée où je peux trouver, pour chaque ligne de commande, la liste de ses options/abbréviation. Et pour l'instant, je ne connais pas assez le format de rédaction des pages man pour tenter de créer un extraicteur moi-même.

Voici les informations que contiennent mes cartes propre aux langages de programmations. Les autres champs étant donné ici.

Les champs

Tout d'abord, j'ai «instruction», qui est le texte qui doit être écrit dans le code. Puis j'ai «abbreviation», pour les cas où il existe deux manières distinctes d'écrire le même code, dont l'une est un raccourci de l'autre. C'est souvent le cas en ligne de commande, où il existe une version longue et une version courte des arguments.

Ensuite, j'ai les champs «effet» et «valeur». La plupart du temps, je ne remplis qu'un des deux champs. Ainsi, «print(n)», à pour effet «affiche la valeur de n.», et n'a pas de valeur. Réciproquement, «i+1» n'a pas d'effet[1]. Par contre, i++ a un effet et une valeur, donc j'indique les deux. De même, en C, c'est utile de se souvenir que «i=n» a une valeur, égale à la valeur de «n».

J'ai aussi un champ «type», dont le sens est assez évident, et souvent redondant avec «value». Mais, par exemple, pour les jeux de pointeurs en C, mettre le type explicite peut être assez utile.

J'ai un champ «défaut», qui me sert à indiquer la valeur par défaut des variables. Ainsi j'ai l'information que le baud rate par défaut d'arduino est 9600.

J'ai un champ «nom», particulièrement utile en base de donnée, ou chaque operation à un nom, et une notation, qui n'est pas nécessairement exactement identique à l'instruction utilisé.

J'ai deux champs «temps» et «espace». C'est surtout utile pour les instructions correspondant à des structures de données, quand le langage de programmation indique si un tri est en place ou pas, si un accès est garanti en temps constant/logarithmique, c'est utile de l'indiquer.

J'avais prévu un champ invariant, aussi pour les structures de données. Mais en pratique je constate que je ne l'ai jamais utilisé. J'imaginais, pour une fonction de tri, par exemple, indiquer si le tri était stable. J'ai aussi «potentiel ou crédit». Mais ça semble être des questions pertinentes pour les notes «structures de données» et pas pour les langages de programmations.

Note

[1] à part potentiellement celui d'évaluer i

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.

En mathématique, si tu as un ensemble E de trucs, et que quand tu applique une opération f à certains de ces trucs, tu obtiens encore un élément de E, alors tu dis que E est clos par f. Par exemple, l'ensemble des rectangles est clos par symétries, par étirement, par rotation. Alors que l'ensemble des carrées ne sera pas clos par étirement. L'ensemble des langages reconnaissable est clos par miroir, union finie, intersection finie, quotient par un langage, shuffle, infiltration, prendre l'ensemble des suffixe, préfix, facteurs, sous-mots, étoile de Kleene, complémentation. Et contient tous les langages finis. Par contre, ce n'est pas clos par union infinie. Ça fait beaucoup de chose dont je veux me souvenir.

Pour l'instant, c'est le seul cas où j'utilise des texte à trou. Ainsi, je demande «les langages reconnaissable sont clos par union », et la réponse est «finie», mais pour être aussi dénombrable, arbitraire, ou aucune. Pour les carrés, j'indique que c'est « par étirement», où la réponse est «pas clos». Et je demande aussi «pas clos par ???», et donc je dois trouver une transformation qui ne respecte pas les carrés, et qui n'est pas déjà dans la liste affichée.

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 extremement 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.

Champs sans question

Méta information

Tous les champs de cette section ne sont affichés que dans la réponse. En effet, ils aident à vérifier une information, par contre ils donneraient des indices peu pertinent le reste du temps.

Page, section et chapitre, sont trois champs qui m'aident à retrouver la source d'une information. La page peut être une URL, ou un numéro de page. Normalement, ces informations sont un peu redondante, mais puisqu'il m'arrive d'oublier dans changer une; ou bien que la numérotation de page soit différente selon l'impression, alors cette redondance est utile. Un 4ème champ pourrait être utile: livre. Mais en général, chaque deck correspond à un seul livre, donc le champs serait inutilement redondant.

J'ai aussi des champs «genre» et «index», pour indiquer que quelques chose vient du Lemme 3, par exemple.

Information générale

J'ai un champ contexte, affiché tout le temps, dans la question et la réponse. Ça me permet de savoir dans quel cadre la question est posé. Des mots pouvant avoir des sens fort différent dans plusieurs domaines.

J'ai un champ «variable», parfois appelé «paramètre», qui indique toutes le type de toutes les variables utilisé dans d'autres champs. Ainsi, ça peut indiquer que n est un entier, et f une fonction. Ou bien que o est un objet avec une masse.

Extra est un champs qui contient n'importe quel autre information, qui sera affiché sur la réponse. Je peux m'en servir pour prendre des notes pour expliquer pourquoi je crois qu'il y a une erreur, et vérifier plus tard. Pour mettre un dessin qui aide à comprendre la réponse, sans faire partie d'une question.

Champs à question

«Supposition» permet de mettre les hypothèse dont il faut se souvenir afin que le reste de la note ait du sens. Typiquement, si une division doit avoir lieu, je dois supposer que le dénominateur est non-nul.

Beaucoup de notes contiennent des champs «nom», «notation» et «example». Parfois «nom français» et «abréviation». Parce que presque tout peut avoir un nom, que ça soit un théorème, un objet, une relation mathématique. Et parfois, il y a une manière standard de le noter qui n'est pas son nom. Et parfois, ce nom est abrégé de façon standardisé.

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.

Définitions

Intuitivement, une définition peut être simplement une note avec deux champs, le nom du truc défini, et la définition. C'est parfait si tu veux apprendre, par exemple, qu'un carré, c'est un rectangle qui est aussi un losange.

Plusieurs définitions équivalentes

Le problème commence déjà à apparaître. Après tout, un carré c'est aussi un rectangle avec deux côtés adjacents de même longueur. Cette définition est tout aussi valide mathématiquement, et elle est parfois plus utile. Après tout, au lieu de vérifier que ta figure géométrique est vraiment un losange, c'est à dire qu'elle a 4 côtés de même longueur, tu vérifie seulement l'égalité de deux côtés. Et puis, un carré, c'est aussi un losange avec un angle droit.

Bien sûr, tu peux faire 3 notes, une note par définition. Mais alors, quand on te demande «qu'est-ce qu'un carré», tu ne sauras pas forcément quel définition anki attend de toi. Tu pourrais mettre toutes les définitions ensemble, mais ça ferait un champ avec beaucoup de contenu, ce qui est très déconseillé. Et puis, tu peux vouloir qu'anki t'aide à voir quels définitions sont dures pour toi, et lesquels sont faciles. Qu'il te fasse réviser les définitions dures plus souvent. Pour répondre à ce problème, mon type «Définition» contient 7 champs «définition», «définition2», etc... Anki me donne le nom et toutes les définitions sauf une, et me demande de me souvenir de celle qui manque. Et une fois que j'ai vu toutes les définitions, il me demande de me souvenir d'au moins une définition.

Définition longue

Prenons un autre exemple, disons que je veuille apprendre le système SI. C'est à dire: mètre, seconde, ampère, kelvin, mole, candela. Ou similairement, que je veuille apprendre ou, et, donc, or, ni, car. Alors je peux réutiliser exactement mon type définition, mais au lieu d'indiquer que c'est plusieurs définition «équivalente», je dis que c'est «la liste:». Donc j'ai un champ en plus dans mon type définition, qui indique comment considérer les éléments listés.

Ce genre de définition est aussi utile, mathématiquement, pour des définitions qui sont longues sans être des listes. Par exemple, des définitions qui quantifient plusieurs variables et qui alternent les quantifications. Je peux mettre chaque quantification dans un champ différent. L'exemple canonique que j'ai est la définition de R(r,k,m), du théorème de Ramsay. «C'est un nombre minimal tel que pour tout ensemble fini E avec au moins R(r,k,m) éléments, pour chaque coloriage avec m couleurs des sous-ensembles à r éléments de E, il exists un sous-ensemble S de E à k éléments tel que tous les r-sous-ensembles de S ont la même couleurs.» Ici, la définition n'est pas une liste, mais apprendre comme une liste est pertinent.

Des équivalences et une liste

Utiliser le même système pour les listes et pour les définitions équivalentes n'est pas exactement parfait. Il arrive qu'un objet ait plusieurs définitions, dont l'un est une liste. Par exemple, un groupe est défini, de façon équivalente, comme un monoïde avec des inverses à gauche et à droite. Ou bien comme une structure avec une multiplication, en une constante 1, tel que 1*x=x, tout élément admette un inverse, et * est associatif. Je suis forcé de mettre toute la liste de propriété dans un seul champ.

Définition, sous certaines hypothèses.

Certaines définitions ne sont vraies que sous certainse hypothèses. Ainsi, dans les définitions d'un triangle, je pourrai mettre «polygone dont la somme des angles vaut 180°C». Sauf que cette définition n'est vrai qu'en géométrie Euclidienne. Donc si je veux faire des maths assez avancée pour considérer plusieurs géométrie, je me rajoute à côté de cette définition (géométrie euclidienne seulement).

J'ai l'impression que cette technique est bien plus simple que de créer une carte «triangle» dont le contexte est «géométrie euclidienne», et une carte «triangle» dont le contexte serait «géométrie absolue» (i.e. euclidienne ou autre). Cependant, ça reste vrai principalement parce que la majorité de la géométrie que j'apprend est Euclidienne. Si par hasard je devais voir une définition équivalente des triangles, mais qui ne serait valide qu'en géométrie hyperbolique, alors je ne sais pas si crééerai une nouvelle carte ou si je rajouterai cette définition à la carte «triangle».

Exemple des langages formels.

Le problème s'est sérieusement posé à moi quand j'ai fait de la théorie des langages formels. Un langage est un ensemble de mot. Un mot est une suite de lettres. On ne fait aucune hypothèse sur le fait que les mots aient un sens, c'est vraiment un jeu formel. Certains langages ont des propriétés particulières. Par exemples, ils peuvent être «rationnels», c'est à dire décrit par une expression régulières. Ils peuvent être reconnaissable, c'est à dire qu'ils sont reconnu par un automate fini. Un théorème fondamentale du domaine dit qu'un langage est reconnaissable si et seulement si il est rationnel. D'où la question suivante: est-ce qu'il faut mettre «rationnel» et «reconnaissable» comme deux noms différents définissant la même chose, et lister ces deux définitions ? D'un côté, mélanger les deux définitions est raisonnable puisqu'elles sont équivalentes. D'un autre côté, l'équivalence est loin d'être trivial, et chaque point de vue permet de développer une théorie très distinctes. Donc utiliser un seul type de carte serait génant quand on voudra étendre les notions de régulier/reconnaissable au dela des ensembles de mots.

Noms, notations, représentation...

Comme je l'ai laissé entendre dans l'exemple précédent, une même notion peut avoir plusieurs noms différents. Par exemple, j'ai une carte comprenant les noms Tylenol, doliprane, efferalgan, dafalgan, paracétamol. Et comme définition: antalgique qui n'est PAS antiagrégant (Ce qui était important pour moi, en faisant cette carte, était de me souvenir du quel était antiagrégant; et donc finir par me souvenir de ce que je pouvais prendre avant/après un piercing.) Pour prendre un exemple mathématique, j'ai une carte ayant 3 noms: pullback, fiber(ed) product, cartesian square. Parce qu'ils semble que les mathématiciens ne se soient pas mis d'accord quand il s'agissait de nomme un objet, et plusieurs gens ont eu des idées de noms différentes, qui sont toutes restées dans l'usage courant.

Tout ça pour dire, il peut être pertinent d'avoir plusieurs noms, et donc un champ par nom. Personellement, j'utilise 4 champs noms.

Tout comme pour les définitions, anki me donne tous les noms sauf un, puis me demande le nom manquant. Puis, il me donne les définitions et me demande le/les noms.

Notations

En mathématique, un objet n'ai pas seulement un nom, il peut aussi avoir une notation. Un exemple tout bête, «la somme de x et y» sera noté «x+y». Ça peut être bon de le savoir. J'ai donc aussi 4 champs notations.

J'ai aussi un champ «denoté par». Histoire de me souvenir qu'un nombre entier est souvent dénoté par n,m, un complexe par z, et un réel par x. Encore une fois, c'est exemple peuvent semble basique, mais c'est vraiment utile quand on arrive dans des domaines nouveaux, pour se faire une intuition. Quand je lis un papier dans mon domaine de recherche, et que je vois un v, j'aime bien pouvoir me rappeler rapidement que c'est probablement une valuation.

J'ai aussi un champ «représenté par», pour indiquer comment on représente un objet. Ainsi, dans un automate, l'état initial est représenté par une flèche entrante. Un graphe est représenté par des ronds et des flèches/lignes reliant ces ronds.

J'ai un champ «abréviation». Indiquer que l’abréviation de «plus grand commun dénominateur» est «pgcd» n'a pas l'air d'avoir beaucoup d'intérêt. Mais ça permet à anki de me demander «de quoi PGCD est l’abréviation» ?

Les question pour tout ces sujets sont similaires aux questions pour les noms.

La majorité de mes cartes sont en anglais. J'ai aussi un champ pour le nom français des choses; car c'est souvent pratique de connaître les deux noms quand la traduction n'est pas trivial. Par exemple, je sais qu'une Power series, c'est une Série entière. Fundamental theorem of Algebra, est le théorème d'Alembert-Gauss en Français. Etc... Dans ce cas, basiquement, étant donné le nom anglais/français, anki me demande l'autre nom.

Examples et contre-example.

C'est une trivialité, mais il est bien plus simple d'apprendre des concepts si l'on a des exemples. Ainsi, quand je peux, je marque jusqu'à 4 examples. Et 4 contre-exemples.

Un exemple d'exemple: concernant le «halo effect», les politiques beaux ont plus de chances d'êtres élus, quand bien même les élécteurs ont pas l'impression de prendre ce critère en compte.

Le souci, c'est pour les définitions de fonctions. Ainsi, disons que je définisse une fonction qui, à un polygone, associe son nombre de côté. J'ai envie que Anki me dise «voici un carré, quel est son nombre de côté». Et non pas simplement «donne un exemple de nombre de côté d'un polygone.». Donc pour l'instant, ce genre d'exemple se trouve à part, dans des cartes questions. Peut-être que je devrai faire deux champs exemple, un pour la question, un pour la réponse. Mais comme chaque champ ralentit anki, pour l'instant, je n'ai pas osé le faire.

Variables

Reprenons l'exemple des fonctions ci-dessus. Disons que je veux définir la fonction PGCD. Alors j'ai un champ variable, où j'indique «n,m\in\mathbb N» (c'est à dire «n et m sont des nombres entiers»). Ma notation sera PGCD(n,m) et ma définition simplement «le plus grand entier divisant n et m».

Fonctions, ensembles, et autres structures

Plus haut, j'ai un peu simplifié le cas des fonctions. L'exemple que je donne convient totalement si la seule chose qui m'intéresse c'est le PGCD de deux nombres. Ça marche si la fonction peut être défini directement à partir de son argument. Disons que je veux définir la fonction exponentielle. Une des définitions est: l'inverse de ln. Une autre définition est: la fonction égale à sa dérivée, et qui vaut 1 en 0. Pourvu que l'on comprenne ses définitions, il semble clair qu'il ne soit pas possible de définir «exponentielle de x» sans définir «exponentielle»[1]. Savoir si je définis la fonction en un point ou bien la fonction globalement est donc un choix que je dois faire régulièrement, et je suis rarement sûr de mon choix.

Un problème similaire se pose quand certains objets sont définis comme étant les éléments d'un ensemble. Je prendrai un exemple, les mots bien parenthésés. «()» est bien parenthésé. Par contre «(« car une parenthèse fermante ne correspond à aucune parenthèse ouvrante. Je peux définir un mot parenthésé comme étant soit une concaténation de mot bien parenthésé, soit un mot bien parenthésé dans une paire de parenthèse. Le souci avec cette définition, c'est qu'elle est récursive, elle fait appel à la notion de «mot bien parenthésé». Et si la définition contient le mot défini, la question «quel est le nom de ce qui est défini ci-dessous» n'a plus d'intérêt. Ça me pousse à définir l'ensemble des mots bien parenthésé, appellé langage de dyck. Et ensuite, je défini un mot bien parenthésé comme étant un élément du langage de dyck [2]. Je me retrouve donc avec deux cartes, alors que c'est essentiellement une seule notion, je trouve donc ça assez étrange et peu satisfaisant.

Contexte.

Certains mots ont une définition entièrement différente selon le contexte. Par exemple l'induction d'une plaque à induction n'a rien à voir avec l'induction mathématique. Dans ce cas, j'ai un champ contexte, qui est affiché en permanence, et qui contient le contexte de la carte. Grâce à ce contexte, je suis sensé pouvoir savoir quel définition donner quand anki me demande la définition du mot induction.

Autres champs.

Chacun des champs suivant correspend à une question d'anki. Anki me donne le nom, la définition, la notation, etc... et me demande de répondre à cette question.

Suppositions

Disons que je définisse la notion de définition, que, pour deux nombres a et b, je veuille définir a/b. À ce moment là, je mettrai dans un champ «supposition» la phrase suivante "b est différent de 0". Bref, j'y met les hypothèses qui permettent à la définition d'avoir du sens.

En algèbre linéaire, certaines définitions n'ont du sens où de l'intérêt que si on s'intéresse à des espaces vectoriels de dimension finis (par exemple, le déterminant). Ou encore que si l'on s'intéresse à un espace vectoriel complexe. C'est aussi le champ où je précise ce genre de restrictions.

Dans certaines définitions liées à la logique, je marque des axiomes dans ce champs. Ainsi, en théorie des ensembles, pour la définition du produit cartésien, ce champ contient les axiomes de ZF permettant de s'assurer que le produit cartésien existe vraiment.

Type

Le type de l'objet défini. Ainsi, ça peut être utile de noter quelque part que la multiplication est une fonction binaire. C'est utile de savoir que l'élasticité d'un marché s'exprime en pourcentage. Ou encore en typographie que l'Italique est un «typestyle».

Ce champ et le suivant justifie la différence entre la définition d'une fonction f, et de la définition de «f(x)». Ainsi, la fonction sinus est impaire. La propriété «être impaire» ne peut pas s'appliquer à sinus(x), pour x un complexe.

Propriété

Parfois, il est bon de connaître une propriété qui découle de la définition. Ainsi, il existe un unique carré, à rotation et aggrandissement prês. Alors qu'il existe plusieurs losanges, et plusieurs rectangles. Donc c'est intéressant de mettre cette propriété dans carré.

Valeur standard/par défaut

Le seuil de la douleur, en son, est le volume maximale à partir duquel l'écoute devient douloureuse. C'est une définition, mais connaître une approximation de la valeur habituel est bien aussi. J'ai donc un champ pour indiquer 120dB.

J'utilise principalement la «valeur par défaut» en informatique. Quand je cherche à apprendre les différentes options d'un programme, c'est intéressant non seulement de savoir la signification d'une option, mais aussi de savoir quel sera la valeur de cette option, quand on lance le programme, qu'on ne configure rien.

Intuition

Un champ contient l'intuition lié à la définition. Souvent, en mathématique, une définition est données de façon très formelle. C'est pourtant souvent utile de savoir d'où vient la définition. Ainsi, l'espérence en probabilité, c'est grosso modo une moyenne, mais pondéré par la probabilité qu'on accorde à chaque événement. Dans le plan complexe, l'intuition de la fonction inverse c'est: une symmétrie par rapport à l'axe horizontale, et une symétrie par rapport au cercle unité.

Construction

Quand plusieurs définitions sont équivalentes, ça me permet d'indiquer comment on passe d'une définition à l'autre.

Quand il n'est pas claire que la définition a du sens (parce que celle ci est complexe, par exemple), ce champ me permet d'indiquer pourquoi il existe vraiment un objet tel que celui que j'ai défini.

Étymologie

Ce champ n'a probablement pas besoin d'explication.

Notes

[1] En fait si, puisque exp(x) égal la somme pour n entier non-négatif des x^n/n!

[2] ou bien un mot dont tous les préfix ont au moins autant de parenthèses ouvrantes que de parenthèses fermantes.

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 !

Par exemple, en septembre 2017, j'ai commencé un nouveau travail. En aout, j'ai été sur le site de mon nouveau laboratoire et j'ai commencé à regarder les pages personnelles de mes futurs collègues. Ceux qui avaient une photo, j'ai ajouté dans Anki leur nom, prénom et photo. En septembre, en commençant mon travail, je connaissais déjà leur nom[1]. La différence est d'autant plus visible pour moi que je peux comparer entre les gens ayant une photo et ceux n'en ayant pas. Ainsi, les secrétaires n'ont pas de pages pro, ni de photo d'elle. J'ai donc eu bien plus de mal à me souvenir du nom des secrétaires. D'autant que je ne me sentais pas de leur demander si je pouvais prendre une photo d'elles. Quand j'ai une photo, la question ressemble à 2018-09-12-180255_580x653_scrot.png et la réponse à 2018-09-12-180045_587x644_scrot.png

Il y a tout de même un effet de bord étrange. J'apprends la photo des gens, et pas leur visage. Donc en voyant quelqu'un je dois me demander à quel photo ils ressemblent avant de pouvoir retrouver le nom.

Plus tard, je me suis mis à ajouter des indications supplémentaire, les sujets de recherche d'une personne, où je l'ai rencontré, ses ouvrages, la raison de sa notoriété. Ce qui sera utile pour ajouter des notes dans anki relatifs à des stars, des auteurs, des pontes du domaine, etc...

Le souci, c'est que je rencontre des gens souvent. Et ce n'est pas toujours évident de penser à noter les noms, pour chercher des photos plus tard. Certaines conférences ont des listes de participants, donc c'est pratique. Mais, disons que j'aille à un événement lié au shibari (bondage japonais); il est assez crédible que les gens n'apprécient pas qu'une base de donnée contiennent l’information qu'ils s'y sont rendu. Quand bien même cette base de donnée est privée, elle passe par internet pour être synchronisé entre mon téléphone est mon ordi.

Célébrités

J'ai aussi beaucoup de mal avec les noms des célébrités. En général, je peux vaguement dire pourquoi quelqu'un est connu, mais sans pouvoir le dire précisément. Ainsi, je sais que Dider Leribon et Didier Lestrande ont écrit sur l'homosexualité. Mais je ne sais plus qui a écris quel livre. Je sais aussi que Eric S Raymond et Paul Graham ont écrit des textes célèbres sur la culture hacker, et que le nom de leur ouvrage contient deux mots. Mais je ne sais plus qui a écrit Hacker et Paintre, et qui a écrite la Cathédrale et le Bazar. Donc je tente d'utiliser Anki pour apprendre ce genre de chose. Et s'il devait arriver - ce qui ne me semble pas impossible - que je les croise, au moins, je saurai les reconnaître. J'imagine que j'updaterai ce billet, plus tard, avec le résultat de cette expérience.

Wikipédia a des listes de gens important en informatique. Cependant, ces listes contiennent Euclide, Turing, Torvalds, Knuth, Jobs... j'ai tenté de les ajouter en ordre chronologique; les premières cartes étaient simples. Euclide, Al-Khwarizmi, etc... Ils sont réellement célèbres. Mais maintenant, je réalise que même si je sais que Frances E. Allen est une pionnière de l'informatique, ma note à son sujet ne me dit pas vraiment pourquoi. Si je devais la rencontrer, je connaîtrait peut-être son nom. Je saurai qu'elle a été la 1ère femme à avoir le prix Turing. Mais ça ne me dirait pas réellement ce qu'elle a fait pour le mériter. Certes, je sais qu'elle a travailler sur les compilateurs, mais sans savoir ce qu'elle a apporté à ce domaine. Pire, puisque son travail a fondé la discipline, ses résultats sont probablement tellement standards que je n'imagine pas que quelqu'un a du les inventer. Que j'aurai du mal à imaginer à quel point, à son époque, ça a été révolutionnaire.

J'utilise anki pour les personnes réelles, mais aussi pour les gens imaginaire. Ainsi, ça me paraît pratique d'ajouter le noms des personnages du disque-monde, ils sont nombreux, et c'est plus pratique quand je (re)lis les livre de Pratchett, de me souvenir de quel membre du guet à quel particularité. Je suis en train de faire de même pour Tau Zéro, mais je crains que je ne finisse d'écouter le roman avant d'avoir fini d'apprendre la liste des personnages. J'ai songé à faire de même pour La terre du milieu, de Tolkien, avant de réaliser que ça serait une super mauvaise idée.

Oubli

Les visages me posent un souci que je n'ai habituellement pas avec Anki. J'oublie bien plus rapidement les visages que les autres cartes. En effet, l'écart entre deux révisions augmente à chaque révision successive(sauf en cas d'oubli). C'est le principe de base des systèmes de mémorisation par répétition. Si j'ai réussi à me souvenir du nom de quelqu'un après 4 jours, 16 jours, 2 mois, théoriquement, je devrai pouvoir attendre 8 mois avant de revoir cette information. En pratique, cette théorie fonctionne bien quand les différents savoir sont reliés entre eux. Même si je passe 1 an sans voir la définition de groupe, en pratique, j'aurai tellement réutilisé les groupes durant cette année que je n'aurai jamais vraiment pu oublier cette définition. Alors qu'il est totalement possible que je passe 1 an sans voir la personne, donc sans utiliser son nom. Et je finis par l'oublier.

Note

[1] En fait, c'était même bizarre. En effet, comme théoriquement, on ne se connaissait pas, quand ils se présentait à moi, je devai éviter de les appeller par leurs noms.

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] !

I'm really bad at remembering faces and names. With anki, it did change a lot. I started a new job in september. In august, I went on the website of the laboratory I was joining, and I red the list of my future colleagues. I then created a card with their picture, first-name, last name. If the picture were not on their professionnal webpage, I did try to find them on the web and in social media. In september, when I started my job, I already knew their name[2]. I see the difference very strongly, because the people whose name I forget are the ones without pictures on internet. In particular, the administrative staff are not listed on the web pages, and it was harder for me to learn their names (And I didn't want to ask them if I could take a picture to add in my database, I believe it would have sound strange).

One problem with this is that I do have new colleagues, people I meet in conferences, etc.. so I should do new cards often, and I don't necessarily think about it immediatly, and finally I never do them.

Similarly, outside of works, when I meet friend of friend, I can't necessarily ask to take a picture of them. And if I met them at a queer event, a polyamory event, or a bdsm event, I think adding this information in a database would be a bad idea, even if its only a private database.

Using anki to learn name has a strange side-effect. When I see the face of a colleague, I need to recall to which picture of anki he looks like, and then I can recall his[3] name. So, it's still a costly process in my head, since using anki created an unusual indirection.

Famous people

Another thing which confused me a lot is the name of famous people. Usually, I can tell more or less why they are famous. For example, I do know Didier Leribon and Didier Lestrade wrote about homosexuality. I do know that Eric S Raymond and Paul Graham wrote texts which are considered to be important in hacker's culture, and the name of their texts use two words (Hacker and Painter, Bazar and Cathedral), while I never remembered which one is which one. So I currently try to use anki to learn the name, figure and achievement of a few great name of computer science. I may write a day about the result of this experience. Right now, my biggest problem is that I do not know who I must add.

Wikipedia has list of person important in computer science. However, this list contains Euclide, Turing, Torvalds, Knuth, Jobs... I tried to add them in chronological order. The first cards were easy, I already knew about Euclide, Al-Khwarizmi, etc... they are famous. But now I do realize that even if Frances E. Allen is a pionner in CS, the note I have about her does not really help me in any way. Ok, nowaday, if I meet her, I may recall her name. But I would not really know why she is famous. Well, I'd know she is famous for being the first woman to have a Turing prize, but it would not tell me what she did to deserve it. Or more exactly, I may know she worked on compiler, but I don't know what she did about them. Worse, I believe that the early work is CS is now so basic that it would not be clear to me that it was an important work in her time.

Note that I don't only consider real people. I'm currently also using anki to learn the name and principal description of characters of long books. I usually get lost in Discworld, for example. I now have a discworld deck with the name of the most important characters, and a short description of things which happenned to them. I did the same thing with Atlas Shrugged's character. I also thought about doing the same thing with Tolkien's mythology, I then realized it would probably be far too much work. Especially since I don't yet know how successfull this kind of deck will be.

Forgetting

I have a trouble with faces and names I do not usually have with anki. I forgot quicker than usual. Anki waits more and more before two successive occurence of the same question. The main idea of anki is that, if you did remember successfully after 4 days, 16 days, 2 months, then you can wait 8 months before the next time anki ask you to recall this information. This is certainly true when knowledges are interrelated. For example, imagine I have just seen a mathematical concept. Imagine that anki tells me that I won't see it again for a full year. It's not really a problem, because I'll still use my knowledge to learn and work with more complicated concepts.

However, if I did not see the face of a colleague of my old laboratory during 6 months, I may totally have forgotten the name of this colleague. I never had any occasion to remember his name. It follows that I often fail the cards asking me the name of people I do not see anymore.

Notes

[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.

[2] In fact, it wast strange. Because, when I was introduced to them, they told me their name. I wanted to answer that I already knew. I didn't answer this, however, since I feared it would seems strange, and it was my first day at my new job.

[3] I have a single female colleague, whose name is Mary. Let's say that, in her case, I do not have any trouble recalling her name

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.

A single field with the informations

For knot, I have 4 fields. The french name, the english name, the purpose of the knot, and the actual way to do the knot. A card show the knot and ask its/their name. Another card show the names and ask for the knot. Then I have to actually do the knot on some ropes. If I suceed, I click on "good", otherwise on "again". This mean I need to have ropes with me when I see those cards. Thus, they are separated from my main set of cards. This allows me to see all of those cards together when I have a rope, and I know anki does not ask any knot while I'm in the subway, for example.

I first tried to answer "good" if I kind of remember the knot, without actually doing it. Most knots seems easy, so I thought it was okay. Until I realized that actually it's quite harder, and I failed when I actually wanted to tie the knot. Thus I add to start from zero and learn the knot while actually doing them.

A list of fields

For shibari, origami, and music pieces, my note have 16 fields. I never use all of them. In each field, I enter a step of the process/piece. Anki will aski me the first part of the process. Then the second on another card, and so on. Finally, it will ask me to recall the whole process. I only practice when anki asks me to recall the whole process. It seems that recalling a single step of the process is too easy, I never really «forget» a step. So it makes no sens to practice it. Furthermore, the 3rd step can't be practiced without doing the 2 first steps[1], so practicing step 3 would take too much time.

I can't tell right now whether it works better using a single question, as for rope, or using one question by step, as with origami. Mostly because I've not see a lot of complicated things, so I use anki to remember things I have known for years, or easy things, and not to learn new things. This will change when I'll be further in the origami/shibari book.

Note

[1] Try to start an origami omitting the creation of its base. Try closing a knot you did not tie.

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.

Technical failure

Problems related to the set of cards to see one day

Let me consider a song wich 60 verses, for my example. A length which is not unusual (e.g. Every body knows, of L. Cohen). Then a note in anki (a set of information, i.e., a song), will generate at least 60 cards. One by verse. May be more, if you also decide to see every pair of verses. And/or every distique.

By default, in anki, if you see one card (i.e. when anki ask you to recall one verse), every other cards (verses) are buried. It means that you will not see any other verse the same day. If for some reason, the planning software believe there are 4 verses you should be seeing today, then you'll see a single verse. The other one will be seen, in the best case, the three following days. This delay is a really bad things and defeat the purpose of spaced repetition software.

This get even worse. May be anki will believe that there is also some other card you should see tomorrow. It will also be delayed for at least 4 days. And so on. Cards to see get more and more delayed, which ruin anki's purpose. I.e. you'll recall those card badly.

Of course, you can choose not to bury cards. In this case, what happens is that anki will ask you to recall a verse. A few minutes after, it will asks for the preceding verse. You will recall this preceding verse, but only because you just saw it, not because you really know it.

Note type

Another problem, which I have not yet solved, is: what kind of cards you should create. I first created cloze deletion cards. That means that card number n asks for verse number n and shows every other verses. Showing the verses after the current is a nonsens, but that's the easiest thing to do with anki. The manual of Space repetition software's state that the best way to learn a list is overlap. You ask verses n and n+1, and on another card, you ask verses n+1 and n+2. This is hard to do in anki, because cloze can not overlap. It means that you have two remaining choices: either you have note type with at least 60 fields (let's say a hundred, to be safe.) or you have one note by verse.

One note by verse is a very bad idea, for at least two reasons. I can tell you, I tried it, using an add-on doing exactly this. First, imagine that one made a typo, let's say on verse 40. Then you'd need to correct the typo on the 20 last cards. If it's a small typo, a search/replace may work. If it concerns a newline, you are screwed. Secondly, because it means that you do not have anymore the notion of «related cards». When you see question about one song, you may see another question about the same song the same day. As I explained above, it is a bad idea.

Doing a note type with a hundred fields is not such a good idea. Anki is not made for this, and it may makes anki really slow when adding a new note (I know, I alrdeady have a note with a hundred fields). This problem is due to the implementation of anki. I think I could solve it and create a more efficient implementation. I also know that the lead developper would not accept this, so I don't want to waste time doing it.

One thing is sure, it becomes impossible to enter a song by hand. At least not if you want to have one verse by field. Thus, the import process should be done using an add-on. I may want to give a try one-day, but right now, I don't know how to create a graphical interface. At least, I don't know how to do more than just adding a field in a menu, or a ok/cancel popup. Which is not enough to deal with songs. So, right now, I'm not trying to do it.

Human failure

The main problem is that, as soon as I want to add some lyrics in anki, I want to add hundreds of songs from dozens of artists I love. This takes time, deciding what to add, finding the lyrics on the web, or sometime typing them if the song's lyric is not already online(Which happens quite often when you love singers which are not famous). But mostly, it take a lot of time reviewing them.

Another problem comes from the fact that (I think) I already know most of the lyrics of the songs I add in anki.I'll want to see the hundred of songs immediatly. I can do it if I have a free hour. The trouble is that, a few day later, it will create a hundred of new card to review. Which led to the technical problem of having a lot of verses to review simultaneously.

On the other hand, if, in a day, I see only 10 new verses, it will be frustrating that I don't consider the hundred of other song I want to learn. Furthermore, I'll always see the same songs, which means that the last songs, either by alphabetical order, or by order in which I add them, will not be seen before monthes. Which is frustrating, because if I just added a song, it means I would love to see it right now.

Failure related to songs

One last problem is that song may be very repetitive. When a few verses repeat themselves multiple times in the song, e.g. in a chorus, you need a lot of context to know which is the next verses which is missing. You can't just read the 3 last lines. You need to know whether its the first, second, third chorus...

Furthermore, the cards created to learn the second chorus are a waste of time, since you already knew the first chorus.

In fact, when the repetition is only a chorus, it's kind of ok. You may write {chorus} instead of rewriting the chorus. It will save you time, since {chorus} is shorter.

The problem mostly is when the chorus change a little bit each occurrence. I don't have english example, but in French, it's quite usual to have chorus were one or two words are sometime changed. Either you write {Chorus (the current change)} to state that this time, the chorus has (the current change) (which is really strange to read when you learn your card), or you write the chorus entirely, and then you have the same problem as above.

This means that, essentially, what you really want to know is to learn which part of the song comes after which part, to see the big picture. This would let you know what goes after each chorus, since you'd essentially ignore the chorus. But doing the «big picture» seems to be complicated, how can you tell Anki how to process it ?

Note

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

mardi 30 janvier 2018

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


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.

Work around

Creating a note by question

Currently, I used the add-on «imports lyrics/poetry» for lyrics of song I like. This add-on creates a note by line of the lyrics. The main trouble is that, if you have an error in a line, you need to correct many notes since the error is repeated. And it's hard to correct many notes from the smartphone, while it is easy to just correct the current note. The second problem with this method is that, since each lines correpsond to a distinct note, there is no way to ask Anki to bury the other notes(lines) related to the same song.

Furthermore, it is really inneficient in term of memory. Indeed, the first line of a 120-line lyrics is copied 120 times in memory.

A field by question

Concerning the definitions, I have in my note type «name», «name 2», «name 3» and «name 4». And my note's type contains 4 similar card's type, with similar templates. And I did the same thing for the four fields «notation». Normally, it means that when I do want to change a template, I'll need to change it - at least - 4 times. In order to avoid this, I created MetaTemplate, a template for card's type. But it's not really easy to learn how to use it and I have no idea of how to make it more user friendly. And anyway, having four fields works only because it is a small list.

Let us imagine I would like to have a single note for an entire song. And this song is 120 lines longs. The only solution I see would be to create a field by note, hence for a song with 120 lines, I would need a note type with 120 fields and 120 cards. Which is not technically impossible, but unreasonable. In particular because anki is already slow when I edit a note type with 30 cards.

Cloze

The first thing I did to learn lyrics is to use cloze deletion. A single line would be deleted, and I have to remember it. The trouble is that, seeing the line after the deleted one is a really strong hint I'm not supposed to have when I recite the song. I would rearry prefer Anki to give me the start of the lyrics and asking for the next line. As is done by «imports lyrics/poetry».

My ideal world

I know explain what I would love to see when I use list. When I create a card type, I'd want to tell anki, «here is a list of thing» and maybe «its order matter» (for song) or «it order does not matter» (for list of names of an object). In the first case, I'd like to be able to ask Anki to randomize the order of the elements shown in a card. I don't think it'd be complicated, since we can use javascript.

The first option I want is to write in a card's type: «here, show every element of the list "name", separated by a "comma"» (of course, "name" and "comma" could be replaced by any other field and any other separator.) Thus, my card would show «name: fiber product, fibered product, Cartesian square». This is specially important if the question is «what is the name of "the limit of a product"». In this place, I should remember one of the name. Thus the answer need to show me every possible answer, and I would accept iff I remembered at least one of the name.

Similarly, I'd like to be able to tell anki to generate n cards, where n is the number of elements of the list. In card i I want the option to tell anki to shows only the ith element of the list. In my example above, each card would contains one of the name of the objects which admits multiple definitions, and each card would ask to give the other name. Hence the question would be «What is(are) the other name of "fibered product"» and the answer would be "fiber product, Cartesian square".

I also want the option to tell anki to show each elements appart from the i-th one. For example, this would let me tell to anki to ask me the i-th name given the n-1 other name. This would be especially usefull in order to learn lyrics. Assuming that you know the 10 first line, it makes sens to let you read them again in order to find the i-th line. By symmetry I probably want to see the n-i last line. (I don't yet see the usage I would have of it, but no reason not to do it too)

I'd also love the option to ask Anki for lines i-4 to i-1. For example, in the case of learing lyrics, you probably could remember the i-th line with only the four last lines, and not the entire beginning of the lyrics. That is what the add-ons «imports lyrics/poetry» does. But with this add-on, it is not possible do simply change the value of 4 to 10 if I realize that 10 would be better.

Implementation

The main problem I see with this option is that some power-user may intend to put multiple lists l1, ..., lm into a type field. Assuming that the list lj has nj elements, the numbers of card to generate may be up to n1 times ... times nj elements. This may quickly be unreasonnable. This would mainly be a problem for the user, reviewing a lot of cards is not necessarily usefull. But it would also be a technical problem because each cards has a name. For clozed cards, the name depends on the card number. Here the name would depends of multiple number, it should be sure that we find a correct method to generate name, without ambiguity, and which does not vary if the content of a note vary. The name could be card_n1_..._nj but its not really beautiful nor practical when a card's type is changed. (Technical note: Actually, in the database, the card's number is used instead of its name. Here, I could state that the card n1 ... nj would be numbered as 2n1 times .... times pj^nj, with pj being the jth prime. But it would means that the length of the card number is linear in the number of card, which is technically ugly and innefficient.

Concerning the input, I think there should be at least two distinct kinds of input. The field should be either a text or a list. Nothing should be changed for the text field (what already exists). For a field F which is a list, the interface would have a button (+), stating to add a new text input for F.

Or maybe, each elements should be entered in a single text input area, with a special separator symbol. The separator should probably be a parameter, either in the add/edit window, or in the template. For example, it makes sens to consider that the separator of a lyric is the newline. But it would also makes sens to accept that the user just copy-paste the list of elements they want to learn, separated by a comma or a tab. (à la CSV)

I don't know enough about database to know the ideal way to obtain a column of a table which is a list of things. So I do hope that it would not be particularly complicated. I can imagine multiple solutions, but I don't know what is the best practice. But since, in the current database, a note is a list of field with a separator symbol, I guess it would not be really complicated to add a second separator.

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

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

Personnellement, mon plus grand problème avec les mathématiques, c'est la quantité de choses à apprendre. Je commence par donner un exemple, qui ne sera pas forcément clair pour les gens ne connaissant pas déjà un peu le domaine dont je parle, mais ça ne devrait pas trop gêner à saisir l'idée générale. J'ai voulu découvrir ce qu'était la théorie des catégories. Un autre jour j'ai voulu lire un manuel d'introduction à la théorie des nombres. Deux sujets qui, ont l'air franchement passionnants. Dans lequel les premières pages me semblent clairs. Mais après quelques dizaines de pages, j'avais oublié les définitions exactes donnés dans les pages d'avants. Pas des définitions très complexes. Juste trop nombreuses.

J'insiste énormément sur le fait que je parle d'apprendre des définitions que j'ai comprises. Il ne sert à rien, en mathématique, et de manière général, d'apprendre sans comprendre (à part une liste de courses ou les décimales de Pi, auquel cas il ne sert à rien de l'apprendre.)

Dans le cas des catégories, les définitions étaient expliquée en montrant comment des propriétés bien connus d'algèbre ou de topologie étaient des cas particuliers des propriétés catégoriques qu'on nous introduisait. C'est génial pour comprendre, vu que ça ramène à des notions connus. Par exemple, je me souviens que Épi et Mono sont les généralisations de surjectif et d'injectif. Ou d'injectif et surjectif. J'avais toujours un doute. Dans tous deux cas, ça me permettait donc de savoir que même un Épi peut être Mono. Mais d'une part, ça garde la question «Un Épi, c'est surjectif ou injectif ?» Et d'autre part, savoir que c'est une généralisation ne m'aide pas à savoir comment ça généralise. Quelles propriétés des surjections sont gardées et lesquels ne le sont pas. Par exemple, suivre de trop près la métaphore indiquerait que Épi et Mono implique Iso.

Et pour ce genre de problème, un logiciel de mémorisation est génial. Le souci, c'est que les decks créé par la communauté d'utilisateur de anki sont assez médiocres. D'abord parce qu'on dirait qu'aucun procédé systématique n'a été suivi en créant les cartes (certains ont juste scanné des pages de cours manuscrites). Et puis parce que c'est rarement des maths qui m'intéressent. Je ne cherche pas à apprendre mes tables de multiplication, ni les bases de calculus. En fait, les seuls deck de la communauté que j'utilise sont: pour apprendre les notes naturelles sur les cordes de guitare, les techniques pour utiliser efficacement un logiciel de mémorisation, et le deck créé à partir de Rationality, from A.I. to Zombie. Je me retrouve donc à créer mes propres decks à partir de livre de cours ou d'articles de recherche dont j'aimerai maîtriser le contenu.

Les régles que j'utilise.

Les decks.

J'utilise un deck par livre. Parce que comme ça je pourrai donner ses decks à la communauté en indiquant précisément ce que contient le deck. Ça veut dire que j'ai choisi de prendre le temps de remettre dans le deck des trucs que je crois déjà connaître; et en particulier des choses sont en double d'un deck à l'autre (Par exemple, la définition d'un ensemble ouvert se trouve bien sûr dans un deck de topologie. Mais il se trouve aussi dans un deck d'analyse complexe, où la définition est restreinte aux cas des espaces métriques.). J'ai l'impression que ça ne me fait pas perdre beaucoup de temps, que ça me permet d'être sur que je n'omet pas de chose que je pense maîtriser à-peu-près - mais en fait non. Et ça permettra à la communauté puisse commencer par n'importe quel deck.

Je précise tout de suite que ces decks ont vocation à servir à aider la lecture du livre. Mais PAS à la remplacer. Parce que avoir vu au moins une fois la démonstration est souvent important. Et que mes deck ne reprennent pas en général les démonstrations[1].

Je ne créé pas la totalité d'un decks d'un coups. Par exemple, je lis un bouquin de théorie des ensemble. Pour l'instant je n'ai créé que le chapitre un. Parce qu'il y a déjà tellement de définitions différentes que je ne maîtrise pas encore par cœur et qui me demande de réfléchir (le type, la cofinalité) que je ne serai pas encore capable de comprendre la suite du livre. (À ce sujet, il faudrait que je conseille aux utilisateurs de mes decks de «suspendre» l'étude du chapitre n tant qu'ils ne maîtrisent pas le chapitre n-1.)

À contrario, je construis plusieurs decks d'un coup. Ce qui est d'ailleurs assez cohérent avec la manière dont les maths sont étudiées en cours. C'est à dire que si je suis bloqué pour l'instant par ma maîtrise de l'analyse complexe, ça ne m'empêche aucunement d'avancer dans un livre de théorie des graphes. Et le temps d'avancer petit à petit dans l'apprentissage sur Anki des résultats d'analyse, je peux y mettre des résultats de théorie des graphes.

Type de carte

Une carte standard de Anki montre un recto et demande un verso. Et parfois les cartes sont à double sens: on montre le verso et on demande le recto. C'est génial pour du vocabulaire, et je l'utilise quand je cherche à me souvenir de la traduction anglaise d'un mot que je connais en français, ou vice-versa.

À part pour le vocabulaire, j'utilise presque uniquement les textes a trous. C'est à dire, comme son nom l'indique, il y a un texte de base, et on cache une partie du texte que l'utilisateur doit retrouver. L'intérêt du texte à trou, c'est que ça permet de simuler les cartes normales. Donc une fois qu'on a sélectionner texte à trou, on n'a jamais besoin de rechanger le type de texte.

Je rajoute dans un champ à part le numéro de chapitre, section, sous-section. Et si c'est un théorème, lemme, corollaire, définition[2], je rajoute son numéro. Je ne rajoute pas (encore) le numéro de la page, parce que c'est souvent redondant avec les informations précédentes. Mais je suppose que je devrai le faire quand il n'y a pas de numéro d'environnement, car dans certains livre où rien n'est numéroté et dont les sections font 10 pages, retrouver une définition précise peut prendre plusieurs minutes. Cet intérêt est d'autant plus grand que, pour se souvenir d'un résultat, une méthode efficace est de se souvenir de sa preuve. Et que réciproquement, il est pratique d'avoir la position du résultat pour relire la preuve si on s'aperçoit qu'on l'a oublié.

Un dernier point important: je coche systématiquement la case disant à Anki de ne pas vider les champs quand j'ai rempli une carte. Concernant les numéros de chapitre et de section, c'est évident que ça change rarement d'une fois sur l'autre et qu'on gagne du temps en n'ayant pas à les retaper. Concernant les maths elles-mêmes, j'ai remarqué que les objets arrivant les uns après les autres sont souvent similaires. Ainsi, dans un livre d'algèbre linéaire, beaucoup de résultats vont commencer par «Soit U,V deux espace vectoriels et T un morphism de U dans V». C'est quand même pratique d'éviter de retaper ça a chaque fois.

Définition

Pour une définition, il y a en général trois trous. Le premier, c'est le nom de l'objet défini. Le second c'est la notation utilisée pour représenter l'objet. et le troisième c'est la définition. Si un objet admet plusieurs définitions équivalentes, je rajoute un trou par définition. Parce que si on te demande ce qu'est un carré, et que tu réponds : un losange avec un angle droit, tu n'as pas envie d'avoir faux car ça a été défini comme un rectangle avec deux côtés adjacents de mêmes longueurs.

Attention cependant, il vaut parfois mieux que la notation et la définition apparaissent dans le même trou. Ainsi pour X un ensemble, il est simple d'intuiter que «Aff(X)» est «le plus petit espace affine contenant X». Or ce genre de question est totalement inintéressante. Ce qu'il faut c'est retrouvé cette définition à partir de «l'ensemble des éléments de la forme Somme des x_ir_i, ou x_i appartient à X, r_i appartient au corps, et la somme des r_i vaut 1.»

Théorème

Un théorème comprend en général deux trous: les hypothèse, et la conclusion. Un troisième trou si le théorème est important et admet un nom classique. Cependant, il faut faire attention, quand une hypothèse introduit un objet, il vaut mieux introduire l'objet en dehors du trou. C'est à dire «Si ..., alors le centre de P est non trivial» est peu clair. Alors que «Soit P un groupe. Si ..., alors le centre de P est non trivial» est plus clair.

Hypothèses
Une première chose très importante est de toujours remettre toutes les hypothèses. Parfois, certaines hypothèses sont marquées en début de section/chapitre et sont supposées vrai pour tout le chapitre. Sauf que lors de la révision, on ne voit plus ces hypothèses (il serait même absurde de demander à connaître les hypothèses par cœur, chapitre par chapitre).

Il est aussi important de mettre des trous vides. En théorie des automates, certains théorèmes concernent des monoides, et d'autres uniquement des monoides finis. Si je dis «Soit M un monoide fini» ou «soit M un monoide», la simple présence du trou m'indique que l'hypothèse est que M est fini. Donc dans le deuxième cas, il est indispensable de mettre «Soit M un monoide ». C'est d'autant plus simple à faire que, si on dit à Anki que quand on créé une nouvelle carte, ses champs soient les champs de l'ancienne carte,

Implication multiples
Ce qui m'amène à un autre problème. Une hypothèse peut avoir plusieurs implications. Une propriété peut être impliqué par plusieurs hypothèse différentes. Donc il vaut mieux mettre «Si P1 ou P2 .. ou Pi alors Q», ou bien «Si P alors Q1 et Q2 ... et Qi». En effet, on ne voudrait pas avoir tort juste parce que, de toutes les conséquences, on a choisi celle qui est sur une autre carte. Ici, chaque terme entre crochet indique un trou différent.

On tomberait bien sur sur un problème si P implique Q et R et que Q est impliqué par O et P. Mais jusqu'à présent, je ne suis pas tombé dessus, et j'ai l'impression que dans les maths, en pratique, ça arrive rarement.

Ordre des mots
Quand un théorème est de la forme «Le centraliseur de A dans G divise le normalisateur de A dans G». Il faut absolument avoir «Le normalisateur de A dans G est divisé par le centraliseur de A dans G». Sinon on peut compléter le résultat par simple reconnaissance de motif. En se doutant que le trou du milieu est soit une égalité, soit une affirmation sur la divisibilité. Pour l'instant je n'ai pas encore trouvé comment faire ça efficacement, mais il faudrait que je repasse sur mes anciennes carte et fasse cet ajout.

Exemples

La dernière chose que je veux rajouter dans Anki, ce sont les exemples. En général, ils sont de la forme «A, B.., Z sont des exemples de P».

J'ai longtemps cru que les exemples ne faisaient pas parti des mathématiques. Parce que, d'un point de vue purement Bourbakiste, logique, un exemple n'apparaît pas dans les preuves, et ce qui compte c'est: définition, axiomes, théorème, preuves. Et je pense que c'est une idée assez répandue, puisque je me souviens qu'un prof de l'ENS avait insisté sur le fait qu'il ne fallait pas qu'on ignore les exemples.

Depuis, j'ai compris que les exemples avaient aux moins trois utilités. Officiellement, ça donne de l'intuition, en montrant dans quel cas les hypothèses peuvent s'appliquer. Formellement, un exemple permet de montrer qu'un ensemble d'hypothèse est non contradictoire, et donc qu'il est pertinent de considérer ces hypothèses. Et en pratique, un exemple pourra être réutilisé quand on veut étudier des affirmations qui ne sont pas dans le cours.

Révision

Une fois les cartes faites, je demande à Anki de créer toutes les images à partir de LaTeX (étape non automatique, ce qui est bête) et j'utilise la synchronisation (possible uniquement via leur serveur), pour envoyer le tout vers mon téléphone portable. (Application gratuite et sans pubs, ils sont fantastiques !) et les réviser dans le métro/quand j'ai un moment seul sans mon ordinateur.

Bien sûr, en créant les cartes, je fais des fautes. Soit parce que je n'écris pas du LaTeX sans faute et que Anki affiche les message d'erreurs dans les cartes au lieu de le montrer à leur créations. Soit parce que j'ai oublié un mot, remplacé un mot par un autre (typiquement, je confond systématiquement les mot set et state - ce qui est ennuyeux quand on fait de la logique et des automates). C'est pour ça aussi que, quand je créé une carte, d'indiquer précisément d'où vient l'information. Si c'est le cas, s'il y a une faute, je «suspend» la carte. Et une fois synchronisé, je regarde les cartes suspendues sur mon ordinateur pour les corriger.

Parfois, c'est une carte à trou, et le trou fait que la phrase n'a aucun sens. Dans ce cas je suspend aussi avec un message explicatif. Ça arrive surtout si je n'ai pas respecté les règles énoncées plus haut, par exemples pour les premières cartes que j'ai créé. Même règles si je vois une faute tellement grosse que je ne comprend plus la question.

Notes

[1] La principale exception étant pour Least Significant Digit First Presburger Automata, où mon but est justement de comprendre un jour la démonstration de ce papier de 130 pages.

[2] Bref, un environnement en LaTeX