Ma olen alati arvanud, et laisk programmeerija on hea programmeerija. Miks? Sest kui paluda usinal teha midagi, siis ta läheb ja teebki. Aga laisk programmeerija kulutab 2-3 korda rohkem aega, kuid kirjutab skripti, mis teeb selle tema eest. Esmakordselt võib selleks kuluda põhjendamatult palju aega, kuid korduvate ülesannete korral tasub see lähenemine kiiresti ära. Pean end ka laiseks programmeerijaks. See oli sissejuhatus, nüüd aga asja juurde.
Esimene lugu
Mõned aastad tagasi mõtlesin, kuidas oma inglise keelt parandada. Mitte midagi paremat ei tulnud meelde kui kirjanduse lugemine. Ostsin elektroonilise lugeri, laadisin alla raamatud ja hakkasin lugema. Lugemise käigus sattusin pidevalt silmitsi tundmatute sõnadega. Tõlkisin need kohe lugerisse sisseehitatud sõnaraamatute abil, kuid märkasin ühte eripära: sõnad ei tahtnud meelde jääda. Kui ma pärast mõnda lehekülge uuesti seda sõna kohtasin, siis 90% tõenäosusega vajasin taas tõlget, ja nii iga kord. Tõukus mõte, et pelgalt tundmatute sõnade tõlkimisest ei piisa lugemise ajal, tuleb midagi veel teha. Ideaalne variant oleks see sõna kasutusele võtta ja hakata sellega pihta, kuid ma ei ela ingliskeelses riigis, mistõttu see on vähetõenäoline. Siis meenus mulle, et olin kunagi lugenud .
Mis see on ja kuidas seda kasutatakse? Lühidalt öeldes on olemas , edasi tuleb tsitaat Vikipeediast:
Juba esimese tunni jooksul ununeb kuni 60% kogu saadud teabest, kümne tunni pärast jääb mällu 35% õpitud materjalist. Edasi läheb unustamisprotsess aeglaselt ning kuue päeva pärast jääb mällu umbes 20% algselt õpitud silpide koguarvust, sama palju jääb mällu ka kuu pärast.
Ja järeldus siit
Järeldused, mida selle kõvera põhjal teha saab, on, et tõhusaks mäletamiseks on vajalik õpitu kordamine.
Nii oleme jõudnud ideeni .
on täiesti tasuta avatud lähtekoodiga programm, mis teostab intervallkordamise ideed. Lihtsamalt öeldes on see arvutitud flash-kaardid, ühelt poolt küsimus, teiselt poolt vastus. Kuna saate küsimusi/vastuseid teha tavaliste html/css/javascript, siis võib öelda, et sellel on tõeliselt piiritud võimalused. Lisaks sellele on see laiendatav spetsiaalsete , millest üks osutub meile hiljem väga vajalikuks.
Käsitsi kaardikeste loomine on aeganõudev, tüütus ja suure tõenäosusega jätate selle varsti aretama, seetõttu küsisin endalt, kas on võimalik seda automatiseerida. Vastus – jah, on võimalik. Ja ma tegingi seda. Ütleksin kohe, et see on pigem , aga millega on võimalik töötada. Kui kasutajate poolt on huvi ja teised arendajad liituvad, siis on võimalik see viia valmis tooteks, millega saavad kasutada isegi tehniliselt ineptne kasutajad. Praegu tähendab minu utiliidi kasutamine teatud teadmisi programmeerimisest.
Lugen raamatuid programmi . Sellel on võimalus ühendada väliseid sõnaraamatuid ning sõna tõlkimisel salvestab see sõna, mille jaoks te tõlget kutsusite, tekstifaili. Jäänud on vaid tõlkida need sõnad ja luua ANKI kaardid.
Alguses proovisin tõlkimiseks kasutada , ja ja. Kuid tasuta teenustega ei läinud kõik plaanipäraselt. Tasuta piirangud kurnasin juba arendusprotsessi käigus, lisaks ei olnud mul litsentsitingimuste kohaselt lubatud sõnu vahemällu salvestada. Ühel hetkel sain aru, et pean sõnu ise tõlkima. Lõppkokkuvõttes kirjutati moodul , millega saab ühendada ja mis suudab need konverteerida HTML formaati.
Nii näeb sõnastiku artikkel välja *.html, minu variant võrreldes variandiga

Enne kui otsin sõna ühendatud sõnastikest, viin selle kasutades raamatukogu . Tegelikult alustasin ma selle raamatukogu tõttu Java kirjutamist ja algne plaan oli kõik kirjutada Java-s, aga protsessi käigus leidsin raamatukogu , mille abil on suhteliselt lihtne käivitada Java koodi nodejs-ist ja osa koodist on kirjutatud JavaScriptis. Kui oleksin selle raamatukogu varem leidnud, ei oleks Java-s ühtegi rida kirjutatud. Veel üks kõrvalprojekt, mis protsessi käigus tekkis, oli , mis leiti internetist formaadis *.chm, konverteeritud ja nähtavaks tehtud. Kui originaalfaili autor on kasutaja nimega yozhic , siis suur aitäh talle tehtud töö eest, ilma tema dokumentatsioonita poleks mul tõenäoliselt midagi välja tulnud.
Nii et mul on ingliskeelne sõna, selle sõnaraamatu artikkel formaadis *.html, jäetakse kokku kõik ühte, luuakse ANKI artiklid sõnalistest nimekirjadest ja sisestatakse need ANKI andmebaasi. Selle eesmärgi saavutamiseks loodi järgmine projekt . See oskab võtta sisendiks sõnade nimekirja, tõlkida, luua ANKI *.html artiklid ja salvestada need ANKI andmebaasi. Artikli lõpus on juhend nende kasutamise kohta. Praegu on see siiski teine lugu, kus intervallide kordusi võib olla kasulik.
Teine lugu.
Kõik inimesed, sealhulgas programmeerijad, otsivad enam-vähem kvalifitseeritud spetsialiteeti, seisavad silmitsi vajadusega intervjuuks valmistuda. Paljusid kontseptsioone, mida intervjuul küsitakse, ei kasutata igapäevases praktikas ja need ununevad. Jälgides oma märkmeid, raamatut või käsiraamatut, avastasin, et kulutan palju aega ja tähelepanu selleks, et filtreerida välja juba teadaolevad teadmised, kuna need ei ole alati ilmsed ja tuleb vaeva näha, et mõista, et need ei ole asjakohased. Kui jõuate teema juurde, mida tõeliselt oli vaja korrata, on sageli nii, et olete juba väsinud ja ettevalmistuse kvaliteet kannatab. Ühel hetkel mõtlesin, et miks mitte kasutada ANKI kaarte ka selle jaoks? Näiteks teema kokkuvõtmisel luua kohe kokkuvõte küsimuse- ja vastusekujule ning seejärel korrates teate kohe, kas tead vastust sellele küsimusele või mitte.
Probleem tekkis ainult selles, et küsimustega tegelemine on väga aeganõudev ja igav. Protsessi lihtsustamiseks lisasin projekti funktsiooni, mis võimaldab konverteerida projekti tekst ANKI kaardis. Kõik, mida vajate, on kirjutada üks suur fail, kus küsimused ja vastused on märgitud eelnevalt kokkulepitud sümbolite järjekorraga, mille alusel parser suudab mõista, kus on küsimus ja kus vastus.
Kui see fail on loodud, käivitate data2anki ja see loob ANKI kaardid. Originaalfaili on lihtne redigeerida ja jagada, piisab vaid vastava kaardi(t)e kustutamisest ja programmi uuesti käivitamisest, ning uus versioon luuakse.
Paigaldamine ja kasutamine
ANKI + AnkiConnect paigaldamine
- Laadige ANKI alla siit:
- Installige AnkiConnect plugin:
Installeerimine
- Laadige alla githubi hoidlast
git clone https://github.com/anatoly314/data2anki - Installige sõltuvused
cd data2anki && npm install - Laadige alla java sõltuvused
- Paki lahti jar-dependencies.zip ja paigutage sisu data2anki/java/jars
- Laadige alla githubi hoidlast
Kasutamine sõnade tõlkimiseks:
Failis data2anki/config.json:
võtmes mode märkige väärtus dsl2anki
võtmes modules.dsl.anki.deckName ja modules.dsl.anki.modelName märkige vastavalt ja (peavad olema loodud enne kaartide loomist). Praegu toetatakse ainult mudelit, mis on tüüpi Basic:
Omab Front ja Back välju, ja loob ühe kaardi. Esipaneelil sisestatud tekst ilmub kaardi esipanelile, ja tagapaneelil sisestatud tekst ilmub kaardi tagapanelile.
kus algne sõna on Esimene väli, ja tõlge on Teine väli.
Ei ole mingeid probleeme toeks lisada Põhi (ja tagurpidi kaart), kus sõna ja tõlge luuakse ja tagurpidi kaart, kus tõlke põhjal tuleb meelde tuletada algne sõna. Vaja on vaid aega ja soovi.
võtmes modules.dsl.dictionariesPath defineerite massiivi ühendatud *.dsl sõnastikega. Iga ühendatud sõnastik on kaust, kus asuvad sõnastiku failid vastavalt vormingule:
võtmes modules.dsl.wordToTranslatePath defineerite tee sõnade loendisse, mida soovite tõlkida.
- Käitate töötava ANKI rakenduse juures
node data2ankiindex.js - Kasum!!!
Markdownist kaartide loomise kasutamine
Failis data2anki/config.json:
- võtmes mode märkige väärtus markdown2anki
- võtmes modules.markdown.anki.deckName ja modules.dsl.anki.modelName märkige vastavalt ja (peavad olema loodud enne kaartide loomist). markdown2anki mood toetab ainult mudelit tüüpi Basic.
võtmes modules.markdown.selectors.startQuestionSelectors ja modules.markdown.selectors.startAnswerSelectors defineerite selektorid, millega märkate vastavalt küsimuse ja vastuse algust. Ise selektorireegel ei lahti tõlgita ega kaardile jõua, parser alustab tööd järgmiselt realt.
Näiteks näeb see küsimus/vastus kaart välja:

Markdownis näeb see välja järgmiselt:
#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 functionNäide on saadud siit:
Projektikaustas on veel fail näidistega
examples/markdown2anki-example.md- võtmes modules.markdown.pathToFile
märkige failitee, kus * asub.md küsimuste/vastuste fail
- Käitate töötava ANKI rakenduse juures
node data2ankiindex.js - Kasum!!!
Nii see telefonis välja näeb:

Tulemus
Desktopi versioonis saadud ANKI kaardid sünkroniseeruvad probleemideta ANKI pilvega (tasuta kuni 100MB) ja edasi saate neid kasutada igal pool. Olemas on rakendused Androidile ja iPhone'ile, samuti saab seda kasutada ka brauseris. Seega, kui teil on aega, mida ei oska kasutada, siis selle asemel, et mõttetult Facebooki või kiisusid Instagramis sirvida, saab õppida midagi uut.
Epilog
Nagu ma juba mainisin, on see pigem töötav POC, millega saab tööl kasutada, mitte lõpptoot. Umbes 30% DSL parseri standardist pole rakendatud, ja seetõttu , samuti on plaan seda kirjutada JavaScript, kuna soovitakse „ühtsust“, ja lisaks sellele on see praegu kirjutatud mitte kõige optimaalsemalt. Praegu ehitab parser puu, mis minu arvates on liigne ja ei ole vajalik, see keerustab koodi. markdown2anki Piltide režiimis ei parse. Ma üritan aeglaselt edasi liikuda, kuid kuna kirjutamine on hetkel enda jaoks, siis esmalt lahendan need probleemid, millega ise kokku puutun. Kui keegi soovib aidata, on oodatud. Kui on küsimusi programmi kohta, olen avatud aitama läbi avatud issues vastavates projektides. Teised ettepanekud ja kriitika saatke siia. Loodan, et see projekt on kellelegi kasulik.
P.S. Kui märkate vigu (ja neid, kahjuks, on), kirjutage eraõigusesse, kõik parandatakse.
Allikas: habr.com

