Dalawang kuwento tungkol sa kung paano ka matutulungan ng ANKI na matuto ng wikang banyaga at maghanda para sa isang panayam

Palagi akong naniniwala na ang isang tamad na programmer ay isang mahusay na programmer. Bakit? Dahil hilingin sa isang masipag na gumawa ng isang bagay, pupunta siya at gagawin ito. At ang isang tamad na programmer ay gugugol ng 2-3 beses na mas maraming oras, ngunit magsusulat ng isang script na gagawin ito para sa kanya. Maaaring tumagal ng hindi makatwirang mahabang panahon upang gawin ito sa unang pagkakataon, ngunit sa paulit-ulit na mga gawain ang diskarte na ito ay magbabayad nang napakabilis. Itinuturing ko ang aking sarili na isang tamad na programmer. Iyon ang preamble, ngayon ay bumaba tayo sa negosyo.

Kuwento isa

Ilang taon na ang nakalipas naisip ko kung paano ko mapapabuti ang aking Ingles. Walang mas mabuting pumasok sa isip ko kaysa sa pagbabasa ng panitikan. Bumili ako ng electronic reader, nag-download ng mga libro at nagsimula akong magbasa. Habang nagbabasa, paulit-ulit akong nakakatagpo ng mga hindi pamilyar na salita. Agad kong isinalin ang mga ito gamit ang mga diksyunaryo na binuo sa mambabasa, ngunit napansin ko ang isang tampok: ang mga salita ay hindi nais na maalala. Nang makita kong muli ang salitang ito makalipas ang ilang pahina, na may 90% na posibilidad na kailangan ko ulit ng pagsasalin, at nangyayari ito sa bawat pagkakataon. Ang konklusyon ay hindi sapat na isalin lamang ang mga hindi pamilyar na salita habang nagbabasa, kailangan mong gumawa ng iba pa. Ang perpektong opsyon ay ipakilala ito sa pang-araw-araw na buhay at simulang gamitin ito, ngunit hindi ako nakatira sa isang bansang nagsasalita ng Ingles at ito ay malamang na hindi. Tapos naalala ko yung minsan kong nabasa Spaced Repetition.

Ano ito at ano ang kinakain nito? Sa madaling salita, may ganito nakakalimutang kurba, karagdagang quote mula sa Wikipedia:

Nasa loob ng unang oras, hanggang 60% ng lahat ng impormasyong natanggap ay nakalimutan; 10 oras pagkatapos ng pagsasaulo, 35% ng natutunan ay nananatili sa memorya. Pagkatapos ang proseso ng pagkalimot ay nagpapatuloy nang dahan-dahan, at pagkatapos ng 6 na araw mga 20% ng kabuuang bilang ng mga unang natutunang pantig ay nananatili sa memorya, at ang parehong halaga ay nananatili sa memorya pagkatapos ng isang buwan.

At ang konklusyon mula dito

Ang mga konklusyon na maaaring makuha batay sa kurba na ito ay para sa epektibong pagsasaulo kinakailangan na ulitin ang kabisadong materyal.

Kaya nakaisip kami ng ideya pag-uulit na may pagitan.

АNKI ay isang ganap na libre at open source na programa na nagpapatupad ng ideya ng spaced repetition. Sa madaling salita, ang mga nakakompyuter na flash card ay may tanong sa isang tabi at may sagot sa kabilang panig. Dahil maaari kang gumawa ng mga tanong/sagot gamit ang regular html/css/javascript, pagkatapos ay masasabi nating mayroon itong tunay na walang limitasyong mga posibilidad. Bilang karagdagan, ito ay napapalawak na may espesyal mga plugin, at ang isa sa mga ito ay magiging lubhang kapaki-pakinabang sa atin sa hinaharap.

Ang manu-manong paglikha ng mga card ay mahaba, nakakapagod, at may mataas na posibilidad, pagkaraan ng ilang sandali ay makakalimutan mo ang tungkol sa gawaing ito, at sa isang punto ay tinanong ko ang aking sarili ng tanong, posible bang i-automate ang gawaing ito. Ang sagot ay oo, kaya mo. At ginawa ko. Sasabihin ko kaagad, mas marami POC (Patunay ng konsepto), ngunit maaaring gamitin. Kung may interes mula sa mga gumagamit at iba pang mga developer na nasangkot, pagkatapos ay maaari itong dalhin sa isang tapos na produkto na kahit na ang mga teknikal na hindi marunong magbasa ay magagamit ng mga gumagamit. Ngayon, ang paggamit ng aking utility ay nangangailangan ng ilang kaalaman sa programming.

Nagbasa ako ng mga libro gamit ang programa AI Reader. Ito ay may kakayahang magkonekta ng mga panlabas na diksyunaryo, at kapag nagsalin ka ng isang salita, sine-save nito ang salitang tinawag mo para sa pagsasalin sa isang text file. Ang natitira na lang ay isalin ang mga salitang ito at lumikha ng mga ANKI card.

Noong una sinubukan kong gamitin para sa pagsasalin Google translate, Lingvo API atbp. Ngunit ang mga bagay ay hindi gumana sa mga libreng serbisyo. Naubos ko ang libreng limitasyon sa panahon ng proseso ng pag-unlad, bilang karagdagan, ayon sa mga tuntunin ng lisensya, wala akong karapatang mag-cache ng mga salita. Sa ilang mga punto napagtanto ko na kailangan kong isalin ang mga salita sa aking sarili. Bilang resulta, isang modyul ang naisulat dsl2html kung saan maaari kang kumonekta Mga diksyunaryo ng DSL at sino ang nakakaalam kung paano i-convert ang mga ito sa HTML pormat.

Ito ang hitsura ng isang entry sa diksyunaryo sa *. Html, ang aking opsyon kumpara sa opsyon GoldenDict

Dalawang kuwento tungkol sa kung paano ka matutulungan ng ANKI na matuto ng wikang banyaga at maghanda para sa isang panayam

Bago maghanap ng salita sa mga konektadong diksyunaryo, dinadala ko ito sa anyo ng diksyunaryo (lemma) gamit ang aklatan Stanford CoreNLP. Sa katunayan, dahil sa library na ito, nagsimula akong magsulat sa Java at ang orihinal na plano ay isulat ang lahat sa Java, ngunit sa proseso ay natagpuan ko ang library node-java kung saan madali mong maipatupad ang Java code mula sa mga nodej at ang ilan sa mga code ay nakasulat sa JavaScript. Kung nahanap ko ang library na ito nang mas maaga, wala ni isang linya na naisulat sa Java. Ang isa pang side project na ipinanganak sa proseso ay ang paglikha imbakan na may dokumentasyon ng DSL na natagpuan sa network sa format *.chm, binago at dinala sa banal na anyo. Kung ang may-akda ng orihinal na file ay isang gumagamit sa pamamagitan ng palayaw yozhic Kapag nakita niya ang artikulong ito, lubos kong pinasasalamatan siya para sa gawaing nagawa niya; kung wala ang kanyang dokumentasyon, malamang na hindi ako magtagumpay.

Kaya, mayroon akong isang salita sa Ingles, ang entry sa diksyunaryo nito sa format *. Html, ang natitira na lang ay pagsama-samahin ang lahat, lumikha ng mga artikulo ng ANKI mula sa listahan ng mga salita at ilagay ang mga ito sa database ng ANKI. Para sa layuning ito ang sumusunod na proyekto ay nilikha data2anki. Maaaring tumagal ng isang listahan ng mga salita bilang input, pagsasalin, lumikha ng ANKI *. Html mga artikulo at itala ang mga ito sa database ng ANKI. Sa dulo ng artikulo ay may mga tagubilin kung paano ito gamitin. Samantala, ang pangalawang kuwento ay kung saan maaaring maging kapaki-pakinabang ang mga pag-uulit na may pagitan.

Ang pangalawang kwento.

Ang lahat ng mga taong naghahanap ng higit pa/hindi gaanong kwalipikadong espesyalidad, kabilang ang mga programmer, ay nahaharap sa pangangailangang maghanda para sa isang pakikipanayam. Marami sa mga konsepto na itinatanong sa mga panayam na hindi mo ginagamit sa pang-araw-araw na pagsasanay at sila ay nakalimutan. Kapag naghahanda para sa isang pakikipanayam, pag-flip sa mga tala, isang libro, isang reference na libro, nahaharap ako sa katotohanan na nangangailangan ng maraming oras at atensyon upang salain ang impormasyon na alam mo na dahil hindi ito palaging halata at kailangan mong basahin itong mabuti upang maunawaan kung ano ito.walang kaugnayan. Kapag dumating ka sa isang paksa na talagang kailangang ulitin, madalas na nangyayari na ikaw ay pagod na at ang kalidad ng iyong paghahanda ay naghihirap. Sa isang punto naisip ko, bakit hindi gumamit ng mga ANKI card para dito rin? Halimbawa, kapag kumukuha ng mga tala sa isang paksa, gumawa kaagad ng isang tala sa anyo ng isang tanong at sagot, at pagkatapos ay kapag inulit mo ito, malalaman mo kaagad kung alam mo ang sagot sa tanong na ito o hindi.

Ang tanging problema na lumitaw ay ang pag-type ng mga tanong ay napakahaba at nakakapagod. Upang gawing mas madali ang proseso, data2anki proyektong idinagdag ko ang pag-andar ng pag-convert markdown text sa ANKI card. Ang kailangan mo lang ay magsulat ng isang malaking file kung saan ang mga tanong at sagot ay mamarkahan ng isang paunang natukoy na pagkakasunud-sunod ng mga character, kung saan mauunawaan ng parser kung nasaan ang tanong at kung nasaan ang sagot.

Kapag nalikha na ang file na ito, magpapatakbo ka ng data2anki at gagawa ito ng mga ANKI card. Ang orihinal na file ay madaling i-edit at ibahagi, kailangan mo lamang burahin ang kaukulang (mga) card at patakbuhin muli ang programa, at isang bagong bersyon ang gagawin.

Pag-install at paggamit

  1. Pag-install ng ANKI + AnkiConnect

    1. I-download ang ANKI mula dito: https://apps.ankiweb.net/
    2. I-install ang AnkiConnect plugin: https://ankiweb.net/shared/info/2055492159

  2. Instalasyon data2anki

    1. I-download data2anki mula sa github repository
      git clone https://github.com/anatoly314/data2anki
    2. Mag-install ng mga dependency
      cd data2anki && npm install
    3. Mag-download ng java dependencies https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Nag-unpack jar-dependencies.zip at ilagay ang mga nilalaman nito data2anki/java/jars

  3. Gamitin sa pagsasalin ng mga salita:

    1. Nasa file data2anki/config.json:

      • sa susi paraan ipasok ang halaga dsl2anki

      • sa susi modules.dsl.anki.deckName ΠΈ modules.dsl.anki.modelName sumulat ng naaayon Pangalan ng Deck ΠΈ Pangalan ng modelo (kailangang magawa na bago gumawa ng mga card). Sa kasalukuyan, ang uri ng modelo lamang ang sinusuportahan Basic:

        May Front at Back field, at gagawa ng isang card. Ang text na iyong ipinasok sa Harap ay lalabas sa harap ng card, at ang text na iyong ilalagay sa Likod ay lalabas sa likod ng card.

        nasaan ang orihinal na salita? Front field, at ang pagsasalin ay nasa Patlang sa likod.

        Walang problema sa pagdaragdag ng suporta Basic (at binaliktad na card), kung saan gagawa ng reverse card para sa salita at pagsasalin, kung saan batay sa pagsasalin ay kakailanganin mong tandaan ang orihinal na salita. Ang kailangan mo lang ay oras at pagnanais.

      • sa susi modules.dsl.dictionariesPath magrehistro ng array na may konektado *.dsl mga diksyunaryo. Ang bawat konektadong diksyunaryo ay isang direktoryo kung saan matatagpuan ang mga file ng diksyunaryo alinsunod sa format: Istraktura ng diksyunaryo ng DSL

      • sa susi modules.dsl.wordToTranslatePath ipasok ang landas patungo sa listahan ng mga salitang gusto mong isalin.

    2. Ilunsad gamit ang ANKI application na tumatakbo
      node data2ankiindex.js
    3. KITA!!!

  4. Ginagamit para sa paglikha ng mga card mula sa markdown

    1. Nasa file data2anki/config.json:

      • sa susi paraan ipasok ang halaga markdown2anki
      • sa susi modules.markdown.anki.deckName ΠΈ modules.dsl.anki.modelName sumulat ng naaayon Pangalan ng Deck ΠΈ Pangalan ng modelo (kailangang magawa na bago gumawa ng mga card). Para sa markdown2anki mode lang ang uri ng modelo ang sinusuportahan Basic.
      • sa susi modules.markdown.selectors.startQuestionSelectors ΠΈ modules.markdown.selectors.startAnswerSelectors sumulat ka ng mga tagapili kung saan mo minarkahan ang simula ng tanong at sagot, ayon sa pagkakabanggit. Ang linya na may tagapili mismo ay hindi mapapa-parse at hindi mapupunta sa card; ang parser ay magsisimulang magtrabaho mula sa susunod na linya.

        Halimbawa, itong question/answer card:

        Dalawang kuwento tungkol sa kung paano ka matutulungan ng ANKI na matuto ng wikang banyaga at maghanda para sa isang panayam

        Magiging ganito ito sa markdown:
        #QUESTION# ## Tanong 5. Sumulat ng mul function na gagana nang maayos kapag na-invoke gamit ang sumusunod na syntax. ```javascript console.log(mul(2)(3)(4)); // output : 24 console.log(mul(4)(3)(4)); // output : 48 ``` #ANSWER# Nasa ibaba ang code na sinusundan ng paliwanag kung paano ito gumagana: ```javascript function mul (x) { return function (y) { // anonymous function return function (z) { // anonymous function return x * y * z; }; }; } ``` Dito tinatanggap ng `mul` function ang unang argument at ibinabalik ang anonymous na function na kumukuha ng pangalawang parameter at ibinabalik ang anonymous na function na kumukuha ng ikatlong parameter at ibinabalik ang multiplikasyon ng mga argumento na ipinapasa sa sunud-sunod Sa function na Javascript na tinukoy sa loob ay may access sa panlabas na function na variable at ang function ay ang first class object kaya ito ay maibabalik din ng function at maipasa bilang argumento sa isa pang function. - Ang isang function ay isang halimbawa ng uri ng Bagay - Ang isang function ay maaaring magkaroon ng mga katangian at may isang link pabalik sa kanyang constructor method - Ang isang function ay maaaring maimbak bilang variable - Ang isang function ay maaaring ipasa bilang isang parameter sa isa pang function - Ang isang function ay maaaring ibinalik mula sa ibang function
        

        Halimbawang kinuha mula dito: 123-JavaScript-Interview-Mga Tanong

        Mayroon ding isang file na may mga halimbawa sa folder ng proyekto examples/markdown2anki-example.md

      • sa susi modules.markdown.pathToFile
        isulat ang landas sa file kung saan *.md file ng tanong/sagot

    2. Ilunsad gamit ang ANKI application na tumatakbo
      node data2ankiindex.js
    3. KITA!!!

Ito ang hitsura sa isang mobile phone:

Resulta

Ang mga card na natanggap sa desktop na bersyon ng ANKI ay naka-synchronize nang walang problema sa ANKI cloud (libre hanggang 100mb), at pagkatapos ay magagamit mo ang mga ito kahit saan. May mga kliyente para sa Android at iPhone, at magagamit mo rin ito sa isang browser. Bilang resulta, kung mayroon kang oras na wala kang gastusin, sa halip na walang layunin na mag-scroll sa Facebook o pusa sa Instagram, maaari kang matuto ng bago.

Epilogo

Tulad ng nabanggit ko, ito ay higit pa sa isang gumaganang POC na maaari mong gamitin kaysa sa isang tapos na produkto. Humigit-kumulang 30% ng pamantayan ng DSL parser ang hindi ipinatupad, at samakatuwid, halimbawa, hindi lahat ng mga entry sa diksyunaryo na nasa mga diksyunaryo ay makikita, mayroon ding ideya na muling isulat ito JavaScript, dahil gusto ko ang "consistency", at bukod pa, ngayon ay hindi ito naisulat nang mahusay. Ngayon ang parser ay nagtatayo ng isang puno, ngunit sa palagay ko ito ay hindi kailangan at hindi kailangang gawing kumplikado ang code. SA markdown2anki mode, ang mga imahe ay hindi na-parse. Sisikapin kong putulin unti-unti, pero dahil ako mismo ang sumusulat, solusyunan ko muna ang mga problemang ako mismo ang tatapakan, pero kung sino man ang gustong tumulong, welcome ka. Kung mayroon kang mga katanungan tungkol sa programa, ikalulugod kong tumulong sa pamamagitan ng mga bukas na isyu sa mga nauugnay na proyekto. Sumulat ng iba pang kritisismo at mungkahi dito. Umaasa ako na ang proyektong ito ay magiging kapaki-pakinabang sa isang tao.

PS Kung may napansin kang anumang mga error (at, sa kasamaang-palad, mayroong ilan), sumulat sa akin sa isang personal na mensahe, itatama ko ang lahat.

Pinagmulan: www.habr.com

Magdagdag ng komento