Две истории за това как ANKI може да ви помогне да научите чужд език и да се подготвите за интервю

Винаги съм вярвал, че мързеливият програмист е добър програмист. Защо? Защото помолете един трудещ се да направи нещо, той ще отиде и ще го направи. А един мързелив програмист ще отдели 2-3 пъти повече време, но ще напише скрипт, който ще го направи вместо него. Може да отнеме неразумно дълго време, за да направите това за първи път, но при повтарящи се задачи този подход ще се изплати много бързо. Смятам се за мързелив програмист. Това беше преамбюла, а сега да се заемем с работата.

История първа

Преди няколко години се чудех как мога да подобря английския си. Нищо по-добро не ми хрумна от четенето на литература. Купих електронен четец, изтеглих книги и започнах да чета. Докато четях все попадах на непознати думи. Веднага ги преведох с помощта на речниците, вградени в четеца, но забелязах една особеност: думите не искаха да бъдат запомнени. Когато отново срещнах тази дума няколко страници по-късно, с 90% вероятност отново имах нужда от превод и това се случваше всеки път. Изводът беше, че не е достатъчно просто да превеждате непознати думи, докато четете, трябва да направите нещо друго. Идеалният вариант би бил да го въведа в ежедневието и да започна да го използвам, но аз не живея в англоговоряща страна и това е малко вероятно. Тогава си спомних, че някога съм чел Повторение на разстояние.

Какво представлява и с какво се яде? Накратко, има това крива на забравяне, допълнителен цитат от Уикипедия:

Още през първия час до 60% от цялата получена информация се забравя; 10 часа след запаметяването 35% от наученото остава в паметта. След това процесът на забравяне протича бавно и след 6 дни в паметта остават около 20% от общия брой първоначално научени срички и същото количество остава в паметта след месец.

И изводът от тук

Изводите, които могат да се направят въз основа на тази крива са, че за ефективно запаметяване е необходимо повторение на запаметения материал.

Така че ни хрумна идея интервално повторение.

АNKI е напълно безплатна програма с отворен код, която реализира идеята за интервално повторение. Просто казано, компютъризираните флаш карти имат въпрос от едната страна и отговор от другата. Тъй като можете да правите въпроси/отговори, като използвате обикновен html/css/javascript, тогава можем да кажем, че има наистина неограничени възможности. Освен това е разширяем със специални добавки, а един от тях ще ни бъде много полезен в бъдеще.

Ръчното създаване на карти е дълго, досадно и с голяма вероятност след известно време ще забравите за тази задача и затова в един момент си зададох въпроса възможно ли е да автоматизирам тази задача. Отговорът е да, можете. И го направих. Веднага ще кажа, че е повече POC (доказателство за концепция), но които могат да се използват. Ако има интерес от страна на потребителите и други разработчици се включат, тогава може да се стигне до завършен продукт, който дори технически неграмотни потребители могат да използват. Използването на моята помощна програма изисква известни познания по програмиране.

Чета книги с програмата AI Reader. Има възможност за свързване на външни речници и когато превеждате дума, записва думата, която сте извикали за превод в текстов файл. Всичко, което остава, е да преведем тези думи и да създадем ANKI карти.

Отначало се опитах да използвам за превод Google Translate, API на Lingvo и т.н. Но нещата не се получиха с безплатни услуги. Изчерпах безплатния лимит по време на процеса на разработка, освен това, според условията на лиценза, нямах право да кеширам думи. В един момент осъзнах, че трябва да преведа думите сам. В резултат на това беше написан модул dsl2html към който можете да се свържете DSL речници и кой знае как да ги преобразува в HTML формат.

Ето как изглежда запис в речника на *. Html, моята опция в сравнение с опцията GoldenDict

Две истории за това как ANKI може да ви помогне да научите чужд език и да се подготвите за интервю

Преди да потърся дума в свързаните речници, я довеждам до речникова форма (лема) използване на библиотеката Станфорд CoreNLP. Всъщност заради тази библиотека започнах да пиша на Java и първоначалният план беше да напиша всичко на Java, но в процеса намерих библиотеката възел-java с който можете сравнително лесно да изпълнявате Java код от nodejs и част от кода е написан на JavaScript. Ако бях намерил тази библиотека по-рано, нито един ред нямаше да бъде написан на Java. Друг страничен проект, който се роди в процеса, е създаването хранилище с DSL документация който беше намерен в мрежата във формат *.chm, превърнат и приведен в божествена форма. Ако авторът на оригиналния файл е потребител по псевдоним йожич Когато види тази статия, аз му благодаря много за работата, която е свършил; без неговата документация най-вероятно нямаше да успея.

И така, имам дума на английски, нейният речников запис във формат *. Html, всичко, което остава, е да съберете всичко заедно, да създадете ANKI статии от списъка с думи и да ги въведете в базата данни на ANKI. За тази цел е създаден следният проект data2anki. Може да приема списък с думи като вход, да превежда, да създава ANKI *. Html статии и ги записвайте в базата данни на ANKI. В края на статията има инструкции как да го използвате. Междувременно, втората история е мястото, където разделените повторения могат да бъдат полезни.

Втората история.

Всички хора, които търсят повече/по-малко квалифицирана специалност, включително програмистите, са изправени пред необходимостта да се подготвят за интервю. Много от понятията, които се задават на интервюта, не използвате в ежедневната практика и се забравят. Когато се подготвях за интервю, прелиствайки бележки, книга, справочник, се сблъсках с факта, че отнема много време и внимание, за да отсееш информацията, която вече знаеш, защото не винаги е очевидна и трябва да прочетете го внимателно, за да разберете какво е. без значение. Когато стигнете до тема, която наистина трябва да бъде повторена, често се случва вече да сте уморени и качеството на подготовката ви да пострада. В един момент си помислих, защо да не използвам и ANKI карти за това? Например, когато си водите бележки по дадена тема, незабавно създайте бележка под формата на въпрос и отговор и след това, когато я повторите, веднага ще разберете дали знаете отговора на този въпрос или не.

Единственият проблем, който възникна беше, че писането на въпроси беше много дълго и досадно. За да улесните процеса, data2anki проект добавих функционалност за конвертиране евтино текст в ANKI карти. Всичко, от което се нуждаете, е да напишете един голям файл, в който въпросите и отговорите ще бъдат маркирани с предварително зададена последователност от знаци, по които анализаторът ще разбере къде е въпросът и къде е отговорът.

След като този файл бъде създаден, стартирате data2anki и той създава ANKI карти. Оригиналният файл е лесен за редактиране и споделяне, просто трябва да изтриете съответната карта(и) и да стартирате програмата отново, и ще бъде създадена нова версия.

Монтаж и използване

  1. Инсталиране на ANKI + AnkiConnect

    1. Изтеглете ANKI от тук: https://apps.ankiweb.net/
    2. Инсталирайте плъгина AnkiConnect: https://ankiweb.net/shared/info/2055492159

  2. Инсталация data2anki

    1. Изтегли data2anki от хранилището на 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 пишете съответно Име на тесте и Наименование на модела (трябва вече да са създадени преди създаване на карти). В момента се поддържа само тип модел Basic:

        Има предни и задни полета и ще създаде една карта. Текстът, който въвеждате отпред, ще се появи на предната страна на картата, а текстът, който въвеждате отзад, ще се появи на гърба на картата.

        къде е оригиналната дума? Предно поле, а преводът ще бъде в Задно поле.

        Няма проблем да добавите поддръжка Основна (и обърната карта), където ще бъде създадена обратна карта за думата и превода, където въз основа на превода ще трябва да запомните оригиналната дума. Нужни са ви само време и желание.

      • в ключа modules.dsl.dictionariesPath регистрирайте масив със свързан *.dsl речници. Всеки свързан речник е директория, в която се намират речниковите файлове в съответствие с формата: Структура на DSL речника

      • в ключа modules.dsl.wordToTranslatePath въведете пътя до списъка с думи, които искате да преведете.

    2. Стартирайте с работещо приложение ANKI
      node data2ankiindex.js
    3. ПЕЧАЛБА!!!

  4. Използва се за създаване на карти от маркдаун

    1. Във файла data2anki/config.json:

      • в ключа вид въведете стойността markdown2anki
      • в ключа modules.markdown.anki.deckName и modules.dsl.anki.modelName пишете съответно Име на тесте и Наименование на модела (трябва вече да са създадени преди създаване на карти). За markdown2anki режим се поддържа само тип модел Basic.
      • в ключа modules.markdown.selectors.startQuestionSelectors и modules.markdown.selectors.startAnswerSelectors пишеш селектори, с които отбелязваш съответно началото на въпроса и отговора. Редът със самия селектор няма да бъде анализиран и няма да завърши в картата; анализаторът ще започне да работи от следващия ред.

        Например тази карта с въпроси/отговори:

        Две истории за това как ANKI може да ви помогне да научите чужд език и да се подготвите за интервю

        Ще изглежда така в маркдаун:
        #QUESTION# ## Въпрос 5. Напишете mul функция, която ще работи правилно, когато бъде извикана със следния синтаксис. ``javascript console.log(mul(2)(3)(4)); // изход: 24 console.log(mul(4)(3)(4)); // изход : 48 ``` #ANSWER# По-долу е кодът, последван от обяснението как работи: ```javascript функция mul (x) { return функция (y) { // анонимна функция return function (z) { // връщане на анонимна функция x * y * z; }; }; } ``` Тук функцията `mul` приема първия аргумент и връща анонимната функция, която взема втория параметър и връща анонимната функция, която взема третия параметър и връща умножението на аргументите, което се предава последователно В дефинирана функция на Javascript вътре има достъп до външната функционална променлива и функцията е първият обект на класа, така че може да бъде върнат от функцията и да бъде предаден като аргумент в друга функция. - Функцията е екземпляр от типа Object - Функцията може да има свойства и да има връзка обратно към своя метод на конструктор - Функция може да бъде съхранена като променлива - Функция може да бъде предадена като параметър към друга функция - Функцията може да бъде върнат от друга функция
        

        Пример взет от тук: 123-JavaScript-Интервю-Въпроси

        В папката на проекта има и файл с примери examples/markdown2anki-example.md

      • в ключа modules.markdown.pathToFile
        запишете пътя до файла, където *.md файл с въпроси/отговори

    2. Стартирайте с работещо приложение ANKI
      node data2ankiindex.js
    3. ПЕЧАЛБА!!!

Ето как изглежда на мобилен телефон:

Резултат

Картите, получени на десктоп версията на ANKI, се синхронизират без проблеми с облака на ANKI (безплатно до 100mb), след което можете да ги използвате навсякъде. Има клиенти за Android и iPhone, можете да го използвате и в браузър. В резултат на това, ако имате време, което няма за какво да харчите, тогава вместо безцелно превъртане във Facebook или котки в Instagram, можете да научите нещо ново.

Епилог

Както споменах, това е по-скоро работещ POC, който можете да използвате, отколкото завършен продукт. Около 30% от стандарта за анализатор на DSL не е внедрен и следователно, например, не всички речникови записи, които са в речниците, могат да бъдат намерени, има и идея да го пренапиша в JavaScript, защото искам „последователност“, а освен това сега не е написано много оптимално. Сега анализаторът изгражда дърво, но според мен това е ненужно и не трябва да усложнява кода. IN markdown2anki режим, изображенията не се анализират. Ще се опитам да режа малко по малко, но тъй като пиша за себе си, първо ще реша проблемите, върху които сам ще стъпя, но ако някой иска да помогне, заповядайте. Ако имате въпроси относно програмата, ще се радвам да помогна чрез отворени проблеми в съответните проекти. Напишете други критики и предложения тук. Надявам се този проект да бъде полезен на някого.

PS Ако забележите грешки (а за съжаление има такива), пишете ми на лично съобщение, ще коригирам всичко.

Източник: www.habr.com

Добавяне на нов коментар