Дзве гісторыі як ANKI можа вам дапамагчы вывучыць замежную мову і падрыхтавацца да інтэрв'ю

Я заўсёды лічыў, што лянівы праграміст гэта добры праграміст. Чаму? Таму што папрасі працавітага зрабіць нешта, ён пойдзе і зробіць. А лянівы праграміст выдаткуе ў 2-3 разы больш часу, але напіша скрыпт, які будзе - гэта рабіць за яго. Магчыма, упершыню на гэта будзе патрачана неапраўдана шмат часу, але пры ўмове паўтаральных задач гэты падыход вельмі хутка акупляецца. Я лічу сябе лянівым праграмістам. Гэта была прэамбула, а зараз пяройдзем да справы.

Гісторыя першая

Некалькі гадоў таму я задумаўся, як бы мне палепшыць сваю ангельскую. Нічога лепшага, чым чытанне літаратуры, на розум не прыйшло. Была набыта электронная чыталка, закачаны кнігі і я пачаў чытаць. У працэсе чытання трапляліся ўвесь час трапляліся незнаёмыя словы. Я іх адразу перакладаў з дапамогай убудаваных у чыталку слоўнікаў, але я заўважыў адну асаблівасць: словы не хацелі запамінацца. Калі я праз некалькі старонак зноў сустракаў гэтае слова, то з 90% верагоднасцю я зноў меў патрэбу ў перакладзе, і так кожны раз. Напрошвалася выснова, што мала проста перакладаць незнаёмыя словы ў працэсе чытання, трэба рабіць нешта яшчэ. Ідэальным бы варыянтам было ўвесці яго ва ўжытак і пачаць карыстацца, але я жыву не ў англамоўнай краіне і гэта маламагчыма. Тут мне ўспомнілася, што я калісьці чытаў пра Інтэрвальныя паўторы.

Што гэта такое і з чым яго ядуць? Калі коратка, то ёсць такая крывая забыванні, далей цытата з Вікіпедыі:

Ужо на працягу першай гадзіны забываецца да 60% усёй атрыманай інфармацыі, праз 10 гадзін пасля завучвання ў памяці застаецца 35% ад вывучанага. Далей працэс забывання ідзе павольна, і праз 6 дзён у памяці застаецца каля 20% ад агульнай колькасці першапачаткова вывучаных складоў, столькі ж застаецца ў памяці і праз месяц.

І выснова асцюка

Высновы, якія можна зрабіць на падставе дадзенай крывой у тым, што для эфектыўнага запамінання неабходна паўтарэнне завучанага матэрыялу.

Вось мы і прыйшлі да ідэі інтэрвальнага паўтарэння.

Анкі гэта абсалютная бясплатная з адчыненым зыходным кодам праграма, якая рэалізуе ідэю інтэрвальнага паўтарэння. Прасцей кажучы, камп'ютэрызаваны флэш карткі, на адным баку пытанне, на іншы адказ. Так як вы можаце рабіць пытанні/адказы з дапамогай звычайнага html/css/javascript, то можна сказаць, што яна валодае сапраўды бязмежнымі магчымасцямі. Акрамя таго, яна пашыраецца спецыяльнымі убудовамі, і адзін з іх нам у далейшым вельмі спатрэбіцца.

Уручную ствараць карткі гэта доўга, нудна, і з вялікай верагоднасцю праз некаторы час вы на - гэтую справу заб'яце і таму я ў нейкі момант задаў сабе пытанне, а ці можна гэтую справу аўтаматызаваць. Адказ - так, можна. І я гэта зрабіў. Скажу адразу, гэта больш POC (Proof of concept), але якім можна карыстацца. Калі будзе цікавасць з боку карыстачоў і падцягнуцца іншыя распрацоўнікі, тое яго можна давесці да гатовага прадукта, якім зможа карыстацца нават тэхнічна непісьменныя карыстачы. Цяпер жа выкарыстанне маёй утыліты мае на ўвазе некаторыя веды ў праграмаванні.

Я чытаю кнігі з дапамогай праграмы AI Reader. У яе ёсць магчымасць падключэння знешніх слоўнікаў, а таксама пры перакладзе слова яна захоўвае слова, на якое вы выклікалі пераклад, у тэкставы файл. Засталася справа за малым, перавесці гэтыя словы і стварыць ANKI карткі.

Спачатку я спрабаваў выкарыстоўваць для перакладу Google Перакладчык, Lingvo API і г.д. Але з бясплатнымі сервісамі справа не пайшла. Бясплатны ліміт я вычарпаў яшчэ ў працэсе распрацоўкі, акрамя таго, па ўмовах ліцэнзіі я не меў права кэшаваць словы. У нейкі момант я зразумеў, што трэба перакладаць словы самому. У выніку быў напісаны модуль dsl2html да якога можна падключаць DSL слоўнікі і які ўмее канвертаваць іх у HTML фармат.

Вось так выглядае слоўнікавы артыкул у *. HTML, мой варыянт у параўнанні з варыянтам GoldenDict

Дзве гісторыі як ANKI можа вам дапамагчы вывучыць замежную мову і падрыхтавацца да інтэрв'ю

Перад тым як шукаць слова ў падлучаных слоўніках я прыводжу яго да слоўнікавай форме (леме) з дапамогай бібліятэкі Стэнфардскі CoreNLP. Насамрэч з-за гэтай бібліятэкі я і пачаў пісаць на Java і першапачатковы план быў напісаць усё на Java, але ў працэсе я знайшоў бібліятэку node-java з дапамогай якой можна адносна проста выконваць Java код з nodejs і частка кода напісана на JavaScript. Калі б я знайшоў гэтую бібліятэку раней, то на Java не было б напісана ні радка. Яшчэ адзін пабочны праект які нарадзіўся ў працэсе гэтае стварэнне рэпазітара з DSL дакументацыяй якая была знойдзена ў сетцы ў фармаце *.chm, сканвертаваная і прыведзена ў боскі выгляд. Калі аўтар арыгінальнага файла карыстальнік па нікам yozhic бачыць гэты артыкул той вялікі яму дзякуй за праведзеную працу, без яго дакументацыі ў мяне б хутчэй за ўсё нічога не атрымалася.

Такім чынам, у мяне ёсць слова на англійскай, яго слоўнікавы артыкул у фармаце *. HTML, засталося звесці ўсё разам, стварыць ANKI артыкулы са спісу слоў і ўнесці іх у базу дадзеных ANKI. Для гэтай мэты быў створаны наступны праект data2anki. Ён умее на ўваход браць спіс слоў, пераводзіць, ствараць ANKI *. HTML артыкулы і запісваць іх у базу дадзеных ANKI. У канцы артыкула артыкула ёсць інструкцыя як ім карыстацца. Пакуль жа гісторыя другая, дзе інтэрвальныя паўторы могуць быць карысныя.

Гісторыя другая.

Усе людзі ў пошуку больш/менш кваліфікаванай спецыяльнасці, у тым ліку і праграмісты, сутыкаюцца з неабходнасцю падрыхтоўкі да інтэрв'ю. Многія канцэпты якія пытаюцца на інтэрв'ю вы не карыстаецеся ў штодзённай практыцы і яны забываюцца. Пры чарговай падрыхтоўцы да інтэрв'ю, прагортваючы канспект, кнігу, даведнік я сутыкнуўся з тым, што вельмі шмат часу і ўвагі бярэ на тое, каб адсеяць інфармацыю, якую вы ўжо ведаеце таму, што яна не заўсёды відавочная і даводзіцца ўчытвацца, каб зразумець, што гэта нерэлевантна. Калі ж вы падыходзіце да тэмы, якую сапраўды трэба паўтарыць, вельмі часта бывае, што вы ўжо стаміліся і якасць падрыхтоўкі пакутуе. У які момант я падумаў, а чаму б не выкарыстоўвацца ANKI карткі і для гэтага? Напрыклад пры канспектаванні нейкай тэмы, адразу ствараць канспект у выглядзе пытання - адказу, а затым пры паўтарэнні вы адразу будзеце ведаць, ведаеце вы ці не адказ на гэтае пытанне.

Праблема ўзнікла толькі ў тым, што набіваць пытанні вельмі доўга і нудна. Каб аблегчыць працэс, у data2anki праект я дадаў функцыянальнасць канвертаваць ўцэнка тэкст у ANKI карткі. Усё, што вам трэба, гэта напісаць адзін вялікі файл, у якім пытанні і адказы будуць пазначаныя загадзя абумоўленай паслядоўнасцю сімвалаў, па якіх парсер будзе разумець, дзе пытанне, а дзе адказ.

Пасля таго як гэты файл будзе створаны, вы запускаеце data2anki і ён стварае ANKI карткі. Арыгінальны файл лёгка кіраваць і дзеліцца, трэба толькі сцерці адпаведную картку(і) і зноў запусціць праграму, і новы варыянт будзе створаны.

Ўстаноўка і карыстанне

  1. Ўстаноўка ANKI + AnkiConnect

    1. Спампоўваеце ANKI адсюль: https://apps.ankiweb.net/
    2. Усталёўваеце AnkiConnect plugin: https://ankiweb.net/shared/info/2055492159

  2. Ўстаноўка data2anki

    1. Спампоўваеце data2anki c github рэпазітара
      git clone https://github.com/anatoly314/data2anki
    2. Усталёўваеце залежнасці
      cd data2anki && npm install
    3. Спампоўваеце java залежнасці https://github.com/anatoly314/data2anki/releases/download/0.1.0/jar-dependencies.zip
    4. Распакоўваеце jar-dependencies.zip і змяшчаеце яго змесціва ў data2anki/java/jars

  3. Выкарыстанне для перакладу слоў:

    1. У файле data2anki/config.json:

      • у ключы рэжым прапісваеце значэнне dsl2anki

      • у ключы modules.dsl.anki.deckName и modules.dsl.anki.modelName прапісваеце, адпаведна, Назва калоды и назва мадэлі (ужо павінны быць створаны перад стварэннем картак). Цяпер падтрымліваецца толькі мадэль тыпу базавы:

        Вы маеце front і back fields, і будзе стварацца адна картка. Text, які вы знойдзеце ў дадзеным выпадку, будуць пазначаны на пляцоўку карты, а тэксты, якія ўваходзяць у Back, будуць паказаны на палубе карты.

        дзе зыходнае слова гэта Front field, а пераклад будзе ў Back field.

        Няма ніякай праблемы дадаць падтрымку Basic (and reversed card), дзе на слова і пераклад будзе стварацца і зваротная картка, дзе па перакладзе трэба будзе ўзгадаць арыгінальнае слова. Трэба толькі наяўнасць часу і жаданні.

      • у ключы modules.dsl.dictionariesPath прапісваеце масіў з падлучанымі *.dsl слоўнікамі. Кожны падлучаны слоўнік гэта дырэкторыя ў якой знаходзяцца файлы слоўніка ў адпаведнасці з фарматам: Будова слоўніка DSL

      • у ключы modules.dsl.wordToTranslatePath прапісваеце шлях да спісу слоў якія вы хочаце перавесці.

    2. Запускаеце пры працоўным ANKI дадатку
      node data2ankiindex.js
    3. PROFIT!!!

  4. Выкарыстання для стварэння картак з markdown

    1. У файле data2anki/config.json:

      • у ключы рэжым прапісваеце значэнне markdown2anki
      • у ключы modules.markdown.anki.deckName и modules.dsl.anki.modelName прапісваеце, адпаведна, Назва калоды и назва мадэлі (ужо павінны быць створаны перад стварэннем картак). Для markdown2anki mode падтрымліваецца толькі мадэль тыпу базавы.
      • у ключы modules.markdown.selectors.startQuestionSelectors и modules.markdown.selectors.startAnswerSelectors прапісваеце селектары якімі вы адзначаеце пачатак пытання і адказу адпаведна. Сам радок з селектарам не будзе адпарсены і ў картку не патрапіць, парсер пачне працу з наступнага радка.

        Напрыклад вось гэтая картка пытанне/адказ:

        Дзве гісторыі як ANKI можа вам дапамагчы вывучыць замежную мову і падрыхтавацца да інтэрв'ю

        Будзе выглядаць у markdown наступным чынам:
        #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 ``` # # #########################################################++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> // 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 Java uvnitř je access outer function variable a function is the first class object so it can be returned by the function as well and passed as an argument in another function. - Функцыя з'яўляецца пунктам пункту Object - функция можа мець асаблівасці і мець link back to it constructor method - functions can be stored as variable - returned from another function
        

        Прыклад узяты адсюль: 123-JavaScript-Interview-Questions

        Яшчэ ёсць файл з прыкладамі ў тэчцы праекту examples/markdown2anki-example.md

      • у ключы modules.markdown.pathToFile
        прапісваеце, шлях да файла дзе ляжыць *.md файл з пытаннямі/адказамі

    2. Запускаеце пры працоўным ANKI дадатку
      node data2ankiindex.js
    3. PROFIT!!!

Вось так гэта выглядае на мабільным тэлефоне:

Вынік

Атрыманыя на desktop версіі ANKI карткі без праблем сінхранізуюцца з ANKI воблакам (бясплатна да 100mb), а далей вы можаце карыстацца імі ўжо ўсюды. Ёсць кліенты пад Android і iPhone, таксама можна карыстацца і ў браўзэры. У выніку, калі ў вас ёсць час, які няма на што выдаткаваць, то замест таго, каб бязмэтна прагортваць фэйсбук ці коцікаў у инстаграм, можна вучыць нешта новае.

Эпілог

Як я ўжо згадваў, гэта хутчэй працоўны POC, якім можна скарыстацца, чым скончаны прадукт. Дзе-то працэнтаў 30% стандарту DSL парсер не імплементавана, і таму, напрыклад не ўсе слоўнікавыя артыкулы якія ёсць у слоўніках могуць быць знойдзены, таксама ёсць ідэя перапісаць яго на JavaScript, бо хочацца «consistency», а акрамя таго, зараз ён напісаны не вельмі аптымальна. Зараз парсер будуе дрэва, а гэта па-мойму лішняе і не трэба ўскладняе код. У markdown2anki рэжыме карцінкі не парсяцца. Я буду старацца паціху пілаваць, але, бо пакуль пішу для сябе, то ў першую чаргу буду вырашаць тыя граблі, на якія буду сам наступаць, але калі хтосьці захоча дапамагчы, то калі ласка. Калі ёсць пытанні, па праграме, то буду рады дапамагчы праз адкапаныя issues ў адпаведных праектах. Астатнюю крытыку і прапановы пішыце тут. Спадзяюся, камусьці гэты праект будзе карысны.

PS Калі заўважылі памылкі (а яны, нажаль, ёсць), пішыце ў тварык, усё папраўлю.

Крыніца: habr.com

Дадаць каментар