Dy histori se si ANKI mund t'ju ndihmojë të mësoni një gjuhë të huaj dhe të përgatiteni për një intervistë

Gjithmonë kam menduar se një programues i lenë është një programues i mirë. Pse? Sepse nëse e kërkon një punëtor të ndershëm të bëjë diçka, ai do të shkojë dhe do ta bëjë. Ndërsa një programues i lenë do të shpenzojë 2-3 herë më shumë kohë, por do të shkruajë një skript që do ta bëjë atë për të. Ndoshta, hera e parë do të shpenzohet një kohë e tepruar, por me kushtin e detyrave të përsëritura, ky qasje shumë shpejt kthehet. Unë e konsideroj veten një programues të lenë. Kjo ishte një hyrje, tani le të kalojmë në punë.

Historia e parë

Disa vite më parë mendova se si mund ta përmirësoj anglishten time. Nuk kishte asgjë më të mirë se leximi i letërsisë që më erdhi në mendje. Bleva një lexues elektronik, shkarkova libra dhe fillova të lexoj. Gjatë leximit më shpesh takoheshin fjalë të panjohura. I përkthyesha ato menjëherë me ndihmën e fjalorëve të integruar në lexuesin, por vura re një veçori: fjalët nuk donin të mbeteshin në mendje. Kur pas disa faqeve takoja përsëri atë fjalë, me 90% mundësi përsëri kisha nevojë për përkthim, dhe kështu çdo herë. Shkonte në përfundimin se është e pamjaftueshme thjesht të përkthesh fjalë të panjohura gjatë leximit, duhet të bësh diçka tjetër. Një mundësi ideale do të ishte ta çoje atë në përdorim dhe të filloje ta përdorje, por unë nuk jetoj në një vend anglofon dhe kjo është shumë e pamundur. Këtu më erdhi në mendje se dikur kisha lexuar për Ripërsëritjet intervale.

Çfarë është kjo dhe si funksionon? Nëse themi shkurt, ekziston një e tillë kurba e harresës, më pas një citat nga Wikipedia:

Që në orën e parë, deri në 60% e të gjitha informacionit të marrë harrohet, pas 10 orësh nga mësimi, në memorie mbetet 35% e asaj që është mësuar. Pastaj procesi i harresës ndodh ngadalë, dhe pas 6 ditësh në memorie mbetet rreth 20% e numrit total të sillave fillimisht të mësuara, po aq mbetet në memorie edhe pas një muaji.

Dhe përfundimi këtu

Përfundimet që mund të nxirren mbi këtë kurbë janë se për memorizim efektiv nevojitet ripërsëritja e materialit të mësuar.

Këtu kemi arritur në idenë ripërsëritjeve intervale.

ANKI kjo është një program i plotë falas me burim të hapur që implementon idenë e përsëritjes intervale. Thënë më thjesht, karta flash të kompjuterizuar, me një anë pyetja, dhe në anën tjetër përgjigjja. Duke qenë se mund të krijoni pyetje/përgjigje me anë të një html/css/javascript, mund të thuhet se ajo ka mundësi të vërteta të pakufizuara. Për më tepër, ajo është e zgjerueshme me plugins, dhe një nga ato do t'i nevojitet shumë më vonë.

Krijimi manual i kartave është i gjatë, i lodhshëm, dhe ka një probabilitet të madh që pas një kohe ta lini mënjanë; kështu që në një moment, i bëra vetes pyetjen, a është e mundur ta automatizoj këtë proces. Përgjigjja është po, është e mundur. Dhe unë e bëra këtë. Të them të drejtën, kjo është më shumë POC (Dëshmia e konceptit), por që mund të përdoret. Nëse do të ketë interes nga përdoruesit dhe zhvillues të tjerë do të bashkohen, mund ta çojmë në një produkt të përfunduar, me të cilin mund të përdorin edhe përdoruesit teknikisht jo të edukuar. Aktualisht, përdorimi i utilitarit tim kërkon disa njohuri në programim.

Unë lexoj libra me anë të programit AIReader. Ai ka mundësinë e lidhjes së fjalorëve të jashtëm, dhe gjithashtu gjatë përkthimit të fjalëve, ruan fjalën për të cilën e thirret përkthimi në një skedar teksti. Tani mbetet vetëm të përkthehen këto fjalë dhe të krijohen kartat ANKI.

Fillimisht përpiqesha të përdorja për përkthim Google Translate, Lingvo API etj. Por me shërbimet falas nuk arrita mbarë. Kufiri falas e shfrytëzoja që në procesin e zhvillimit; për më tepër, sipas kushteve të licencës, nuk kisha të drejtë të ruaja fjalët. Në një moment kuptova se duhej të përkthenja fjalët vetë. Si rezultat, u shkrua një modul dsl2html të cilit mund t'i lidhesh fjalorëve DSL dhe që di të konvertojë ato në HTML format.

Kështu duket artikulli i fjalorit në *.html, versioni im në krahasim me versionin GoldenDict

Dy histori se si ANKI mund t'ju ndihmojë të mësoni një gjuhë të huaj dhe të përgatiteni për një intervistë

Para se të kërkoj një fjalë në fjalorët e lidhur, e përkthej në formën e fjalorit (lemma) me anë të bibliotekës Stanford CoreNLP. Në fakt, për shkak të kësaj biblioteke fillova të shkruaj në Java dhe plani fillestar ishte ta shkruaja gjithçka në Java, por gjatë procesit gjeta bibliotekën node-java nëpërmjet së cilës mund të ekzekutoni mjaft lehtë kodin Java nga nodejs dhe një pjesë e kodit është shkruar në JavaScript. Po të kisha gjetur këtë bibliotekë më parë, nuk do të kisha shkruar asnjë rresht në Java. Një projekt tjetër anësor që lindi gjatë procesit është krijimi i një depoje me dokumentacionin DSL i cili u gjend në internet në formatin *.chm, u konvertua dhe u riaftësua në një formë të arsyeshme. Nëse autori i skedarit origjinal me nofkën yozhic sheh këtë artikull, i falënderoj shumë për punën e bërë, pa dokumentacionin e tij ndoshta nuk do të kisha arritur asgjë.

Pra, kam një fjalë në anglisht, artikulli i saj në fjalor në formatin *.html, mbetet të bashkohen të gjitha, të krijohen artikuj ANKI nga lista e fjalëve dhe të futen në bazën e të dhënave ANKI. Për këtë qëllim është krijuar projekti i mëposhtëm data2anki. Ai di të marrë si input një listë fjalësh, të përkthejë, të krijojë artikuj ANKI *.html dhe ti regjistrojë ato në bazën e të dhënave ANKI. Në fund të artikullit ka një udhëzues se si ta përdorni. Deri tani është historia e dytë ku përsëritjet me intervale mund të jenë të dobishme.

Historia e dytë.

Të gjithë njerëzit në kërkim të një specializimi më shumë/jo më pak të kualifikuar përfshirë programuesit përballen me nevojën për t'u përgatitur për intervista. Shumë koncepte që kërkohen në intervista nuk i përdorni në praktikën e përditshme dhe ato harrohen. Gjatë një përgatitjeje për intervistë tjetër, duke shfletuar skicën, librin, manualin, u përballa me atë se është shumë e vështirë dhe merr shumë kohë dhe vëmendje për të ndarë informacionin që tashmë e dini, sepse ai nuk është gjithmonë i dukshëm dhe duhet të futesh në detaje për të kuptuar që ai është i paqartë. Kur ju afroheni një teme që vërtet duhet ta përsërisni, shumë herë ndodh që tashmë jeni lodhur dhe cilësia e përgatitjes dëmtohet. Në një moment mendoja, pse të mos përdorim kartat ANKI dhe për këtë? Për shembull, gjatë skicimit të një teme, menjëherë të krijoni një skicë në formën e një pyetje - përgjigje dhe pastaj gjatë përsëritjes do të dini menjëherë nëse e dini apo jo përgjigjen për këtë pyetje.

Problemi ndodhi vetëm në atë se ishte shumë e lodhshme dhe e mërzitshme të shkruaja pyetje. Për të lehtësuar procesin, në data2anki projekt unë shtova funksionalitetin për të konvertuar markdown teksti në kartat ANKI. Çfarëdo që ju nevojitet, është të shkruani një skedar të madh, ku pyetjet dhe përgjigjet do të shënohen me një renditje simboresh të paracaktuara, me të cilat parseri do të kuptojë se ku është pyetja dhe ku është përgjigja.

Pasi të krijohet ky skedar, ju ekzekutoni data2anki dhe ai krijon kartat ANKI. Skedari origjinal është lehtësisht i redaktueshëm dhe mund të ndahen, mjafton të fshini kartën(e) përkatëse dhe të rindizni programin, dhe një version i ri do të krijohet.

Instalimi dhe përdorimi

  1. Instalimi i ANKI + AnkiConnect

    1. Shkarkoni ANKI këtu: https://apps.ankiweb.net/
    2. Instaloni plug-in-in AnkiConnect: https://ankiweb.net/shared/info/2055492159

  2. Instalimi data2anki

    1. Shkarkoni data2anki nga repozitorit github
      git clone https://github.com/anatoly314/data2anki
    2. Instaloni varësitë
      cd data2anki && npm install
    3. Shkarkoni varësitë java https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Shkarkoni jar-dependencies.zip dhe vendosni përmbajtjen e saj në data2anki/java/jars

  3. Përdorimi për përkthimin e fjalëve:

    1. Në skedar data2anki/config.json:

      • në çelësin mode shkruani vlerën dsl2anki

      • në çelësin modules.dsl.anki.deckName dhe modules.dsl.anki.modelName shkruani, përkatësisht, Deck Name dhe Model Name (duhen krijuar përpara krijimit të kartave). Aktualisht mbështetet vetëm modeli i tipit Basic:

        Ka fushat Front dhe Back, dhe do të krijojë një kartë. Teksti që futni në Front do të shfaqet në pjesën e përparme të kartës, dhe teksti që futni në Back do të shfaqet në pjesën e pasme të kartës.

        ku fjala origjinale është Front field, ndërsa përkthimi do të jetë në Back field.

        Nuk ka asnjë problem të shtohet mbështetje Basic (and reversed card), ku për fjalën dhe përkthimin do të krijohet një kartë e kundërt, ku nga përkthimi duhet të kujtoni fjalën origjinale. Kërkohet vetëm kohë dhe dëshirë.

      • në çelësin modules.dsl.dictionariesPath shkruani një array me fjalorët e lidhur *.dsl Çdo fjalor i lidhur është një direktor që përmban skedarët e fjalorit sipas formatit: Struktura e fjalorit DSL

      • në çelësin modules.dsl.wordToTranslatePath shkruani rrugën për listën e fjalëve që dëshironi të përktheni.

    2. Ekzekutoni me aplikacionin ANKI të punës
      node data2ankiindex.js
    3. PROFIT!!!

  4. Përdorimi për krijimin e kartave nga markdown

    1. Në skedar data2anki/config.json:

      • në çelësin mode shkruani vlerën markdown2anki
      • në çelësin modules.markdown.anki.deckName dhe modules.dsl.anki.modelName shkruani, përkatësisht, Deck Name dhe Model Name (duhen krijuar përpara krijimit të kartave). Për markdown2anki mode mbështetet vetëm modeli i tipit Basic.
      • në çelësin modules.markdown.selectors.startQuestionSelectors dhe modules.markdown.selectors.startAnswerSelectors shkruani selektorët me të cilët shënojnë fillimin e pyetjes dhe përgjigjes përkatësisht. Rreshti i vetë selektorit nuk do të shënohet dhe nuk do të përfshihet në kartë, parseri do të fillojë punën nga rreshti tjetër.

        Për shembull, kjo kartë pyetje/përgjigje:

        Dy histori se si ANKI mund t'ju ndihmojë të mësoni një gjuhë të huaj dhe të përgatiteni për një intervistë

        Do të duket në markdown në këtë mënyrë:
        #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
        

        Shembulli është marrë nga këtu: 123-Pyetje të Intervistës JavaScript

        Ka gjithashtu një skedar me shembuj në dosjen e projektit shembuj/markdown2anki-shembulli.md

      • në çelësin modules.markdown.pathToFile
        përcaktoni, rrugën te skedari ku ndodhet *.md skedari me pyetje/ përgjigje

    2. Ekzekutoni me aplikacionin ANKI të punës
      node data2ankiindex.js
    3. PROFIT!!!

Kështu duket në telefonin mobil:

Luaj videon

Rezultati

Kartelat ANKI të marra në versionin desktop sinkronizohen pa probleme me ANKI cloud (falas deri në 100mb), pastaj mund të përdoren kudo. Ka klientë për Android dhe iPhone, gjithashtu mund të përdoret edhe në shfletues. Në përfundim, nëse keni kohë që nuk dini si ta shpenzoni, në vend që të skroni pa qëllim në Facebook ose katërkotë në Instagram, mund të mësoni diçka të re.

Epilogu

Siç e përmenda më parë, kjo është më shumë një POC punues, që mund të përdoret, sesa një produkt i përfunduar. Diku rreth 30% e standardit të parser DSL nuk është implementuar, dhe për këtë arsye, p.sh. jo të gjitha artikujt e fjalorit që gjenden në fjalorë mund të gjenden, gjithashtu ka ide për ta shkruar përsëri në JavaScript, sepse duhen 'koherencë', dhe për më tepër, tani është shkruar jo shumë optimalisht. Tani parseri ndan një pemë, gjë që mendoj se është e panevojshme dhe e komplikon kodin. Në markdown2anki qartësi të imazheve nuk parseנען. Do të mundohem ta zhvilloj gradualisht, por, për sa kohë që po shkruaj për vete, do të zgjidh fillimisht ato pengesa që do të godas, por nëse dikush dëshiron të ndihmojë, është i mirëpritur. Nëse ka pyetje në lidhje me programin, do të jem i lumtur të ndihmoj përmes çështjeve të hapura në projektet përkatëse. Kritikën dhe propozimet e tjera dërgojini këtu. Shpresoj se ky projekt do të jetë i dobishëm për dikë.

P.S. Nëse keni vënë re gabime (dhe fatkeqësisht, ka), shkruani në privat, do t'i korrigjoj të gjitha.

Burimi: habr.com

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster