Întotdeauna am crezut că un programator leneș este un programator bun. De ce? Pentru că cere unui muncitor să facă ceva, el va merge și o va face. Și un programator leneș va petrece de 2-3 ori mai mult timp, dar va scrie un scenariu care o va face pentru el. Poate dura un timp nerezonabil de lung pentru a face acest lucru prima dată, dar cu sarcini repetate, această abordare va da roade foarte repede. Mă consider un programator leneș. Acesta a fost preambulul, acum să trecem la treabă.
Povestea unu
Acum câțiva ani m-am întrebat cum aș putea să-mi îmbunătățesc limba engleză. Nimic nu mi-a venit în minte mai bine decât să citești literatură. Mi-am cumpărat un cititor electronic, am descărcat cărți și am început să citesc. În timp ce citeam, am continuat să dau peste cuvinte necunoscute. Le-am tradus imediat folosind dicționarele încorporate în cititor, dar am observat o caracteristică: cuvintele nu doreau să fie amintite. Când am dat din nou peste acest cuvânt câteva pagini mai târziu, cu o probabilitate de 90%, am avut din nou nevoie de traducere și asta s-a întâmplat de fiecare dată. Concluzia a fost că nu a fost suficient să traduci pur și simplu cuvinte necunoscute în timp ce citești, trebuie să faci altceva. Opțiunea ideală ar fi să-l introduc în viața de zi cu zi și să încep să-l folosesc, dar nu locuiesc într-o țară vorbitoare de engleză și acest lucru este puțin probabil. Apoi mi-am amintit că am citit odată despre .
Ce este și cu ce se mănâncă? Pe scurt, există asta , citat suplimentar din Wikipedia:
Deja în prima oră, până la 60% din toate informațiile primite sunt uitate; la 10 ore de la memorare, 35% din ceea ce a fost învățat rămâne în memorie. Apoi procesul de uitare decurge lent, iar după 6 zile aproximativ 20% din numărul total de silabe învățate inițial rămâne în memorie, iar aceeași cantitate rămâne în memorie după o lună.
Și concluzia de aici
Concluziile care se pot trage pe baza acestei curbe sunt că pentru memorarea eficientă este necesară repetarea materialului memorat.
Așa că ne-a venit o idee .
este un program complet gratuit și open source care implementează ideea de repetiție distanțată. Mai simplu spus, cardurile flash computerizate au o întrebare pe de o parte și un răspuns pe cealaltă parte. Deoarece puteți face întrebări/răspunsuri folosind regulat html/css/javascript, atunci putem spune că are posibilități cu adevărat nelimitate. In plus, este extensibil cu special , iar una dintre ele ne va fi foarte utilă pe viitor.
Crearea manuală a cărților este lungă, plictisitoare și cu o mare probabilitate, după un timp vei uita de această sarcină, așa că la un moment dat mi-am pus întrebarea dacă este posibil să automatizez această sarcină. Răspunsul este da, poți. Și am făcut-o. O să spun imediat, e mai mult , dar care poate fi folosit. Dacă există interes din partea utilizatorilor și alți dezvoltatori se implică, atunci acesta poate fi adus la un produs finit pe care îl pot folosi chiar și utilizatorii analfabeți din punct de vedere tehnic. Acum, folosirea utilitarului meu necesită anumite cunoștințe de programare.
Am citit cărți folosind programul . Are capacitatea de a conecta dicționare externe, iar atunci când traduci un cuvânt, salvează cuvântul pe care l-ai chemat pentru traducere într-un fișier text. Rămâne doar să traduceți aceste cuvinte și să creați carduri ANKI.
La început am încercat să folosesc pentru traducere , etc. Dar lucrurile nu au funcționat cu serviciile gratuite. Am epuizat limita liberă în timpul procesului de dezvoltare, în plus, conform termenilor licenței, nu aveam dreptul de a stoca cuvintele în cache. La un moment dat mi-am dat seama că trebuie să traduc singur cuvintele. Ca urmare, a fost scris un modul la care te poți conecta și cine știe să le transforme în HTML format.
Așa arată o intrare din dicționar în *. Html, opțiunea mea în comparație cu opțiunea

Înainte de a căuta un cuvânt în dicționarele conectate, îl aduc la folosind biblioteca . De fapt, din cauza acestei biblioteci, am început să scriu în Java și planul inițial era să scriu totul în Java, dar în acest proces am găsit biblioteca cu care puteți executa relativ ușor cod Java de la nodejs și o parte din cod este scris în JavaScript. Dacă aș fi găsit această bibliotecă mai devreme, nici o singură linie nu ar fi fost scrisă în Java. Un alt proiect secundar care s-a născut în acest proces este creația care a fost găsit în rețea în formatul *.chm, convertit și adus în formă divină. Dacă autorul fișierului original este un utilizator după poreclă yozhic Când vede acest articol, îi mulțumesc foarte mult pentru munca depusă; fără documentația lui, cel mai probabil nu aș fi reușit.
Deci, am un cuvânt în engleză, intrarea lui în dicționar în formatul *. Html, nu mai rămâne decât să punem totul cap la cap, să creați articole ANKI din lista de cuvinte și să le introduceți în baza de date ANKI. În acest scop a fost creat următorul proiect . Poate lua o listă de cuvinte ca introducere, traduce, crea ANKI *. Html articole și înregistrați-le în baza de date ANKI. La sfârșitul articolului există instrucțiuni despre cum să-l folosești. Între timp, a doua poveste este în cazul în care repetițiile distanțate pot fi utile.
A doua poveste.
Toți oamenii în căutarea unei specialități mai mult/mai puțin calificate, inclusiv programatorii, se confruntă cu nevoia de a se pregăti pentru un interviu. Multe dintre conceptele care sunt solicitate în interviuri nu le folosești în practica de zi cu zi și sunt uitate. Când mă pregătesc pentru un interviu, răsfoind notițe, o carte, o carte de referință, m-am confruntat cu faptul că este nevoie de mult timp și atenție să cerne informațiile pe care le cunoști deja pentru că nu sunt întotdeauna evidente și trebuie să citeste-l cu atentie pentru a intelege ce este.irelevant. Când ajungi la un subiect care chiar trebuie repetat, se întâmplă adesea să fii obosit și calitatea pregătirii tale să aibă de suferit. La un moment dat m-am gândit, de ce să nu folosești carduri ANKI și pentru asta? De exemplu, atunci când luați notițe pe un subiect, creați imediat o notă sub forma unei întrebări și răspuns, iar apoi, când o repetați, veți ști imediat dacă știți sau nu răspunsul la această întrebare.
Singura problemă care a apărut a fost că introducerea întrebărilor era foarte lungă și plictisitoare. Pentru a ușura procesul, Proiectul am adăugat funcționalitatea de conversie text în carduri ANKI. Tot ce aveți nevoie este să scrieți un fișier mare în care întrebările și răspunsurile vor fi marcate cu o secvență predeterminată de caractere, prin care analizatorul va înțelege unde este întrebarea și unde este răspunsul.
Odată ce acest fișier este creat, rulați data2anki și creează carduri ANKI. Fișierul original este ușor de editat și partajat, trebuie doar să ștergeți cardul(ele) corespunzătoare și să rulați din nou programul, iar o nouă versiune va fi creată.
Instalare și utilizare
Instalarea ANKI + AnkiConnect
- Descărcați ANKI de aici:
- Instalați pluginul AnkiConnect:
Instalare
- Descarca din depozitul github
git clone https://github.com/anatoly314/data2anki - Instalați dependențe
cd data2anki && npm install - Descărcați dependențe java
- Despachetarea jar-dependencies.zip și plasați conținutul său în data2anki/java/jars
- Descarca din depozitul github
Utilizați pentru a traduce cuvinte:
În dosar data2anki/config.json:
în cheie mod introduceți valoarea dsl2anki
în cheie modules.dsl.anki.deckName и modules.dsl.anki.modelName scrie in consecinta и (trebuie să fie deja creat înainte de a crea carduri). În prezent, este acceptat doar tipul de model pachet de bază:
Are câmpuri față și spate și va crea un card. Textul pe care îl introduceți în fața va apărea pe fața cardului, iar textul pe care îl introduceți în spate va apărea pe spatele cardului.
unde este cuvântul original? Câmp frontal, iar traducerea va fi în Câmp din spate.
Nu există nicio problemă pentru a adăuga suport De bază (și card inversat), unde va fi creat un card invers pentru cuvânt și traducere, unde, pe baza traducerii, va trebui să vă amintiți cuvântul original. Tot ce ai nevoie este timp și dorință.
în cheie modules.dsl.dictionariesPath înregistrați o matrice cu conectat *.dsl dicționare. Fiecare dicționar conectat este un director în care fișierele dicționarului sunt localizate în conformitate cu formatul:
în cheie modules.dsl.wordToTranslatePath introduceți calea către lista de cuvinte pe care doriți să o traduceți.
- Lansați cu aplicația ANKI care rulează
node data2ankiindex.js - PROFIT!!!
Utilizări pentru crearea de carduri din reducere
În dosar data2anki/config.json:
- în cheie mod introduceți valoarea markdown2anki
- în cheie modules.markdown.anki.deckName и modules.dsl.anki.modelName scrie in consecinta и (trebuie să fie deja creat înainte de a crea carduri). Pentru markdown2anki este acceptat numai tipul de model pachet de bază.
în cheie module.markdown.selectors.startQuestionSelectors и modules.markdown.selectors.startAnswerSelectors scrii selectoare cu care marchezi inceputul intrebarii si respectiv al raspunsului. Linia cu selectorul în sine nu va fi analizată și nu va ajunge în card; analizatorul va începe să lucreze de la următoarea linie.
De exemplu, acest card cu întrebări/răspuns:

Va arăta așa în markdown:
#INTREBARE# ## Întrebarea 5. Scrieți o funcție mul care va funcționa corect atunci când este invocată cu următoarea sintaxă. ```javascript console.log(mul(2)(3)(4)); // ieșire : 24 console.log(mul(4)(3)(4)); // ieșire : 48 ``` #RĂSPUNS# Mai jos este codul urmat de explicația cum funcționează: ```javascript function mul (x) { return function (y) { // anonim function return function (z) { // funcția anonimă returnează x * y * z; }; }; } ``` Aici funcția `mul` acceptă primul argument și returnează funcția anonimă care preia al doilea parametru și returnează funcția anonimă care preia al treilea parametru și returnează multiplicarea argumentelor care sunt transmise succesive În funcția Javascript definită interiorul are acces la variabila funcție exterioară și funcția este obiectul de primă clasă, astfel încât poate fi returnat și de funcție și transmis ca argument într-o altă funcție. - O funcție este o instanță a tipului Object - O funcție poate avea proprietăți și are o legătură înapoi la metoda sa de constructor - O funcție poate fi stocată ca variabilă - O funcție poate fi transmisă ca parametru unei alte funcții - O funcție poate fi returnat dintr-o altă funcțieExemplu luat de aici:
Există și un fișier cu exemple în folderul proiectului
examples/markdown2anki-example.md- în cheie modules.markdown.pathToFile
notează calea către fișierul unde *.md fisier intrebare/raspuns
- Lansați cu aplicația ANKI care rulează
node data2ankiindex.js - PROFIT!!!
Iată cum arată pe un telefon mobil:

Rezultat
Cardurile primite pe versiunea desktop a ANKI se sincronizează perfect cu cloud-ul ANKI (până la 100 MB liberi) și apoi le puteți utiliza oriunde. Există clienți pentru Android и iPhone, poate fi folosit și într-un browser. Așadar, dacă aveți timp liber, în loc să derulați fără țintă pe Facebook sau să vă uitați la pisici pe Instagram, puteți învăța ceva nou.
Epilog
După cum am menționat, acesta este mai mult un POC funcțional pe care îl puteți folosi decât un produs finit. Aproximativ 30% din standardul de analiză DSL nu este implementat și, prin urmare, , există și o idee în care să o rescrieți JavaScript, pentru că vreau „coerență”, și în plus, acum nu este scris foarte optim. Acum analizatorul construiește un arbore, dar în opinia mea, acest lucru este inutil și nu trebuie să complice codul. ÎN markdown2anki modul, imaginile nu sunt analizate. O sa incerc sa tai putin cate putin, dar din moment ce scriu pentru mine, in primul rand voi rezolva problemele pe care eu insumi voi calca, dar daca cineva vrea sa ajute, atunci sunt binevenit. Dacă aveți întrebări despre program, voi fi bucuros să vă ajut prin probleme deschise în proiectele relevante. Scrieți alte critici și sugestii aici. Sper că acest proiect va fi de folos cuiva.
PS Dacă observați erori (și, din păcate, sunt unele), scrieți-mi într-un mesaj personal, voi corecta totul.
Sursa: www.habr.com

