Dva příběhy, jak ANKI vám může pomoci naučit se cizí jazyk a připravit se na pohovor.

Vždy jsem si myslel, že líný programátor je dobrý programátor. Proč? Protože když požádáte pracovitějšího, aby něco udělal, prostě to udělá. Naopak líný programátor stráví 2-3 krát více času, ale napíše skript, který to udělá za něj. Možná, že poprvé na to bude vynaloženo nepřiměřeně mnoho času, ale pokud se úloha opakuje, tento přístup se velmi rychle vyplatí. Považuji se za líného programátora. To byla předehra, a nyní se dostáváme k věci.

První příběh

Před několika lety jsem začal přemýšlet, jak bych mohl zlepšit svou angličtinu. Nic lepšího než čtení literatury mě nenapadlo. Koupil jsem si elektronickou čtečku, stáhl si knihy a začal číst. Během čtení jsem se neustále setkával s neznámými slovy. Okamžitě jsem je překladal pomocí slovníků, které měla čtečka, ale všiml jsem si jedné zvláštnosti: slova se nechtěla pamatovat. Když jsem o několik stránek později znovu narazil na toto slovo, s 90% pravděpodobností jsem opět potřeboval překlad, a tak každou chvíli. Vyplývalo z toho, že nestačí jen překládat neznámá slova během čtení, je potřeba dělat něco dalšího. Ideálním by bylo zavést je do každodenního používání, ale nežiji v anglicky mluvící zemi, takže toto je málo možné. Pak jsem si vzpomněl, že jsem kdysi četl o Intervalovém opakování.

Co to je a s čím se to jí? Pokud to shrneme, existuje taková křivka zapomnění, následuje citát z Wikipedie:

Už během první hodiny se zapomene až 60 % veškerých získaných informací, po 10 hodinách od zapamatování v paměti zůstává 35 % studovaného. Dále proces zapomínání probíhá pomalu, a po 6 dnech v paměti zůstává kolem 20 % z celkového počtu původně naučených slabik, stejné množství zůstává v paměti i po měsíci.

A vývod odsud

Závěry, které lze učinit na základě této křivky, jsou, že pro efektivní zapamatování je nezbytné opakování naučeného materiálu.

Jsme tedy u myšlenky intervalového opakování.

A0NKI tohoto programu jsem dal název ANKI. Je to naprosto bezplatný program s otevřeným zdrojovým kódem, který realizuje myšlenku intervalového opakování. Jinými slovy, počítačové kartičky, na jedné straně otázka, na druhé odpověď. Protože můžete vytvářet otázky/odpovědi pomocí běžného html/css/javascript, lze říci, že má skutečně neomezené možnosti. Navíc je rozšiřitelný pomocí speciálních pluginů, a jeden z nich nám bude později velmi užitečný.

Vytváření kartiček ručně je zdlouhavé a nudné, a s velkou pravděpodobností se tím po nějaké době přestanete zabývat, a proto jsem se v určitém okamžiku zeptal sám sebe, zda je možné tento proces automatizovat. Odpověď zní – ano, je to možné. A já jsem to udělal. Hned na začátku řeknu, že je to spíše POC (Proof of concept), ale je možné jej používat. Pokud bude zájem ze strany uživatelů a připojí se další vývojáři, lze jej dotáhnout do hotového produktu, kterého budou moci používat i technicky méně zdatní uživatelé. V tuto chvíli použití mého nástroje předpokládá určité znalosti programování.

Čtu knihy pomocí programu AIReader. Ten má možnost připojit externí slovníky, a také při překladu slova ukládá slovo, na které jste vyvolali překlad, do textového souboru. Zbývá jen přeložit tato slova a vytvořit kartičky ANKI.

Nejprve jsem se pokoušel použít pro překlad Google Translate, Lingvo API atd. Ale s bezplatnými službami to nešlo. Bezplatný limit jsem vyčerpal už během vývoje, kromě toho jsem podle podmínek licence neměl právo ukládat slova do cache. V určitém okamžiku jsem pochopil, že se musím naučit překládat slova sám. Nakonec jsem napsal modul dsl2html , ke kterému lze připojit DSL slovníky a který umí tyto slovníky převádět do HTML formátu.

Takto vypadá slovní článek v *.html, moje verze ve srovnání s verzí GoldenDict

Dva příběhy, jak ANKI vám může pomoci naučit se cizí jazyk a připravit se na pohovor.

Předtím, než hledám slovo v připojených slovnících, převedu ho na slovní tvar (lemu) pomocí knihovny Stanford CoreNLP. Ve skutečnosti jsem začal psát v Javě kvůli této knihovně a původní plán byl napsat všechno v Javě, ale v průběhu jsem nalezl knihovnu node-java s pomocí které lze relativně snadno vykonávat Java kód z nodejs a část kódu je napsána v JavaScriptu. Kdybych tuto knihovnu našel dříve, tak bych na Javě nenapsal ani řádek. Ještě jeden vedlejší projekt, který vznikl během procesu, je vytvoření repozitáře s dokumentací DSL která byla nalezena na internetu ve formátu *.chm, převedena a uvedena do přijatelnější podoby. Pokud autor původního souboru, uživatel s přezdívkou yozhic vidí tento článek, tak mu moc děkuji za odvedenou práci, bez jeho dokumentace bych pravděpodobně nic nezvládl.

Takže mám slovo v angličtině, jeho slovníkovou položku ve formátu *.html, zbývá všechno dát dohromady, vytvořit ANKI články ze seznamu slov a vložit je do databáze ANKI. Pro tento účel byl vytvořen následující projekt data2anki. Umí jako vstup brát seznam slov, překládat, vytvářet ANKI *.html články a zapisovat je do databáze ANKI. Na konci článku je návod, jak je používat. Zatím ale je zde druhý příběh, kde mohou být intervalová opakování užitečná.

Druhý příběh.

Všichni lidé při hledání více či méně kvalifikované specializace, včetně programátorů, se setkávají s potřebou přípravy na pohovor. Mnoho konceptů, které se na pohovorech ptají, nepoužíváte v každodenní praxi a zapomínají se. Při další přípravě na pohovor, když jsem procházel své poznámky, knihu, příručku, jsem narazil na to, že zabere hodně času a pozornosti prokousat se informacemi, které už znáte, protože to není vždy zřejmé a musíte se číst pozorně, abyste pochopili, co je irelevantní. Když se ale dostanete k tématu, které opravdu potřebujete zopakovat, velmi často se stane, že už jste unavení a kvalita přípravy trpí. V určitém okamžiku mě napadlo, proč nepoužít ANKI karty i pro to? Například při sepsání nějakého tématu, hned vytvořit poznámku ve formě otázky – odpovědi, a pak při opakování hned víte, zda znáte odpověď na tuto otázku.

Problém nastal pouze v tom, že zadávání otázek trvá velmi dlouho a je nudné. Abych proces usnadnil, přidal jsem do data2anki projektu funkčnost pro konverzi markdown Text do ANKI karet. Vše, co potřebujete, je napsat jeden velký soubor, ve kterém budou otázky a odpovědi označeny předem dohodnutou sekvencí znaků, pomocí které parser pochopí, kde je otázka a kde odpověď.

Jakmile je tento soubor vytvořen, spustíte data2anki a ten vytvoří ANKI karty. Původní soubor se snadno upravuje a sdílí, stačí jen smazat odpovídající kartu(y) a znovu spustit program, a nová varianta bude vytvořena.

Instalace a používání

  1. Instalace ANKI + AnkiConnect

    1. Stáhněte ANKI odsud: https://apps.ankiweb.net/
    2. Nainstalujte plugin AnkiConnect: https://ankiweb.net/shared/info/2055492159

  2. Instalace data2anki

    1. Stáhněte data2anki z github repozitáře
      git clone https://github.com/anatoly314/data2anki
    2. Nainstalujte závislosti
      cd data2anki && npm install
    3. Stáhněte java závislosti https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Rozbalte jar-dependencies.zip a umístěte jeho obsah do data2anki/java/jars

  3. Použití pro překlad slov:

    1. V souboru data2anki/config.json:

      • v klíči režim zadejte hodnotu dsl2anki

      • v klíči modules.dsl.anki.deckName a modules.dsl.anki.modelName zadejte, odpovídajícím způsobem, Deck Name a Model Name (musí být již vytvořeny před vytvořením karet). Aktuálně je podporován pouze typ modelu Basic:

        má pole Front a Back, a vytvoří jednu kartu. Text, který zadáte do Front se objeví na přední straně karty a text, který zadáte do Back se objeví na zadní straně karty.

        kde původní slovo je Front field, a překlad bude v Back field.

        Není žádný problém přidat podporu Basic (a obrácená karta), kde na slovo a překlad bude vytvářena také obrácená karta, kde podle překladu budete muset vzpomenout na původní slovo. Stačí pouze mít čas a chuť.

      • v klíči modules.dsl.dictionariesPath zadejte pole s připojenými *.dsl slovníky. Každý připojený slovník je adresář, ve kterém se nachází soubory slovníku podle formátu: Struktura slovníku DSL

      • v klíči modules.dsl.wordToTranslatePath zadejte cestu k seznamu slov, která chcete přeložit.

    2. Spusťte při spuštěné aplikaci ANKI
      node data2ankiindex.js
    3. ZISK!!!

  4. Použití pro vytváření karet z markdown

    1. V souboru data2anki/config.json:

      • v klíči režim zadejte hodnotu markdown2anki
      • v klíči modules.markdown.anki.deckName a modules.dsl.anki.modelName zadejte, odpovídajícím způsobem, Deck Name a Model Name (musí být již vytvořeny před vytvořením karet). Pro markdown2anki mode je podporován pouze typ modelu Basic.
      • v klíči modules.markdown.selectors.startQuestionSelectors a modules.markdown.selectors.startAnswerSelectors zadejte selektory, kterými označíte začátek otázky a odpovědi. Samotný řádek se selektorem nebude zpracován a do karty se nedostane, parser začne pracovat s následujícím řádkem.

        Například tato karta otázka/odpověď:

        Dva příběhy, jak ANKI vám může pomoci naučit se cizí jazyk a připravit se na pohovor.

        Bude v markdown vypadat následovně:
        #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
        

        Příklad je převzat odtud: 123-JavaScript-Interview-Questions

        Také je zde soubor s příklady ve složce projektu examples/markdown2anki-example.md

      • v klíči modules.markdown.pathToFile
        zadejte cestu k souboru, kde je uložen *.md soubor s otázkami/odpověďmi

    2. Spusťte při spuštěné aplikaci ANKI
      node data2ankiindex.js
    3. ZISK!!!

Takto to vypadá na mobilním telefonu:

Přehrát video

Výsledek

Karty ANKI získané na desktopové verzi se bez problémů synchronizují s ANKI cloudem (zdarma do 100MB), a poté je můžete používat téměř kdekoli. Existují klienti pro Android a iPhone, také je možné používat je v prohlížeči. Takže pokud máte čas, který nemáte na co utratit, místo bezcílného scrollování na Facebooku nebo sledování koček na Instagramu, můžete se učit něco nového.

Epilog

Jak jsem již zmínil, je to spíše pracovní POC, který lze využít, spíše než hotový produkt. Přibližně 30% standardu DSL parseru není implementováno, a proto, například ne všechny slova, které jsou ve slovnících, mohou být nalezeny, existuje také myšlenka přepsat ho na JavaScript, protože chceme „konzistenci“, a navíc, nyní je napsán ne zcela optimálně. V současné době parser vytváří strom, což mi přijde zbytečné a komplikuje to kód. V markdown2anki režimu obrázků se nepodporuje parsování. Budu se snažit postupně vyřešit, ale protože píšu pro sebe, budu se nejprve věnovat těm problémům, na které narazím, ale pokud někdo chce pomoci, je vítán. Pokud máte otázky ohledně programu, rád vám pomohu prostřednictvím otevřených problémů ve příslušných projektech. Další kritiku a návrhy pište zde. Doufám, že tento projekt bude někomu užitečný.

P.S. Pokud jste si všimli chyb (a těch je bohužel spousta), pište do soukromé zprávy, vše opravím.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster