Mindig is azt gondoltam, hogy a lusta programozó jó programozó. Miért? Mert ha megkérsz egy szorgalmas programozót, hogy csináljon valamit, akkor egyszerűen megcsinálja. A lusta programozó viszont 2-3-szor annyi időt fog eltölteni, de ír egy szkriptet, amely ezt elvégzi helyette. Lehet, hogy az első alkalommal indokolatlanul sok időt vesz igénybe, de a folyamatosan ismétlődő feladatok esetén ez a megközelítés nagyon gyorsan megtérül. Lustának tartom magam a programozásban. Ez volt a bevezetés, most térjünk a lényegre.
Első történet
Néhány évvel ezelőtt elkezdtem gondolkodni, hogyan javíthatnám az angoltudásomat. Semmi jobb nem jutott eszembe, mint az irodalom olvasása. Vásároltam egy elektronikus olvasót, feltöltöttem könyvekkel, és elkezdtem olvasni. Az olvasás során folyamatosan ismeretlen szavakba botlottam. Azonnal lefordítottam őket az olvasó beépített szótáraival, de észrevettem egy jellegzetességet: a szavak nem akartak megmaradni. Amikor néhány oldallal később újra találkoztam ezzel a szóval, 90%-os valószínűséggel újra szükségem volt a fordításra, és ez így ment minden alkalommal. Az a következtetés adódott, hogy nem elég az ismeretlen szavakat fordítani az olvasás során, valamit még tennünk kell. Az ideális lenne, ha a szavakat a mindennapi használatba bevonnánk, de nem angolul beszélő országban élek, így ez szinte lehetetlen. Ekkor eszembe jutott, hogy valaha olvastam az .
Mi ez, és mivel jár? Röviden, létezik egy , itt következik egy idézet a Wikipédiából:
Már az első óra elteltével a megszerzett információk 60%-át elfelejti az ember, 10 órával a tanulás után pedig a tanultak 35%-a marad meg a memóriában. A felejtés folyamata lassan halad, és 6 nap elteltével a memóriában körülbelül 20% marad a kezdetben megtanult szavakból, ugyanennyi marad meg egy hónap elteltével is.
A következtetés pedig
A következtetések, amelyeket az adattal kapcsolatban lehet levonni, az, hogy a hatékony megtartáshoz szükség van az anyag ismétlésére.
Így jutottunk el az .
Ez egy teljesen ingyenes, nyílt forráskódú program, amely az intervallumos ismétlés ötletét valósítja meg. Egyszerűbben fogalmazva, számítógépes flash kártyák, az egyik oldalon a kérdés, a másikon a válasz. Mivel kérdéseket/válaszokat készíthetünk sima html/css/javascript, azt mondhatjuk, hogy valóban határtalan lehetőségekkel rendelkezik. Emellett kifejezetten , és az egyik nagyon jól jön majd később.
Kézi kártyák készítése időigényes, unalmas, és nagy a valószínűsége, hogy egy idő után feladja az ember, ezért egy adott pillanatban felvetettem magamnak a kérdést, hogy lehet-e automatizálni ezt a folyamatot. A válasz: igen, lehet. És én ezt megtettem. Előre bocsátom, ez inkább , de használható. Ha érdeklődés mutatkozik a felhasználók részéről, és más fejlesztők is csatlakoznak, akkor ez eljuthat egy kész termékhez, amelyet még technikailag nem jártas felhasználók is tudnak használni. Jelenleg a segédprogramom használata bizonyos programozási ismereteket feltételez.
Könyveket olvasok a program segítségével. Van lehetőség külső szótárak csatlakoztatására, és a szavak fordításakor elmenti a fordított szót egy szövegfájlba. Most már csak az a teendő, hogy lefordítsam ezeket a szavakat, és létrehozzak ANKI kártyákat.
Először megpróbáltam a , stb. használni. De a ingyenes szolgáltatásokkal nem ment a dolog. Az ingyenes limitet már a fejlesztés során kimerítettem, ráadásul a licencfeltételek értelmében nem volt jogom a szavakat cache-elni. Ekkor jöttem rá, hogy magamnak kell lefordítanom a szavakat. Végül megírtam a modult, amelyhez csatlakoztathatóak , és amely képes azokat átkonvertálni HTML formátumba.
Így néz ki a szótári cikk egy *.html, az én változatom összehasonlítva a

Mielőtt keresném a szót a csatlakoztatott szótárakban, a szót hozzá igazítom a könyvtár segítségével. Valójában emiatt a könyvtár miatt kezdtem el Java nyelven programozni, és kezdetben az volt a terveim között, hogy mindent Java-ban írok, de a folyamat során felfedeztem a amely segítségével viszonylag egyszerűen lehet Java kódot végrehajtani nodejs-ből, és egy része JavaScript-ben íródott. Ha ezt a könyvtárat korábban felfedeztem volna, akkor valószínűleg egy sort sem írtam volna Java-ban. Egy másik mellékprojekt, ami a folyamat során született, az amely az interneten * formátumban található.chm, átkonvertálva és emberhez méltó állapotba hozva. Ha az eredeti fájl szerzője, aki a yozhic felhasználónév alatt ismert, látja ezt a cikket, akkor nagy köszönet érte a munkáért, mert a dokumentációja nélkül valószínűleg semmi sem sikerült volna.
Tehát van egy angol szóm, az annak szótári cikkje * formátumban van.html, most már mindent egybe kell gyűjteni, ANKI cikkeket kell létrehozni a szavak listájából, és be kell vinni őket az ANKI adatbázisába. E célra a következő projekt készült el . Ez képes befogadni egy szavak listáját, lefordítani, ANKI *.html cikkeket létrehozni és elmenteni őket az ANKI adatbázisába. A cikk végén utasítások találhatók arról, hogyan lehet használni. Most viszont itt a második történet, ahol az ismétlődő tanulás hasznos lehet.
Második történet.
Minden ember, aki keresi a kevésbé vagy jobban kvalifikált szakmát, beleértve a programozókat is, szembesül az interjúra való felkészülés szükségességével. Sok olyan fogalom merül fel az interjún, amelyet a napi gyakorlatban nem használsz, és ezek elfelejtődnek. Az interjúra való felkészülés során, miközben átnéztem a jegyzetem, könyvet, kézikönyvet, észrevettem, hogy nagyon sok időt és figyelmet igényel az információ kiszűrése, amit már tudsz, mivel ez nem mindig nyilvánvaló, és alaposan át kell nézni, hogy megértsd, hogy ez irreleváns-e. Amikor pedig egy olyan témához érsz, amelyet valóban át kell nézned, nagyon gyakran előfordul, hogy már fáradt vagy, és a felkészülés minősége szenved. Egy pillanatban azt gondoltam, miért ne használhatnék ANKI kártyákat is ehhez? Például egy téma jegyzetelésekor azonnal létrehozni a jegyzetet kérdés-válasz formájában, majd az ismétlés során azonnal tudni fogod, tudod-e a választ erre a kérdésre.
A probléma csak annyi volt, hogy a kérdések begépelése nagyon hosszadalmas és unalmas. A folyamat megkönnyítésére a projektbe funkciót adtam hozzá, hogy konvertálhat Szöveg az ANKI kártyákban. Minden, amire szüksége van, egy nagy fájl megírása, amelyben a kérdések és válaszok előre meghatározott karakterekkel vannak jelölve, hogy a parszer megértse, hol van a kérdés és hol a válasz.
Miután ez a fájl elkészült, elindítja a data2anki-t, és az létrehozza az ANKI kártyákat. Az eredeti fájl könnyen szerkeszthető és megosztható, csak törölni kell a megfelelő kártyát(k), és újra el kell indítani a programot, és az új változat létrejön.
Telepítés és használat
ANKI és AnkiConnect telepítése
- Az ANKI letöltése innen:
- Az AnkiConnect bővítmény telepítése:
Telepítés
- Letöltés a github tárolóból
git clone https://github.com/anatoly314/data2anki - A függőségek telepítése
cd data2anki && npm install - A Java függőségek letöltése
- Kicsomagolás jar-dependencies.zip és az összes tartalom áthelyezése ide: data2anki/java/jars
- Letöltés a github tárolóból
Szavak fordítására használva:
A fájlban data2anki/config.json:
a kulcsban mód az értéket kell megadnia dsl2anki
a kulcsban modules.dsl.anki.deckName és modules.dsl.anki.modelName ügyeljen, hogy az alábbiak szerint adja meg: és (ezeket már létre kellett hozni a kártyák elkészítése előtt). Jelenleg csak a Basic:
típusú modell támogatott, amelynek van eleje és hátulja, és egy kártyát hoz létre. Az elülső mezőbe beírt szöveg a kártya elején fog megjelenni, a hátsó mezőbe beírt szöveg pedig a kártya hátoldalán.
ahol az eredeti szó a Front field, míg a fordítás a Back field.
mezőben található. Nincs probléma a támogatás hozzáadásával Basic (és fordított kártya), ahol az adott szónak és fordításának létrehozásakor egy visszafelé irányuló kártyát is létrehoznak, ahol a fordítás alapján emlékeznünk kell az eredeti szóra. Csak időre és akaratodra van szükség.
a kulcsban modules.dsl.dictionariesPath meg kell adnia egy tömböt a csatlakoztatott *.dsl szótárakkal. Minden csatlakoztatott szótár egy könyvtár, amely tartalmazza a szótár fájljait a következő formátumban:
a kulcsban modules.dsl.wordToTranslatePath meg kell adnia azokat a szavakat tartalmazó lista útját, amelyeket le szeretne fordítani.
- Elindítja a működő ANKI alkalmazást
node data2ankiindex.js - NYERESÉG!!!
Markdownból kártyák létrehozásához használat
A fájlban data2anki/config.json:
- a kulcsban mód az értéket kell megadnia markdown2anki
- a kulcsban modules.markdown.anki.deckName és modules.dsl.anki.modelName ügyeljen, hogy az alábbiak szerint adja meg: és (ezeket már létre kellett hozni a kártyák elkészítése előtt). A markdown2anki modul esetében csak a Basic.
a kulcsban modules.markdown.selectors.startQuestionSelectors és modules.markdown.selectors.startAnswerSelectors szelvények megadásával jelöli meg a kérdés és válasz kezdetét. Maga a szelvény sor nem kerül elemzésre, és a kártyába nem kerül be, a parser a következő sorral kezdi meg a munkát.
Például ez az kérdés/válasz kártya:

Markdown formátumban így fog kinézni:
#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 functionPélda innen lett véve:
Még van egy példa fájl a projekt mappájában
examples/markdown2anki-example.md- a kulcsban modules.markdown.pathToFile
adják meg, hogy hol található a fájl *.md kérdés-válasz fájl
- Elindítja a működő ANKI alkalmazást
node data2ankiindex.js - NYERESÉG!!!
Így néz ki mobiltelefonon:

Eredmény
A desktop verzióval készült ANKI kártyák probléma nélkül szinkronizálódnak az ANKI felhővel (ingyen 100mb-ig), utána már bárhol használhatók. Vannak ügyfelek Androidra és iPhone-ra, a böngészőben is használható. Ha tehát van egy kis szabadidőd, amire nem tudsz mást költeni, tanulj valami újat ahelyett, hogy céltalanul görgetnél a Facebookon vagy macskákat nézegetnél az Instagramon.
Epilógus
Ahogy már említettem, ez inkább egy munkában lévő POC, amit lehet használni, mint egy kész termék. A DSL parser szabványának körülbelül 30%-a nincs implementálva, ezért , emellett van egy ötletem átírni JavaScript, mert szeretném a „konzisztenciát”, és különben is, jelenleg nem túl optimálisan van megírva. Jelenleg a parser fát épít, ami szerintem felesleges és bonyolítja a kódot. A markdown2anki kép üzemmódban a képek nem parszolva. Fokozatosan próbálom majd csinálni, de mivel most magamnak írom, először azokat a nehézségeket szeretném megoldani, amikbe belefutok, de ha valaki segíteni szeretne, szívesen látjuk. Ha kérdéseid vannak a programmal kapcsolatban, szívesen segítek a megfelelő projektek nyitott problémáiban. A fennmaradó kritikákat és javaslatokat itt írd. Remélem, valakinek hasznos lesz ez a projekt.
P.S. Ha hibákat észleltél (és sajnos vannak), írj nekem, mindent kijavítok.
Forrás: habr.com

