TvÄ berÀttelser om hur ANKI kan hjÀlpa dig att lÀra dig ett frÀmmande sprÄk och förbereda dig för intervjuer

Jag har alltid ansett att en lat programmerare Àr en bra programmerare. Varför? För att om du ber en flitig göra nÄgot, sÄ gÄr han och gör det. Men en lat programmerare kommer att spendera 2-3 gÄnger mer tid, men skriva ett skript som gör det - detta för honom. Kanske gÄr det att fÄ detta att gÄ i praktiken första gÄngen, men med upprepade uppgifter betalar sig denna metod mycket snabbt. Jag anser mig vara en lat programmerare. Det var en inledning, nu gÄr vi till saken.

Första historien

För nÄgra Är sedan funderade jag pÄ hur jag skulle förbÀttra min engelska. Inget bÀttre Àn att lÀsa litteratur kom till mig. Jag köpte en elektronisk lÀsare, laddade ner böcker och började lÀsa. Under lÀsningen stötte jag stÀndigt pÄ okÀnda ord. Jag översatte dem omedelbart med hjÀlp av de inbyggda ordböckerna i lÀsaren, men jag mÀrkte en sak: orden ville inte fastna i minnet. NÀr jag efter nÄgra sidor Äterigen stötte pÄ detta ord, sÄ behövde jag med 90% sannolikhet översÀtta det igen, sÄ hÀr var det varje gÄng. Slutsatsen som dras var att det inte bara rÀcker med att översÀtta okÀnda ord under lÀsningen, man mÄste göra nÄgot mer. Den perfekta lösningen skulle vara att införa det i det vardagliga sprÄket och börja anvÀnda det, men jag bor inte i ett engelsktalande land och det Àr svÄrt att fÄ till. HÀr kom jag ihÄg att jag nÄgon gÄng hade lÀst om Intervallupprepningar.

Vad Àr det och hur anvÀnds det? Kort sagt, det finns en sÄdan glömskekurva, hÀr Àr ett citat frÄn Wikipedia:

Inom en timme glöms upp till 60 % av all information som mottagits, och efter 10 timmar kvarstÄr 35 % av det inlÀrda i minnet. DÀrefter gÄr glömningsprocessen lÄngsamt, och efter 6 dagar kvarstÄr cirka 20 % av det totala antal initialt inlÀrda stavelser, och lika mycket finns kvar i minnet efter en mÄnad.

Och slutsatsen hÀr

Slutsatserna som kan dras frÄn denna kurva Àr att för effektiv inlÀrning Àr det nödvÀndigt att repetera det inlÀrda materialet.

Nu har vi kommit fram till idén intervallupprepning.

ANki detta Àr ett helt gratis program med öppen kÀllkod som implementerar idén om intervallÄtergivning. Enkelt sagt, datoriserade flash-kort, dÀr ena sidan Àr en frÄga och den andra ett svar. Eftersom du kan skapa frÄgor/svar med hjÀlp av vanlig html/css/javascript, sÄ kan man sÀga att den har verkligen oÀndliga möjligheter. Dessutom kan den utökas med sÀrskilda plugins, och en av dem kommer att bli mycket anvÀndbar för oss senare.

Att manuellt skapa kort Àr tidskrÀvande och trÄkigt, och det Àr stor risk att du efter ett tag ger upp, sÄ jag stÀllde mig frÄgan om detta kan automatiseras. Svaret Àr ja, det kan det. Och jag gjorde det. Jag sÀger direkt, detta Àr mer POC (Proof of concept), men som gÄr att anvÀnda. Om det finns intresse frÄn anvÀndarna och andra utvecklare sÄ kan det utvecklas till en fÀrdig produkt som Àven tekniskt okunniga anvÀndare kan anvÀnda. Just nu krÀver anvÀndningen av mitt verktyg dock vissa kunskaper i programmering.

Jag lÀser böcker med hjÀlp av programmet AIReader. Den har möjlighet att ansluta externa ordlistor, och dessutom, nÀr den översÀtter ett ord, sparar den ordet som du beordrade översÀttningen av i en textfil. Nu ÄterstÄr bara att översÀtta dessa ord och skapa ANKI-kort.

Först försökte jag anvÀnda för översÀttning Google Translate, Lingvo API osv. Men med gratis tjÀnster gick det inte. Jag nÄdde den gratis grÀnsen redan under utvecklingen; dessutom hade jag enligt licensvillkoren inte rÀtt att cacha orden. Vid ett tillfÀlle insÄg jag att jag behövde översÀtta orden sjÀlv. Resultatet blev en modul dsl2html som kan kopplas till DSL-ordlistor och som kan konvertera dem till HTML format.

SÄ hÀr ser en ordboksartikel ut i *.html, min version i jÀmförelse med versionen GoldenDict

TvÄ berÀttelser om hur ANKI kan hjÀlpa dig att lÀra dig ett frÀmmande sprÄk och förbereda dig för intervjuer

Innan jag söker efter ett ord i de anslutna ordlistorna, omvandlar jag det till ordform (lemma) med hjÀlp av biblioteket Stanford CoreNLP. Faktum Àr att det var pÄ grund av detta bibliotek som jag började skriva i Java, och den ursprungliga planen var att skriva allt i Java, men under processen hittade jag biblioteket node-java genom vilket man relativt enkelt kan köra Java-kod frÄn nodejs och en del av koden Àr skriven i JavaScript. Om jag hade hittat det hÀr biblioteket tidigare, skulle inget ha skrivits i Java. Ett annat sidoprojekt som föddes under processen Àr att skapa ett repository med DSL-dokumentation som hittades pÄ nÀtet i formatet *.chm, konverterades och gjordes lÀsbart. Om skaparen av den ursprungliga filen, en anvÀndare med namnet yozhic ser den hÀr artikeln sÄ vill jag rikta ett stort tack för det arbete som gjorts, utan hans dokumentation skulle jag troligen inte ha lyckats.

SÄ, jag har ett ord pÄ engelska, dess ordboksartikel i formatet *.html, det ÄterstÄr att sammanstÀlla allt, skapa ANKI-artiklar frÄn listan av ord och föra dem till ANKI-databasen. För detta ÀndamÄl skapades följande projekt data2anki. Det kan ta emot en lista av ord, översÀtta, skapa ANKI *.html artiklar och skriva dem till ANKI-databasen. I slutet av artikeln finns en instruktion om hur man anvÀnder dem. Men för nu Àr det den andra historien dÀr intervallÄterkomster kan vara anvÀndbara.

Den andra historien.

Alla mĂ€nniskor söker mer eller mindre kvalificerade yrken, inklusive programmerare, vilket innebĂ€r att de mĂ„ste förbereda sig för intervjuer. MĂ„nga koncept som frĂ„gas om under intervjun anvĂ€nder man inte i sin dagliga praktik, och de glöms bort. Vid nĂ€sta förberedelse för intervjun, nĂ€r jag blĂ€ddrade igenom anteckningar, böcker och handböcker, insĂ„g jag att det tog mycket tid och uppmĂ€rksamhet att sĂ„lla bort information som jag redan kĂ€nde till, eftersom den inte alltid Ă€r uppenbar och det krĂ€vs noggrant lĂ€sande för att förstĂ„ att den Ă€r irrelevant. NĂ€r man sedan nĂ„r Ă€mnet som verkligen behöver repeteras, hĂ€nder det ofta att man redan Ă€r trött och kvaliteten pĂ„ förberedelserna pĂ„verkas negativt. Vid nĂ„got tillfĂ€lle tĂ€nkte jag, varför inte anvĂ€nda ANKI-kort för detta? Till exempel nĂ€r man sammanfattar ett Ă€mne, att direkt skapa en sammanfattning i form av frĂ„ga – svar, och sedan vid repetitionen vet man direkt om man kan svaret pĂ„ den frĂ„gan.

Problemet uppstod bara i att skriva frÄgor var mycket tidskrÀvande och trÄkigt. För att underlÀtta processen har jag data2anki lagt till funktionalitet i projektet för att konvertera markdown Text i ANKI-kort. Allt du behöver göra Àr att skriva en stor fil dÀr frÄgor och svar Àr markerade med en förutbestÀmd sekvens av tecken som parsaren kommer att förstÄ, var frÄgan och svaret finns.

NÀr denna fil har skapats kör du data2anki och det skapar ANKI-kort. Den ursprungliga filen Àr lÀtt att redigera och dela, du behöver bara ta bort den aktuella kortet/den och köra programmet igen, sÄ kommer en ny version att skapas.

Installation och anvÀndning

  1. Installera ANKI + AnkiConnect

    1. Ladda ner ANKI hÀrifrÄn: https://apps.ankiweb.net/
    2. Installera AnkiConnect-plugin: https://ankiweb.net/shared/info/2055492159

  2. Installation data2anki

    1. Ladda ner data2anki frÄn github-repositoryt
      git clone https://github.com/anatoly314/data2anki
    2. Installera beroenden
      cd data2anki && npm install
    3. Ladda ner java-beroenden https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Packa upp jar-dependencies.zip och placera dess innehÄll i data2anki/java/jars

  3. AnvÀndning för att översÀtta ord:

    1. I filen data2anki/config.json:

      • i nyckeln mode ange vĂ€rdet dsl2anki

      • i nyckeln modules.dsl.anki.deckName och modules.dsl.anki.modelName ange, enligt följande, Deck Name och Model Name (ska redan ha skapats innan korten skapas). För nĂ€rvarande stöds endast modellen av typen Basic:

        Har fram- och baksidor, och skapar ett kort. Texten du skriver in i Fram kommer att visas pÄ framsidan av kortet, och texten du skriver in i Bak kommer att visas pÄ baksidan av kortet.

        dÀr det ursprungliga ordet Àr Front field, och översÀttningen kommer att vara i Back field.

        Det finns inget problem med att lÀgga till stöd för Basic (och omvÀnd kort), dÀr ett ord och dess översÀttning kommer att skapa och ett omvÀnt kort, dÀr du utifrÄn översÀttningen mÄste komma ihÄg det ursprungliga ordet. Det krÀvs bara tid och vilja.

      • i nyckeln modules.dsl.dictionariesPath ange en array med anslutna *.dsl ordlistor. Varje ansluten ordlista Ă€r en katalog dĂ€r ordfilerna finns i enlighet med formatet: Struktur av DSL-ordlistan

      • i nyckeln modules.dsl.wordToTranslatePath ange sökvĂ€gen till listan med ord som du vill översĂ€tta.

    2. Kör vid en fungerande ANKI-app
      node data2ankiindex.js
    3. PROFIT!!!

  4. AnvÀndning för att skapa kort frÄn markdown

    1. I filen data2anki/config.json:

      • i nyckeln mode ange vĂ€rdet markdown2anki
      • i nyckeln modules.markdown.anki.deckName och modules.dsl.anki.modelName ange, enligt följande, Deck Name och Model Name (ska redan ha skapats innan korten skapas). För markdown2anki mode stöds endast modellen av typen Basic.
      • i nyckeln modules.markdown.selectors.startQuestionSelectors och modules.markdown.selectors.startAnswerSelectors ange selektorer som markerar början av frĂ„ga och svar, respektive. SjĂ€lva raden med selektorn kommer inte att parsa och komma med i kortet, parsaren börjar arbetet med nĂ€sta rad.

        Till exempel, det hÀr kortet med frÄga/svar:

        TvÄ berÀttelser om hur ANKI kan hjÀlpa dig att lÀra dig ett frÀmmande sprÄk och förbereda dig för intervjuer

        Kommer att se ut i markdown pÄ följande sÀtt:
        #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
        

        Exemplet Àr taget hÀrifrÄn: 123-JavaScript-Interview-Questions

        Det finns ocksÄ en fil med exempel i projektmappen examples/markdown2anki-example.md

      • i nyckeln modules.markdown.pathToFile
        ange sökvÀgen till filen dÀr * ligger.md fil med frÄgor/svar

    2. Kör vid en fungerande ANKI-app
      node data2ankiindex.js
    3. PROFIT!!!

SÄ hÀr ser det ut pÄ mobiltelefonen:

Spela video

Resultat

De kort som skapades i desktopversionen av ANKI synkroniseras utan problem med ANKI-molnet (gratis upp till 100 MB), och sedan kan du anvÀnda dem var som helst. Det finns klienter för Android och iPhone, och de kan Àven anvÀndas i webblÀsaren. DÀrför, om du har tid som du inte vet vad du ska göra med, istÀllet för att scrolla igenom Facebook eller katter pÄ Instagram, kan du lÀra dig nÄgot nytt.

Epilog

Som jag redan nÀmnde Àr detta mer ett arbets-POC som kan anvÀndas snarare Àn en fÀrdig produkt. UngefÀr 30 % av DSL-parserstandarden Àr inte implementerad, och dÀrför till exempel kan inte alla ordboksartiklar som finns i ordböcker hittas, det finns ocksÄ en idé att skriva om det i JavaScript, eftersom jag vill ha "consistency", och dessutom Àr det för nÀrvarande inte skrivet pÄ ett sÀrskilt optimalt sÀtt. För nÀrvarande bygger parsern ett trÀd, och det tycker jag Àr överflödigt och komplicerar koden. I markdown2anki bildlÀgen parsa inte. Jag kommer att försöka att smÄtt jobba med det, men eftersom jag skriver för mig sjÀlv just nu, kommer jag först och frÀmst att lösa de problem som jag sjÀlv stöter pÄ, men om nÄgon vill hjÀlpa till, Àr ni varmt vÀlkomna. Om det finns frÄgor om programmet sÄ Àr jag glad att hjÀlpa till via öppna Àrenden i motsvarande projekt. Skriv gÀrna övrig kritik och förslag hÀr. Jag hoppas att detta projekt kommer att vara till nytta för nÄgon.

P.S. Om ni mÀrker nÄgra fel (vilket tyvÀrr finns), skriv till mig privat, sÄ fixar jag dem.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster