J'ai toujours pensé qu'un programmeur paresseux est un bon programmeur. Pourquoi ? Parce que si on demande à un programmeur travailleur de faire quelque chose, il ira le faire. Mais un programmeur paresseux passera 2 à 3 fois plus de temps, mais il écrira un script qui fera cela pour lui. Peut-être que la première fois, cela prendra de manière injustifiée beaucoup de temps, mais dans le cas de tâches répétitives, cette approche se rentabilise très rapidement. Je me considère comme un programmeur paresseux. C'était une introduction, maintenant passons aux choses sérieuses.
Première histoire
Il y a quelques années, j'ai réfléchi à la façon d'améliorer mon anglais. Rien de mieux que de lire de la littérature ne m'est venu à l'esprit. J'ai acquis un e-reader, téléchargé des livres et j'ai commencé à lire. Pendant ma lecture, je me suis constamment heurté à des mots inconnus. Je les traduisais immédiatement grâce aux dictionnaires intégrés de l'e-reader, mais j'ai remarqué une particularité : les mots ne voulaient pas être retenus. Lorsque je rencontrais à nouveau ce mot quelques pages plus tard, avec 90 % de probabilité, j'avais de nouveau besoin d'une traduction, et ce à chaque fois. Il en découlait que ce n'est pas suffisant de simplement traduire des mots inconnus pendant la lecture, il faut faire quelque chose d'autre. L'idéal serait de l'intégrer dans le quotidien et de commencer à l'utiliser, mais je ne vis pas dans un pays anglophone et c'est peu probable. Là, je me suis rappelé que j'avais lu un jour à propos de .
Qu'est-ce que c'est et à quoi ça sert ? Pour faire court, il y a , ensuite une citation de Wikipédia :
Dès la première heure, jusqu'à 60 % de toutes les informations reçues sont oubliées, après 10 heures, il reste 35 % de ce qui a été appris. Ensuite, le processus d'oubli se fait lentement, et après 6 jours, environ 20 % du nombre total de syllabes initialement apprises restent en mémoire, et la même quantité reste en mémoire après un mois.
Et la conclusion ici
Les conclusions qu'on peut tirer sur la base de cette courbe sont qu'il est nécessaire de répéter le matériel appris pour une mémorisation efficace.
Nous en sommes venus à l'idée .
c'est un programme totalement gratuit et open source qui réalise l'idée de la répétition espacée. En d'autres termes, des cartes mémoires informatisées, avec une question d'un côté et une réponse de l'autre. Comme vous pouvez élaborer des questions/réponses à l'aide de simples html/css/javascript, on peut dire qu'il possède des possibilités véritablement illimitées. De plus, il est extensible avec des , et l'un d'eux nous sera très utile par la suite.
Créer des cartes manuellement est long, ennuyeux, et avec une forte probabilité, au bout d'un moment, vous abandonnerez cette tâche, alors je me suis demandé à un certain moment s'il était possible d'automatiser cela. La réponse est oui, c'est possible. Et je l'ai fait. Pour être franc, c'est plus , mais qui peut être utilisé. S'il y a de l'intérêt de la part des utilisateurs et si d'autres développeurs s'y intéressent, cela peut être amené à un produit final que même des utilisateurs non techniques pourront utiliser. Actuellement, l'utilisation de mon utilitaire nécessite certaines connaissances en programmation.
Je lis des livres avec le programme . Il a la capacité de se connecter à des dictionnaires externes, et lors de la traduction d'un mot, il enregistre le mot que vous avez appelé pour la traduction dans un fichier texte. Il ne reste plus qu'à traduire ces mots et à créer des cartes ANKI.
Au départ, j'ai essayé d'utiliser pour la traduction , etc. Mais avec des services gratuits, ça ne marchait pas. J'épuisais la limite gratuite déjà pendant le développement, de plus, selon les conditions de la licence, je n'avais pas le droit de mettre en cache les mots. À un moment donné, j'ai compris que je devais traduire les mots moi-même. Finalement, un module a été écrit auquel on peut connecter et qui sait les convertir en HTML format.
Voici à quoi ressemble un article de dictionnaire dans *.html, ma version comparée à celle de

Avant de chercher un mot dans les dictionnaires connectés, je le mets sous sa à l'aide de la bibliothèque . En réalité, c'est grâce à cette bibliothèque que j'ai commencé à programmer en Java et le plan initial était de tout écrire en Java, mais en cours de route, j'ai trouvé la bibliothèque qui permet d'exécuter assez facilement du code Java à partir de nodejs et une partie du code est écrite en JavaScript. Si j'avais trouvé cette bibliothèque plus tôt, il n'y aurait pas eu une seule ligne écrite en Java. Un autre projet secondaire né dans le processus est la création qui a été trouvée en ligne au format *.chm, convertie et mise en forme. Si l'auteur du fichier original, un utilisateur par le pseudo yozhic voit cet article, je lui adresse un grand merci pour le travail accompli, sans sa documentation, je n'aurais probablement rien réussi.
Donc, j'ai un mot en anglais, son article lexical au format *.html, il reste à tout rassembler, créer des articles ANKI à partir de la liste de mots et les intégrer dans la base de données ANKI. À cet effet, le projet suivant a été créé . Il peut prendre en entrée une liste de mots, les traduire, créer des *.html articles ANKI et les enregistrer dans la base de données ANKI. À la fin de l'article, il y a des instructions sur son utilisation. Pour l'instant, c'est la deuxième histoire où les répétitions espacées peuvent être utiles.
Deuxième histoire.
Tous les individus à la recherche d'une spécialité plus ou moins qualifiée, notamment les programmeurs, se heurtent à la nécessité de se préparer pour les entretiens. De nombreux concepts demandés lors des entretiens ne sont pas utilisés dans la pratique quotidienne et sont oubliés. Lors de ma préparation à un entretien, en feuilletant un résumé, un livre, un manuel, j'ai constaté qu'il prenait beaucoup de temps et d'attention de filtrer les informations que vous connaissez déjà, car ce n'est pas toujours évident et vous devez lire attentivement pour comprendre que c'est hors sujet. Lorsque vous abordez un sujet que vous avez vraiment besoin de revoir, il arrive très souvent que vous soyez déjà fatigué et que la qualité de votre préparation en pâtisse. À un moment, j'ai pensé : pourquoi ne pas utiliser des cartes ANKI pour cela ? Par exemple, lors de la prise de notes d'un sujet, créer immédiatement un résumé sous forme de question et réponse, puis lors de la révision, vous saurez tout de suite si vous connaissez ou non la réponse à cette question.
Le problème ne se posait que dans le fait que saisir les questions était très long et ennuyeux. Pour faciliter le processus, j'ai ajouté la fonctionnalité de convertir Texte dans les cartes ANKI. Tout ce que vous devez faire est d'écrire un grand fichier dans lequel les questions et les réponses seront marquées par une séquence de caractères convenue à l'avance, permettant au parseur de comprendre où se trouve la question et où se trouve la réponse.
Après avoir créé ce fichier, vous lancez data2anki et il génère les cartes ANKI. Le fichier original est facile à modifier et à partager, il suffit de supprimer la carte correspondante et de relancer le programme, et une nouvelle version sera créée.
Installation et utilisation
Installation d'ANKI + AnkiConnect
- Téléchargez ANKI ici :
- Installez le plugin AnkiConnect :
Installation
- Téléchargez depuis le dépôt github
git clone https://github.com/anatoly314/data2anki - Installez les dépendances
cd data2anki && npm install - Téléchargez les dépendances java
- Décompressez jar-dependencies.zip et placez son contenu dans data2anki/java/jars
- Téléchargez depuis le dépôt github
Utilisation pour la traduction de mots :
Dans le fichier data2anki/config.json:
dans la clé mode indiquez la valeur dsl2anki
dans la clé modules.dsl.anki.deckName et modules.dsl.anki.modelName indiquez, respectivement, et (doivent déjà être créés avant la création des cartes). Actuellement, seul le modèle de type Basique:
a des champs de devant et de derrière, et créera une carte. Le texte que vous saisissez à l'avant apparaîtra à l'avant de la carte, et le texte que vous saisissez à l'arrière apparaîtra à l'arrière de la carte.
où le mot source est le champ avant, et la traduction sera dans champ arrière.
Il n'y a aucun problème à ajouter le support Basic (et carte inversée), où pour chaque mot et traduction, une carte inverse sera créée, où il faudra se souvenir du mot original à partir de la traduction. Il suffit d'avoir du temps et de l'envie.
dans la clé modules.dsl.dictionariesPath indiquez un tableau avec les dictionnaires *.dsl connectés. Chaque dictionnaire connecté est un répertoire contenant des fichiers de dictionnaire conformément au format :
dans la clé modules.dsl.wordToTranslatePath indiquez le chemin vers la liste des mots que vous souhaitez traduire.
- Lancez lorsque l'application ANKI fonctionne
node data2ankiindex.js - PROFIT !!!
Utilisation pour créer des cartes à partir de markdown
Dans le fichier data2anki/config.json:
- dans la clé mode indiquez la valeur markdown2anki
- dans la clé modules.markdown.anki.deckName et modules.dsl.anki.modelName indiquez, respectivement, et (doivent déjà être créés avant la création des cartes). Pour markdown2anki le mode, seul le modèle de type Basique.
dans la clé modules.markdown.selectors.startQuestionSelectors et modules.markdown.selectors.startAnswerSelectors indiquez les sélecteurs que vous utilisez pour marquer le début de la question et de la réponse, respectivement. La ligne contenant le sélecteur ne sera pas analysée et ne sera pas incluse dans la carte, le parseur commencera avec la ligne suivante.
Par exemple, cette carte question/réponse :

sera affichée en markdown de la manière suivante :
#QUESTION# ## Question 5. Write a mul function which will work properly when invoked with following syntax. ```javascript console.log(mul(2)(3)(4)); // output : 24 console.log(mul(4)(3)(4)); // output : 48 ``` #ANSWER# Below is the code followed by the explanation of how it works: ```javascript function mul (x) { return function (y) { // anonymous function return function (z) { // anonymous function return x * y * z; }; }; } ``` Here the `mul` function accepts the first argument and returns the anonymous function which takes the second parameter and returns the anonymous function which takes the third parameter and returns the multiplication of arguments which is being passed in successive In Javascript function defined inside has access to outer function variable and function is the first class object so it can be returned by the function as well and passed as an argument in another function. - A function is an instance of the Object type - A function can have properties and has a link back to its constructor method - A function can be stored as variable - A function can be pass as a parameter to another function - A function can be returned from another functionL'exemple est pris ici :
Il y a aussi un fichier avec des exemples dans le dossier du projet
examples/markdown2anki-example.md- dans la clé modules.markdown.pathToFile
indiquez le chemin vers le fichier où se trouve *.md fichier avec des questions/réponses
- Lancez lorsque l'application ANKI fonctionne
node data2ankiindex.js - PROFIT !!!
Voici à quoi cela ressemble sur un téléphone mobile :

Résultat
Les cartes ANKI obtenues sur la version desktop se synchronisent sans problème avec le cloud ANKI (gratuit jusqu'à 100 Mo), après quoi vous pouvez les utiliser partout. Il existe des clients pour Android et iPhone, et vous pouvez également les utiliser dans le navigateur. En conséquence, si vous avez du temps à perdre, au lieu de faire défiler sans but Facebook ou de regarder des chats sur Instagram, vous pouvez apprendre quelque chose de nouveau.
Épilogue
Comme je l'ai déjà mentionné, c'est plutôt un POC fonctionnel qu'un produit fini. Environ 30% de la norme DSL du parseur n'est pas implémentée, et donc , il y a aussi l'idée de le réécrire en JavaScript, car je veux de la « cohérence », et de plus, il est actuellement écrit de manière peu optimale. Actuellement, le parseur construit un arbre, ce qui est, à mon avis, superflu et complique le code. En markdown2anki mode image, les images ne sont pas analysées. J'essaierai de continuer à peaufiner, mais, comme j'écris pour moi-même pour l'instant, je vais prioriser la résolution des problèmes que je rencontrerai moi-même, mais si quelqu'un veut aider, il est le bienvenu. Si vous avez des questions concernant le programme, je serai ravi d'aider via des
propositions ouvertes dans les projets concernés. Pour toute autre critique et suggestion, écrivez ici. J'espère que ce projet sera utile à quelqu'un.
Source : habr.com

