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 trott att en lat programmerare är en bra programmerare. Varför? För att be en hårt arbetande att göra något, han kommer att gå och göra det. Och en lat programmerare kommer att spendera 2-3 gånger mer tid, men kommer att skriva ett manus som kommer att göra det åt honom. Det kan ta orimligt lång tid att göra detta första gången, men med upprepade uppgifter kommer detta tillvägagångssätt att löna sig mycket snabbt. Jag betraktar mig själv som en lat programmerare. Det var ingressen, låt oss nu börja.

Berättelse ett

För några år sedan undrade jag hur jag kunde förbättra min engelska. Det fanns inget bättre att tänka på än att läsa litteratur. Jag köpte en elektronisk läsare, laddade ner böcker och började läsa. Under läsningen stötte jag hela tiden på okända ord. Jag översatte dem omedelbart med hjälp av de inbyggda ordböckerna i läsaren, men jag lade märke till en egenskap: orden ville inte bli ihågkomna. När jag stötte på det här ordet igen några sidor senare, med 90 % sannolikhet, behövde jag översättning igen, och detta hände varje gång. Slutsatsen var att det inte räckte med att bara översätta okända ord under läsningen, man måste göra något annat. Det idealiska alternativet skulle vara att introducera det i vardagen och börja använda det, men jag bor inte i ett engelsktalande land och det är osannolikt. Sedan kom jag ihåg att jag en gång läst om Upprepning med mellanrum.

Vad är det och vad äts det med? Kort sagt, det finns det här glömmer kurvan, ytterligare citat från Wikipedia:

Redan inom den första timmen glöms upp till 60 % av all mottagen information, 10 timmar efter memorering finns 35 % av det som lärts kvar i minnet. Sedan fortsätter processen att glömma långsamt, och efter 6 dagar finns cirka 20% av det totala antalet initialt inlärda stavelser kvar i minnet, och samma mängd finns kvar i minnet efter en månad.

Och slutsatsen härifrån

Slutsatserna som kan dras utifrån denna kurva är att för effektiv memorering är det nödvändigt att upprepa det memorerade materialet.

Så vi kom på en idé spridd upprepning.

ANKI är ett helt gratis och öppen källkodsprogram som implementerar idén med spridd upprepning. Enkelt uttryckt har datoriserade flashkort en fråga på ena sidan och ett svar på den andra. Eftersom du kan göra frågor/svar med vanliga html/css/javascript, då kan vi säga att det verkligen har obegränsade möjligheter. Dessutom är den utbyggbar med special plugins, och en av dem kommer att vara mycket användbar för oss i framtiden.

Att skapa kort manuellt är långt, tråkigt och med stor sannolikhet kommer du efter ett tag att glömma den här uppgiften, och så någon gång ställde jag mig frågan om det är möjligt att automatisera denna uppgift. Svaret är ja, det kan du. Och jag gjorde det. Jag säger genast, det är mer POC (Proof of concept), men som kan användas. Om det finns intresse från användare och andra utvecklare engagerar sig, så kan det föras till en färdig produkt som även tekniskt analfabeter kan använda. Att använda mitt verktyg kräver nu viss kunskap om programmering.

Jag läser böcker med programmet AIR -läsare. Den har förmågan att ansluta externa ordböcker, och när du översätter ett ord sparar den ordet du anropade för översättning till en textfil. Allt som återstår är 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 etc. Men saker och ting fungerade inte med gratistjänster. Jag uttömde den fria gränsen under utvecklingsprocessen, dessutom, enligt licensvillkoren, hade jag inte rätt att cache-ord. Vid något tillfälle insåg jag att jag behövde översätta orden själv. Som ett resultat skrevs en modul dsl2html som du kan ansluta till DSL-ordböcker och vem vet hur man omvandlar dem till html formatera.

Så här ser en ordbokspost ut i *. Html, mitt alternativ jämfört med alternativet 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 letar efter ett ord i anslutna ordböcker tar jag det till ordboksform (lemma) använder biblioteket Stanford CoreNLP. På grund av det här biblioteket började jag faktiskt skriva i Java och den ursprungliga planen var att skriva allt på Java, men under processen hittade jag biblioteket nod-java med vilken man relativt enkelt kan exekvera Java-kod från nodejs och en del av koden är skriven i JavaScript. Om jag hade hittat det här biblioteket tidigare, skulle inte en enda rad ha skrivits i Java. Ett annat sidoprojekt som föddes i processen är skapandet arkiv med DSL-dokumentation som hittades på nätverket i formatet *.chm, omvandlade och förde till gudomlig form. Om författaren till den ursprungliga filen är en användare med smeknamn yozhic När han ser den här artikeln tackar jag honom så mycket för det arbete han har gjort, utan hans dokumentation hade jag med största sannolikhet inte lyckats.

Så jag har ett ord på engelska, dess ordbokspost i formatet *. Html, allt som återstår är att sätta ihop allt, skapa ANKI-artiklar från listan med ord och lägga in dem i ANKI-databasen. För detta ändamål skapades följande projekt data2anki. Det kan ta en lista med ord som input, översätt, skapa ANKI *. Html artiklar och registrera dem i ANKI-databasen. I slutet av artikeln finns instruktioner om hur du använder den. Under tiden är den andra berättelsen där upprepningar med avstånd kan vara användbara.

Den andra historien.

Alla människor som söker en mer/mindre kvalificerad specialitet, inklusive programmerare, ställs inför behovet av att förbereda sig för en intervju. Många av de begrepp som ställs i intervjuer använder du inte i vardagen och de glöms bort. När jag förberedde mig för en intervju, bläddrade i anteckningar, en bok, en uppslagsbok, ställdes jag inför det faktum att det tar mycket tid och uppmärksamhet att sålla fram information som du redan vet eftersom det inte alltid är självklart och du måste läs den noggrant för att förstå vad den är irrelevant. När du kommer till ett ämne som verkligen behöver upprepas händer det ofta att du redan är trött och kvaliteten på dina förberedelser blir lidande. Vid något tillfälle tänkte jag, varför inte använda ANKI-kort för detta också? Till exempel, när du gör anteckningar om ett ämne, skapa omedelbart en anteckning i form av en fråga och ett svar, och sedan när du upprepar det, kommer du omedelbart att veta om du vet svaret på denna fråga eller inte.

Det enda problemet som uppstod var att det var väldigt långt och tråkigt att skriva frågor. För att göra processen enklare, data2anki projekt Jag lade till konverteringsfunktion prissänkning text i ANKI-kort. Allt du behöver är att skriva en stor fil där frågor och svar kommer att markeras med en förutbestämd sekvens av tecken, genom vilken analysatorn kommer att förstå var frågan är och var svaret finns.

När den här filen har skapats kör du data2anki och den skapar ANKI-kort. Originalfilen är lätt att redigera och dela, du behöver bara radera motsvarande kort och köra programmet igen, så skapas en ny version.

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 repository
      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. Uppackning jar-dependencies.zip och placera dess innehåll i data2anki/java/jars

  3. Använd för att översätta ord:

    1. I fil data2anki/config.json:

      • i nyckeln läge ange värdet dsl2anki

      • i nyckeln modules.dsl.anki.deckName и modules.dsl.anki.modelName skriv därefter Däckets namn и Modellnamn (måste redan skapas innan du skapar kort). För närvarande stöds endast modelltypen Grundläggande:

        Har fram- och bakfält och skapar ett kort. Text du anger på framsidan visas på framsidan av kortet, och text du anger på baksidan visas på baksidan av kortet.

        var är det ursprungliga ordet? Främre fältet, och översättningen kommer att finnas i Bakre fält.

        Det är inga problem att lägga till support Grundläggande (och omvänt kort), där ett omvänt kort skapas för ordet och översättningen, där du baserat på översättningen måste komma ihåg originalordet. Allt du behöver är tid och lust.

      • i nyckeln modules.dsl.dictionariesPath registrera en array med ansluten *.dsl ordböcker. Varje ansluten ordbok är en katalog där ordboksfilerna finns i enlighet med formatet: DSL-ordboksstruktur

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

    2. Starta med ANKI-applikationen igång
      node data2ankiindex.js
    3. VINST!!!

  4. Används för att skapa kort från markdown

    1. I fil data2anki/config.json:

      • i nyckeln läge ange värdet markdown2anki
      • i nyckeln modules.markdown.anki.deckName и modules.dsl.anki.modelName skriv därefter Däckets namn и Modellnamn (måste redan skapas innan du skapar kort). För markdown2anki Endast modelltyp stöds Grundläggande.
      • i nyckeln modules.markdown.selectors.startQuestionSelectors и modules.markdown.selectors.startAnswerSelectors du skriver väljare med vilka du markerar början av fråga respektive svar. Raden med själva väljaren kommer inte att analyseras och kommer inte att hamna på kortet, analysatorn kommer att börja arbeta från nästa rad.

        Till exempel detta fråge-/svarkort:

        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

        Det kommer att se ut så här i markdown:
        #FRÅGA# ## Fråga 5. Skriv en mul-funktion som kommer att fungera korrekt när den anropas med följande syntax. ```javascript console.log(mul(2)(3)(4)); // output : 24 console.log(mul(4)(3)(4)); // output : 48 ``` #ANSWER# Nedan följer koden följt av en förklaring av hur det fungerar: ```javascript function mul (x) { return function (y) { // anonymous function return function (z) { // anonym funktion returnerar x * y * z; }; }; } ``` Här accepterar `mul`-funktionen det första argumentet och returnerar den anonyma funktionen som tar den andra parametern och returnerar den anonyma funktionen som tar den tredje parametern och returnerar multiplikationen av argument som skickas i successiv In Javascript-funktion definierad inside har tillgång till yttre funktionsvariabel och funktion är det första klassobjektet så det kan returneras av funktionen också och skickas som ett argument i en annan funktion. - En funktion är en instans av objekttypen - En funktion kan ha egenskaper och har en länk tillbaka till sin konstruktormetod - En funktion kan lagras som variabel - En funktion kan skickas som en parameter till en annan funktion - En funktion kan vara återvänt från en annan funktion
        

        Exempel taget härifrån: 123-JavaScript-Intervju-Frågor

        Det finns även en fil med exempel i projektmappen examples/markdown2anki-example.md

      • i nyckeln modules.markdown.pathToFile
        skriv ner sökvägen till filen där *.md fråga/svar fil

    2. Starta med ANKI-applikationen igång
      node data2ankiindex.js
    3. VINST!!!

Så här ser det ut på en mobiltelefon:

Resultat

Kort som tas emot på desktopversionen av ANKI synkroniseras utan problem med ANKI-molnet (gratis upp till 100mb), och sedan kan du använda dem överallt. Det finns klienter för Android och iPhone, och du kan även använda den i en webbläsare. Som ett resultat, om du har tid som du inte har något att spendera på, istället för att planlöst scrolla genom Facebook eller katter på Instagram, kan du lära dig något nytt.

Epilog

Som jag nämnde är detta mer en fungerande POC som du kan använda än en färdig produkt. Cirka 30 % av DSL-parserstandarden är inte implementerad, och därför till exempel kan inte alla ordboksposter som finns i ordböcker hittas, det finns också en idé att skriva om den i JavaScript, för jag vill ha "konsistens", och dessutom är det nu inte skrivet särskilt optimalt. Nu bygger parsern ett träd, men enligt min mening är detta onödigt och behöver inte komplicera koden. I markdown2anki läge, bilderna analyseras inte. Jag ska försöka klippa lite i taget, men eftersom jag skriver för mig själv ska jag först och främst lösa de problem som jag själv kommer att trampa på, men om någon vill hjälpa till så är du välkommen. Om du har frågor om programmet hjälper jag gärna till genom öppna frågor i de aktuella projekten. Skriv annan kritik och förslag här. Jag hoppas att det här projektet kommer att vara användbart för någon.

PS Om du upptäcker några fel (och tyvärr finns det några), skriv till mig i ett personligt meddelande, jag korrigerar allt.

Källa: will.com

Lägg en kommentar