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

Unë gjithmonë e kam menduar se një programues i lenë është një programues i mirë. Pse? Sepse nëse i kërkon një programues të punojçëm të bëjë diçka, ai do të shkojë dhe do ta bëjë. Por një programues i lenë do të shpenzojë 2-3 herë më shumë kohë, por do të shkruajë një skript që do ta bëjë këtë për të. Ndoshta herën e parë do të harxhohet më shumë kohë se sa duhet, por me përsëritjen e detyrave, ky qasje shumë shpejt shpaguan. 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 të përmirësoja anglishten time. Nuk më erdhi në mendje asgjë më e mirë se leximi i letërsisë. Bleva një lexues elektronik, ngarkova libra dhe fillova të lexoj. Gjatë leximit, vazhdimisht përballesha me fjalë të panjohura. I përkthenja menjëherë me anë të fjalorëve të ndërtuar në lexues, megjithatë vura re një veçori: fjalët nuk donin të mbaheshin mend. Kur pas disa faqeve e takoja përsëri atë fjalë, me 90% mundësi kisha nevojë përsëri për përkthim, dhe ashtu çdo herë. Më përfund eshte se nuk është e mjaftueshme të përkthesh fjalët e panjohura gjatë leximit, duhet të bësh diçka tjetër. Një variant ideal do të ishte ta futja në përdorim dhe të filloja ta përdorja, por unë nuk jetoj në një vend anglishtfolës dhe kjo është pak e mundshme. Atëherë më erdhi në mendje se njëherë më parë kisha lexuar për Përsëritjet e intervaleve.

Çfarë është kjo dhe si përdoret? Nëse e shpreh shkurto, ka një kurbë harrimi, më pas citimi nga Wikipedia:

Gjatë orës së parë harrohen deri në 60% të të gjitha informacionit të marra, pas 10 orësh nga memorizimi mbetet 35% e asaj që është mësuar. Më pas procesi i harresës vazhdon ngadalë, dhe pas 6 ditësh mbetet rreth 20% e numrit të përgjithshëm të sloganeve fillimisht të mësuara, po aq mbetet në kujtesë edhe pas një muaji.

Dhe përfundimi këtu

Përfundimet që mund të nxirren nga ky grafik janë se për memorimin e efektshëm është e nevojshme përsëritja e materialit të mësuar.

Ja ku arritëm në idenë të përsëritjes intervale.

ANKI është një program absolutisht falas me kod të hapur, i cili realizon idenë e përsëritjes intervale. Thjesht, janë kartela elektronike: nga njëra anë është pyetja, nga ana tjetër përgjigjja. Duke qenë se mund të krijoni pyetje/përgjigje duke përdorur html/css/javascript, mund të themi se ka potenciale të vërteta të pafundme. Për më tepër, është e zgjerueshme me plugins, dhe njëri nga ato do të na duhej shumë më vonë.

Të krijosh karta manualisht është e ngadaltë, e mërzitshme, dhe me një mundësi të madhe që pas një kohe do ta lësh dhe për këtë arsye, në një moment, i bëra vetes pyetjen, a mund ta automatizoj këtë proces. Përgjigjja është po, është e mundur. Dhe unë e bëra këtë. Të them të drejtën, është më shumë POC (Prova e konceptit), por që mund të përdoret. Nëse do të ketë interes nga ana e përdoruesve dhe do të vijnë zhvillues të tjerë, atëherë mund ta zhvillojmë në një produkt të gatshëm, që do të mund ta përdorin edhe përdoruesit teknikisht më pak të arsimuar. Tani, përdorimi i programit tim supozon disa njohuri në programim.

Unë lexoj libra me ndihmën e programit AIReader. Ai ka mundësinë për t'u lidhur me fjalorë të jashtëm, dhe po ashtu, kur përkthen një fjalë, e ruan fjalën për të cilën ju kërkoni përkthimin, në një skedar teksti. Tani mbetet vetëm ta përkthejmë këto fjalë dhe të krijojmë karta ANKI.

Fillimisht, u përpoqa të përdor Google Translate, Lingvo API sh.p. Por shërbimet falas nuk arritëm. Limiti falas e kisha skaduar edhe gjatë procesit të 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'i përktheja fjalët vetë. Në fund, u shkrua një modul dsl2html me të cilin mund të lidhen fjalorët DSL dhe që di të konvertojë ato në HTML format.

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

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

Para se të kërkoj një fjalë në fjalorët e lidhur, e sjell në formën e fjalorit (lemë) përmes bibliotekës Stanford CoreNLP. Në të vërtetë, për shkak të kësaj biblioteke fillova të shkruaj në Java dhe plani fillestar ishte të shkruaja gjithçka në Java, por gjatë procesit pashë bibliotekën node-java me ndihmën e së cilës mund të ekzekutoj relativisht lehtë kodin Java nga nodejs dhe një pjesë e kodit është shkruar në JavaScript. Nëse do të kisha gjetur këtë bibliotekë më herët, nuk do të kishte asnjë rresht të shkruar në Java. Një projekt tjetër anësor që ka lindur gjatë procesit është krijimi i një repozitoriumi me dokumentacionin e DSL që është gjetur në rrjet në formatin *.chm, është konvertuar dhe sjellë në një formë njerëzore. Nëse autori i skedarit origjinal është përdoruesi me emrin yozhic , e sheh këtë artikull, atëherë i jam shumë mirënjohës për punën e tij, pa dokumentacionin e tij, ndoshta nuk do të kisha arritur asgjë.

Pra, kam një fjalë në anglisht, artikulli i saj në fjalor në format *.html, duhet të mblidhen të gjitha në një vend, të krijohen artikuj ANKI nga lista e fjalëve dhe të regjistrohen në bazën e të dhënave ANKI. Për këtë qëllim, projekti i mëposhtëm është krijuar data2anki. Ai merr si input një listë fjalësh, përkthehet, krijon artikuj ANKI *.html dhe i regjistron në bazën e të dhënave ANKI. Në fund të artikullit ka udhëzime se si ta përdorni. Deri tani, kjo është historia e dytë ku përsëritjet intervale mund të jenë të dobishme.

Historia e dytë.

Të gjithë njerëzit që janë duke kërkuar një profesion më shumë apo më pak të kualifikuar, përfshirë programuesit, përballen me nevojën për t'u përgatitur për intervistat. Shumë koncepte që shqiptohen në intervista nuk i përdorni në praktikën tuaj të përditshme dhe ato harrohen. Gjatë përgatitjes për një intervistë, duke kaluar përmes shënimeve, librit, manualit, u përballa me faktin se merret shumë kohë dhe vëmendje për të filtruar informacionin që tashmë e dini, sepse ai nuk është gjithmonë tërësisht i qartë dhe duhet të lexoni me kujdes për të kuptuar se çfarë është e papërputhshme. Kur arrini në temën që vërtet kërkon përsëritje, shpesh ndodh që të jeni të lodhur dhe cilësia e përgatitjes zvogëlohet. Në një moment, mendova, pse të mos përdorim kartat ANKI për këtë? Për shembull, gjatë marrjes së shënimeve për një temë, të krijoni menjëherë një shënim në formën e pyetjeve dhe përgjigjeve, dhe pastaj gjatë përsëritjes do të dini menjëherë nëse e dini ose jo përgjigjen për këtë pyetje.

Problemi ishte vetëm se krijimi i pyetjeve ishte shumë i gjatë dhe i mërzitshëm. Për të lehtësuar procesin, në data2anki projektin shtova funksionalitetin për të konvertuar markdown teksti në ANKI karta. E gjithë që ju nevojitet është të shkruani një skedar të madh, ku pyetjet dhe përgjigjet do të jenë të shënuara me një sekuencë simboresh të paracaktuar, me të cilat parser-i do të kuptojë se ku është pyetja dhe ku është përgjigjja.

Pasi të krijohet ky skedari, ju nisni data2anki dhe ai krijon karta ANKI. Skedari origjinal është lehtësisht i redaktueshëm dhe i ndarë, thjesht duhet të fshini kartën(e) përkatëse dhe të nisni përsëri programin, dhe një variant i ri do të krijohet.

Instalimi dhe përdorimi

  1. Instalimi ANKI + AnkiConnect

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

  2. Instalimi data2anki

    1. Shkarkoni data2anki nga repozitori 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. Shkëputni jar-dependencies.zip dhe vendosni përmbajtjen e tij 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 (duhet të jenë krijuar para krijimit të kartave). Tani mbështetet vetëm modeli i tipit Basic:

        Ka fusha Front dhe Back, dhe do të krijojë një kartë. Teksti që vendosni në Front do të shfaqet në ballin e kartës, dhe teksti që vendosni në Back do të shfaqet në pjesën e prapme të kartës.

        ku është fjala origjinale Fusha përpara, dhe përkthimi do të jetë në Fusha prapa.

        Nuk ka asnjë problem të shtohet mbështetje Bazik (dhe karta të inversuara), ku për fjalën dhe përkthimin do të krijohet një kartë tjetër, ku përkthimi duhet të kujtohet fjala origjinale. Vetëm është e nevojshme të keni kohë dhe dëshirë.

      • në çelësin modules.dsl.dictionariesPath shkruani një varg me fjalorët e lidhur *.dsl Fjalorët. Çdo fjalor i lidhur është një dosje ku gjenden 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. Nisni kur aplikacioni ANKI është në funksionim
      node data2ankiindex.js
    3. FITIM!!!

  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 më parë para 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ënoni fillimin e pyetjeve dhe përgjigjeve përkatësisht. Vija vetë me selektorin nuk do të analizohet dhe nuk do të jetë në kartë, parseri do të fillojë punën nga vija tjetër.

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

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

        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: 123-Pyetje për intervistën JavaScript

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

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

    2. Nisni kur aplikacioni ANKI është në funksionim
      node data2ankiindex.js
    3. FITIM!!!

Kështu duket në një telefon të vogël:

Luaj videon

Rezultati

Kartat ANKI të marra në versionin desktop sinkronizohen pa probleme me ANKI cloud (falas deri në 100mb), dhe pastaj mund t'i përdorni kudo. Ka klientë për Android dhe iPhone, gjithashtu mund të përdorni edhe në shfletues. Si rezultat, nëse keni kohë që nuk e dini se si ta përdorni, në vend që të kaloni kot në Facebook ose të shihni macet në Instagram, mund të mësoni diçka të re.

Epilogu

Siç e përmenda më parë, ky është më tepër një POC funksional që mund të përdoret, sesa një produkt përfundimtar. Rreth 30% e standardit të parser-it DSL nuk është implementuar, dhe për këtë arsye, për shembull, jo të gjitha artikujt e fjalorit që janë në fjalorë mund të gjenden, gjithashtu ka idenë ta shkruajmë atë në JavaScript, pasi dëshiroj 'konsistencë', dhe për më tepër, tani është shkruar jo shumë optimal. Aktualisht, parser-i ndërtan një pemë, gjë që mendoj se është e tepërt dhe e komplikon kodin. Në markdown2anki Regjistrimi i figurave nuk është i përballueshëm. Do të përpiqem të punoj ngadalë, por, pasi po shkruaj për vete, në radhë të parë do t'i zgjidh ato probleme që do të has, por nëse dikush dëshiron të ndihmojë, është i mirëpritur. Nëse keni pyetje në lidhje me programin, do të jem i lumtur të ndihmoj përmes çështjeve të hapura në projektet përkatëse. Kritikat dhe propozimet e tjera shkruani këtu. Shpresoj që ky projekt të jetë i dobishëm për dikë.

P.S. Nëse vëreni gabime (dhe fatkeqësisht, ka), shkruani në mesazhe private, do t'i rregulloj të gjitha.

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster