Două povești despre cum ANKI vă poate ajuta să învățați o limbă străină și să vă pregătiți pentru interviuri

Î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 Repetiție la distanță.

Ce este și cu ce se mănâncă? Pe scurt, există asta curba uitării, 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 repetiție distanțată.

АNKI 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 pluginuri, 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 POC (dovada conceptului), 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 Cititor AI. 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 Traducerea Google, Lingvo API 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 dsl2html la care te poți conecta Dicționare DSL ș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 GoldenDict

Două povești despre cum ANKI vă poate ajuta să învățați o limbă străină și să vă pregătiți pentru interviuri

Înainte de a căuta un cuvânt în dicționarele conectate, îl aduc la formă de dicționar (lemă) folosind biblioteca Stanford CoreNLP. 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 nod-java 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 depozit cu documentație DSL 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 data2anki. 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, data2anki Proiectul am adăugat funcționalitatea de conversie markdown 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

  1. Instalarea ANKI + AnkiConnect

    1. Descărcați ANKI de aici: https://apps.ankiweb.net/
    2. Instalați pluginul AnkiConnect: https://ankiweb.net/shared/info/2055492159

  2. Instalare data2anki

    1. Descarca data2anki din depozitul github
      git clone https://github.com/anatoly314/data2anki
    2. Instalați dependențe
      cd data2anki && npm install
    3. Descărcați dependențe java https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Despachetarea jar-dependencies.zip și plasați conținutul său în data2anki/java/jars

  3. Utilizați pentru a traduce cuvinte:

    1. Î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 Nume punte и Nume model (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: Structura dicționarului DSL

      • în cheie modules.dsl.wordToTranslatePath introduceți calea către lista de cuvinte pe care doriți să o traduceți.

    2. Lansați cu aplicația ANKI care rulează
      node data2ankiindex.js
    3. PROFIT!!!

  4. Utilizări pentru crearea de carduri din reducere

    1. Î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 Nume punte и Nume model (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:

        Două povești despre cum ANKI vă poate ajuta să învățați o limbă străină și să vă pregătiți pentru interviuri

        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ție
        

        Exemplu luat de aici: 123-JavaScript-Interviu-Întrebări

        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

    2. Lansați cu aplicația ANKI care rulează
      node data2ankiindex.js
    3. PROFIT!!!

Iată cum arată pe un telefon mobil:

Rezultat

Cardurile primite pe versiunea desktop a ANKI sunt sincronizate fără probleme cu cloud-ul ANKI (gratuit până la 100mb), iar apoi le puteți folosi peste tot. Există clienți pentru Android și iPhone și îl puteți folosi și într-un browser. Drept urmare, dacă ai timp pe care nu ai de cheltuit, atunci în loc să derulezi fără rost prin Facebook sau pisici pe Instagram, poț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, de exemplu, nu toate intrările de dicționar care sunt în dicționare pot fi găsite, 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

Adauga un comentariu