Винаги съм смятал, че мързеливият програмист е добър програмист. Защо? Защото ако помолиш трудолюбивия да направи нещо, той ще отиде и ще го направи. А мързеливият програмист ще отдели 2-3 пъти повече време, но ще напише скрипт, който да го прави вместо него. Може би в първия момент ще се изгуби неоправдано много време, но при повторяеми задачи този подход много бързо се изплаща. Смятам себе си за мързелив програмист. Това беше преамбула, а сега да преминем към основната част.
Първа история
Преди няколко години се замислих как мога да подобря английския си. Нищо по-добро от четенето на литература не ми дойде наум. Купих електронна читалка, свалих книги и започнах да чета. Докато четях, постоянно срещах непознати думи. Веднага ги превеждах чрез вградените в читалката речници, но забелязах едно: думите не желаеха да се запомнят. Когато след няколко страници отново срещах същата дума, с 90% вероятност отново се нуждаех от превод, и така всеки път. Извода, който се налагаше, беше, че е недостатъчно просто да превеждам непознатите думи в процеса на четене, трябва да се направи нещо повече. Идеалният вариант би бил да се въведе в употреба и да се започне да се използва, но живея не в англоезична страна и това е почти невъзможно. Тук ми хрумна, че веднъж бях чел за .
Какво е това и с какво се яде? Накратко, съществува такава , по-долу цитирам от Уикипедия:
В рамките на първия час забравяме до 60% от цялата получена информация, след 10 часа след запомнянето в паметта остава 35% от изученото. След това процесът на забравяне протича бавно, и след 6 дни в паметта остава около 20% от общия брой първоначално научени слога, толкова същото остава в паметта и след месец.
И извода от тук
Изводите, които можем да направим на база тази крива е, че за ефективно запомняне е необходимо повторение на изучавания материал.
Ето и стигнахме до идеята .
Това е напълно безплатна програма с отворен код, която реализира концепцията за интервално повторение. По-просто казано, компютъризирани флаш карти, от една страна въпрос, от друга отговор. Тъй като можете да създавате въпроси/отговори с помощта на обикновен. html/css/javascript, може да се каже, че тя притежава наистина безкрайни възможности. Освен това, тя е разширяема с помощта на специални. , и един от тях ще ни бъде много полезен по-късно.
Създаването на карти ръчно отнема време, без бързане, и с голяма вероятност след известно време ще се откажете от тази задача, затова в algum момент си зададох въпроса, дали може да се автоматизира. Отговорът е - да, може. И аз го направих. Да кажа веднага, това е повече. , но с него може да се работи. Ако има интерес от страна на потребителите и други разработчици се включат, може да се доведе до готов продукт, който дори технически неосведомени потребители да могат да използват. Сега използването на моя инструмент предполага известни знания в програмирането.
Чета книги с помощта на програмата . Тя има възможност за свързване на външни речници, а също така при превод на дума, тя запазва думата, за която сте поискали превод, в текстов файл. Остана само да преведете тези думи и да създадете ANKI карти.
Първоначално опитвах да използвам за превод , и т.н. Но с безплатните услуги не успях. Изчерпах безплатния лимит още в процеса на разработка, и освен това, според условията на лиценза, нямам право да кеширам думите. В един момент разбрах, че трябва да превеждам думите сам. В крайна сметка написах модул. , към който могат да се свързват. , който умее да ги конвертира в. HTML формат.
Ето как изглежда речниковата статия в *.html, моята версия в сравнение с версията.

Преди да търся дума в свързаните речници, я преобразувам в. с помощта на библиотека. . Всъщност заради тази библиотека започнах да пиша на Java, а първоначалният ми план беше всичко да бъде написано на Java, но в процеса намерих библиотека. с помощта на която може сравнително лесно да се изпълнява Java код от nodejs и част от кода е написана на JavaScript. Ако бях намерил тази библиотека по-рано, нямаше да напиша и ред на Java. Още един страничен проект, който се роди в процеса, е създаването на , която беше намерена в мрежата във формат *.chm, конвертирана и приведена в приемлив вид. Ако авторът на оригиналния файл, потребител с никнейм yozhic , вижда тази статия, то му благодаря много за свършената работа, без неговата документация, вероятно нямаше да успея.
И така, имам английска дума, нейната речникова статия в формат *.html, остава да съберем всичко на едно място, да създадем ANKI статии от списъка с думи и да ги внесем в ANKI базата данни. За тази цел беше създаден следният проект . Той може да взема списък с думи на входа, да ги превежда, да създава ANKI *.html статии и да ги записва в ANKI базата данни. В края на статията има инструкция как да се използва. А засега историята е втора, където интервалните повторения могат да бъдат полезни.
История втора.
Всички хора в търсене на повече/по-малко квалифицирана специалност, включително и програмисти, се сблъскват с необходимостта от подготовка за интервю. Много концепции, които питат на интервю, не използвате в ежедневната практика и те се забравят. При поредната подготовка за интервю, преглеждайки бележки, книга, ръководство, се сблъсках с това, че отделя много време и внимание, за да отсея информацията, която вече знаете, защото тя не винаги е очевидна и трябва да се вчита, за да разберете, че не е релевантна. Когато обаче стигнете до тема, която действително трябва да повторите, много често се оказва, че вече сте уморени и качеството на подготовката страда. В определен момент си помислих: защо да не използвам ANKI карти и за това? Например, при описване на някаква тема, веднага да се създаде описанието под формата на въпрос — отговор, а след това при повторението вече веднага ще знаете дали знаете отговора на този въпрос.
Проблемата възникна само в това, че е много дълго и скучно да се въвеждат въпроси. За да се улесни процесът, в проекта добавих функционалност за конвертиране текст в ANKI картите. Всичко, което ви трябва, е да напишете един голям файл, в който въпросите и отговорите ще бъдат маркирани с предварително уговорена последователност от символи, по която парсерът ще разбере къде е въпросът и къде отговорът.
След като този файл бъде създаден, стартирате data2anki и той създава ANKI карти. Оригиналният файл е лесен за редактиране и споделяне, просто трябва да изтриете съответната карта(и) и отново да стартирате програмата, за да бъде създаден нов вариант.
Инсталация и ползване
Инсталация на ANKI + AnkiConnect
- Изтеглете ANKI оттук:
- Инсталирате плъгина AnkiConnect:
Инсталиране
- Изтеглете от github хранилище
git clone https://github.com/anatoly314/data2anki - Инсталирайте зависимостите
cd data2anki && npm install - Изтеглете java зависимостите
- Разопаковате jar-dependencies.zip и поставяте съдържанието в data2anki/java/jars
- Изтеглете от github хранилище
Използване за превод на думи:
В файла data2anki/config.json:
в ключа mode вписвате стойността dsl2anki
в ключа modules.dsl.anki.deckName и modules.dsl.anki.modelName вписвате съответно, и (трябва да са създадени преди създаването на картите). В момента се поддържа само модел от тип Основен:
Has Front and Back fields, и ще създаде една карта. Текстът, който въведете в Front ще се появи отпред на картата, а текстът, който въведете в Back ще се появи отзад на картата.
където оригиналното слово е Front field, а преводът ще бъде в Back field.
Няма проблем да добавите поддръжка на Basic (and reversed card), където за словото и превода ще се създава и обратната карта, където по превода ще трябва да си спомните оригиналното слово. Нужно е само наличие на време и желание.
в ключа modules.dsl.dictionariesPath вписвате масив с включените *.dsl речници. Всеки включен речник е директория, в която се намират файловете на речника в съответствие с формата:
в ключа modules.dsl.wordToTranslatePath вписвате пътя до списъка с думи, които искате да преведете.
- Стартирате при работещо ANKI приложение
node data2ankiindex.js - ПЕЧАЛБА!!!
Използване за създаване на карти от markdown
В файла data2anki/config.json:
- в ключа mode вписвате стойността markdown2anki
- в ключа modules.markdown.anki.deckName и modules.dsl.anki.modelName вписвате съответно, и (трябва да са създадени преди създаването на картите). За markdown2anki mode се поддържа само модел от тип Основен.
в ключа modules.markdown.selectors.startQuestionSelectors и modules.markdown.selectors.startAnswerSelectors вписвате селекторите, с които маркирате началото на въпроса и отговора съответно. Самата строка със селектора няма да бъде парсвана и в картата няма да влезе, парсерът ще започне работа от следващата строка.
Например, тази карта въпрос/отговор:

Ще изглежда в 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 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Пример взет оттук:
Има също файл с примери в папката на проекта
examples/markdown2anki-example.md- в ключа modules.markdown.pathToFile
попълнете пътя до файла, в който се намира *.md файл с въпроси/отговори
- Стартирате при работещо ANKI приложение
node data2ankiindex.js - ПЕЧАЛБА!!!
Така изглежда на мобилен телефон:

Резултат
Получените на версията за desktop ANKI карти без проблеми се синхронизират с ANKI облака (безплатно до 100mb), а след това можете да ги използвате навсякъде. Има клиенти за Android и iPhone, също така можете да използвате и браузър. В резултат, ако имате време, което не знаете как да запълните, вместо безцелно да превъртате във Facebook или котки в Instagram, можете да учите нещо ново.
Епилог
Както вече споменах, това е по-скоро работен POC, който може да се използва, отколкото завършен продукт. Няколко процента от стандарта DSL парсер не са имплементирани и затова, , също така има идея да бъде пренаписан на JavaScript, тъй като искам "консистентност", а освен това, в момента е написан не много оптимално. Сега парсерът изгражда дърво, а това, според мен, е излишно и усложнява кода. В markdown2anki режим изображенията не се парсват. Ще се опитам да работя по малко, но тъй като сега пиша за себе си, първо ще решавам онези проблеми, на които сам ще наткна, но ако някой иска да помогне, е добре дошъл. Ако имате въпроси относно програмата, ще се радвам да помогна чрез отворените issues в съответните проекти. Останалата критика и предложения пишете тук. Надявам се проектът да бъде полезен на някого.
P.S. Ако забележите грешки (а те, за съжаление, съществуват), пишете ми на лично, ще ги поправя.
Източник: habr.com

