Ich habe immer gedacht, dass ein fauler Programmierer ein guter Programmierer ist. Warum? Weil ein fleißiger Programmierer einfach loslegt und die Aufgabe erledigt. Ein fauler Programmierer hingegen benötigt viel mehr Zeit, investiert sie jedoch in die Entwicklung eines Scripts, das diese Aufgabe für ihn übernimmt. Beim ersten Mal mag das viel Zeit kosten, aber bei wiederkehrenden Aufgaben wird sich diese Herangehensweise schnell auszahlen. Ich betrachte mich als faulen Programmierer. Das war die Einleitung, und jetzt kommen wir zur Sache.
Geschichte eins
Vor einigen Jahren dachte ich darüber nach, wie ich mein Englisch verbessern könnte. Mir viel nichts Besseres ein als das Lesen von Literatur. Ich kaufte einen E-Reader, lud Bücher herunter und begann zu lesen. Während des Lesens stieß ich ständig auf unbekannte Wörter. Ich übersetzte sie sofort mit den integrierten Wörterbüchern des Readers, aber ich bemerkte eine Besonderheit: Die Wörter wollten sich nicht einprägen. Wenn ich einige Seiten weiter wieder auf dasselbe Wort stieß, benötigte ich mit 90 % Wahrscheinlichkeit wieder eine Übersetzung, und das jedes Mal. Daraus folgte die Erkenntnis, dass es nicht ausreicht, unbekannte Wörter während des Lesens zu übersetzen; ich musste etwas anderes tun. Idealerweise wäre es, das Wort in meinen Wortschatz aufzunehmen und zu verwenden, aber ich lebe nicht in einem englischsprachigen Land, was schwierig ist. Da erinnerte ich mich daran, dass ich einmal über .
Was ist das und wie funktioniert es? Kurz gesagt, es gibt eine , weiter ein Zitat aus der Wikipedia:
Bereits innerhalb der ersten Stunde vergessen wir bis zu 60 % aller erhaltenen Informationen; nach 10 Stunden bleibt nur noch 35 % des Gelernten im Gedächtnis. Der Vergessensprozess verläuft danach langsam, und nach 6 Tagen bleiben etwa 20 % der ursprünglich gelernten Silben im Gedächtnis, ebenso viel bleibt nach einem Monat erhalten.
Und die Schlussfolgerung daraus
Die Erkenntnisse, die wir aus dieser Kurve ableiten können, sind, dass Wiederholungen des gelernten Materials für ein effektives Gedächtnis notwendig sind.
Hier sind wir also bei der Idee angekommen .
ist ein absolut kostenloses Open-Source-Programm, das die Idee der interleaved Wiederholung umsetzt. Einfach gesagt, computerisierte Flashkarten, auf deren einer Seite eine Frage und auf der anderen die Antwort steht. Da Sie Fragen/Antworten mit einfachem html/css/javascript, lässt sich sagen, dass es wirklich unbegrenzte Möglichkeiten bietet. Darüber hinaus ist es erweiterbar durch spezielle , von denen uns eines später sehr nützlich sein wird.
Das manuelle Erstellen von Karten ist langwierig, mühsam und führt mit hoher Wahrscheinlichkeit dazu, dass Sie irgendwann das Interesse daran verlieren. Daher habe ich mich irgendwann gefragt, ob es nicht möglich ist, diesen Prozess zu automatisieren. Die Antwort lautet: Ja, das ist möglich. Und ich habe es getan. Ich möchte gleich sagen, dass es mehr ist , aber es ist benutzbar. Wenn das Interesse der Nutzer vorhanden ist und andere Entwickler sich anschließen, kann es zu einem ausgereiften Produkt weiterentwickelt werden, das sogar von technisch weniger versierten Nutzern genutzt werden kann. Momentan erfordert die Nutzung meines Dienstprogramms jedoch gewisse Programmierkenntnisse.
Ich lese Bücher mit Hilfe des Programms . Es bietet die Möglichkeit, externe Wörterbücher anzuschließen, und beim Übersetzen eines Worts speichert es das Wort, für das Sie die Übersetzung aufgerufen haben, in einer Textdatei. Jetzt bleibt nur noch, diese Wörter zu übersetzen und ANKI-Karten zu erstellen.
Zuerst versuchte ich, für die Übersetzung , und so weiter. Aber mit den kostenlosen Diensten hat es nicht funktioniert. Ich habe das kostenlose Limit bereits während der Entwicklung ausgeschöpft, zudem hatte ich laut Lizenzbedingungen keine Erlaubnis, die Wörter zu cachen. Irgendwann wurde mir klar, dass ich die Wörter selbst übersetzen musste. Schließlich wurde ein Modul geschrieben, , das man anschließen kann, und das in der Lage ist, diese in HTML ein Format zu konvertieren.
So sieht ein Wörterbucheintrag in *.htmlaus, mein Beispiel im Vergleich zu dem,

Bevor ich ein Wort in den angeschlossenen Wörterbüchern suche, bringe ich es in mit Hilfe der Bibliothek Tatsächlich habe ich wegen dieser Bibliothek angefangen, in Java zu programmieren; der ursprüngliche Plan war es, alles in Java zu schreiben, aber im Prozess fand ich die Bibliothek , mit der man relativ einfach Java-Code aus Node.js ausführen kann, und ein Teil des Codes wurde in JavaScript geschrieben. Hätte ich diese Bibliothek früher gefunden, wäre kein Wort in Java geschrieben worden. Ein weiteres Nebenprojekt, das im Rahmen dieses Prozesses entstand, ist die Erstellung eines die im Internet im Format *.chm gefunden wurde., konvertiert und in annehmbare Form gebracht. Wenn der Autor der Originaldatei, der Nutzer mit dem Nickname yozhic diesen Artikel sieht, dann ein großes Dankeschön für die geleistete Arbeit, ohne seine Dokumentation hätte ich wahrscheinlich nichts erreicht.
So, ich habe ein Wort auf Englisch, dessen Wörterbuchartikel im Format *.html, es bleibt nur noch, alles zusammenzuführen, ANKI-Artikel aus der Wortliste zu erstellen und sie in die ANKI-Datenbank einzugeben. Zu diesem Zweck wurde folgendes Projekt erstellt . Es kann eine Wortliste als Eingabe nehmen, übersetzen, ANKI-*.html Artikel erstellen und sie in die ANKI-Datenbank eintragen. Am Ende des Artikels gibt es eine Anleitung zur Nutzung. Bis dahin ist dies die zweite Geschichte, in der intervallmäßige Wiederholungen nützlich sein können.
Die zweite Geschichte.
Alle Menschen, die auf der Suche nach mehr oder weniger qualifizierten Berufen sind, einschließlich Programmierer, stehen vor der Notwendigkeit, sich auf Interviews vorzubereiten. Viele Konzepte, die bei Interviews gefragt werden, verwenden Sie im Alltag nicht und sie geraten in Vergessenheit. Bei meiner erneuten Vorbereitung auf ein Vorstellungsgespräch, als ich meine Notizen, Bücher und Nachschlagewerke durchschmökerte, stellte ich fest, dass es viel Zeit und Aufmerksamkeit in Anspruch nimmt, Informationen auszusortieren, die Sie bereits wissen, denn diese sind nicht immer offensichtlich und man muss sich tief in die Materie einarbeiten, um zu verstehen, warum sie irrelevant sind. Wenn Sie dann das Thema erreichen, das Sie wirklich wiederholen müssen, sind Sie oft schon müde und die Qualität der Vorbereitung leidet darunter. Irgendwann dachte ich mir, warum nicht ANKI-Karten auch dafür nutzen? Zum Beispiel, indem ich bei der Zusammenfassung eines Themas sofort Notizen in Form von Frage-Antworten erstelle und dann beim Wiederholen sofort weiß, ob ich die Antwort auf die Frage kenne.
Das Problem war nur, dass das Eingeben der Fragen sehr lange und mühsam ist. Um den Prozess zu erleichtern, habe ich eine Funktionalität hinzugefügt, um zu konvertieren Text für ANKI-Karten. Alles, was Sie tun müssen, ist, eine große Datei zu erstellen, in der Fragen und Antworten durch eine zuvor vereinbarte Reihenfolge von Zeichen gekennzeichnet sind, anhand derer der Parser erkennt, wo die Frage und wo die Antwort ist.
Nachdem diese Datei erstellt wurde, starten Sie data2anki und es erstellt ANKI-Karten. Die Originaldatei lässt sich leicht bearbeiten und teilen; Sie müssen lediglich die entsprechende Karte(n) löschen und das Programm erneut starten, und eine neue Version wird erstellt.
Installation und Nutzung
Installation von ANKI + AnkiConnect
- Laden Sie ANKI hier herunter:
- Installieren Sie das AnkiConnect-Plugin:
Installation von
- Laden Sie herunter aus dem GitHub-Repository
git clone https://github.com/anatoly314/data2anki - Installieren Sie die Abhängigkeiten
cd data2anki && npm install - Laden Sie die Java-Abhängigkeiten herunter
- Entpacken Sie jar-dependencies.zip und platzieren Sie den Inhalt in data2anki/java/jars
- Laden Sie herunter aus dem GitHub-Repository
Verwendung zur Übersetzung von Wörtern:
In der Datei data2anki/config.json:
im Schlüssel Modus geben Sie den Wert ein dsl2anki
im Schlüssel modules.dsl.anki.deckName und modules.dsl.anki.modelName geben Sie entsprechend ein, und (müssen bereits erstellt werden, bevor die Karten erstellt werden). Derzeit wird nur das Modelltyp unterstützt Basic:
Hat Vorder- und Rückfelder und erstellt eine Karte. Der Text, den Sie in 'Vorderseite' eingeben, wird auf der Vorderseite der Karte angezeigt, und der Text, den Sie in 'Rückseite' eingeben, wird auf der Rückseite der Karte angezeigt.
wo das ursprüngliche Wort ist Vorderseite, und die Übersetzung wird in der Rückseite.
Es gibt kein Problem, Unterstützung hinzuzufügen Basis (und umgekehrte Karte), wo für das Wort und die Übersetzung auch eine umgekehrte Karte erstellt wird, bei der man sich an das ursprüngliche Wort erinnern muss. Man benötigt nur Zeit und Lust.
im Schlüssel modules.dsl.dictionariesPath Sie geben ein Array mit verbundenen *.dsl Wörterbüchern an. Jedes verbundene Wörterbuch ist ein Verzeichnis, in dem sich die Wörterbuchdateien im entsprechenden Format befinden:
im Schlüssel modules.dsl.wordToTranslatePath Sie geben den Pfad zur Liste der Wörter an, die Sie übersetzen möchten.
- Sie starten das Arbeits-ANKI-Programm
node data2ankiindex.js - GEWINNEN!!!
Verwendung zur Erstellung von Karten aus Markdown
In der Datei data2anki/config.json:
- im Schlüssel Modus geben Sie den Wert ein markdown2anki
- im Schlüssel modules.markdown.anki.deckName und modules.dsl.anki.modelName geben Sie entsprechend ein, und (sollten bereits vor der Erstellung der Karten erstellt werden). Für markdown2anki den Modus wird nur ein Modell des Typs unterstützt Basic.
im Schlüssel modules.markdown.selectors.startQuestionSelectors und modules.markdown.selectors.startAnswerSelectors Sie geben die Selektoren an, mit denen Sie den Beginn von Frage und Antwort markieren. Die tatsächliche Zeile mit dem Selektor wird nicht geparst und gelangt nicht in die Karte; der Parser beginnt mit der nächsten Zeile zu arbeiten.
Zum Beispiel sieht diese Frage/Antwort-Karte so aus:

Wird im Markdown folgendermaßen aussehen:
#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 functionBeispiel entnommen von:
Es gibt auch eine Datei mit Beispielen im Projektordner
examples/markdown2anki-example.md- im Schlüssel modules.markdown.pathToFile
geben Sie den Pfad zur Datei an, wo die * liegt.md Datei mit Fragen/Antworten
- Sie starten das Arbeits-ANKI-Programm
node data2ankiindex.js - GEWINNEN!!!
So sieht es auf einem Mobiltelefon aus:

Ergebnis
Die auf der Desktop-Version erhaltenen ANKI-Karten synchronisieren problemlos mit der ANKI-Cloud (kostenlos bis 100 MB), danach können Sie sie überall nutzen. Es gibt Apps für Android und iPhone, und sie sind auch im Browser verfügbar. Wenn Sie also Zeit haben, die Sie nicht nutzen können, anstatt ziellos durch Facebook oder Katzen auf Instagram zu scrollen, können Sie etwas Neues lernen.
Epilog
Wie ich bereits erwähnt habe, ist dies eher ein funktionierender POC, den man nutzen kann, als ein fertiges Produkt. Etwa 30 % des DSL-Parserstandards sind nicht implementiert, und deshalb , außerdem gibt es die Idee, ihn auf JavaScriptumzuschreiben, da ich mir Konsistenz wünsche, und außerdem ist er derzeit nicht sehr optimiert. Momentan erstellt der Parser einen Baum, was meiner Meinung nach unnötig ist und den Code kompliziert. In markdown2anki Im Bildmodus werden Inhalte nicht geparsed. Ich werde versuchen, nach und nach daran zu arbeiten, aber da ich bisher nur für mich selbst schreibe, werde ich zuerst die Probleme angehen, auf die ich selbst stoße. Wenn jemand helfen möchte, ist er herzlich eingeladen. Bei Fragen zum Programm stehe ich gerne über offene Issues in den entsprechenden Projekten zur Verfügung. Weitere Kritik und Vorschläge bitte hier eintragen. Ich hoffe, dieses Projekt wird für jemanden nützlich sein.
P.S. Falls ihr Fehler bemerkt (und leider gibt es welche), schreibt mir privat, ich werde alles korrigieren.
Quelle: habr.com

