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

