Ik heb altijd geloofd dat een luie programmeur een goede programmeur is. Waarom? Omdat als je een hardwerkende vraagt iets te doen, hij het gewoon doet. Maar een luie programmeur zal 2-3 keer zoveel tijd besteden, maar hij zal een script schrijven dat dat voor hem doet. Misschien kost het de eerste keer onterecht veel tijd, maar bij herhalende taken betaalt deze aanpak zich snel terug. Ik beschouw mezelf als een luie programmeur. Dat was de inleiding, laten we nu overgaan tot de zaak.
Verhaal ƩƩn
Enkele jaren geleden vroeg ik me af hoe ik mijn Engels kon verbeteren. Niets beter dan literatuur lezen kwam in me op. Ik kocht een e-reader, laadde boeken erop en begon te lezen. Tijdens het lezen kwam ik constant onbekende woorden tegen. Ik vertaalde ze onmiddellijk met de ingebouwde woordenboeken van de e-reader, maar ik merkte een bijzonderheid op: de woorden wilden niet blijven hangen. Wanneer ik enkele pagina's later hetzelfde woord weer tegenkwam, had ik met 90% kans weer hulp nodig bij de vertaling, en zo elke keer. Hieruit concludeerde ik dat het niet voldoende is om onbekende woorden te vertalen tijdens het lezen, maar dat je iets anders moet doen. De ideale optie zou zijn om het in het dagelijks leven in te voeren en het te gaan gebruiken, maar ik woon niet in een Engelstalig land en dat is moeilijk te realiseren. Toen herinnerde ik me dat ik ooit had gelezen over .
Wat is het en hoe werkt het? Kort gezegd, er is zoiets als , vervolgens een citaat uit Wikipedia:
Al binnen het eerste uur wordt 60% van alle ontvangen informatie vergeten, na 10 uur na het leren blijft 35% van wat geleerd is in het geheugen. Daaropvolgend verloopt het vergeten langzaam, en na 6 dagen blijft ongeveer 20% van het oorspronkelijke aantal uit het hoofd geleerde lettergrepen in het geheugen hangen, net zoveel blijft in het geheugen na een maand.
En de conclusie hieruit
De conclusies die we kunnen trekken op basis van deze curve zijn dat voor effectief onthouden herhaling van het geleerde materiaal noodzakelijk is.
En zo kwamen we tot het idee .
dit is een volledig gratis open source programma dat het idee van herhaald leren implementeert. Simpel gezegd, computerflashcards, met aan de ene kant een vraag en aan de andere kant een antwoord. Omdat je vragen/antwoorden kunt maken met behulp van gewone html/css/javascript, kan men zeggen dat het werkelijk onbeperkte mogelijkheden heeft. Bovendien is het uitbreidbaar met speciale , en ƩƩn daarvan komt ons later heel goed van pas.
Handmatig kaarten maken is tijdrovend, vervelend, en met een grote kans dat je er na verloop van tijd mee stopt, dus op een gegeven moment stelde ik mezelf de vraag of het mogelijk was om dit te automatiseren. Het antwoord is ja, dat kan. En dat heb ik gedaan. Ik moet meteen zeggen, dit is meer , maar het is bruikbaar. Als er interesse is van gebruikers en andere ontwikkelaars zich aansluiten, kan het worden doorontwikkeld tot een volwaardig product dat zelfs voor technisch onvaardige gebruikers toegankelijk is. Voor nu vereist het gebruik van mijn tool echter enige kennis van programmeren.
Ik lees boeken met behulp van het programma . Het heeft de mogelijkheid om externe woordenboeken aan te sluiten, en wanneer je een woord vertaalt, slaat het het woord dat je hebt vertaald op in een tekstbestand. Nu is het alleen nog nodig om deze woorden te vertalen en ANKI kaarten te maken.
In het begin probeerde ik om de vertaling te doen met , enz. Maar met gratis services ging het niet goed. Ik had de gratis limiet al bereikt tijdens het ontwikkelproces, bovendien mocht ik op basis van de licentievoorwaarden de woorden niet cachen. Op een gegeven moment realiseerde ik me dat ik de woorden zelf moest vertalen. Uiteindelijk is er een module geschreven, waaraan je kunt koppelen en die kan ze converteren naar HTML het formaat.
Zo ziet een woordenboekitem eruit in *.html, mijn variant in vergelijking met de variant

Voor ik een woord in de aangesloten woordenboeken zoek, breng ik het naar met behulp van de bibliotheek . Eigenlijk ben ik dankzij deze bibliotheek begonnen met programmeren in Java en het oorspronkelijke plan was om alles in Java te schrijven, maar in het proces vond ik de bibliotheek waarmee je relatief eenvoudig Java-code kunt uitvoeren vanuit Node.js en een deel van de code is geschreven in JavaScript. Als ik deze bibliotheek eerder had gevonden, zou er geen regel in Java zijn geschreven. Nog een nevenproject dat is ontstaan tijdens dit proces is het creƫren die online werd gevonden in het format *.chm, geconverteerd en in een leesbare vorm gebracht. Als de auteur van het originele bestand, gebruiker met de nickname yozhic deze artikel ziet, dan veel dank voor het geleverde werk, zonder zijn documentatie zou het me waarschijnlijk niet gelukt zijn.
Dus, ik heb een woord in het Engels, de woordenlijst in het format *.html, het is tijd om alles samen te voegen, ANKI-artikelen te maken uit de lijst met woorden en deze in de ANKI-database in te voeren. Voor dit doel is het volgende project gemaakt . Dit kan een lijst met woorden inlezen, vertalen, ANKI *.html artikelen maken en deze opslaan in de ANKI-database. Aan het einde van het artikel staat een instructie over hoe je het kunt gebruiken. Voor nu echter het tweede verhaal waar intervallen herhalingen nuttig kunnen zijn.
Het tweede verhaal.
Alle mensen op zoek naar een meer of minder gekwalificeerde specialisatie, inclusief programmeurs, komen de noodzaak tegen om zich voor te bereiden op een interview. Veel concepten die tijdens interviews gevraagd worden, gebruik je niet in je dagelijks leven en ze worden vergeten. Tijdens de voorbereiding op een interview, terwijl ik mijn samenvattingen, boeken en naslagwerken doorbladerde, merkte ik dat het veel tijd en aandacht kost om de informatie die je al weet uit te filteren, omdat deze niet altijd voor de hand liggend is, en je moet erdoorheen lezen om te begrijpen dat het niet relevant is. Wanneer je dan een onderwerp tegenkomt dat je echt moet herhalen, is het vaak zo dat je al moe bent en de kwaliteit van de voorbereiding lijdt eronder. Op een gegeven moment dacht ik, waarom zouden we geen ANKI-kaarten hiervoor gebruiken? Bijvoorbeeld, bij het samenvatten van een bepaald onderwerp, direct de samenvatting in de vorm van vraag ā antwoord maken, en bij het herhalen weet je meteen of je het antwoord op deze vraag weet of niet.
Het probleem ontstond alleen in het feit dat het erg lang en saai is om vragen in te voeren. Om het proces te vergemakkelijken, heb ik in het project functionaliteit toegevoegd om tekst in ANKI-kaarten. Alles wat u hoeft te doen, is ƩƩn groot bestand te schrijven waarin vragen en antwoorden vooraf zijn gemarkeerd met een afgesproken reeks symbolen, zodat de parser kan begrijpen waar de vraag is en waar het antwoord is.
Zodra dit bestand is gemaakt, start u data2anki en maakt het ANKI-kaarten. Het originele bestand is gemakkelijk te bewerken en te delen; u hoeft alleen de relevante kaart(en) te verwijderen en het programma opnieuw te starten, en de nieuwe versie zal worden gemaakt.
Installatie en gebruik
Installatie ANKI + AnkiConnect
- Download ANKI hier:
- Installeer de AnkiConnect-plugin:
Installatie
- Download uit de github-repository
git clone https://github.com/anatoly314/data2anki - Installeer de afhankelijkheden
cd data2anki && npm install - Download de java-afhankelijkheden
- Pak uit jar-dependencies.zip en plaats de inhoud in data2anki/java/jars
- Download uit de github-repository
Gebruik voor het vertalen van woorden:
In het bestand data2anki/config.json:
in de sleutel modus geef de waarde op dsl2anki
in de sleutel modules.dsl.anki.deckName en modules.dsl.anki.modelName geef, respectievelijk, op en (deze moeten al zijn gemaakt voordat de kaarten worden aangemaakt). Momenteel wordt alleen het modeltype ondersteund Basic:
Heeft Voor- en Achtervelden, en maakt ƩƩn kaart aan. De tekst die u invoert in Voor verschijnt aan de voorkant van de kaart, en de tekst die u invoert in Achter verschijnt aan de achterkant van de kaart.
waar het oorspronkelijke woord is Front field, en de vertaling komt in Back field.
Er is geen probleem om ondersteuning toe te voegen voor Basic (en omgekeerde kaart), waar er een omgekeerde kaart voor het woord en de vertaling zal worden aangemaakt, waarbij je op basis van de vertaling het oorspronkelijke woord moet herinneren. Je hebt alleen tijd en zin nodig.
in de sleutel modules.dsl.dictionariesPath geef een array op met de aangesloten *.dsl woordenboeken. Elk aangesloten woordenboek is een map waarin de woordenboekenbestanden volgens het formaat zijn:
in de sleutel modules.dsl.wordToTranslatePath geef het pad op naar de lijst met woorden die u wilt vertalen.
- Start met de werkende ANKI-applicatie
node data2ankiindex.js - WINST!!!
Gebruik voor het maken van kaarten uit markdown
In het bestand data2anki/config.json:
- in de sleutel modus geef de waarde op markdown2anki
- in de sleutel modules.markdown.anki.deckName en modules.dsl.anki.modelName geef, respectievelijk, op en (deze moeten al zijn gemaakt voordat de kaarten worden aangemaakt). Voor markdown2anki mode wordt alleen het modeltype ondersteund Basic.
in de sleutel modules.markdown.selectors.startQuestionSelectors en modules.markdown.selectors.startAnswerSelectors geef de selectors op waarmee u respectievelijk het begin van de vraag en het antwoord markeert. De regel met de selector zal niet worden geparsed en zal niet in de kaart komen, de parser begint met de volgende regel.
Bijvoorbeeld, deze vraag/antwoordkaart:

Zal er in markdown als volgt uitzien:
#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 functionVoorbeeld afkomstig van hier:
Er is ook een bestand met voorbeelden in de projectmap
examples/markdown2anki-example.md- in de sleutel modules.markdown.pathToFile
geef het pad op naar het bestand waar het ligt *.md bestand met vragen/antwoorden
- Start met de werkende ANKI-applicatie
node data2ankiindex.js - WINST!!!
Zo ziet het eruit op een mobiele telefoon:

Resultaat
De kaarten die op de desktopversie van ANKI zijn gemaakt, synchroniseren probleemloos met de ANKI-cloud (gratis tot 100 MB); daarna kun je ze overal gebruiken. Er zijn clients voor Android en iPhone, en je kunt ook in de browser werken. Als je tijd hebt die je niet kunt besteden, kun je in plaats van zonder doel door Facebook te scrollen of katten op Instagram te bekijken, iets nieuws leren.
Epilog
Zoals ik al heb gezegd, is dit meer een werkende POC die je kunt gebruiken dan een afgewerkt product. Ongeveer 30% van de DSL-parserstandaard is niet geĆÆmplementeerd, en daarom, , daarnaast is er het idee om het opnieuw te schrijven op JavaScript, omdat ik graag consistentie wil, en bovendien is het nu niet erg optimaal geschreven. Momenteel bouwt de parser een boom, wat volgens mij overbodig is en de code compliceert. In markdown2anki de afbeeldingsmodus worden afbeeldingen niet geparsed. Ik zal mijn best doen om langzaam door te gaan, maar omdat ik voorlopig voor mezelf schrijf, zal ik in eerste instantie de problemen aanpakken die ik zelf tegenkom. Maar als iemand wil helpen, dan is dat van harte welkom. Bij vragen over het programma, zal ik graag helpen via openstaande issues in de betreffende projecten. Stuur restkritiek en voorstellen hier. Ik hoop dat dit project nuttig zal zijn voor iemand.
P.S. Als je fouten ziet (en die zijn er helaas), stuur me een privƩbericht, ik zal alles corrigeren.
Bron: habr.com

