Dva príbehy o tom, ako vám ANKI môže pomôcť naučiť sa cudzí jazyk a pripraviť sa na pohovor

Vždy som veril, že lenivý programátor je dobrý programátor. prečo? Pretože požiadajte usilovného, ​​aby niečo urobil, on to urobí. A lenivý programátor strávi 2-3 krát viac času, ale napíše skript, ktorý to urobí za neho. Prvýkrát to môže trvať neprimerane dlho, ale pri opakovaných úlohách sa tento prístup veľmi rýchlo vyplatí. Považujem sa za lenivého programátora. To bola preambula, teraz poďme na vec.

Príbeh jedna

Pred pár rokmi som premýšľal, ako by som sa mohol zlepšiť v angličtine. Nič lepšie mi nenapadlo ako čítať literatúru. Kúpil som si elektronickú čítačku, stiahol knihy a začal som čítať. Pri čítaní som stále narážal na neznáme slová. Okamžite som ich preložil pomocou slovníkov zabudovaných v čítačke, no všimol som si jednu vlastnosť: slová si nechceli zapamätať. Keď som o niekoľko strán na toto slovo opäť narazil, s 90% pravdepodobnosťou som opäť potreboval preklad, a to sa stalo zakaždým. Záver bol, že nestačí len prekladať neznáme slová pri čítaní, musíte robiť niečo iné. Ideálnou možnosťou by bolo zaviesť ho do každodenného života a začať ho používať, ale nežijem v anglicky hovoriacej krajine a je to nepravdepodobné. Potom som si spomenul, že som o tom kedysi čítal Rozložené opakovanie.

Čo to je a s čím sa to jedáva? Stručne povedané, existuje toto krivka zabúdania, ďalší citát z Wikipédie:

Už počas prvej hodiny sa zabudne až 60 % všetkých prijatých informácií, 10 hodín po zapamätaní zostáva v pamäti 35 % naučeného. Potom proces zabúdania pokračuje pomaly a po 6 dňoch zostáva v pamäti asi 20% z celkového počtu pôvodne naučených slabík a rovnaké množstvo zostáva v pamäti po mesiaci.

A záver odtiaľto

Závery, ktoré možno na základe tejto krivky vyvodiť, sú také, že pre efektívne zapamätanie je potrebné zapamätané učivo zopakovať.

Tak sme prišli s nápadom rozložené opakovanie.

АNKI je úplne bezplatný a open source program, ktorý implementuje myšlienku rozloženého opakovania. Jednoducho povedané, počítačové flash karty majú na jednej strane otázku a na druhej odpoveď. Keďže otázky/odpovede môžete robiť pomocou regular html/css/javascript, potom môžeme povedať, že má skutočne neobmedzené možnosti. Navyše je rozšíriteľná o špeciálne pluginy, a jeden z nich sa nám bude v budúcnosti veľmi hodiť.

Manuálne vytváranie kariet je zdĺhavé, zdĺhavé a s vysokou pravdepodobnosťou na túto úlohu po čase zabudnete, a tak som si v istom momente položil otázku, či je možné túto úlohu zautomatizovať. Odpoveď je áno, môžete. A ja som to urobil. Hneď poviem, je to viac POC (Proof of concept), ale ktoré sa dajú použiť. Ak je záujem zo strany používateľov a zapoja sa aj ďalší vývojári, potom to môže byť privedené do hotového produktu, ktorý môžu používať aj technicky negramotní používatelia. Teraz používanie môjho nástroja vyžaduje určité znalosti programovania.

Čítam knihy pomocou programu AI Reader. Má možnosť pripojiť externé slovníky a pri preklade slova uloží slovo, ktoré ste zavolali na preklad, do textového súboru. Zostáva len preložiť tieto slová a vytvoriť karty ANKI.

Najprv som sa snažil použiť na preklad Prekladač Google, Lingvo API atď. S bezplatnými službami to však nefungovalo. Bezplatný limit som vyčerpal počas procesu vývoja, navyše som podľa licenčných podmienok nemal právo ukladať slová do vyrovnávacej pamäte. V určitom momente som si uvedomil, že slová potrebujem preložiť sám. V dôsledku toho bol napísaný modul dsl2html ku ktorému sa môžete pripojiť DSL slovníky a kto vie, ako ich previesť na HTML formát.

Takto vyzerá položka v slovníku v *. Html, moja možnosť v porovnaní s možnosťou GoldenDict

Dva príbehy o tom, ako vám ANKI môže pomôcť naučiť sa cudzí jazyk a pripraviť sa na pohovor

Pred hľadaním slova v pripojených slovníkoch ho uvediem do slovníková forma (lemma) pomocou knižnice Stanford CoreNLP. V skutočnosti som kvôli tejto knižnici začal písať v Jave a pôvodný plán bol písať všetko v Jave, no v priebehu toho som knižnicu našiel uzol-java s ktorým sa dá pomerne jednoducho spustiť Java kód z nodejs a časť kódu je napísaná v JavaScripte. Ak by som túto knižnicu našiel skôr, v Jave by nebol napísaný ani jeden riadok. Ďalším vedľajším projektom, ktorý sa v tomto procese zrodil, je tvorba úložisko s dokumentáciou DSL ktorý bol nájdený v sieti vo formáte *.chm, premenený a privedený do božskej podoby. Ak je autorom pôvodného súboru používateľ podľa prezývky yozhic Keď uvidí tento článok, veľmi mu ďakujem za prácu, ktorú vykonal, bez jeho dokumentácie by som s najväčšou pravdepodobnosťou neuspel.

Takže mám slovo v angličtine, jeho slovníkový záznam vo formáte *. Html, ostáva už len všetko poskladať, zo zoznamu slov vytvoriť ANKI články a vložiť ich do ANKI databázy. Na tento účel bol vytvorený nasledujúci projekt data2anki. Môže prijať zoznam slov ako vstup, preložiť, vytvoriť ANKI *. Html články a zaznamenávať ich do databázy ANKI. Na konci článku je návod, ako ho používať. Medzitým, v druhom príbehu môžu byť užitočné opakovania s odstupom.

Druhý príbeh.

Všetci ľudia, ktorí hľadajú viac/menej kvalifikovanú špecializáciu, vrátane programátorov, čelia potrebe pripraviť sa na pohovor. Mnohé z pojmov, ktoré sa na pohovoroch pýtajú, v každodennej praxi nepoužívate a sú zabudnuté. Keď som sa pripravoval na pohovor, listoval som v poznámkach, v knihe, v referenčnej knihe, stretol som sa s tým, že vytriediť informácie, ktoré už viete, si vyžaduje veľa času a pozornosti, pretože nie vždy sú zrejmé a musíte pozorne si to prečítajte, aby ste pochopili, čo to je.irelevantné. Keď prídete k téme, ktorú naozaj treba zopakovať, často sa stane, že ste už unavení a utrpí tým kvalita vašej prípravy. V určitom momente som si povedal, prečo nepoužiť karty ANKI aj na toto? Napríklad pri písaní poznámok k téme si hneď vytvorte poznámku vo forme otázky a odpovede a pri jej opakovaní hneď budete vedieť, či odpoveď na túto otázku poznáte alebo nie.

Jediný problém, ktorý vznikol, bolo, že vypisovanie otázok bolo veľmi zdĺhavé a únavné. Aby bol proces jednoduchší, data2anki projekt Pridal som funkciu konverzie markdown text v kartách ANKI. Stačí napísať jeden veľký súbor, v ktorom budú otázky a odpovede označené vopred určeným sledom znakov, podľa ktorých parser pochopí, kde je otázka a kde odpoveď.

Po vytvorení tohto súboru spustíte data2anki a vytvorí karty ANKI. Pôvodný súbor sa dá ľahko upravovať a zdieľať, stačí vymazať príslušnú kartu (karty) a spustiť program znova a vytvorí sa nová verzia.

Inštalácia a použitie

  1. Inštalácia ANKI + AnkiConnect

    1. Stiahnite si ANKI odtiaľto: https://apps.ankiweb.net/
    2. Nainštalujte doplnok AnkiConnect: https://ankiweb.net/shared/info/2055492159

  2. Inštalácia data2anki

    1. Stiahnuť ▼ data2anki z úložiska github
      git clone https://github.com/anatoly314/data2anki
    2. Nainštalujte závislosti
      cd data2anki && npm install
    3. Stiahnite si závislosti java https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Rozbaľovanie jar-dependencies.zip a vložte jej obsah data2anki/java/jars

  3. Použite na preklad slov:

    1. V súbore data2anki/config.json:

      • v kľúči spôsob zadajte hodnotu dsl2anki

      • v kľúči modules.dsl.anki.deckName и modules.dsl.anki.modelName píšte podľa toho Názov paluby и Názov modelu (musí byť vytvorený už pred vytvorením kariet). V súčasnosti je podporovaný iba typ modelu základné:

        Má predné a zadné polia a vytvorí jednu kartu. Text, ktorý zadáte na prednej strane, sa zobrazí na prednej strane karty a text, ktorý zadáte do poľa Back, sa zobrazí na zadnej strane karty.

        kde je pôvodné slovo? Predné polea preklad bude in Zadné pole.

        Nie je problém pridať podporu Základná (a obrátená karta), kde sa k slovu a prekladu vytvorí rubová karta, kde si na základe prekladu budete musieť zapamätať pôvodné slovo. Všetko, čo potrebujete, je čas a túžba.

      • v kľúči modules.dsl.dictionariesPath zaregistrujte pole s pripojeným *.dsl slovníkov. Každý pripojený slovník je adresár, v ktorom sú umiestnené súbory slovníka v súlade s formátom: Štruktúra slovníka DSL

      • v kľúči modules.dsl.wordToTranslatePath zadajte cestu k zoznamu slov, ktoré chcete preložiť.

    2. Spustite so spustenou aplikáciou ANKI
      node data2ankiindex.js
    3. ZISK!!!

  4. Používa sa na vytváranie kariet z markdown

    1. V súbore data2anki/config.json:

      • v kľúči spôsob zadajte hodnotu markdown2anki
      • v kľúči modules.markdown.anki.deckName и modules.dsl.anki.modelName píšte podľa toho Názov paluby и Názov modelu (musí byť vytvorený už pred vytvorením kariet). Pre markdown2anki podporovaný je iba typ modelu základné.
      • v kľúči modules.markdown.selectors.startQuestionSelectors и modules.markdown.selectors.startAnswerSelectors píšete selektory, ktorými označíte začiatok otázky a odpovede, resp. Samotný riadok so selektorom nebude analyzovaný a neskončí na karte, syntaktický analyzátor začne pracovať od nasledujúceho riadku.

        Napríklad táto karta s otázkami a odpoveďami:

        Dva príbehy o tom, ako vám ANKI môže pomôcť naučiť sa cudzí jazyk a pripraviť sa na pohovor

        V markdown to bude vyzerať takto:
        #QUESTION# ## Otázka 5. Napíšte funkciu mul, ktorá bude správne fungovať, keď sa vyvolá s nasledujúcou syntaxou. ```javascript console.log(mul(2)(3)(4)); // výstup : 24 console.log(mul(4)(3)(4)); // output : 48 ``` #ANSWER# Nižšie je uvedený kód, za ktorým nasleduje vysvetlenie, ako to funguje: ```javascript function mul (x) { return function (y) { // anonymná funkcia return function (z) { // anonymná funkcia return x * y * z; }; }; } ``` Tu funkcia `mul` prijme prvý argument a vráti anonymnú funkciu, ktorá prevezme druhý parameter a vráti anonymnú funkciu, ktorá prevezme tretí parameter a vráti násobenie argumentov, ktoré sa postupne odovzdávajú Funkcia Javascript definovaná inside má prístup k vonkajšej premennej funkcie a funkcia je objekt prvej triedy, takže ju môže vrátiť aj funkcia a odovzdať ako argument v inej funkcii. - Funkcia je inštanciou typu Objekt - Funkcia môže mať vlastnosti a má spätný odkaz na svoju metódu konštruktora - Funkciu možno uložiť ako premennú - Funkciu možno odovzdať ako parameter inej funkcii - Funkciu možno vrátil z inej funkcie
        

        Príklad prevzatý odtiaľto: 123-JavaScript-Interview-Otázky

        V priečinku projektu je aj súbor s príkladmi examples/markdown2anki-example.md

      • v kľúči modules.markdown.pathToFile
        zapíšte si cestu k súboru, kde *.md súbor otázok/odpovedí

    2. Spustite so spustenou aplikáciou ANKI
      node data2ankiindex.js
    3. ZISK!!!

Takto to vyzerá na mobilnom telefóne:

Výsledok

Karty prijaté na desktopovej verzii ANKI sa bez problémov synchronizujú s ANKI cloudom (do 100 MB zadarmo) a potom ich môžete používať všade. Existujú klienti pre Android a iPhone a môžete ho použiť aj v prehliadači. Výsledkom je, že ak máte čas, ktorý nemáte na čo míňať, tak sa namiesto bezcieľneho rolovania po Facebooku či mačkách na Instagrame môžete naučiť niečo nové.

Epilóg

Ako som už spomínal, ide skôr o pracovný POC, ktorý môžete použiť, ako o hotový produkt. Asi 30 % štandardu analyzátora DSL nie je implementovaných, a preto napríklad nemožno nájsť všetky položky slovníka, ktoré sú v slovníkoch, je tu aj nápad prepísať to do JavaScript, lebo chcem „konzistentnosť“ a okrem toho sa to teraz nepíše veľmi optimálne. Teraz parser vytvára strom, ale podľa môjho názoru je to zbytočné a nemusí to komplikovať kód. IN markdown2anki v režime, obrázky sa neanalyzujú. Budem sa snažiť krájať po troškách, ale keďže píšem za seba, tak v prvom rade vyriešim problémy, na ktoré sám stúpim, no ak by chcel niekto pomôcť, nech sa páči. Ak máte otázky týkajúce sa programu, rád pomôžem prostredníctvom otvorených problémov v príslušných projektoch. Sem píšte ďalšie kritiky a návrhy. Dúfam, že tento projekt bude pre niekoho užitočný.

PS Ak si všimnete nejaké chyby (a bohužiaľ nejaké sú), napíšte mi do osobnej správy, všetko opravím.

Zdroj: hab.com

Pridať komentár