Două povești despre cum ANKI te poate ajuta să înveți o limbă străină și să te pregătești pentru un interviu

Am considerat întotdeauna că un programator leneș este un programator bun. De ce? Pentru că, dacă rogi un programator muncitor să facă ceva, el va merge și va face. Iar un programator leneș va cheltui de 2-3 ori mai mult timp, dar va scrie un script care va face acest lucru în locul său. Poate că la prima utilizare s-ar putea să se piardă o cantitate nejustificată de timp, dar, în cazul sarcinilor repetitive, această abordare se amortizează foarte repede. Mă consider un programator leneș. Aceasta a fost o introducere, iar acum să trecem la subiect.

Povestea întâi

Acum câțiva ani m-am gândit cum aș putea să îmi îmbunătățesc limba engleză. Nimic mai bun decât citirea literaturii nu mi-a venit în minte. Am achiziționat un e-reader, am descărcat cărți și am început să citesc. În timpul lecturii, întâlneam constant cuvinte necunoscute. Le traduceam imediat cu ajutorul dicționarelor integrate în e-reader, dar am observat o particularitate: cuvintele nu voiau să se memoreze. Când întâlneam același cuvânt după câteva pagini, aveam cu 90% șanse să am din nou nevoie de traducere, și așa de fiecare dată. Se impunea concluzia că nu este suficient doar să traduc cuvintele necunoscute în timpul lecturii, trebuie să faci ceva în plus. Varianta ideală ar fi fost să le introduc în uz și să încep să le folosesc, dar nu locuiesc într-o țară vorbitoare de engleză și acest lucru este puțin posibil. Atunci mi-am amintit că odată am citit despre Repetiții intercalate.

Ce este asta și cu ce se mănâncă? Pe scurt, există așa-numita curbă a uitării, urmează o citare din Wikipedia:

În primele ore se uită până la 60% din informația obținută, iar după 10 ore de învățare, în memorie rămâne 35% din ceea ce a fost studiat. Ulterior, procesul uitării se desfășoară lent, iar după 6 zile în memorie rămân aproximativ 20% din totalul silabelor învățate inițial, aceeași proporție rămânând în memorie și după o lună.

Și concluzia de aici

Concluziile care pot fi făcute pe baza acestei curbe sunt că pentru a memora eficient, este necesară repetarea materialului învățat.

Iată că am ajuns la ideea repetiției intercalate.

ANki aceasta este o programă complet gratuită și open-source, care implementează ideea repetării intervalice. Pe scurt, carduri flash informatizate, pe o parte este întrebarea, pe cealaltă partea este răspunsul. Deoarece poți crea întrebări/răspunsuri folosind obișnuitul html/css/javascript, se poate spune că are într-adevăr posibilități nelimitate. În plus, este extinsă prin intermediul unor pluginuri, iar unul dintre ele ne va fi de mare ajutor mai departe.

Crearea manuală a cardurilor este lentă, plictisitoare și cu o mare probabilitate, după un timp, vei abandona acest lucru, așa că într-un anumit moment m-am întrebat dacă se poate automatiza această activitate. Răspunsul este da, se poate. Și eu am realizat asta. Voi spune din start că este mai mult POC (Proof of concept), dar utilizabil. Dacă va exista interes din partea utilizatorilor și alți dezvoltatori se vor alătura, atunci se poate dezvolta până la un produs final, pe care să-l poată folosi chiar și utilizatorii fără cunoștințe tehnice. În prezent, utilizarea utilității mele presupune anumite cunoștințe de programare.

Eu citesc cărți folosind programul AIReader. Are capacitatea de a conecta dicționare externe și, de asemenea, în timpul traducerii unui cuvânt, salvează cuvântul pentru care ai solicitat traducerea, într-un fișier text. Rămâne să traduc aceste cuvinte și să creez carduri ANKI.

La început am încercat să folosesc pentru traducere Google Translate, Lingvo API etc. Dar cu serviciile gratuite lucrurile nu au funcționat. Limita gratuită am epuizat-o încă în timpul dezvoltării, iar în plus, conform termenilor licenței, nu aveam voie să cachez cuvintele. La un moment dat, am realizat că trebuie să traduc cuvintele eu însumi. În cele din urmă, a fost scris un modul dsl2html la care se pot conecta dicționare DSL și care poate să le convertească în HTML format.

Iată cum arată un articol de dicționar în *.html, varianta mea în comparație cu varianta GoldenDict

Două povești despre cum ANKI te poate ajuta să înveți o limbă străină și să te pregătești pentru un interviu

Înainte de a căuta cuvântul în dicționarele conectate, îl aduc în forma sa de dicționar (lemă) folosind biblioteca Stanford CoreNLP. De fapt, din cauza acestei biblioteci am început să scriu în Java, iar planul inițial a fost să scriu totul în Java, dar pe parcurs am găsit biblioteca node-java cu ajutorul căreia poți executa relativ simplu cod Java din nodejs și o parte din cod este scrisă în JavaScript. Dacă aș fi găsit această bibliotecă mai devreme, nu aș fi scris nicio linie în Java. Un alt proiect secundar care s-a născut în proces este crearea unui depozit cu documentația DSL care a fost găsită pe internet în formatul *.chm, convertită și adusă într-o formă acceptabilă. Dacă autorul fișierului original, utilizatorul cu nickname-ul yozhic vede acest articol, îi mulțumesc foarte mult pentru munca depusă; fără documentația lui, probabil nu aș fi reușit nimic.

Așadar, am un cuvânt în engleză, articolul său din dicționar în formatul *.html, rămâne să le unifici, să creezi articole ANKI din lista de cuvinte și să le introduci în baza de date ANKI. În acest scop, a fost creat următorul proiect data2anki. El poate lua ca input o listă de cuvinte, le traduce, creează articole ANKI *.html și le înregistrează în baza de date ANKI. La finalul articolului, există instrucțiuni despre cum să-l folosești. Între timp, însă, iată a doua poveste în care repetițiile intermediare pot fi utile.

A doua poveste.

Toți oamenii în căutarea unei specializări mai mult sau mai puțin calificate, inclusiv programatorii, se confruntă cu necesitatea pregătirii pentru interviuri. Multe concepte care sunt întrebate la interviu nu le folosești în practica zilnică și se uită. În timpul unei pregătiri pentru un interviu, răsfoind un rezumat, o carte, un ghid, m-am confruntat cu faptul că durează mult timp și atenție să filtrezi informațiile pe care deja le știi, pentru că nu sunt întotdeauna evidente și ești nevoit să examinezi cu atenție pentru a înțelege ce nu este relevant. Când ajungi la un subiect pe care trebuie să-l repeți cu adevărat, foarte des se întâmplă să fii deja obosit și calitatea pregătirii să aibă de suferit. La un moment dat, m-am gândit, de ce să nu folosești cardurile ANKI și pentru asta? De exemplu, când faci un rezumat al unui subiect, să creezi imediat un rezumat sub formă de întrebare - răspuns, iar apoi, la repetare, să știi imediat dacă știi sau nu răspunsul la această întrebare.

Problema a apărut doar din faptul că introducerea întrebărilor este foarte lungă și plictisitoare. Pentru a ușura procesul, în data2anki proiect am adăugat funcționalitatea de a convertește markdown text în cardurile ANKI. Tot ce trebuie să faceți este să scrieți un singur fișier mare în care întrebările și răspunsurile sunt marcate printr-o secvență de caractere convenită anterior, astfel încât parserul să înțeleagă unde este întrebarea și unde este răspunsul.

După ce acest fișier a fost creat, rulați data2anki și va crea carduri ANKI. Fișierul original este ușor de modificat și distribuit, tot ce trebuie să faceți este să ștergeți cardul(i) corespunzător(e) și să reluați programul, iar noua variantă va fi creată.

Instalare și utilizare

  1. Instalarea ANKI + AnkiConnect

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

  2. Instalare data2anki

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

  3. Utilizare pentru traducerea cuvintelor:

    1. În fișierul data2anki/config.json:

      • în cheia mod introduceți valoarea dsl2anki

      • în cheia modules.dsl.anki.deckName și modules.dsl.anki.modelName introduceți, respectiv, Numele Deck-ului și Numele Modelului (deja trebuie să fie create înainte de generarea cardurilor). Acum este susținută doar un model de tip Basic:

        Are câmpuri Față și Spate, și va crea un card. Textul pe care îl introduceți în Față va apărea pe fața cardului, iar textul pe care îl introduceți în Spate va apărea pe spatele cardului.

        unde cuvântul original este câmpul Față, iar traducerea va fi în câmpul Spate.

        Nu există nicio problemă să adăugați suport pentru Basic (și cardul inversat), unde pentru cuvânt și traducere se va crea și cardul inversat, unde, pe baza traducerii, trebuie să vă amintiți cuvântul original. E nevoie doar de timp și dorință.

      • în cheia modules.dsl.dictionariesPath introduceți un array cu dicționarele conectate *.dsl Fiecare dicționar conectat este un director în care se află fișierele dicționarului conform formatului: Structura dicționarului DSL

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

    2. Porniți atunci când aplicația ANKI este activă
      node data2ankiindex.js
    3. PROFIT!!!

  4. Utilizarea pentru crearea cardurilor din markdown

    1. În fișierul data2anki/config.json:

      • în cheia mod introduceți valoarea markdown2anki
      • în cheia modules.markdown.anki.deckName și modules.dsl.anki.modelName introduceți, respectiv, Numele Deck-ului și Numele Modelului (deja trebuie să fie create înainte de generarea cardurilor). Pentru markdown2anki mod, este susținută doar un model de tip Basic.
      • în cheia modules.markdown.selectors.startQuestionSelectors și modules.markdown.selectors.startAnswerSelectors introduceți selectoare prin care marcați începutul întrebării și răspunsului, respectiv. Linia cu selectorul nu va fi analizată și nu va ajunge în card, parserul va începe să funcționeze de la următoarea linie.

        De exemplu, această cardă întrebare/răspuns:

        Două povești despre cum ANKI te poate ajuta să înveți o limbă străină și să te pregătești pentru un interviu

        Va arăta în markdown astfel:
        #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 function
        

        Exemplul este preluat de aici: 123-Întrebări de interviu JavaScript

        De asemenea, există un fișier cu exemple în folderul proiectului examples/markdown2anki-example.md

      • în cheia modules.markdown.pathToFile
        specificați, calea către fișierul unde se află *.md fișier cu întrebări/răspunsuri

    2. Porniți atunci când aplicația ANKI este activă
      node data2ankiindex.js
    3. PROFIT!!!

Așa arată pe telefonul mobil:

Redați video

Rezultatul

Cardurile ANKI obținute pe versiunea desktop se sincronizează fără probleme cu cloud-ul ANKI (gratuit până la 100mb), iar apoi le puteți folosi oriunde. Există clienți pentru Android și iPhone, de asemenea, se poate folosi și în browser. Așadar, dacă aveți timp pe care nu știți cum să-l îngrijiți, în loc să derulați fără țintă pe Facebook sau să vizionați pisici pe Instagram, puteți învăța ceva nou.

Epilog

Așa cum am menționat anterior, acesta este mai mult un POC de lucru, mai degrabă decât un produs finalizat. Aproximativ 30% din standardul parser-ului DSL nu este implementat, așa că, de exemplu, nu toate articolele din dicționare pot fi găsite, de asemenea, există ideea de a-l refacere pe JavaScript, deoarece vreau „consistență”, iar în plus, acum este scris nu foarte optim. Acum parser-ul construiește un arbore, iar asta, cred eu, este de prisos și complică codul. În markdown2anki modul imagine, imaginile nu sunt parsate. Voi încerca să continui să îmbunătățesc, dar, de vreme ce scriu pentru mine, în primul rând voi aborda acele probleme cu care mă voi confrunta personal, însă, dacă cineva dorește să ajute, este binevenit. Dacă aveți întrebări despre program, voi fi bucuros să ajut prin problemele deschise în proiectele corespunzătoare. Alte critici și sugestii, vă rog să le scrieți aici. Sper că acest proiect va fi util cuiva.

P.S. Dacă observați greșeli (iar acestea, din păcate, sunt), scrieți-mi în privat, le voi corecta.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster