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

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

Історія перша

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

Що це таке та з чим його їдять? Якщо коротко, то є така крива забування, далі цитата з Вікіпедії:

Вже протягом першої години забувається до 60% усієї отриманої інформації, через 10 годин після заучування в пам'яті залишається 35% від вивченого. Далі процес забування йде повільно, і через 6 днів у пам'яті залишається близько 20% від загальної кількості спочатку вивчених складів, стільки ж залишається у пам'яті і через місяць.

І висновок остюду

Висновки, які можна зробити на підставі даної кривої в тому, що для ефективного запам'ятовування потрібне повторення завченого матеріалу.

Ось ми й прийшли до ідеї інтервального повторення.

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

Вручну створювати картки це довго, нудно, і з великою ймовірністю через деякий час ви на це справу заб'єте і тому я в якийсь момент поставив собі питання, а чи можна цю справу автоматизувати. Відповідь – так, можна. І це зробив. Скажу одразу, це більше POC (Proof of concept), але яким можна скористатися. Якщо буде інтерес з боку користувачів і підтягнуться інші розробники, його можна довести до готового продукту, яким зможе користуватися навіть технічно неписьменні користувачі. Зараз використання моєї утиліти передбачає деякі знання в програмуванні.

Я читаю книги за допомогою програми AI Reader. Вона має можливість підключення зовнішніх словників, а також при перекладі слова вона зберігає слово, на яке ви викликали переклад, до текстового файлу. Залишилася справа за малим, перекласти ці слова та створити ANKI картки.

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

Ось так виглядає словникова стаття *. Сайтів, мій варіант у порівнянні з варіантом GoldenDict

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

Перед тим як шукати слово у підключених словниках я приводжу його до словниковій формі (лемі) за допомогою бібліотеки Стенфордське ядроНЛП. Насправді, через цю бібліотеку я і почав писати на Java і початковий план був написати все на Java, але в процесі я знайшов бібліотеку node-java за допомогою якої можна відносно просто виконувати Java код із nodejs і частина коду написана на JavaScript. Якби я знайшов цю бібліотеку раніше, то на Java не було б написано жодного рядка. Ще один побічний проект що народився у процесі це створення репозиторія з DSL документацією яка була знайдена у мережі у форматі *.chm, сконвертована та приведена у божеський вигляд. Якщо автор оригінального файлу користувач по нікому yozhic бачить цю статтю щось велике йому спасибі за виконану роботу, без його документації в мене швидше за все нічого не вийшло б.

Отже, у мене є слово англійською, його словникова стаття у форматі *. Сайтів, залишилося звести все докупи, створити ANKI статті зі списку слів і внести їх до бази даних ANKI. Для цього було створено наступний проект data2anki. Він вміє на вхід брати список слів, перекладати, створювати ANKI *. Сайтів статті та записувати їх до бази даних 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 з 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 натисніть на frontі, щоб побачити на frontі картки, а текст натиснути на back will appear on back of the card.

        де вихідне слово це 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 `` # #ANSWER# Below is code followed by 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 Java 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. - Функція - це функція, яка має object type - Функція може мати властивості і має link back to its constructor method - Function can be stored as variable - Function can be pass as parameter to another function - Function can be 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 режимі картинки не ширяться. Я намагатимусь потихеньку пиляти, але, оскільки поки пишу для себе, то в першу чергу вирішуватиму ті граблі, на які сам наступатиму, але якщо хтось захоче допомогти, то ласкаво просимо. Якщо є питання про програму, то буду радий допомогти через відкриті питання у відповідних проектах. Решту критики та пропозиції пишіть тут. Сподіваюся, комусь цей проект буде корисним.

PS Якщо помітили помилки (а вони, на жаль, є), пишіть у личку, все виправлю.

Джерело: habr.com

Додати коментар або відгук