Ich habe immer gedacht, dass ein fauler Programmierer ein guter Programmierer ist. Warum? Weil er den Fleißigen bittet, etwas zu tun, wird er es tun. Ein fauler Programmierer verbringt 2-3 Mal mehr Zeit, schreibt aber ein Skript, das es für ihn erledigt. Vielleicht wird es zum ersten Mal unangemessen viel Zeit in Anspruch genommen, aber bei sich wiederholenden Aufgaben zahlt sich dieser Ansatz sehr schnell aus. Ich betrachte mich als faulen Programmierer. Es war eine Präambel, und jetzt kommen wir zur Sache.
Erste Geschichte
Vor ein paar Jahren habe ich mich gefragt, wie ich mein Englisch verbessern kann. Nichts besseres als das Lesen von Literatur kam mir in den Sinn. Ein elektronischer Leser wurde gekauft, Bücher wurden heruntergeladen und ich begann zu lesen. Beim Lesen stießen ständig unbekannte Wörter auf. Ich übersetzte sie sofort mit den eingebauten Wörterbüchern, bemerkte jedoch eine Funktion: Die Wörter wollten nicht in Erinnerung bleiben. Als ich nach ein paar Seiten wieder auf dieses Wort stieß, brauchte ich mit einer Wahrscheinlichkeit von 90% erneut eine Übersetzung, und das jedes Mal. Die Schlussfolgerung war, dass es nicht ausreichte, nur unbekannte Wörter im Leseprozess zu übersetzen, sondern dass Sie etwas anderes tun müssen. Eine ideale Option wäre, es in den Alltag einzuführen und damit zu beginnen, aber ich lebe nicht in einem englischsprachigen Land und dies ist nicht möglich. Dann erinnerte ich mich, dass ich einmal über Intervallwiederholungen gelesen hatte.
Was ist es und womit isst es? Kurz gesagt, es gibt eine solche Kurve des Vergessens , dann ein Zitat aus Wikipedia:
Bereits innerhalb der ersten Stunde werden bis zu 60% aller empfangenen Informationen vergessen, 10 Stunden nach dem Auswendiglernen verbleiben 35% der untersuchten Informationen im Speicher. Ferner ist der Prozess des Vergessens langsam und nach 6 Tagen verbleiben ungefähr 20% der Gesamtzahl der ursprünglich gelernten Silben im Gedächtnis, die gleiche Menge bleibt nach einem Monat im Gedächtnis.
Und die Schlussfolgerung ist von hier
Die Schlussfolgerungen, die auf der Grundlage dieser Kurve gezogen werden können, sind, dass es für ein effektives Auswendiglernen notwendig ist, das erlernte Material zu wiederholen.
So kamen wir zu der Idee der Intervallwiederholung .
ANKI ist ein absolut kostenloses Open-Source-Programm, das die Idee der Intervallwiederholung umsetzt. Einfach ausgedrückt sind computergestützte Lernkarten auf der einen Seite eine Frage, auf der anderen die Antwort. Da Sie Fragen / Antworten mit dem üblichen HTML / CSS / Javascript stellen können , können Sie sagen, dass es wirklich unbegrenzte Möglichkeiten gibt. Darüber hinaus ist es mit speziellen Plugins erweiterbar , und eines davon wird uns in Zukunft sehr nützlich sein.
Das manuelle Erstellen von Karten ist eine lange, mühsame Aufgabe, und es ist sehr wahrscheinlich, dass Sie dieses Geschäft nach einer Weile verprügeln werden. Deshalb habe ich mich irgendwann gefragt, ob dieses Geschäft automatisiert werden kann. Die Antwort lautet: Ja, das können Sie. Und ich habe es geschafft. Ich werde gleich sagen, dass dies mehr POC (Proof of Concept) ist , das aber verwendet werden kann. Wenn das Interesse von Benutzern und anderen Entwicklern aufholt, kann es zu einem fertigen Produkt gebracht werden, das selbst technisch Analphabeten verwenden können. Die Verwendung meines Dienstprogramms setzt einige Programmierkenntnisse voraus.
Ich lese Bücher mit AIReader . Sie kann externe Wörterbücher verbinden und speichert beim Übersetzen eines Wortes das Wort, das Sie als Übersetzung bezeichnet haben, in einer Textdatei. Sie müssen nur noch diese Wörter übersetzen und ANKI-Karten erstellen.
Zuerst habe ich versucht, Google Translate , Lingvo API usw. zum Übersetzen zu verwenden. Bei kostenlosen Diensten funktionierte dies jedoch nicht. Ich habe das freie Limit während des Entwicklungsprozesses aufgebraucht, außerdem hatte ich unter den Bedingungen der Lizenz nicht das Recht, Wörter zwischenzuspeichern. Irgendwann wurde mir klar, dass ich die Wörter selbst übersetzen muss. Als Ergebnis wurde das Modul dsl2html geschrieben, mit dem DSL-Wörterbücher verbunden und in das HTML- Format konvertiert werden können.
So sieht der Wörterbucheintrag in * .html aus, meine Version im Vergleich zur GoldenDict- Variante

Bevor ich in verbundenen Wörterbüchern nach einem Wort suche , bringe ich es mithilfe der Stanford CoreNLP- Bibliothek in ein Wörterbuchformular (Lemma) . Aufgrund dieser Bibliothek habe ich angefangen, in Java zu schreiben, und der ursprüngliche Plan war, alles in Java zu schreiben. Dabei habe ich jedoch die Node-Java- Bibliothek gefunden, mit der Sie Java-Code relativ einfach aus NodeJS ausführen können, und ein Teil des Codes ist in JavaScript geschrieben. Wenn ich diese Bibliothek schon einmal gefunden hätte, wäre keine einzige Zeile in Java geschrieben worden. Ein weiteres Nebenprojekt, das dabei entstanden ist, ist die Erstellung eines Repositorys mit DSL-Dokumentation , das im Netzwerk im * .chm- Format gefunden, konvertiert und in eine göttliche Form gebracht wurde. Wenn der Autor der Originaldatei, der Benutzer mit dem Spitznamen yozhic, diesen Artikel sieht, dann danke ich ihm sehr für die geleistete Arbeit, ohne deren Dokumentation wäre ich höchstwahrscheinlich gescheitert.
Also, ich habe ein Wort auf Englisch, seinen Wörterbucheintrag im * .html- Format, es bleibt alles zusammenzubringen, ANKI-Artikel aus der Liste der Wörter zu erstellen und sie der ANKI-Datenbank hinzuzufügen. Zu diesem Zweck wurde das folgende data2anki- Projekt erstellt. Er weiß, wie man eine Liste von Wörtern erstellt, übersetzt, ANKI * .html- Artikel erstellt und in die ANKI-Datenbank schreibt. Am Ende des Artikels finden Sie eine Anleitung zur Verwendung. In der Zwischenzeit die zweite Geschichte, in der Intervallwiederholung nützlich sein kann.
Die zweite Geschichte.
Alle Menschen, die einen mehr oder weniger qualifizierten Beruf suchen, einschließlich Programmierer, müssen sich auf ein Vorstellungsgespräch vorbereiten. Sie verwenden nicht viele Konzepte, die in der täglichen Praxis in einem Interview gefragt werden und die vergessen werden. Bei der nächsten Vorbereitung des Interviews, als ich durch das Kompendium, das Buch und das Nachschlagewerk blätterte, stieß ich auf die Tatsache, dass das Herausfiltern der Informationen, die Sie bereits kennen, viel Zeit und Aufmerksamkeit erfordert, da sie nicht immer offensichtlich sind und Sie sie lesen müssen, um zu verstehen, was sie sind irrelevant. Wenn Sie zu einem Thema kommen, das wirklich wiederholt werden muss, kommt es häufig vor, dass Sie bereits müde sind und die Qualität der Vorbereitung darunter leidet. Irgendwann dachte ich mir, warum nicht ANKI-Karten dafür verwenden? Wenn Sie beispielsweise Notizen zu einem Thema machen, erstellen Sie sofort eine Zusammenfassung in Form einer Frage - einer Antwort. Wenn Sie diese wiederholen, wissen Sie sofort, ob Sie die Antwort auf diese Frage kennen oder nicht.
Das Problem trat nur dadurch auf, dass es sehr lang und mühsam war, Fragen zu beantworten. Um den Prozess zu vereinfachen, habe ich im data2anki- Projekt Funktionen zum Konvertieren von Markdown- Text in ANKI-Karten hinzugefügt. Sie müssen lediglich eine große Datei schreiben, in der Fragen und Antworten mit einer vorgegebenen Zeichenfolge markiert werden, anhand derer der Parser versteht, wo sich die Frage befindet und wo sich die Antwort befindet.
Nachdem diese Datei erstellt wurde, starten Sie data2anki und es werden ANKI-Karten erstellt. Die Originaldatei ist einfach zu bearbeiten und freizugeben. Sie müssen nur die entsprechenden Karten löschen und das Programm erneut ausführen. Eine neue Version wird erstellt.
Installation und Verwendung
Installieren Sie ANKI + AnkiConnect
- Laden Sie ANKI hier herunter: https://apps.ankiweb.net/
- Installieren Sie das AnkiConnect-Plugin: https://ankiweb.net/shared/info/2055492159
Installieren Sie data2anki
- Laden Sie data2anki aus dem Github-Repository herunter
git clone https://github.com/anatoly314/data2anki
- Abhängigkeiten installieren
cd data2anki && npm install
- Laden Sie Java-Abhängigkeiten herunter https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
- Entpacken Sie jar-dependencies.zip und speichern Sie den Inhalt in data2anki / java / jars
Verwendung zum Übersetzen von Wörtern:
In der Datei data2anki / config.json :
Schreiben Sie in die Modustaste den Wert dsl2anki
Notieren Sie in den Schlüsseln modules.dsl.anki.deckName und modules.dsl.anki.modelName den Decknamen und den Modellnamen (sollten bereits vor dem Erstellen der Karten erstellt werden). Jetzt wird nur ein Modell vom Typ Basic unterstützt:
Hat vordere und hintere Felder und erstellt eine Karte. Text, den Sie vorne eingeben, wird auf der Vorderseite der Karte angezeigt, und Text, den Sie hinten eingeben, wird auf der Rückseite der Karte angezeigt.
Dabei ist das Quellwort Front-Feld und die Übersetzung befindet sich im Back-Feld .
Es ist kein Problem, Unterstützung für Basic (und die umgekehrte Karte) hinzuzufügen, bei der eine umgekehrte Karte für das Wort und die Übersetzung erstellt wird, bei der die Übersetzung das ursprüngliche Wort abrufen muss. Nur die Anwesenheit von Zeit und Begierde wird benötigt.
Im Schlüssel modules.dsl.dictionariesPath registrieren Sie ein Array mit verbundenen * .dsl- Wörterbüchern. Jedes verbundene Wörterbuch ist ein Verzeichnis, in dem sich die Wörterbuchdateien gemäß dem Format befinden: DSL-Wörterbuchstruktur
Geben Sie in den Schlüsseln modules.dsl.wordToTranslatePath den Pfad zur Liste der Wörter an, die Sie übersetzen möchten.
- Wird ausgeführt, wenn eine ANKI-Anwendung ausgeführt wird
node data2anki\index.js
- GEWINN !!!
Dient zum Erstellen von Karten aus Abschriften
In der Datei data2anki / config.json :
- Schreiben Sie in die Modustaste den Wert markdown2anki
- In den Schlüsselmodulen.markdown.anki.deckName und modules.dsl.anki.modelName schreiben Sie jeweils Deckname und Modellname (sollten bereits vor dem Erstellen von Karten erstellt werden). Für den markdown2anki- Modus wird nur ein Basic- Modell unterstützt.
In den Schlüsseln modules.markdown.selectors.startQuestionSelectors und modules.markdown.selectors.startAnswerSelectors registrieren Sie die Selektoren, mit denen Sie den Anfang der Frage bzw. Antwort markieren. Die Zeile mit dem Selektor selbst wird nicht analysiert und gelangt nicht in die Karte. Der Parser beginnt ab der nächsten Zeile zu arbeiten.
Zum Beispiel diese Frage / Antwort-Karte:

Im Abschlag sieht es wie folgt aus:
# FRAGE #
## Frage 5. Schreiben Sie eine Mul-Funktion, die beim Aufrufen mit der folgenden Syntax ordnungsgemäß funktioniert.
`` `Javascript
console.log (mul (2) (3) (4)); // Ausgabe: 24
console.log (mul (4) (3) (4)); // Ausgabe: 48
`` ``
# ANTWORT #
Unten ist der Code gefolgt von der Erklärung, wie es funktioniert:
`` `Javascript
Funktion mul (x) {
Rückgabefunktion (y) {// anonyme Funktion
Rückgabefunktion (z) {// anonyme Funktion
return x * y * z;
};
};
}}
`` ``
Hier akzeptiert die Funktion "mul" das erste Argument und gibt die anonyme Funktion zurück, die den zweiten Parameter verwendet, und gibt die anonyme Funktion zurück, die den dritten Parameter verwendet und die Multiplikation der Argumente zurückgibt, die nacheinander übergeben werden
In Javascript hat die darin definierte Funktion Zugriff auf die äußere Funktionsvariable und die Funktion ist das Objekt der ersten Klasse, sodass sie auch von der Funktion zurückgegeben und als Argument in einer anderen Funktion übergeben werden kann.
- Eine Funktion ist eine Instanz des Objekttyps
- Eine Funktion kann Eigenschaften haben und einen Link zurück zu ihrer Konstruktormethode haben
- Eine Funktion kann als Variable gespeichert werden
- Eine Funktion kann als Parameter an eine andere Funktion übergeben werden
- Eine Funktion kann von einer anderen Funktion zurückgegeben werden
Hier ein Beispiel: 123-JavaScript-Interview-Fragen
Es gibt auch eine Datei mit Beispielen im Projektordner examples/markdown2anki-example.md
- in den Schlüsselmodulen.markdown.pathToFile
Verschreiben Sie den Pfad zu der Datei, in der sich die * .md- Datei mit Fragen / Antworten befindet
- Wird ausgeführt, wenn eine ANKI-Anwendung ausgeführt wird
node data2anki\index.js
- GEWINN !!!
So sieht es auf einem Handy aus:
Ergebnis
Die auf der Desktop-Version von ANKI empfangenen Karten können problemlos mit der ANKI-Cloud synchronisiert werden (kostenlos bis zu 100 MB) und können dann überall verwendet werden. Es gibt Clients für Android und iPhone, Sie können es auch in einem Browser verwenden. Wenn Sie also Zeit haben, für die Sie nichts ausgeben müssen, können Sie etwas Neues lernen, anstatt ziellos durch Facebook oder Siegel auf Instagram zu blättern.
Nachwort
Wie bereits erwähnt, handelt es sich hierbei eher um einen funktionierenden POC, den Sie verwenden können, als um ein fertiges Produkt. Etwa 30% des DSL-Parser-Standards sind nicht implementiert, und daher können beispielsweise nicht alle Wörterbucheinträge in den Wörterbüchern gefunden werden. Es besteht auch die Idee, ihn in JavaScript neu zu schreiben, da Sie "Konsistenz" wünschen, und außerdem wird er jetzt geschrieben nicht sehr optimal. Jetzt erstellt der Parser einen Baum. Dies ist für mich nicht erforderlich und muss den Code nicht komplizieren. Im markdown2anki- Modus werden Bilder nicht analysiert. Ich werde versuchen, langsam zu sehen, aber solange ich für mich selbst schreibe, werde ich zuerst den Rechen lösen, den ich selbst angreifen werde, aber wenn jemand helfen will, sind wir willkommen. Wenn Sie Fragen zum Programm haben, helfe ich Ihnen gerne bei offenen Fragen in den entsprechenden Projekten. Schreiben Sie den Rest der Kritik und Vorschläge hier. Ich hoffe, jemand wird dieses Projekt nützlich finden.
PS Wenn Sie Fehler bemerken (und diese leider sind), schreiben Sie in eine persönliche, ich werde alles beheben.