To historier om, hvordan ANKI kan hjælpe dig med at lære et fremmedsprog og forberede dig til et interview

Jeg har altid ment, at en doven programmør er en god programmør. Hvorfor? Fordi hvis du beder en flittig person om at gøre noget, vil de gå hen og gøre det. Men en doven programmør vil bruge 2-3 gange længere tid, men vil skrive et script, som vil gøre det for dem. Måske vil det tage urimeligt lang tid første gang, men med gentagne opgaver betaler denne tilgang sig hurtigt. Jeg betragter mig selv som en doven programmør. Det var indledningen, nu går vi videre.

Historie én

For flere år siden tænkte jeg på, hvordan jeg kunne forbedre mit engelske. Der kom ikke noget bedre til mig end at læse litteratur. Jeg købte en e-læser, downloadede bøger og begyndte at læse. Under læsningen stødte jeg konstant på ukendte ord. Jeg oversatte dem straks ved hjælp af de indbyggede ordbøger i læseren, men jeg bemærkede en tendens: ordene ville ikke feste sig i hukommelsen. Når jeg mødte dette ord igen efter nogle sider, havde jeg med 90 % sandsynlighed brug for oversættelsen igen, og sådan var det hver gang. Det blev klart, at det ikke er nok bare at oversætte ukendte ord under læsningen; man skal gøre noget mere. Den ideelle mulighed ville være at tage det i brug og begynde at bruge det, men jeg bor ikke i et engelsktalende land, så det er svært muligt. Så huskede jeg, at jeg engang havde læst om Intervalrepetitioner.

Hvad er det, og hvordan bruges det? Kort sagt, der er en sådan glemmekurve, her er et citat fra Wikipedia:

Allerede i løbet af den første time glemmes op til 60 % af al den information, der er lært. Ti timer efter indlæringen forbliver 35 % af det studerede i hukommelsen. Herefter går glemselsprocessen langsomt og efter 6 dage er der omkring 20 % af det samlede antal oprindeligt indlærte stavelser tilbage i hukommelsen, og det samme antal forbliver i hukommelsen efter en måned.

Og her er konklusionen

Konklusionerne, der kan drages ud fra denne kurve, er, at for effektiv indlæring er det nødvendigt med repetition af det indlærte materiale.

Og her kommer vi til ideen intervalrepetition.

ANKI Dette er et helt gratis open source-program, der implementerer idéen om interaktiv gentagelse. Kort sagt, computeriserede flashkort, hvor den ene side har spørgsmålet, og den anden siden har svaret. Da du kan lave spørgsmål/svar ved hjælp af almindelig html/css/javascript, kan man sige, at det har virkelig ubegrænsede muligheder. Derudover kan det udvides med specielle plugins, og en af dem vil være nyttig for os senere.

At oprette kort manuelt er tidskrævende, kedeligt, og med stor sandsynlighed vil du på et tidspunkt opgive det, så jeg stillede mig selv spørgsmålet, om dette kunne automatiseres. Svaret er ja, det kan det. Og jeg gjorde det. Jeg vil med det samme sige, at det er mere POC (Proof of concept), men det kan bruges. Hvis der er interesse fra brugerne, og andre udviklere tilslutter sig, kan det udvikles til et færdigt produkt, som selv teknisk uerfarne brugere kan anvende. Lige nu kræver brugen af min værktøj nogle programmeringskundefærdigheder.

Jeg læser bøger ved hjælp af programmet AIReader. Det har mulighed for at tilslutte eksterne ordbøger, og også ved oversættelse af ord gemmer det ordet, du har kaldt oversættelsen for, i en tekstfil. Det eneste der er tilbage, er at oversætte disse ord og oprette ANKI-kort.

Først forsøgte jeg at bruge Google Translate, Lingvo API osv. Men med gratis tjenester gik det ikke. Jeg udnyttede den gratis grænse under udviklingen, og derudover havde jeg ikke ret til at cache ord i henhold til licensvilkårene. På et tidspunkt indså jeg, at jeg skulle oversætte ordene selv. I sidste ende blev modulet dsl2html skrevet, som kan tilsluttes DSL-ordbøger og som kan konvertere dem til HTML format.

Sådan ser en ordbogsartikel ud i *.html, min version sammenlignet med versionen fra GoldenDict

To historier om, hvordan ANKI kan hjælpe dig med at lære et fremmedsprog og forberede dig til et interview

Før jeg søger efter ordet i de tilsluttede ordbøger, fører jeg det til ordform (lemma) ved hjælp af biblioteket Stanford CoreNLP. Faktisk begyndte jeg at skrive i Java på grund af dette bibliotek, og den oprindelige plan var at skrive alt i Java, men i processen fandt jeg biblioteket node-java som du kan relativt nemt udføre Java-kode fra nodejs, og en del af koden er skrevet i JavaScript. Hvis jeg havde fundet dette bibliotek tidligere, ville der ikke være skrevet en linje i Java. Et andet sideprojekt, der opstod i processen, er oprettelsen af et repository med DSL-dokumentation som blev fundet online i formatet *.chm, konverteret og gjort læsbart. Hvis forfatteren af den oprindelige fil, brugeren med nick yozhic ser denne artikel, så stor tak for det udførte arbejde, uden hans dokumentation ville jeg sandsynligvis ikke have fået det til at fungere.

Så, jeg har et ord på engelsk, dets ordtab i formatet *.html, jeg skal bare samle alt, lave ANKI-artikler fra ordlisten og indtaste dem i ANKI-databasen. Til dette formål blev følgende projekt oprettet data2anki. Det kan tage en liste over ord som input, oversætte, oprette ANKI *.html artikler og gemme dem i ANKI-databasen. I slutningen af artiklen er der instruktioner til, hvordan man bruger det. For nu er historien den anden, hvor intervalgenkommende kan være nyttige.

Historien den anden.

Alle mennesker, der søger en mere eller mindre kvalificeret specialitet, herunder programmører, står over for behovet for at forberede sig til interview. Mange koncepter, der spørges til interviewet, bruger du ikke i din dagligdag, og de glemmes. Under forberedelsen til et interview, mens jeg bladrede igennem notater, bøger og håndbøger, indså jeg, at det kræver meget tid og opmærksomhed at sortere den information, du allerede kender, fordi det ikke altid er indlysende, og det kræver tid at læse for at forstå, at det ikke er relevant. Når du så nærmer dig et emne, som du virkelig skal repetere, sker det ofte, at du allerede er træt, og kvaliteten af forberedelsen lider. På et tidspunkt tænkte jeg, hvorfor ikke bruge ANKI-kort til dette? For eksempel ved at tage notater om et emne, straks oprette notater i form af spørgsmål - svar, og når du så repeterer, ved du straks, om du kender svaret på dette spørgsmål.

Problemet opstod kun i det, at det tog meget lang tid og var kedeligt at indtaste spørgsmål. For at lette processen, i data2anki projektet tilføjede jeg funktionalitet til at konvertere markdown Tekst i ANKI-kort. Alt, hvad du skal gøre, er at skrive en stor fil, hvor spørgsmål og svar er mærket med en på forhånd aftalt rækkefølge af tegn, som parseren vil forstå, hvor spørgsmålet er, og hvor svaret er.

Når denne fil er oprettet, kører du data2anki, og den opretter ANKI-kort. Den originale fil er let at redigere og dele; du skal blot slette det relevante kort og køre programmet igen, og den nye version vil blive oprettet.

Installation og brug

  1. Installation af ANKI + AnkiConnect

    1. Download ANKI herfra: https://apps.ankiweb.net/
    2. Installer AnkiConnect-plugin: https://ankiweb.net/shared/info/2055492159

  2. Installation data2anki

    1. Download data2anki fra GitHub-repositoriet
      git clone https://github.com/anatoly314/data2anki
    2. Installer afhængigheder
      cd data2anki && npm install
    3. Download java-afhængigheder https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Udpak jar-dependencies.zip og placer indholdet i data2anki/java/jars

  3. Brug til oversættelse af ord:

    1. I filen data2anki/config.json:

      • i nøglen mode angiv værdien dsl2anki

      • i nøglen modules.dsl.anki.deckName og modules.dsl.anki.modelName angiv hhv. Deck Name og Model Name (skal allerede være oprettet før oprettelse af kort). I øjeblikket understøttes kun modeltypen Basic:

        Har Front- og Back-felter og vil oprette et kort. Teksten, du indtaster i Front, vises på forsiden af kortet, og teksten, du indtaster i Back, vises på bagsiden af kortet.

        hvor det oprindelige ord er Front field, mens oversættelsen vil være i Back field..

        Der er intet problem med at tilføje support for Basic (og omvendt kort), hvor der for ordet og oversættelsen vil blive oprettet et omvendt kort, hvor man på grundlag af oversættelsen skal huske det originale ord. Det kræver blot tid og vilje.

      • i nøglen modules.dsl.dictionariesPath angiv et array med tilsluttede *.dsl ordbøger. Hver tilsluttet ordbog er et bibliotek, som indeholder ordbogsfilene i overensstemmelse med formatet: Struktur af DSL-ordbog

      • i nøglen modules.dsl.wordToTranslatePath angiv stien til den liste af ord, du ønsker at oversætte.

    2. Kør, mens ANKI-appen er aktiv
      node data2ankiindex.js
    3. PROFIT!!!

  4. Brug til at oprette kort fra markdown

    1. I filen data2anki/config.json:

      • i nøglen mode angiv værdien markdown2anki
      • i nøglen modules.markdown.anki.deckName og modules.dsl.anki.modelName angiv hhv. Deck Name og Model Name (skal allerede være oprettet før oprettelse af kort). For markdown2anki mode understøttes kun modeltypen Basic.
      • i nøglen modules.markdown.selectors.startQuestionSelectors og modules.markdown.selectors.startAnswerSelectors angiv de selectorer, du markerer begyndelsen af spørgsmålet og svaret med. Selve linjen med selector vil ikke blive parset og vil ikke komme ind i kortet; parseren vil begynde arbejdet fra den næste linje.

        For eksempel vil dette kort spørgsmål/svar:

        To historier om, hvordan ANKI kan hjælpe dig med at lære et fremmedsprog og forberede dig til et interview

        Vise sig i markdown som følger:
        #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
        

        Eksempel hentet fra: 123-JavaScript-Interview-Spørgsmål

        Der er også en fil med eksempler i projektmappen examples/markdown2anki-example.md

      • i nøglen modules.markdown.pathToFile
        angiver vejen til filen, hvor den ligger *.md fil med spørgsmål/svar

    2. Kør, mens ANKI-appen er aktiv
      node data2ankiindex.js
    3. PROFIT!!!

Sådan ser det ud på mobiltelefonen:

Afspil video

Resultat

De kort, der er genereret i ANKI desktop-versionen, synkroniseres problemfrit med ANKI skyen (gratis op til 100 MB), og derefter kan du bruge dem overalt. Der er klienter til Android og iPhone, og man kan også bruge det i browseren. Hvis du har tid til overs, som du ikke ved, hvad du skal bruge til, så kan du i stedet for at bladre meningsløst gennem Facebook eller se katte på Instagram, lære noget nyt.

Epilog

Som jeg allerede har nævnt, er det mere et arbejds-POC, som kan bruges, end et færdigt produkt. Cirka 30% af DSL-parserstandarderne er ikke implementeret, så for eksempel kan ikke alle ordbogsartikler, der findes i ordbøger, blive fundet, der er også en idé om at omskrive det til JavaScript, da man ønsker 'konsistens', og derudover er det i øjeblikket ikke skrevet optimalt. I øjeblikket bygger parseren et træ, hvilket efter min mening er unødvendigt og komplicerer koden. I markdown2anki billedtilstande parses ikke. Jeg vil prøve at udvikle det langsomt, men da jeg skriver det for mig selv i første omgang, vil jeg primært tackle de problemer, jeg møder, men hvis nogen ønsker at hjælpe, er I velkomne. Hvis der er spørgsmål til programmet, vil jeg være glad for at hjælpe gennem åbne problemer i de relevante projekter. Andre kritik og forslag kan skrives her. Jeg håber, at dette projekt vil være nyttigt for nogle.

P.S. Hvis du bemærker fejl (og der er desværre nogle), så skriv til mig, jeg retter dem alle.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster