English version of this page while is not ready.
Please use google-translate (see upper right conner of this page)

Download last version LearnLang:


The program is distributed as an archive and does not require installation.
After unpacking the archive ("to the current folder") is completely ready to work.

Голоса можно найти на множестве ресурсов в интернете. Вот, например, хорошая подборка: скачать голоса


Примечание:
Все видео-уроки по программе очень устарели (еще по версии программы 1.1.0.0). Переписывать их после каждого обновления долго, в то время как в разработке находятся еще другие важные возможности. Видео будет переписано после окончания разработки этих возможностей.

А пока, после просмотра видео, рекомендуется ознакомиться с комментариями ("Что нового?") по выпускам версий, начиная с версии 1.2.0.7.


Старые пользователи программы, очевидно, заметили, что некоторые апгрейды надо самим скачивать с сайта, а некоторые идут автоматически (программа сама умеет скачивать и обновлять вашу версию).

Почему так?
Дело в том, что если необходимо обновить только исполняемые файлы (exe или dll файлы), то программа справляется с этим сама. Однако, как уже неоднократно отмечалось, LearnLang это скорее "конструктор", нежели просто программа. Вы можете создавать/изменять свои тренинги, стратегии... - все то, что лежит в папках \exercises*\ или \options\. Также прошу помнить (надеюсь смотрели видео по лексике), что все ваши оценки хранятся непосредственно в excel файлах.
Поэтому, если в новой версии изменяется содержимое этих папок, то самостоятельно принять решение - что там нужно изменить, а что нет, программа не может. Ведь так можно запросто затереть плоды вашего творчества ("все что нажито непосильным трудом").


Version 1.4.5.6 (beta)

  • Более глубоко разведены Mark и Difficulty оценки. Теперь они стали всецело независимыми друг от друга "измерениями", т.е., при желании, memo-стратегии можно строить либо целиком на Mark-оценках (что и раньше было), либо целиком на Difficulty-оценках (что раньше не поддерживалось в полной мере).

    Ситуация когда могут быть нужны исключительно только Difficulty-оценки это работа с Visual-каналом.
    Добавлена такая новая memo-стратегия под названием "Jagodkin". Эту стратегию предложил пользователь Денис, который занимается по методике Ягодкина.
    А также подправлена стратегия "Super-memo2" - она теперь тоже для Visual-канала по умолчанию использует исключительно только Difficulty-оценки.

    Однако для остальных каналов (Voice, Type) и "Jagodkin" и "Super-memo2", по умолчанию, используют также и mark-оценки. Но все это для них "по умолчанию", при желании, mark-оценки можно включить и для Visual-канала, также как и, напротив, полностью выключить их для любого канала или каналов. Тут кому как удобнее, речь идет лишь о настройках по умолчанию, которые автор выставил в соответствием со своим пониманием удобства, не претендуя на истину в последней инстанции.

    В принципе, информация о Mark и Difficulty оценках, а также о стратегиях, уже присутствует в неком "размазанном" виде в предыдущих разделах "Что нового?", но пользуясь случаем, систематизируем, повторим и обновим ее здесь. Это одна из самых ключевых вещей в программе, поэтому нижеследующий текст под спойлером рекомендуется к прочтению, тем более что появились новые нюансы.


    Mark оценки.
    В течении сессии нужно как-то контролировать процесс запоминания. С первого раза (в течении сессии), человек, если он "нормальный", а не счастливец с фотографической памятью, слово/фразу не запоминает. Нужен критерий отражающий прогресс запоминания в течении сессии (здесь и далее в этом подразделе речь идет только о сессии). Mark-оценки + механизм авто-оценок, который их использует, как раз и организуют этот процесс. Значение mark-оценки отражают текущую стадию запоминания, а стратегии авто-оценок контролируют прогресс (или регресс) mark-оценок в зависимости от того, правильные ли даются ответы или делаются ошибки, использовал ли пользователь повторение (Ctrl+R).

    Достижение mark-оценкой максимального балла отразит тот факт, что вы полностью запомнили слово/фразу в текущую сессию. Иначе говоря, mark-оценка отвечает за коротко-временную память (в течении сессии).

    И что важно, это совершенно прозрачный механизм: mark-оценку можно масштабировать (от 2-х до 20), выбирать разные стратегии авто-оценок и настраивать их через опции. А также создавать собственные (или редактировать существующие) стратегии авто-оценок – это конструктор в руках пользователя, что соответствует "философии программы", которой стараюсь следовать при ее разработке. Что выгодно отличается от других программ, которые видел, где логика цикла запоминания непрозрачна, запрятана во внутренностях и пользователь мало может на что влиять.

    Difficulty оценки.
    Difficulty-оценка же в этой концепции призвана отвечать за долговременную память.

    Все слова разные, одни вы легко запоминаете, а вот другие с трудом. В течении одной сессии вы можете выучить "на пять" группу слов, но через некоторое время, при периодическом повторении, обнаруживается, что одни слова вы вспоминаете влет, а вот с другими испытываете сложности. Difficulty-оценка и нужна чтобы оценить эту сложность и на основе этого иметь возможность создавать специальные memo-стратегии.

    Итого.
    Mark - отражает насколько хорошо идет процесс запоминания слова в текущую сессию и предполагается, что вы доводите ее до максимума (т.е. здесь и сейчас выучиваете слово).
    Difficulty - отражает насколько сложно ведет себя слово при долговременном запоминании.
    А, как известно, та модель которая лучше отражает предметную область (в данном случае - естественную природу памяти, ее деление на коротко-временную и долго-временную) и наиболее эффективна, дает лучший результат.

    Как это более конкретно используется в memo-стратегиях?

    Все текущие memo-стратегии можно грубо поделить на 2 типа:

    1. Стратегии типа "Pimsleur" и "Ebbinghaus" - общеизвестные и наиболее распространенные стратегии запоминания (их параметры взяты мною из википедии). Стратегии "5 iterations(+)" тоже из этого же класса.
      В отличии от 2-го типа стратегий ("Super-memo2" и "Jagodkin") они не основанные ни на каких баллах, а лишь на числе пройденных сессий и промежутках времени между ними (сколько времени прошло с последней сессии и не пора ли повторять).

      Будем такие стратегии условно называть Mark-стратегиями.
      Название может не вполне удачное, поскольку Mark-оценка для них только механизм выхода из сессии, но оно отражает тот факт, что для работы под такими стратегиями Mark-оценка обязательно должна быть включена (при запуске тренинга соответствующая "галочка" включается автоматически и блокируется, так что пользователь не может ее отключить).

      Они обязаны использовать mark-оценки, поскольку именно достижение максимальной mark-оценки является необходимым условием для покидания слова/фразы сессионного цикла запоминания.

      Стратегии этого типа имеют ограниченное число повторений. Каждая следующая итерация повторения происходит все реже и реже... Для Pimsleur стратегии данный процесс может растягиваться на года, но все равно, после 8-ми итераций заканчивается. На этом считается, что "квест" пройден и целевой объект полностью вами запомнен.
    2. Стратегий типа "Super-memo2" и "Jagodkin", напротив, основаны на баллах в роли которых выступают Difficulty оценки. Для них, в зависимости от значения текущего балла, а также, как, например, в случае "Super-memo2", еще и числа пройденных сессий, вычисляется следующее время повторения.

      Будем такие стратегии называть Difficulty-стратегиями.
      И уже Difficulty для таких стратегий отключить нельзя (программа не позволит), а вот Mark можно включать/выключать. По умолчанию, Mark выключены для Visual-канала, но в качестве вспомогательного механизма включены для остальных каналов (Voice, Type).

      Необходимым условием для того чтобы объект запоминания покинул сессию является установка для него хоть какой-то difficulty-оценки.

      По идее, от сессии к сессии, вы должны все легче и увереннее распознавать объект запоминания, и в соответствии с этим ставить difficulty-оценку все меньше и меньше. При этом, согласно уменьшению этой оценки, интервалы между повторениями должны становится все длиннее и длиннее. В отличии от Mark-стратегий, число сессий повторений тут может быть любым (теоретически хоть бесконечным) и только в пределе, когда вы в какой-то сессии решите поставить difficulty в ноль, считается, что объект полностью и навсегда запомнен вами (а данной стратегией "забыт" - она уже никогда вам его не предъявит). Конкретику же этого процесса каждая Difficulty-стратегия определяет по-своему.

    В отличии от Difficulty, значение которой непосредственно влияет на интервалы повторений, Mark-оценка и для первого и для второго типа стратегий лишь "бабочка-однодневка", вспомогательный инструмент, который контролирует процесс запоминания в рамках сессии и нечего более. Открытый и прозрачный механизм, который контролирует коротко-временный процесс запоминания в течении сессии (а какой еще иной можно придумать для это механизм?).

    Для Type и Voice она по умолчанию включена, поскольку для этих каналов есть ответ от пользователя (в виде напечатанного текста или голоса) и программа, через стратегии авто-оценок, может его оценить и сама выставить Mark-оценку, что довольно удобно. Для Visual-канала же, поскольку программа ваших мыслей читать (пока:)) не умеет, такого критерия нет и Mark-оценка для него по-умолчанию отключена.

    Также mark-оценки служат фильтром при запуске тренингов вне мемо-репозитория: если включен режим бесконечного повторения, то объекты с максимальной mark-оценкой не предъявляются, а если выключен, то они заносятся в пройденные шаги.

    В принципе, для mark-оценок есть жизнь и после сессии. Ведь сессию пользователь может в любой момент прервать (особенно если выбирается большая порция слов). Текущая mark-оценка как раз и фиксирует состояние где остановись (тут речь идет о сессиях вне мемо-репозитория. Если же запуск был из мемо-репозитория, то mark-оценки не достигшие максимума, при принудительной остановке сессии, не сохраняются).

    Еще по mark-оценкам можно сортировать. Именно такая сортировка ("Marks ▼") выбрана в качестве сортировки по умолчанию при запуске вне мемо-репозитория, чтобы пользователь сразу видел какие объекты имеют не максимальную (и в смысле мемо-стратегий незавершенную) mark-оценку.


    Взаимопроникновение Mark и Difficulty стратегий.

    Как уже отмечал, в Mark-стратегиях, в чистом виде (как они описаны их создателями) никаких баллов, никакой difficulty-оценки нет и, если хотите, вы может их в программе совсем отключить. Однако, по умолчанию, они подключены в форме легкой инъекции (они запрашиваются, но их не обязательно ставить), тем самым создавая "гибридное" проникновение Difficulty-стратегий в Mark.

    Это мое ноухау, которое очевидно лишь улучшает Mark-стратегии, позволяя слова/фразы которые для вас не трудны повторять реже. А некоторые слова, которые въелись еще со школы (типа "фейсом об тейбл") и вовсе сразу исключить из циклов повторений, присвоив им нулевую "трудность" (difficulty).

    Возможно, данная методика уникальна и новаторская. По крайней мере, нигде такого не встречал.

    Такова классификация на текущий момент. Вы же можете разрабатывать свои стратегии либо в рамках этой классификации, либо даже придумать что-то оригинальное, пользуясь Mark и Difficulty оценками просто как инструментами, навешивая на них свои смыслы.

  • Добавлена новая опция и реализована функциональность, которую она задает:
    "Auto refresh time of unassigned grade"

    Ее можно задавать либо в мемо-репозитории, либо в окне опций на вкладке "Memo".
    По умолчанию она включена.

    Зачем нужна?

    Как излагалось пунктом выше, у нас есть 2 типа мемо-стратегий. И в принципе, никто пользователю не запрещает от сессии к сессии свободно переключаться между ними. Вопрос в том, насколько ожидаемо после прохождения сессии под одной стратегией, а потом переключении на другую, будут вычисляться интервалы для последней?

    Если мы остаемся в рамках какого-то одного типа мемо-стратегий (либо чисто в Mark, либо чисто в Difficulty), то вопроса не возникает. Но если мы переключаемся между ними, то уже не все так однозначно.

    Пусть для некоторого объекта запоминания, в процессе сессии, были выставлены определенные mark и difficulty оценки. И далее мы хотим переключатся между разными типами мемо-стратегий.
    Для Mark-стратегий необязательно выставление difficulty-оценок, а для Difficulty-стратегий необязательно выставление mark-оценок. И пройдя новую сессию, например, под Mark-стратегией, мы возьмем и не поставим новую difficulty-оценку. Что будет если потом переключимся на Difficulty-стратегию? Difficulty-оценка объекта осталась та же, что выставлялась в пред-последнюю сессию. Т.е. последней сессии (под Mark-стратегией) с точки зрения новой мемо-стратегии как бы и вовсе не было. Время difficulty-оценки осталось старым - от пред-последней сессии. А ведь пользователь старался, повторял объект.

    Чтобы учесть такие нюансы и была введена новая опция. Если она включена, то даже если пользователь в сессию не обновлял необязательные оценки (для Mark-стратегией это difficulty-оценки, для Difficulty-стратегий это mark-оценки), программа сама их обновит. Вернее обновит не сами оценки, а время их выставления – на то время, когда объект последний раз запоминался пользователем, не важно с помощью какой стратегии.

    Но если вы хотите, чтобы Mark и Difficulty стратегии как бы существовали в "разных мирах", то вы можете отключить эту опцию.

    На самом деле, каждая мемо-стратегия может переопределить поведение в этой части, вне зависимости от того как установлена эта опция.
    Это делается в методе стратегии "CorrectGradesBeforeSave".

    Для всех текущих Mark-стратегий этот метод не определен (хотя, конечно, это можно сделать), и в этом случае программа действует в соответствии с тем как описано выше.

    Текущие же Difficulty-стратегии хотя и имеют этот метод, но он также (уже сам) реализует поведение обновления. Но в опциях для этих стратегий добавлена опция "Refresh unassigned mark" (по умолчанию включена), отключив которую пользователь тем самым отключит и обновление. Т.е. частная опция стратегии имеет более высокий приоритет - переопределяет, общую (глобальную) опцию.

  • Немного улучшена юзабилити в работе с мемо-стратегиями.

    Мемо-стратегии стали чуть более точно формировать под себя среду, а некоторые опции, которые нежелательно менять в процессе сессии, стратегии теперь блокируют "от греха", так чтобы пользователь не мог их изменить.

  • Исправлены замеченные ошибки и сделаны некоторые мелкие улучшательные коррекции.

    Есть один выявленный недочет связанный с не совсем интуитивно-ожидаемым поведением мемо-стратегий в случае установки дуального режима. Однако не стал его исправлять. Возни много, в то время как в следующей версии программы, планируется корректировка некоторых принципов работы с каналами и эта работа по исправлению просто пропадет, поскольку в обновленной концепции эту функциональность все равно придется переписывать заново.


Version 1.4.5.5

  • Добавлен "Эхo контроль" - новая возможность при ответе голосом.

    Теперь вы можете прослушивать свое произношение сравнивая его с образцом, что дает обратную связь, которая позволяет "наглядно" (наслушно :)) находить дефекты вашего произношения.

    В выпадающих настройках voice-канала добавилась новая группа настроек - "Echo". Доступны следующие режимы (Mode) для эха:
    • No echo - эхо отключено.
    • Echo when wrong - эхо срабатывает только если ответ был неправильным .
    • Always - эхо работает всегда.
    Но даже если эхо отключено (No echo), вы все равно можете его прослушать с помощью новой голосовой команды:
    - в английском надо сказать слово "voice"
    - в русском - "эхо" или "голос"
    Как и для любой голосовой команды, вы можете поменять ключевые слова для этой команды, а также добавить слова для других языков, в файле: \options\voiceCommands.json

    Еще можно задать громкость (Volume) эха. А если громкость уже максимальна (100%), то можно ее еще увеличить задав множитель в поле "Boost". Последнее бывает полезно если у вас "тихий" микрофон.

    Эхо доступно не только при прохождении voice фазы, но также и в type фазе, если в ней включен значок микрофона.
  • Добавлены несколько новых тренингов.

    В папку \exercises\lingvo:
    • 230 самых популярных английских фраз
    • Conversational phrases - разговорные фразы
    • English Phrases – современные фразы английского языка
    • Political terms - политическая лексика на английском языке, самые популярные слова журналов и газет
    • The American Dream (в 2-х частях) - вы получите около 500 слов и выражений, которые были взяты из аудио подкаста

    А в новой папке \exercises\druzhbinsky yuri можно найти некторые начальные тренинги по курсу Дружбинский Юрий - Реальный English в современных алгоритмах. Онлайн-тренинг [2016]. Курс можно скачать на рутрекере.
    Сделан пример тренажера, который случайным образом генерирует фразы согласно базовому алгоритму от Дружбинского ("паровозику"). А также приложена лексическая база глаголов из его курса.
  • TextReader

    Усовершенствована функциональность замен в тренингах TextReader алгоритма.
    Это может быть вам интересно, если вы создаете или хотите создавать тренинги в рамках этого алгоритма.

    Поскольку систематического описания TextReader алгоритма нигде нет, временно (до появления полноценной wiki по программе), опишу его здесь, включая нововведения этой версии.

    Каждому тренингу TextReader алгоритма соответствует ровно один текстовый файл (с расширением .txt) в котором и описана вся логика тренинга.
    В настоящий момент, примеры TextReader тренингов вы можете найти в следующих папках программы:
    \exercises\druzhbinsky yuri
    \exercises\txt
    \exercises\курс Mo

    Каждый файл начинается с шапки аналогичной следующей:

    Algorithm: 'TextReader': {
        'NvCultures': 'ru-RU', 
        'FnCultures': 'en-GB,en-US',
        'template': 'native ; foreign', 
        'sep1': '|',
        'sepN': '&',
        'sepR': '~',
        'replace_braket': '<>'
    }
    Где помимо указания, что это TextReader тренинг (в будущем не исключены и другие типы тренингов в текстовых файлах), можно внутри фигурных скобок задать некоторые параметры этого тренинга. Но можно оставить фигурные скобки и пустыми - в этом случае применяться параметры по умолчанию.

    Опишем каждый параметр:
    • 'NvCultures' и 'FnCultures' задают культуры родного и иностранного языка.
      Настоятельно рекомендую не забывать их указывать. В противном случае для функций распознавания речи, голосовых команд и некоторых других культуро-зависимых вещей их надо будет каждый раз указывать вручную во время тренинга. Аббревиатуры культур всех языков можно найти, например, по ссылке: https://msdn.microsoft.com/en-US/library/ee825488.aspx
    • 'template' задает шаблон пары: "фраза на одном языке - разделитель - соответствующая ей фраза на другом языке".
      По умолчанию значение шаблона 'native # foreign'. В шаблоне вы можете поменять как порядок языков, так и разделитель. В нашем примере мы изменили разделитель с '#' на ';'.
    • Параметры 'sep1' и 'sepN' задают символы управляющие вариантами в т.н. генераторах.
      О генераторах и смысле этих символов будет речь чуть ниже.
      В нашем примере значения, которые присваиваются этим параметрам не отличаются от значений по умолчанию (т.е. их можно было упустить).
    • Параметры 'sepR' и 'replace_braket' относятся к функциональности замен (подстановок), о которых чуть ниже тоже будет отдельный рассказ.
      В нашем примере значения которые присваиваются этим параметрам не отличаются от значений по умолчанию (т.е. их можно было упустить).
    После "шапки" можно указать т.н. замены (подстановки).
    А затем, обязательно должно быть ключевое слово "body::", после которого уже следует содержательная часть ("тело") тренинга в виде пар разно-язычных фраз.

    Проиллюстрируем все на примере. Будем составлять очень простой пример TextReader тренинга по ходу поясняя все моменты. Итак:
    Algorithm: 'TextReader': {...}
    ...
    body::
    // в женском роде (дамы вперед :)) :
    Маша должна делать это ; Masha must do it
    Даша должна делать это ; Dasha must do it
    Она должна делать это ; She must do it
    Маша голодна ; Masha is hungry
    Даша голодна ; Dasha is hungry
    Она голодна ; She is hungry
    // в мужском роде:
    Вася должен делать это ; Vasia must do it
    Петя должен делать это ; Peter must do it
    Он должен делать это ; He must do it
    Вася голоден ; Vasia is hungry
    Петя голоден ; Peter is hungry
    Он голоден ; He is hungry

    Строки начинающиеся с "//" - игнорируются, т.е. они используются как комментарии.

    Такой тренинг создаст 12 пар, которые вам и будут предлагаться если вы его запустите.
    Однако, можно видеть, что в тренинге есть повторяющиеся структуры. В таких случаях т.н. генераторы позволяют записать тренинг более лаконично:
    // в женском роде:
    {Маша & Даша & Она} { должна делать это & голодна } ; 
    { Masha & Dasha & She } { must do it & is hungry }
    // в мужском роде:
    {Вася & Петя & Он} { должен делать это & голоден } ; 
    { Vasia & Peter & He } { must do it & is hungry }
    Т.обр. с помощью генераторов мы свернули каждую из 6 фраз в одну.

    Фразы можно писать не в одну строку, а разбивать по разным строкам - каждый язык на своей строке. Что и видим в примере с генераторами. Кстати, мы могли и раньше так писать, например:

    Маша должна делать это ;
    Masha must do it
    Но, для коротких фраз это, очевидно, излишне.

    Оцените: если бы у нас было 10 имен и 20 действий, то таким образом мы могли бы свернуть 200 пар в одну. А если бы еще, например, добавилось 30 обстоятельств, то уже 10*20*30 = 6000 свернулись бы в одну.

    Конструкции в фигурных скобках потому и названы генераторами, что они генерируют множество фраз.

    Думаю вам интуитивно уже ясно как работают генераторы, но распишем это более формально.
    Генератор определяется блоком в фигурных скобках {...}. А внутри блока задается логика генерации. Это своего рода шаблон по которому генерируется множество фраз. Каждая фраза с разными конкретными словами, но с одной и той же структурой, которую собственно этот блок описывает.

    Что означают символы '|' и '&' (т.е. сепараторы 'sep1' и 'sepN')?
    Например, генератор {1 & 2} сгенерирует сначала 1, а затем 2 (итого 2 фразы).
    Генератор же для {1 | 2}, сгенерирует либо только 1 либо только 2 - что именно, будет выбрано случайным образом (итого одну фразу).

    Генераторы могут быть вложенными, т.е. генератор может внутри себя содержать другие (дочерние) генераторы. Например, { 1 & { 2 | 3 } } сгенерирует либо две фразы "1" и "2", либо (равновероятно) другие две фразы "1" и "3".

    Следующий момент - это замены (или подстановки). С помощью них мы можем так переписать наш пример:
    <fn:subject_she> = <{ Masha & Dasha & She }>
    <nv:подлежащие_она> = <{Маша & Даша & Она}>
    <fn:subject_he> = <{ Vasia & Peter & He }>
    <nv:подлежащие_он> = <{Вася & Петя & Он}>
    <fn:action> = <{ must do it & is hungry }>
    <nv:действие_она> = <{ должна делать это & голодна }>
    <nv:действие_он> = <{ должен делать это & голоден }>
    body::
    // в женском роде:
    подлежащие_она действие_она ; subject_she action
    // в мужском роде:
    подлежащие_он действие_он ; subject_he action
    Как видим, раздел "body" стал более лаконичным и логически ясным. Однако, определение замен (подстановок) выглядит довольно объемным, так что в целом, кажется, что имеем проигрыш в лаконичности. Но это только потому, что у нас очень простой пример, так что каждая подстановка используется в "теле" (body), лишь единожды. Для более сложных же тренингов, подстановки могут значительно сократить объем. Если бы подстановка использовалась в теле не один, а, например, 10 раз, то представьте какой громадный объем дублирования был бы в "теле" без ее использования. Не говоря уже о том, что подстановки делают текст более структуированным и логичным.

    Как видим, определение каждой подстановки начинается с угловых скобок, внутри которых задается текст, который будет искаться и заменяться в "теле". Перед текстом может находится необязательный префикс "nv:" (родной язык) или "fn:" (иностранный язык). Он определяет для какой части целевой пары в "теле" действует данная замена. Если префикс опущен, то подстановка работает везде (и в родной и в иностранной части).

    После префикса (если он есть), следует текст замены, например, subject_she. Этот текст совершенно произволен. Однако, будьте осторожны, если, например, вместо "subject_she", написать просто "a", то это привело бы к тому, что каждая буква "a" в "теле" заменилась бы на правую часть подстановки, в том числе и буква "a" в слове "action", что привело бы к неожиданным и весьма уродливым последствиям.
    Поэтому иногда предпочитаю начинать подстановки с @ (например, вместо "subject_she", можно было определить @she), поскольку очень маловероятно, что @she встретиться в "теле" само по себе, в живых фразах языка.

    Затем идет знак "=", после которого в угловых скобках следует текст, который будет подставляться вместо левой части подстановки.

    Угловые скобки нужны как маркеры-ограничители, которые как для левой, так и для правой части подстановки вычленяют определенные тесты. Однако, может так случится, что внутри этих текстов нам потребуется использовать символ или даже оба символа угловых скобок.
    В этом случае мы может с помощью параметра 'replace_braket' поменять эти маркеры-ограничители на другие. Например:
    'replace_braket': '[]'
    Что вместо угловых скобок определит квадратные. И тогда следует определять подстановки так:
    [fn:subject_she] = [{ Masha & Dasha & She }]
    Два символа для скобок могут быль любыми (например: ':)', '<]',...), главное только чтобы они были разными.
    Более того, допускается определять скобки из нескольких символов, например: '<<>>', '<(<>)>', ...

    В нашем примере каждая подстановка определяет какой-то генератор {...}, но в общем случае, это конечно не обязательно.

    Как видите, концепция подстановки "проста как мычание" - в целевом тексте просто механически (можно сказать "тупо") делается замена левой части подстановки на ее правую часть. Подстановки применяются ровно в том порядке в каком они определены. В нашем случае, сначала применяется "subject_she" в английской части "тела", затем "подлежащие_она" в русской части, затем применяются "subject_he", "подлежащие_он", "action", ... и т.д. по порядку.

    Еще раз, это просто замены, а ни какие не, скажем, переменные в языках программирования (кто знаком). И в этой простоте есть определенное "коварство". Скажем, если бы у нас был такой порядок определения подстановок:
    <nv:подлежащие_он> = <{Вася & Петя & Он}>
    <nv:подлежащие_она> = <{Маша & Даша & Она}>
    То при применении подстановки "подлежащие_он", которая теперь определена и соответственно применяется первой, над текстом:
    подлежащие_она действие_она ; subject_she action
    мы получим:
    {Вася & Петя & Он}а действие_она ; subject_she action
    а не:
    {Маша & Даша & Она} действие_она ; subject_she action
    как хотели

    Поэтому, внимание!, порядок определения подстановок важен.
    Однако, можно сохранить и такой порядок, если вы знакомы (или хотите познакомится) с регулярными выражениями.

    На самом деле, текст в левой части подстановки трактуется не как просто текст, а как регулярное выражение. И поиск на замену идет в соответствии с этим регулярным выражением. Так что, если мы "дам вперед не пропускаем" и все-таки хотим первым определить:

    <nv:подлежащие_он> = <{Вася & Петя & Он}>
    то, нет проблем, с помощью регулярного выражения это можно сделать так:
    <nv:подлежащие_он\b> = <{Вася & Петя & Он}>
    Кто знает, "\b" в регулярных выражения задет границу (boundary) слова. В этом случае все будет уже корректно.


    Нововведение версии 1.4.5.5 позволяет определять замены гораздо более удобным способом. А именно, добавлен, как говорится, "синтаксический сахар" - мульти-подстановки.

    С их учетом, наш пример можно переписать так:
    <fn:subject_she ~ nv:подлежащие_она> = <{ 
        Masha ~ Маша & 
        Dasha ~ Даша & 
        She ~ Она
    }>
    <fn:subject_he ~ nv:подлежащие_он> = <{ 
        Vasia ~ Вася &
        Peter ~ Петя &
        He ~ Он
    }>
    <fn:action ~ nv:действие_она ~ nv:действие_он> = <{ 
        must do it ~ должна делать это ~ должен делать это & 
        is hungry ~ голодна ~ голоден
    }>
    
    body:: // осталось прежним
    Думаю, данный пример достаточно нагляден, так что не буду вдаваться в формальные описания.

    В определении мульти-подстановок используется символ-сепаратор '~', который в шапке тренинга задается параметром 'sepR'. При необходимости вы можете его переопределить.

    Вторым нововведением является директива "#include".
    Она просто включает все содержимое текстового файла заданного в ее параметре ровно в то место, где она определена.

    Пусть, например, у нас есть 2 файла file1.txt и \inc\file2.txt (file2.txt находится в подпапке inc относительно первого файла). Тогда если где-то в тексте первого файла определить:
    #include "inc\file2.txt"
    то, при анализе первого файла алгоритмом, все содержимое второго файла будет подставлено вместо этой директивы.

    Примеры использования этой директивы вы можете найти во всех файлах папки:
    exercises\txt\tenses\simple\
    А также в файле (специально сделано, для примера):
    \exercises\txt\tenses\_inc\verbs.txt
    Обратите внимание, что для временных тренингов (tenses\simple) include-директива применяется рекурсивно - в файлы самих тренингов включается файл verbs.txt, в который в свою очередь включается файл \exercises\txt\tenses\_inc\verbs\help.txt.

  • Реализована экспериментальная функциональность внешнего он-лайн перевода.
    См. кнопку "ex" (жирная Ex когда включена) под кнопкой включения/выключения картинок.

    При включенном режиме внешнего перевода, открывается окно, куда подгружается web-страница с переводом.

    Это экспериментальная функциональность, к которой есть вопросы, и в следующей версии (или через несколько версий) она скорее всего будет заменена (с расширением возможностей) на аналогичную, но реализованную другим способом (текущий не нравится). Поэтому эпитет "экспериментальная" здесь не в смысле, как нечто-то "супер-пупер", "последний писк", а в смысле "черновик".
    Более того, эта функциональность является подготовкой к другой важной функциональности.

  • Исправлены замеченные ошибки.


Version 1.4.5.4

  • Добавлена внешняя озвучка.
    Т.е. если тренинг имеет аудио-материал озвученный дикторами, то этот материал можно подключить.

    Для включения/выключения внешней озвучки, в опциях звуковых настроек (там же где выбираются голоса), добавился выпадающий список со следующими режимами:
    • Use voice (Speach API) - использовать только голоса.
    • Audio file or silence - использовать только внешний аудио-материал, а если его нет, то "тишина", т.е. вообще остаемся без озвучки.
    • Audio file or voice (SAPI) - использовать внешний аудио-материал, а если его нет, то тогда голоса.
    На данный момент сделано 10 тренингов с внешней озвучкой. Они довольно большие, в комплект поставки не входят, вы можете скачать их на странице форума.


    Но также, конечно, вы можете создавать свои собственные тренинги. Материалов для создания таких тренингов в сети более чем достаточно. А если приведенных примеров тренингов окажется недостаточно для понимания, как по аналогии делать свои, если будут любые вопросы - обращайтесь, обязательно отвечу и помогу.

  • В программе "заиграла" еще одна глобальная (для всех тренингов) степень свободы (в разделе "философия программы" поясняется, что понимается под "степенью свободы", или еще иначе, - "измерением").

    Как вы знаете, тренинги можно проходить в 2-х направлениях: от родного к иностранному языку, либо наоборот.
    Раньше, чтобы целиком пройти два направления, надо было делать это последовательно - прошли в одном, переключились, перезапустили тренинг, прошли в другом. Конечно, можно было вручную переключатся и по ходу тренинга, но при этом не было целостности прохода 2-х направлений - если слова/фразы иссякали по текущему направлению, то тренинг заканчивался.
    Кроме того, после прохождения какого-либо вопроса в одном направлении, он исключался и даже при ручном переключении становился недоступным для прохождения в обратном направлении. Чуть ниже, описан новый т.н. "дуальный режим", который реализует здесь расширенное поведение.

    Над областью вопроса, сразу слева от опций формата области вопроса появилась кнопочка Lang-direction options с выпадающими настройками.

    Настройки расположены над областью вопроса, но, как описано ниже, очевидно, относятся не конкретно к этой области, а целиком к тренингу.

    Там можно найти 2 режима (две галочки), которые управляют направлением:

    • random mode - если включен, то по ходу тренинга направление будет случайно переключаться. Совершенно аналогично тому как если бы вы это делали вручную, просто данный процесс будет автоматизирован.
    • dual mode - если включен, то изменения гораздо масштабнее. В этом режиме для направления обратного (дуального) к текущему, формируется свой отдельный (независимый) набор. А если выбираем лишь небольшую порцию слов, то слова/фразы в дуальном наборе могут быть совершенно другие нежели для текущего направления.
      Ниже галочки включения режима, можно выбрать каналы какие хотим учить для дуального направления. Обратите внимание, что когда направление будет меняться (вручную или автоматом, когда включен "random mode"), то текущие каналы поменяются на дуальные, а дуальными, соответственно, станут текущие.

    В дуальном режиме, безотносительно какое текущее направление выбрано, будут пройдены как текущий набор, так и дуальный - тренинг не закончится пока оба набора не исчерпаются.

    Для excel-тренингов, в диалоге параметров можно выбрать сортировку для дуального направления. Также в окне мемо-репозитория есть галочка "dual" - если она включена, то при наличии готовых объектов на повторение в дуальном направлении, они будут включены в тренинг.

  • Добавлены горячие клавиши:

    • Теперь Difficulty оценку, в любых ситуациях когда она запрашивается, можно выставить нажатием клавиш <Ctrl> + <Num> (цифра, не важно где - на дополнительном цифровом блоке клавиш справа или в верхнем ряду).
      Это довольно удобно, особенно если Difficulty оценка запрашивается только в области ответа (imho, наиболее удобный режим при повторении слов). И если вам удобно работать только с клавиш, то теперь мышь вам действительно не придется трогать на всем процессе тренинга.
    • <Ctrl> + <i> - включает/отключает показ картинок.
  • Картинки.

    В окне картинок добавлена опция "top v-alignment" (включает вертикальное выравнивание картинок поверху). Раньше картинки разной высоты центрировались в ряду. Теперь, если эта опция включена, они будут выравниваться поверху ряда. Хотя нецентрированные картинки выглядят менее красиво (дело вкуса), но когда они слишком разной высоты, это позволяет более полно (без обрезки) показать картинки последнего ряда.

    Добавлен новый режим определяющий в какой момент картинки должны показываться - "Smart show". Ранее были доступны только режимы "Show at question" и "Show at answer". Режим "Smart show" как бы комбинирует их. А именно, если направление тренинга от "родного к иностранному", то работает режим "Show at question". А если, наоборот (от "иностранного к родному"), то работает "Show at answer". Это наиболее логичный и удобный режим, поэтому он теперь выбран по умолчанию.

    Иногда вам нужно найти картинку не для слова/фразы, которые предлагается тренингом, а для несколько иного варианта. Например, иногда нужны картинки только для существительного или только для глагола - в этом случае добавление артикля или частицы "to" дает более целевой поиск. Раньше, после корректировки поля запроса в окне картинок, нужно было нажать кнопку "Update" для обновления. Теперь для этого еще можно просто нажать <Enter>.

    Внимание! Если у вас есть тренинги для которых вы сохраняли картинки, то чтобы эти картинки были доступны в новой версии программы, необходима небольшая коррекция. Раньше картинки к тренингу хранились в непосредственно в папке этого тренинга. Теперь же они должны находится не прямо в папке тренинга, а в под-папке с названием "images\"
    Таким образом, чтобы ваши сохраненные картинки работали, вам в папке тренинга нужно создать под-папку "images\" и переместить картинки туда.

  • Исправлены замеченные ошибки и сделаны некоторые мелкие улучшения.


Version 1.4.5.3

  • Сделана мемо-нотификация:

    Если пришло время повторять, то возле трея будет показано окошко-сообщение и дан звуковой сигнал. Параметры нотификации: нужна ли она вообще, нужен ли звуковой сигнал, выбор аудио-файла этого сигнала, его громкость и длительность, все это можно определить в выпадающих настройках внутри мемо-репозитория (или в окне опций программы на вкладе "Memo"). Если длительность сигнала задана больше чем длительность аудио-файла, то аудио будет повторяться пока все заданное время не истечет.

    Чтобы нотификация работала, программу, очевидно, не нужно закрывать. Ее можно свернуть в трей. Для этого добавилась специальная кнопочка в ряду кнопок "крестика" закрытия окна, минимизации...
    А также, напомню, что в окне опций, на вкладке "General" можно указать, что программа будет сворачиваться в трей при минимизации и/или закрытии.

    Значение "Check period (min)" (по умолчанию, 7 минут) в настройках нотификации имеет довольно условный характер. На самом деле точный момент времени когда следует делать очередную проверку на наличие готовых объектов для повторения, рассчитывается, а не берется из этой настройки.

    Вычисление (перерасчет) этого времени происходит после событий, которые могли на него повлиять. А именно: после окончания каждой сессии, а также после закрытия окна мемо-репозитория (могли меняться настройки стратегий и сами стратегии). Если ближайший объект на повторение ожидается через 10 часов, то и проверка будет выполнена через 10 часов, а если через 2 минуты, то через 2 минуты. 7 минут же будет применяться только если были какие-то сбои.

    Если же у вас программа запускается с нескольких компов, а состояния тренингов синхронизируется через облако (google, yandex диск...), и если у вас программа уже запущена, то после облачной синхронизации, таймер проверки нужно перезапустить. Для этого можно перезапустить (закрыть/открыть) программу, но еще проще просто открыть/закрыть мемо-репозиторий.

  • Адаптивные возможности для tablet-устройств:

    Для этого в окне опций на вкладке "General" сделана настройка масштаба. Все элементы управления, всех окон программы, будут увеличены/уменьшены в соответствии с выставленным масштабом.

    Масштаб можно изменять от 100% (по умолчанию) до 300%.
    Его значение можно задать либо в поле "Scale", либо двигая ползунок синхронизованный с этим полем.

  • Немного улучшен пользовательский интерфейс:

    • Галочка "Don't re-speak question when repeating" перенеслась из настроек Voice-канала в более логичное место - в звуковые настройки области вопроса.
    • При изменения положения главного окна, окно картинок теперь синхронно следует за ним.
    • Теперь любой тренинг можно запустить двойным кликом по нему (не выделяя его галочкой, с последующей кнопкой Start). Соответствующий пункт появился и в контекстном меню.

  • Обновилась web-страница программы:

    • Добавился раздел "Другие языки".
    • Обновился список "Преимущества программы".
    • Добавился раздел "Философия" программы.
    • Изменилась стоимость программы.


Version 1.4.5.2

  • Данная версия не содержит кардинальных изменений, но внесла много изменений в папку \options\, поэтому и не может быть обновлена автоматически.

    Содержимое папок \exercises*\ - осталось прежним.

  • Сделано много мелких изменений в основном касающиеся Difficulty.

    Раньше Difficulty-оценки использовалось только в Super-memo2 мемо-стратегии и через возможность сортировки по ним.
    Теперь они используются во всех (!) мемо-стратегиях:
    - если Difficulty-оценка выставленна как нулевая (т.е. мы абсолютно знаем вопрос, он для нас не составляет никакого труда), то такие слова (фразы), во всех мемо-стратегиях, больше не предъявляются.
    - если Difficulty 1 или 2 (легкий вопрос), то в зависимости от мемо-стратегии (см. любую кроме Super-memo2) может пропускаться определенное количество повторений.

    Если кому интересно как это реализовано загляните в любую (кроме Super-memo2 - она не изменилась) мемо-стратегию в папке:
    \options\memo\strategies\

    Также отмечу, что я всего лишь программист, а совсем не специалист по способам запоминания. Поэтому данные усовершенствования стандартных методов интервальных повторений лишь мое видение. Данные изменения, мне показались минимальными очевидными улучшениями, которые можно добавить в стандартные методы.

    Но все это не догма. И если у вас есть идеи, что еще можно сделать (имея 2-х параметрическую оценку), то вы можете сделать это, либо сами, либо сообщите мне - реализуем!
    Самое простое: вы можете в файлах мемо-стратегий изменять/добавлять/удалять значения в словаре diSkipDic, тем самым управляя пропусками повторений в зависимости от Difficulty-оценки.


    Второе место где введен учет Difficulty оценок - это стратегия авто-оценок "+x or -y%".
    Для нее определен новый параметр ReduceForDifficulty (по умолчанию 20%), где задается, на сколько уменьшается (редуцируется) автоматический прирост оценки, если вопрос имеет повышенную трудность.

    Другие стратегии авто-оценок не стал трогать, поскольку сам пользуюсь практически только этой стратегией. Если кому требуется как-то изменить другие, тот может сам это сделать, либо обращайтесь.

  • Галочка "wait difficulty when repeat-mode on" заменена на более расширенную настройку - выбор из 3-х вариантов "Wait first difficulty" (определяет режимы ожидания Difficulty оценки в режиме "бесконечного" повторения):

    • none - не ждем.
    • in session - принудительно ждем пока пользователь поставит новую Difficulty оценку в текущую сессию.
    • in history - в случае если Difficulty оценки еще вообще ни разу не было (за всю историю), то ждем ее первого выставления.
  • В окне опций добавилась новая вкладка "Memo".

    Туда из вкладки "General" перенесены все опции касающиеся интервальных повторений.
    Плюс, добавились новые опции:

    • Default prompt difficulty in memo-statagies - определяет запрос Difficulty-оценок в мемо-стратегиях, в которых не определен метод инициализации (сейчас это все стратегии кроме Super-memo2). Как видно, по умолчанию, стоит, что Difficulty будет запрашиваться в области ответа.
    • Default waiting difficulty in memo-statagies - определяет будет ли принудительно ожидаться Difficulty. По умолчанию - да, будет, но только если ее еще вообще ни разу (за всю историю) не было.
    Но вы можете изменить эти две опции, если, например, вообще не хотите работать с Difficulty в мемо-стратегиях (также, напоминаю, что для любой мемо-стратегии можно определить собственный метод инициализации в ее файле, как это сделано для Super-memo2).

  • Исправлены замеченные ошибки.

    В частности, исправлен крэш программы в Windows 10 - Microsoft сильно удивила :) (разным поведением своих стандартных библиотечных функций в разных версиях Windows).

    Восстановлена подгрузка картинок с "Rambler" (просто Рамблер изменил формат своей страницы поиска картинок, так что пришлось подредактировать файл \options\imagesSources.json).


Version 1.4.5.0

  • Начну с лирического момента: программа получила суффикс 3D.

    Поскольку в ней теперь действительно полноценно реализованы 3 независимых класса стратегий ("измерения"):

    1. стратегии сортировки (порядка).
    2. стратегии авто-оценок.
    3. стратегии повторений (memo-стратегии).
    Хотя они проявились еще в предыдущей версии, но одна из этих стратегий не соответствовала высоким стандартам "измерения" в полной мере. А именно, для стратегии сортировки (порядка) пользователю программы не позволялось изменять текущие или добавлять собственные стратегии. Сейчас - можно.

    По секрету сообщу: в будущем планируется еще и 4-я стратегия, так что скоро (или не очень) "смотрите на экранах новый 4D-блокбастер..." :)

    "3D" также можно ассоциировать с 3-мя каналами восприятия, работа с которыми реализована в программе:
    - визуальном (Visual),
    - аудиальном (озвучка и распознавание речи),
    - и Type-канале (правописание, моторная память - печать на клавиатуре).
    Причем реализована именно как с "измерениями", т.е. работа с ними может вестись как полностью независимо, так и в произвольной смеси.


    Алгоритмы для всех существующих стратегий сортировки (сейчас их 7 штук) находятся в папке:
    \options\sortStrategies\

    О новых Difficulties - стратегиях сортировки поговорим чуть позже, а сейчас же скажу несколько слов про новую стратегию - "By column".
    В файле excel-тренингов появилась возможность определять именованные колонки. Например см. файл:
    \exercises\словарный запас\Glossika\glossika test.json

    В нем есть строчка:
    'NamedColumns': 'E:name 1, F:name 2',
    Она определяет 2 колонки с именами "name 1" (для E-колонки в экселе) и "name 2" (для F-колонки).
    Значения ячеек в этих колонках можно использовать в стратегиях сортировки. Например это может быть колонка с именем категории или колонка с частотой слова или вы захотите чтобы слова (иностранные или родные) предъявлялись в алфавитном (или обратном) порядке...

    Стратегия "By column" позволяет сортировать по таким именованным колонкам (см. в программе и/или в файле стратегии, опции этой стратегии - они позволяют задать имя колонки и направление сортировки). Более точно, данная стратегия делает следующее: сначала она группирует слова по заданной колонке, потом сортирует эти группы, а затем, если включена галочка "Shuffle", перемешивает слова внутри этих групп.

    Позже (а если будет запрос, то и раньше) напишу еще одну стратегию сортировки (но теперь вы можете, кто умеет, сделать это уже и сами). Она будет перемешивать (если включен "Shuffle") уже группы слов с одним значением в именованной колонке, но исходный порядок внутри групп сохранять (или сортировать, но уже по другой именованной колонке).
    Такая стратегия может быть полезна, если, например, в excel-тренинге определяются диалоги, т.е когда фразы должны не перемешиваться, а предъявляться последовательным блоком. Это и сейчас можно делать (просто отключив галочку "Shuffle" и выбрав "No Sort" стратегию), но при этом сами диалоги уже не будут перемешиваться, что "педагогически" не есть хорошо.

  • Введено (и реализовано) понятие Difficulty (сложность, трудность).

    Теперь понятие оценки расщепилось на 2 подкласса: Mark и Difficulty.
    Общее же понятие оценки обозначатся в программе как Grade.
    Или еще можно сказать, что оценка стала 2-х параметрической (одномерной оценки, по моему опыту, оказалось недостаточно).

    Все слова разные, одни вы легко запоминаете, а вот другие с трудом. В течении одной сессии вы можете выучить "на пять" группу слов, но через некоторое время, при периодическом повторении (с использованием memo-стратегий), обнаруживается, что одни слова вы вспоминаете влет, а вот с другим испытываете сложности. Новая Difficulty-оценка и нужна чтобы оценить эту сложность и на основе этого иметь возможность создавать специальные memo-стратегии.

    Если кто читал текст про предыдущую версию (1.4 Что нового?), то помнит что все memo-стратегии делились на 2 класса:

    • все стратегии, кроме "Supermemo-2"
    • и, соответственно, пока единственная "Supermemo-2" стратегия
    Так вот, Supermemo-2 стратегия работает именно с Difficulty-оценкой. В версии 1.4 работа с этой стратегий была путанной и даже не совсем корректной при одновременном использовании memo-стратегий другого класса в рамках одного тренинга, именно потому что разные классы стратегий "пытались усидеть на одном стуле". Теперь "стула" два и все стало логично и красиво.

    Еще такое деление можно соотнести с разными типами памяти - коротко-временной и долго-временной.
    Mark - отражает насколько хорошо идет процесс запоминания слова в текущую сессию и предполагается, что вы доводите ее до максимума (т.е. здесь и сейчас выучиваете слово).
    Difficulty - отражает насколько сложно ведет себя слово при долговременном запоминании.
    А, как известно, та модель которая лучше отражает предметную область (в данном случае - естественную природу памяти) и наиболее эффективна, дает лучший результат.

    Возможно, данная методика 2-х параметрической оценки - уникальна и новаторская. По крайней мере, нигде такого не встречал.


    Mark и Difficulty это тоже своего рода "измерения" - работа с ними может вестись как полностью независимо, так и в произвольной смеси (причем по каждому каналу).

    Как включить Difficulty?
    Во-первых, это можно сделать при запуске excel-тренинга, в диалоге параметров в выпадающих настройках "Grades". Среди них можно видеть Difficulty и выпадающий список - по умолчанию выбрано "None", но доступны и другие выборы, которые и определяют каким образом Difficulty будет вам предъявляться:

    • Answer - оценка Difficulty будет "пассивно" запрашиваться в области ответа
      (в левом нижнем углу)
    • GradeWin - будет запрашиваться в окошке оценок
      (вторым рядом, если также включены и Mark оценки)
    • Both - будет запрашиваться и там и там
    Также кликнув (в настройках) на само слово Difficulty вы может инвертировать его в Easiness (легкость). Хранится оценка в любом случае как Difficulty, это лишь способ ее отображения: кому как субъективно удобнее оценивать - оценивать как сложность или как легкость.

    Во-вторых, уже по ходу тренинга, все это можно поменять:
    Внизу области ответа появилась кнопка опций (первая слева), нажатие на которую вызывает показ множества настроек (туда, кстати, перенеслись все настройки которые ранее были в окне оценок), среди которых увидим знакомые (по "Во-первых") Difficulty настройки (они дублируются там для того, чтобы их можно было динамически менять по ходу тренинга, если возникнет такое желание).

    Там же, дополнительно, еще можно увидеть галочку "wait difficulty when repeat-mode on" (эта же галочка доступна в окне опций программы (Options) на вкладке "General"). Если она включена и если включен режим "бесконечного" повторения и если включена работа с Difficulty, то тренинг не закончится пока каждое слово не получит Difficulty-оценку (оно ждет ее). Даже если все Mark-оценки уже будут максимальными, все равно слово будет предъявляться до тех пор пока вы не поставите и Difficulty-оценку.

    Сама шкала Difficulty оценки имеет тултип (всплывающую подсказку), который показывает стандартную легенду методики "Super-memo". Шкала поддерживает диапазон от 0 до 5. Делать шкалу масштабируемой как для Mark оценок пока не стал (напоминаю, что там можно менять масштаб от 2-х до 20-ти), но если будет такой запрос, то готов это быстро сделать (это легко). При этом на старые Difficulty оценки это никак не повлияет (также как и для Mark, все хранится в относительных величинах).

    Помимо клика мышью имеется также возможность ставить Difficulty с клавиатуры или голосом. При этом если еще определен ручной (manual) режим выставления Mark оценок, то сначала ставится Mark оценка, а следующее нажатие на клавишу или голосовая команда ставит Difficulty.

    В данный момент использование Difficulty актулизированно пока только "Super-memo2" стратегией.
    А также по Difficulty можно выполнять сортировку, очевидно, две новые стратегии сортировки (с именем Difficulty) этим и знанимаются.

    Также Difficulty теперь показывается везде где выводится статистика оценок, формат такой:
    "Mark оценка|Difficulty оценка" (например 5|3)

  • Следующая фича относится к усовершенствованию memo-стратегий.

    Если кто читал текст про предыдущую версию (1.4 Что нового?), то помнит, как по пунктам объяснял как правильно надо работать с той или иной memo-стратегий. Теперь же каждая memo-стратегия сама умеет устанавливать нужные ей опции, и вам не требуется думать об этом. А если какие-то опции нежелательно изменять по ходу тренинга (а такая возможность в общем случае есть), то стратегии умеют их блокировать. Например, все memo-стратегии блокируют кнопку переключения в режим "бесконечного" повторения, включая его "намертво" как активный.
    По окончании же тренинга все опции возвращаются в состояние "как было".

    В файле memo-стратегий за это отвечает метод InitEnvironment.
    Именно он определяет какие опции устанавливать и нужно ли их блокировать. Набор доступных опций ограничен текущими нуждами. Но если вам понадобится добавить туда какие-либо еще опции, то пишите, сделать это можно в момент.
    Пример конкретной реализации InitEnvironment метода можно посмотреть в "Super-memo2" стратегии, файл:
    \options\memo\strategies\Super-memo2.cs

    Все остальные memo-стратегии не определяют данный метод (хотя и могут). В этом случае работает метод настройки среды по умолчанию.

  • Справа от шкалы звездочек-оценок как для Mark так и для Difficulty появился цветовой индикатор в виде вертикальной черточки, которая может иметь следующие цвета и соответственно смыслы (или, наоборот, - смыслы и соответственно цвета):

    • прозрачный цвет (т.е. индикатор невидим) - значит оценки еще ни разу не было
    • синий цвет - оценка была, но в одну из предыдущих (старых) сессий, т.е. оценка как бы "остыла", "замерзла"
    • фиолетовый цвет - теплее, оценка уже была, причем в текущую сессию, но не прямо сейчас, а в одном из циклов (при включенном режиме "бесконечного" повторения)
    • красный цвет - горячо, оценка выставлена сейчас, буквально только что
    Эти индикаторы особенно полезны для работы с Difficulty (особенно в режиме "бесконечного" повторения), поскольку позволяют сразу видеть была оценка или нет в текущей сессии.

  • Добавлена так называемая splash заставка, которая показывается перед запуском программы. Поскольку программа запускается не мгновенно, то перед открытием главного окна эта splash заставка позволит вам скоротать время медитацией над ней :)

    Запуск же самой программы был несколько убыстрен, хотя все еще и занимает несколько секунд. Ведь программа должна просканировать папку упражнений, прочитать каждый json и xml файл (в область упражнений попадают не любые json/xml файлы, а только те, которые имеют правильные заголовки, поэтому и нужно их предварительно читать) + выполнить некоторые другие мероприятия по инициализации.

    В соответствии с общей философией программы, splash заставка сделана максимально гибко. Все картинки для заставки находятся в папке:
    \options\splashImages\
    Туда можно добавлять свои jpg или png картинки (в последнем случае они могут быть с прозрачными областями, так что сама splash заставка может быть не прямоугольной, а фигурной). Не рекомендуется добавлять "тяжелые", много-мегобайтные картинки, поскольку это замедлит запуск программы.
    При запуске, программа случайным образом выбирает одну из этих картинок.

    А если не хотите splash заставки, то просто удалите (или с'архивируйте, или создайте и переместите в подпапку внутри splashImages папки - подпапки не сканируются) все картинки в splashImages папке.

    Но картинки весьма позитивные так что, надеюсь, они вам понравятся :)

  • Были исправлены некоторые ошибки и проведен рефакторинг программы. Размер исполняемого файла по сравнению с предыдущими версиями - уменьшился.

    Востановлена фильтрация по категориям (см. Работа функции "Категории" в версии 1.4)

    Сделано полноценное (раньше иногда не работало) повторение текущего шага через нажатие клавиши <Ctrl+R> (голосовая команда "repeat" на английском или "повторить/повторять" на русском). Для форсирования шага, помимо пробела теперь также можно нажать <Enter> (голосовая команда "next" на английском или "следующий" на русском).
    Напоминаю, что изменять ключевые слова голосовых команд или добавлять команды на других языках вы можете в файле: \options\voiceCommands.json

  • Добавились новые тренинги.

    Уважаемый пользователь программы Марат прислал следующие тренинги:
    \exercises\lingvo\Фразы переводящиеся перестановкой слов
    \exercises\lingvo\Словосочетания
    \exercises\books\Набоков - Знаки и символы
    \exercises\books\Набоков - Как-то раз в Алеппо
    \exercises (french)\glossika

    А также добавились тренинги от не менее уважаемого Nikto2309 (такой ник):
    \exercises\словарный запас\Glossika\glossika 01
    \exercises\словарный запас\Glossika\glossika 02
    \exercises\словарный запас\Glossika\glossika 03
    Хотя последние тренинги еще сыроваты. И на форуме программы создана тема, где можно посмотреть последние обновления по ним, а также, если будет интерес, помочь с их доработкой, см.: Glossika (English-Russian)

  • Специально для excel-тренингов подобных Glossika, сделана возможность в файлах тренингов определять словари замен.

    В курсе Glossika все русские фразы выглядят довольно специфично:
    Погóда сегóдня ♀хорóшая.

    Голосовые движки не умеют произносить символы типа "♂", "♀", а также символы с ударением, поэтому "спотыкаются" на них. Плюс, если вдруг захотим дать русский ответ голосом или печатью на клавиатуре, то подобный текст воспроизвести невозможно (ответ должен сопоставляться с образцом, а образец у нас такой вот странный).

    Поэтому во всех файлах тренингов английской Glossik-и определены следующие строки:
    'NvTextReplacements': '{"♀":"", "♂":"", "á":"а", "Э́":"Э", "у́":"у", "ó":"о", "и́":"и", "е́":"е", "я́":"я", "А́":"А", "ы́":"ы", "ю́":"ю"}',
    'NvVoiceReplacements': 'NvTextReplacements'

    NvTextReplacements определяет словарь замен для родного языка (соответственно FnTextReplacements - для иностранного), который применяется к полю NvTextColumns (FnTextColumns), полю которое, напоминаю, используется для определения образцов сопоставляемых с ответами вводимыми с клавиатуры.
    NvVoiceReplacements(Fn...) - определяет замены для поля NvVoiceColumns(Fn...), которое используется для образцов сопоставляемых с голосовыми ответами (напоминаю, что если NvVoiceColumns(Fn...) не задано, то оно, по умолчанию, равно NvTextColumns(Fn...)).

    Обратите внимание, как задано поле NvVoiceReplacements - оно просто ссылается на ранее определенное поле NvTextReplacements, хотя порядок определения не важен ("ранее" или нет) - можно было бы написать и наоборот.

    Конечно, в словарях замен можно определять замены не только букв (просто пример такой), но и целых фраз.

  • Внимание, старым пользователям программы:

    Изменится формат хранения оценок. Поэтому, если вы перенесете свои словари, со своей историей оценок, в новую версию и захотите поработать с ними в ней, то оценки будут недоступны (но, конечно, никто не запрещает продолжать работать в старой, благо это portable программа).

    Но все это можно очень легко исправить.
    Далее скажу несколько теоретических слов, зачем вообще изменился формат оценок. Но если это вам неинтересно, можете пропустить и сразу перейти к практической части.

    Теория (зачем изменился формат оценок):

    • Во-первых, появилась отдельная история Difficulty-оценок.
    • Во-вторых же, изменился символ-разделитель для Mark-оценок.
      Дело в том, что старый символ-разделитель - '|', является все-таки иногда употребляемым символом. Он присутствует на любой раскладке клавиатуры. И это было не очень хорошо, поскольку помимо собственно истории оценок, которая ведется самой программой, пользовательские мемо-стратегии теоретически могут добавлять к ней свою служебную инфу.

      Собственно, одна стратегия в комплекте поставки, а именно, "super-memo2", будучи запущенной, так и делает. Служебная инфа хранится в виде сериализованного в json-формат словаря: ключь (имя параметра) и значение, которое может быть произвольным объектом. Как ключ так и значение, по воле чьей-нибудь фантазии (но для всех стратегий в комплекте поставки этого нет), вполне может содержать символ '|' (хоть и маловероятно - фантазия должна быть богатая).

      Поэтому в новой версии, чтобы такую вероятность свести практически к нулю (и пока еще пользователей программы мало, чтобы это стало мировой проблемой), в качестве разделителей стали использоваться действительно очень редкие "непечатные" символы (не путать с нецензурными - эти как раз широко распространены). А именно '→' и '●'.
    Практика:
    • Если вы не использовали "super-memo2" стратегию, то все вообще просто. Открываете ваш excel-словарь и заменяете символ '|' (конечно в диалоге замены пишем его без кавычек) на пустую строку. Кто не в курсе - чтобы вызвать диалог замены в excel, надо нажать <Ctrl+H>.
    • Если ли же "super-memo2" была использована, нужны две последовательные замены (порядок важен), сначало заменяем '}|' на '}→'. А затем делаем ту же самую замену, о которой уже говорили, т.е. '|' на пустую строку.
      Однако, полностью это не решит проблемы - восстановятся все оценки, для всех других стратегий, но кроме данных по "super-memo2". Если это для вас критично, сообщите, - напишу как это можно исправить (просто вышлю вам специальную версию "super-memo2").


Version 1.4.0.0

  • Реализована довольно крупная функциональность:

    Это стратегии интервальных повторений, которые считаются наиболее эффективными для крепкого запоминания материала.

    Чтобы крепко выучить материал недостаточно запомнить его один раз (в нашем случае - за сессию). Как известно, "повторение мать-учения" (а также заикания :))... Но кроме шуток, из психологии известно такое явление как кривая забывания. Тут целая наука, и кто не в курсе, могут, например, ознакомится со следующими статьями:
    Интервальные_повторения
    Что такое SRS?

    В комплекте поставки идут следующие стратегии интервальных повторений:

    В отличии от прочих "супермемо" (подозреваю, что такое именование - маркетинговый ход), реализованную функциональность можно действительно назвать "супер" - она реализована супер-гибко. Стратегий повторений может быть любое количество! Они имеют настройки. Все открыто, ничто не мешает пользователю изменять существующие стратегии и/или придумывать и добавлять свои. Все ограничено только вашей творческой фантазией.

    Таким образом, сейчас программа имеет 3 типа, даже вернее сказать, 3 измерения стратегий:

    1. стратегии упорядочения по оценками.
    2. стратегии авто-оценок.
    3. стратегии повторений (memo-стратегии).

    Термин "измерения" более точно отражает суть, поскольку это независимые направления, выбор по каждому из которого, подобно пространственным координатам, задет "точку" конкретной интегральной "3D"-стратегии. Всевозможные комбинации по этим направлениям + значения многих других опций определяет для пользователя огромный "супермаркет" возможностей.
    Наверное есть все, что вы можете захотеть в зависимости от вашего темперамента или текущего настроения. Как известно, продолжительная монотонность утомляет, но не нашем случае, поскольку есть возможность переключаться на огромное количество различных вариантов.

    А если чего нет, то предоставлена возможность сделать это самому. Вам, так сказать, предлагается не просто пусть и очень большой "мульти-тул", а во многом и "3D принтер", на котором можете "допечатать" то, что вам потребовалось или захотелось.

    Как работают memo-стратегии?

    Прежде всего, чтобы для какого-либо excel-тренинга иметь возможность воспользоваться мемо-стратегиями нужно этот тренинг добавить в так называемый мемо-репозиторий - Memo repository.
    Это можно сделать с помощью нового пункта "Add to memo" в контекстном меню тренинга в области упражнений (а если тренинг уже добавлен, то вместо этого вы увидите пункт меню "Remove from memo").

    Сам же мемо-репозиторий можно открыть кнопкой, находящейся сразу над кнопкой показа картинок (на полосе переключающей видимость области упражнений).

    Окно мемо-репозитория, хотя и будет всегда находится поверх главного окна программы, но оно не блокирует его. Так что можно свободно выполнять любые настройки в главном окне не закрывая окно репозитория.
    Упоминаю об этом, поскольку эта возможность часто бывает полезна.


    Далее, отметим, что все мемо-стратегии, которые входят в поставку, можно разделить на две группы:

    • это все стратегии, кроме "Supermemo-2".
    • и, соответственно, пока единственная "Supermemo-2" стратегия.
    Обсудим каждую группу по отдельности:

    • Первая группа стратегий применяется к тому материалу, который вы некогда, как минимум, уже один раз запомнили, т.е. для которого была поставлена максимальная оценка, как минимум, один раз.

      И, как вы знаете, если у данного слова/фразы последняя оценка максимальна, то, когда вы кнопкой "Start" запускаете тренинг, такое слово вам уже не предъявляется, поскольку считается что вы его уже выучили.
      Однако, если вы этот тренинг добавили в "Memo repository" и запускаете его оттуда, то в зависимости от выбранной вами memo-стратегии, данное слово уже может предъявляться.

      Дело в том, что внутри этого репозитория ваша максимальная оценка может "прокисать", т.е. как бы "портиться" и уже не быть максимальной. И соответственно данное слово уже будет предъявляться. Через какое время она "прокисает", точнее сколько раз и через какие периоды она будет "прокисать" и на сколько баллов она "испортится" все это определяется конкретной memo-стратегией.

      В простейшем случаем (как во всех статегиях первой группы), memo-стратегия задается одной функцией (с именем CreateMemoFrame), которая принимает на вход историю оценок (и ряд других, менее существенных параметров), а на выходе выдает новую оценку (и ряд других менее существенных значений). Эта новая оценка, как бы замещает последнюю максимальную оценку. И соответственно, если она меньше максимальной, то данное слово уже будет предъявляться.

      В функцию также передается тип канала и направление (от родного к иностранному или наоборот). Теоретически, кривая забывания для разных каналов восприятия и направлений может быть разная. Эти параметры позволят это учесть.

      Эти функции не "зашиты" жестко в программе, а определены во внешних тексовых файлах с расширением *.cs в папке:
      \options\memo\strategies\

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

      Как уже отмечалось, для работы с файлами стратегий удобно использовать редакторы с подсветкой синтаксиса (или даже IDE). Самое простое, если у вас он еще не стоит, рекомендую на замену стандартного блокнота notepad скачать такой бесплатный редактор из разряда must have как notepad++.


      А сейчас поделюсь с вами своей методой, как работать с этой группой стратегий (конечно, это лишь моя личная практика, возможно, вы придумаете что-то другое):

      • выбираю канал или каналы которые хочу учить
      • включаю режим повторения (кнопкой со значком бесконечности)
      • добавляю какой-либо тренинг в мемо-репозиторий
      • открываю мемо-репозиторий
      • выбираю по данному каналу (или каналам) мемо-стратегию. Пусть, например, это будет Type канал и я выбрал "5 iterations" стратегию в колонке с тем же названием что и канал. Если есть необходимость, настраиваю эту стратегию (кнопкой с иконкой шестеренки в колонке "Opt")...
      • при этом, обновится колонка статистики("Stat"). Если для этого тренинга еще не было максимальных оценок, то будет показана нулевая статистика белым цветом.

        А если максимальные оценки были, то будет показана ненулевая статистика (подробности которой можно увидеть кликнув на нее), причем возможны следующие варианты:
        - красноватое поле статистики говорит, что имеются объекты для повторения
        - синее - объекты имеются, но время повторения еще не пришло
        - зеленое - все объекты, согласно этой стратегии, полностью выучены.
        (вот такая "цветовая дифференциация штанов" :))
      • запускаю мой тренинг через двойной клик по строке (альтернативный вариант запуска: через контекстное меню - пункт меню "Play").

        Логично, что режим повторения работает только когда есть что повторять, т.е. когда поле красноватое. В остальных случаях программа скажет, что объектов для повторения нет, и спросит хочу ли все-таки запустить тренинг, но уже в обычном режиме (как это происходит через кнопку "Start").
      • при запуске, откроется окно параметров excel-тренинга. В стратегиях авто-оценок у меня обычно поставлены все галочки, и выбраны стратегии "+x or -y%". А в качестве порции слов стоит 5 или чуть выше...

        Следует заметить, что при запуске, но только и только из мемо-репозитория, вы увидите в окне параметров новые стратегии порядка это "Memo time up" (по умолчанию) и "Memo time dn".
        Первая стратегия порядка сортирует слова по времени ожидания снизу вверх, т.е. первыми вам будет предлагаться слова, которые просрочены больше всего. Вторая, очевидно, сортирует слова в обратном порядке.

        Просроченное время ("Left" time) имеет отрицательное значение, поэтому все верно - "Memo time up" сортирует именно снизу вверх, от меньшего к большему.

      • прохожу тренинг выучивая всю порцию слов до максимальных оценок
      • потом "прокручиваю" слова еще раз в голове.

        Почему порция в 5 слов, а не 50? Известно, что "средний" человек может одновременно держать в голове лишь 5-7 объектов внимания. Поэтому такой выбор довольно удобен в качестве некого кванта запоминания. Можно, для еще лучшего запоминания, попробовать составить некую связную историю их этих слов. А также, в плане развития своих способностей, постепенно увеличивать это число.
    • Вторая группа, на данный момент, представленна единственной "Supermemo-2" стратегией.
      Концепция программы позволяет создавать и другие виды стратегий, нежели стратегии первой группы. Одной из таких стратегий как раз и является эта стратегия.

      Это известная стратегия, и работа с ней предполагает несколько иную логику и иной смысл значений оценок.

      Здесь не требуется, как для первой группы, каждый раз в одну сессию, запоминать слово. Разве только первый раз, а далее же, во всех последующих сессиях, отключаем режим повторения: один раз прошли, оценили, и все - не нужно добиваться максимальной оценки.

      И соответственно, для всех следующих сессий:
      - режим повторения (значок бесконечности) должен быть отключен
      - авто-оценки должны быть отключены (ручной режим)

      Если для первой группы, чтобы объекты "подцепились" на повторение, нужно чтобы у них стоял максимальный балл, то здесь нужно, чтобы стоял хоть какой-то балл. Если же еще ничего никогда не ставилось, то такой объект не "подцепляется" данной стратегией.

      Схема работы с этой стратегий такая (мой подход):

      • первый раз запускаем тренинг в обычном режиме (можно из мемо-репозитория). Я запускаю его в режиме повторения и выучиваю выбранную порцию слов до конца.
      • эта порция слов сразу появится в статистике мемо-репозитория с временем ожидания в 1 день.
      • когда придет время повторять, обязательно выключаем режим повторения и авто-оценки и запускаем тренинг (конечно, из мемо-репозитория).
        Если исходить из 5-бальной шкалы, то согласно стандартному описанию, баллы имеют следующие психологические значения, которые вы себе ставите после каждого цикла "вопрос-ответ":
        (0) Что это было (объект не распознан) - эту оценку можно поставить только нажав клавишу '0'
        (1) Ответ был неверный, но слово знакомо
        (2) Ответ был неверный, но он был "на кончике моего языка"
        (3) Ответил правильно, но едва-едва
        (4) Ответил правильно, но пришлось думать об этом
        (5) Сразу знал ответ

        С другой шкалой (например 10-ти бальной), тоже нет проблем, просто эти градации "растянуться" или "сожмутся" на ваш диапазон.

    Если вы читали про авто-оценки, то знаете, что программа запоминает историю оценок в виде списка троек (сама оценка, дата-время выставления оценки, уникальный номер сессии).

    Остальной текст еще пишется...
    Но главное - смотрите исходники файлов стратегий, там все есть.

    Я считаю "творческие порывы" к созданию своих стратегий очень важными, поэтому "feel free", обращайтесь, обязательно помогу. И, более того, дам за такую активность хорошие бонусы на приобретение программ.


    Содержимое мемо-репозитория можно сохранять на диск, и соответственно восстанавливать, кнопками "Save" и "Load". Это позволяет составлять из тренингов определенные "курсы обучения".
    О текущем же состоянии мемо-репозитория не нужно заботиться - оно сохраняется автоматически.

  • При работе с Voice каналом, теперь можно помогать клавиатурой. Включить эту возможность можно нажатием на кнопку с буковкой "t". Эта кнопка появляется в области ответа сразу за красным значком микрофона.

    Таким образом, работа с Voice и Type каналами стала полностью симметричной:
    в Type канале можно помогать голосом, и обратно - в Voice канале можно помогать клавиатурой.

    Фактически, эти каналы стали почти идентичны. Однако, сокращать какой-либо из них - нецелесообразно, поскольку по каждому каналу идет своя отдельная история оценок: отдельно на произношение и отдельно на правописание. "Плюс" возможность комбинации прохождения этих каналов восприятия в одной сессии.

  • Добавлена "горячая клавиша" для команды повторения, а именно <Ctrl>+R. Теперь команду на повторения можно вызвать не только кликом на кнопку или голосом (если включен микрофон), но и нажатием этой комбинации клавиш, что удобно, когда работа идет чисто с клавиатуры.

  • В "дальние" опции (которые упрятаны в окне Options) добавились 2 новые опции касающиеся оценок:

    • Галочка "Simple clustering memo statistics".
      Дело в том, что статистика в мемо-репозитории может быть сильно фрагментированна, поскольку по ходу сессии, оценки выставляются в разное время, особенно если вы в промежутках любите подумать (полезное занятие :)). Чтобы упростить статистику, сгруппировав близкие по времени оценки в кластеры, и нужна эта опция.

      Кластеры считаются очень просто - дата-время оценки рассматривается как общее число минут (прошедшее с Рождества Христова) и от этого числа берется модуль по значению другой опции - "Cluster value (minutes)". Соответственно, есть хороший шанс, что у близких по времени оценок это число будет одинаковым и соответственно они попадут в один кластер.

      Понимаю, что метод примитивный, но применять для такой несущественной, можно сказать, декоративной проблемки, сложные алгоритмы кластеризации из теории искусственного интеллекта, посчитал излишним.

    • Галочка "One date-time of marks for one session" решает предыдущую задачу кардинальным образом.
      Если она включена, то дата-время для всех оценок, которые ставятся в одной сессии будет одинаковой, а именно, - это время старта сессии. По умолчинию она выключена, но лично я, включил ее у себя.

    Также были более логично перегруппированы опции касающиеся Type канала - некоторые из них переехали под кнопку включения/выключения канала.

  • Внимание!
    Для excel-тренингов был изменен формат записи истории оценок - то в каком виде они они хранятся в excel-файле. Если коротко, то сейчас последняя оценка едет первой в списке, в то время как раньше она шла последей.
    А если подробнее, то раньше был такой формат:
    (некоторые данные - обычно отсутствуют)|(оценка-1);(оценка-2);...;(оценка-N)
    В новой же версии программы такой:
    (некоторые данные - обычно отсутствуют)|(оценка-N);...;(оценка-2);(оценка-1)

    Если у вас есть текущие словари, где хранятся истории оценок, и если вы захотите их подключить к новой версии программы, то могут быть неожиданные эффекты.

    Простите меня великодушно, но пока клиентов еще мало, решил, пока не поздно, сделать это изменение, поскольку как показала практика разработки тех же мемо-стратегий, новый формат способствует более лаконичным и быстрым алгоритмам.

    Если вы всегда работали в режиме повторения, в каждой сессии доводя оценки до максимальной, то в принципе, ничего страшного.
    А вот если у вас какие-то сессии завершались не максимальными оценками, то, очевидно, при запуске такого тренинга вы увидите не последнюю, а свою самую первую оценку.

    • можно написать excel-формулу которая бы пере-конвертировала старый формат в новый. А если, кто с экселем не очень дружит, то напишите мне на почту, сделаю такую формулу, она не сложная.
    • если же вам применять эту формулу будет сложно (или лень) и если вас наберется более 3-х человек, то разработаю программку-конвертор, которая "развернет" все истории в excel-файлах автоматически.
  • Исправлены некоторые мелкие замеченные ошибки.


Version 1.3.0.*

  • В стратегиях авто-оценок, там где в коррекции оценок учитывается факт повторения, учитывалось только повторение путем клика на кнопку повторения, но не в случае когда команда на повторение давалась голосом. Исправлено.
  • Для Type канала с включенной опцией микрофона (так что ответ можно давать голосом) и включенной озвучкой вопроса, бывает, что озвучка вопроса еще не закончилась, а микрофон уже включен. При включенных колонках, особенно на ноутбуках, это может вызывать нежелательное распознавание звука вопроса. Для решения этой проблемы введена опция "Wait end of speaking before recognizing" (по умолчанию - включена). Опция находится в выпадающих настройках микрофона.
  • Теперь концептуально четко выделены три отдельных канала обучения:

    1. Visual (смотрим и представляем ответ).
    2. Voice (отвечаем голосом).
    3. Type (печатаем ответ на клавиатуре).

    Порядок прохождения двух последних каналов может меняться. Visual канал же может идти только первым. Двигать его особого смысла нет, поскольку если он задан, то первое место - как раз наиболее логичное для него место, представить иную необходимость довольно трудно.

    Соответственно, в любой момент (до тренинга или даже по ходу!) можно включать/выключать один или несколько этих каналов и менять их порядок.
    Очевидно, всегда должен быть включен, как минимум, один канал (иначе что учить?). Поэтому программа не позволять сбросить все каналы (т.н. "защита от дурака").

    По ходу тренинга, в зависимости от того какой канал мы проходим, значок сответствующего канала подсвечивается красным цветом. Но если выключен всего один канал, то подсвечивать его смысла нет и он не подсвечивается.

  • Убраны монстро-образные многорядные окна оценок. Теперь они простые и предлагаются (если это, конечно, задано пользователем) отдельно после прохождение каждого канала.

  • Для Type канала, теперь можно не только печатать, но и помогать голосом (возможно с последующей ручной коррекцией). Для включения/выключения этой возможности, используйте кнопочку с иконкой микрофона над полем ввода ответа.

  • Реализована крупная функциональность - возможность, чтобы оценки выставлялись автоматически.
    Реально удобная вещь. Теперь можно думать всецело только о предмете (т.е. иностранном языке), не отвлекаясь на придумывание оценок.
    А при включенном микрофоне можно даже вовсе не прикасаться к компьютеру, а просто с ним разговаривать.

    Данная функциональность реализована чрезвычайно гибко:

    • Можно самому определять стратегии авто-оценок, путем коррекции или добавления текстовых файлов (в которых описана логика авто-выставления оценок) в папке:
      \options\autoMarkStrategies\

    • В пакет поставки сейчас входят 8 (1 + 7) стратегий:

      • manual    - ручной режим (т.е. авто-оценки нет - то как было до этой версии)
      • +1 or -50%
      • +1 or -errors
      • +1 or nothing
      • +1 or set to 1
      • +1 or -smart
      • +x or -y%    (с опциями) - мой фаворит, на данный момент.
      • ±one

      Каждая стратегия имеет тултип, с кратким описание, который появляется после выбора этой стратегии. А более подробную информацию о стратегии, ее детальный алгорим, вы можите увидеть открыв соответствующий ей файл.

      Некоторые стратегии имеют опции. В этом случае, после выбора такой стратегии, рядом с ней появляется кнопочка с иконкой шестеренки, нажав на которую можно открыть и изменить эти опции. А в самом окне опций есть кнопка "Set to default" с помощью которой, как вы уже догадались, можно всегда вернуться к изначальным значениям опций. Само же наличие опций и их состав также определяется в файле алгоритма стратегии (см. последнее примечание в этом разделе).

    • Авто-оценки, которые вы можете выставлять в файле алгоритма вашей стратегии, могут быть и дробные, они так и будут показаны в программе - как неполностью (пропорционально дробной части) заполненные звездочки.
      Однако, для наглядности, в существующих стратегиях везде используются только целые оценки. А если нужно увеличить "масштаб" оперирования, то для этого не обязательно уходить в дроби - достаточно увеличить верхнюю границу диапазона оценок. По умолчанию она равна 5-ти, но, напомним, что она может варьироваться от 2 до 20 и ее можно совершенно свободно менять - все ранее выставленные оценки будут автоматически пропорционально пересчитываться

      Это потому, что в базе выставленных оценок хранится не сам балл оценки, а его доля относительно максимальной оценки. Так, если текущая максимальная оценка 5, а вы поставили 3 балла, то в базу записывается 3/5. Когда нужно будет показать эту оценку пользователю, 3/5 извлекается из базы и умножается на максимальную оценку.
      Если это 5, то будет показано 5 * 3/5 = 3.
      А если это, скажем, 10, то будет показано 10 * 3/5 = 6.

    • Когда оценка выставляется автоматически, она на мгновение показывается в виде все того-же окошка оценок, и при этом показывается анимация того, как она меняется со старой на новую.
         По умолчанию, это "мгновение" длится 600 миллисекунд, однако, вы можете изменить его на любое другое значение. Значение этой задержки находится в поле "Delay of mark-showing when auto-mark" в выпадающих настройках окошка оценок. Это новые настройки, которые добавились в данной версии. Чтобы их вызвать - нажмите первую (слева) кнопку в окошке оценок.
         Более того, это "мгновение", согласно восклицанию классика, можно остановить. Это можно сделать в любой момент, наведя курсор мыши на окошко оценок пока оно еще не успело закрыться. Все время пока курсор находится над окошком, оно не закроется (соответственно как только его уберете - сразу закроется). Вы можете заранее разместить курсор над местом, где должно открыться окошко оценок и таким образом всегда "поймать" его.
         Данная возможность полезна, если вы хотите скомбинировать автоматический и ручной режим выставления оценок. Поймав окошко, вы можете не согласится с авто-оценкой и выставить свою. А также если вам нужно изменить какие-либо опции в выпадающих настройках окошка оценок.

    Как уже отмечалось, вы можете как добавлять в \options\autoMarkStrategies\ папку свои стратегии так и изменять существующие. В принципе, это не сложно и посмотрев существующие файлы вы можете по аналогии добавить свою стратегию. Но если вы совсем не знакомы с программированием или вам просто лень, то напишите что вы хотите, и обещаю, что ваша статегия будет быстро реализована какой бы причудливой (но в разумных пределах ;)) она ни была.

    Для искушенных же добавим, что технически, в каждом "*.cs" файле стратегии находится фрагмент С# кода и соответственно там можно использовать всю мощь .NET фреймворка.
    А заглавный текст заключенный между /*...*/ определяет ее описание, которое вы и видете в программе. Далее, в таком файле обязательно должен быть определен метод с сигнатурой:

    static float GetAutoMark(MarkHistory markHistory, // история всех выставленных оценок
                string solution, // решение (правильный ответ)
                string userAnswer, // ответ, который дал пользователь
                bool isCorrectAnswer, // флаг: совпадает ли ответ пользователя с решением?
                bool isNative,  // флаг: направление изучения "от родного к иностранному"?
                bool wasRepeat // флаг: было ли повторение? (воспользовался ли пользователь кнопкой повторения)
                    )
    

    А также в этом файле могут быть (но не обязательно) определены опции. Чтобы определить опции надо добавить кусок кода имеющий следующую структуру:

    class Options
    {
        public Options()
        {
            // здесь задаем значения опций по умолчанию
            Option1 = default_value1;
            Option2 = default_value2;
            ... // и т.д.
        }
        public Type1 Option1 { get; set; } // определение первой опции
        public Type2 Option2 { get; set; } // определение второй опции
        ... // и т.д.
    }
    
    И соответственно добавить дополнительный параметр в метод GetAutoMark:
    static float GetAutoMark(MarkHistory markHistory, // история всех выставленных оценок
                string solution, // решение (правильный ответ)
                ...
                bool wasRepeat, // флаг: было ли повторение? (воспользовался ли пользователь кнопкой повторения)
                Options options // Опции 
                    )
    

    В опциях, в качестве Type1, Type2... могут быть типы: int, bool, double, string,...и т.д. В общем, любые простые типы языка C#.

    К определению единичных опций (свойств) также могут добавляться атрибуты задающие их "человеческое" название (DisplayName), описание (Description) и числовой диапазон (Range) если это числовое свойство.
    В качестве конкретного примера см. файл "\options\autoMarkStrategies\+x or -y%.cs".

    Стратегии могут быть довольно сложные. Например, в стратегиях "+1 or -errors.cs" и "+1 or -smart.cs", для оценки величины ошибки пользователя используется Расстояние Дамерау - Левенштейна

    Обратите внимание на первый параметр метода GetAutoMark, а именно MarkHistory markHistory.

    • В нем содержится вся информация по истории оценок, как за все время:
      markHistory.Marks - список объектов Mark.
    • Так и история за текущую сессию (т.е. история от момента нажатия кнопки Start и до конца упражнения):.
      markHistory.SessionMarks - список объектов Mark.
      (см. "+x or -y%.cs" с примером использования SessionMarks).
    Каждый объект Mark имеет следующие свойства:
    • float Value - значение (доля балльной оценки от максимального балла)
    • DateTime UtcTime - дата-время выставления оценки (utc - время)
    • uint SessionId - уникальный номер сессии.
    Все это можно использовать для придумывания различных стратегий - нет никаких ограничений вашей фантазии!

    Для работы с файлами стратегий удобно использовать редакторы с подсветкой синтаксиса (или даже IDE). Самое простое, если у вас он еще не стоит, рекомендую на замену стандартного блокнота notepad скачать такой бесплатный редактор из разряда must have как notepad++.

  • Улучшено распознавание голоса.

    Кроме того:

    • В программе в выпадающих настройках микрофона (в верхней части окна, справа от таймера занятий) есть два режима - Equal и Contain. Как можно понять по их названиям, в режиме Equal результат распознавания должен в точности совпасть с ответом. А в режиме Contains достаточно чтобы ответ лишь содержался в распознанной фразе. Например, если ожидается ответ "half", то в режиме Contains успехом будет также получить "one half" (реально "half" (моим голосом) трудно распознается, а вот "one half" нормально).
    • Еще есть такой файл:
      \options\userInteractiveEnv.json
      Там можно регулировать некоторые вещи. Например, если какое-то слово упорно не хочет распознаваться, а вместо него возвращается другое слово (близкое по звучанию), то в этом файле, в частности, можно это близкое слово обозначить как верный ответ. Технически, там находятся фрагменты C# кода (в виде лямбд) и соответственно там можно использовать всю мощь .NET фреймворка.
  • В режиме ручного выставления оценок, помимо того, что это можно делать голосом, добавились голосовые команды "next" и "repeat". Эти голосовые команды также доступны на каналах Voice и Type (при включенном значке микрофона). И позволяют вам не прикасаясь к компьютеру сказать ему, что хотите либо перейти к следующему шагу (форсаж), либо повторить текущий.

    Добавлю, что оценки также можно выставлять голосом (по русски или на иностранном языке):

    • говорим "0"-"20", для выставления оценки.
    • говорим "max" ("max, excellent", "максимум, отлично"), для выставления максимальной оценки

    Также есть возможность давать голосовые команды:

    • повторить слово (говорим "repeat", "повторить").
    • перейти к следующему слову ("next", "следующий")

    Список всех команд находится в файле:
    \options\voiceCommands.json

    Там вы можете сами изменить слова для команд или добавить (через запятую) свои слова, в том числе добавить и варианты команды на других языках (сейчас только русский и 2 варианта английского). Например команду "next" можно так изменить:

        {
            "Key": "next",
            "ByLangDic": {
                "en-GB": "please next sir", // один вариант каким можно дать эту команду
                "en-US": "next, force", // 2 варианта
                "ru-RU": "следующий, дальше, а теперь горбатый" // 3 варианта
            }
        },
                                
  • Практически все настройки, для которых это было возможно теперь динамические, т.е. их можно менять прямо по ходу тренигов, не останавливая их.
    Например, можно менять шкалу оценок (число звездочек) прямо в момент оценки. Значение этой и других опций относящихся к оценкам, находится в выпадающих настройках окошка оценок. Чтобы их вызвать - нажмите первую (слева) кнопку в окошке оценок.

    А также, во время прохождения Type и Voice каналов, обратите внимание на появившиеся кнопочки с иконками шестеренки. Это выпадающие настройки где вы также можете динамически менять некоторые опции. В том числе менять стратегии авто-оценок прямо по ходу тренинга.

  • Более логично перегруппированы некоторые опции:

    • содержимое вкладки Mark из окна опций программы переехало под кнопку "Additional options" диалога параметров тренингов определяемых в Excel файлах.
      Там же дублируется опция задающая задержку показа окна оценок, когда выбрана какая-либо стратегия автоматического выставления оценок.
    • кнопка показа картинок, переехала вниз - на полосу переключающую видимость области упражнений.
  • В окне показа картинок была добавлена новая опция, которая определеят поведение скроллинга при обновлении картинок, и которая состоит их 3-х выборов:

    1. Scroll to Top скроллинг в начало списка картинок
    2. Scroll - Fixed сохраняется текущая позиция в списке
    3. Scroll to Bottom скроллинг в конец списка
  • Если включена хоть одна из галочек показа оценок (Mark - Count - Date, в диалоге для excel тренингов), то по ходу тренинг можно посмотреть историю выставленных оценок (фактически кривую запоминания/забывания). Для этого нужно просто кликнуть на инфу (Mark - Count - Date) расположенную в правом верхнем углу области вопроса.

  • В настройки Type канала добавилась опция "wait Return". По умолчанию, если вы написали правильный ответ, то вам не нужно жать клавишу "Return" - программа как только обнаруживает корректный ответ сразу переходит к следующему шагу. Но если вы поставите галочку в эту опцию, то "Return" будет всегда ожидаться.
  • Добавлена возможность изменить масштаб полосы индикатора уровня громкости микрофона. Если кликнуть на полосу, то появится соответствующая настройка.

  • Исправлены некоторые мелкие замеченные ошибки.


Version 1.2.0.7

  • Реализованы две сквозных (т.е. в любых тренингах) возможности:

    1. Возможность давать ответ печатая его на клавиатуре. Тернировка правописания и подключение моторной памяти.
    2. Возможность давать ответ голосом. Распознование речи, которое работает если интеренет включен.
  • Также голосом можно давать команды и выставлять оценки.

  • Реализована сквозная (в любых тренингах) возможность отображения картинок для слов или фраз:

    • Картинки могут автоматически подгружаться из интерната (Google, Yahoo, Bing, ... можно самому определять новые источники).
    • Их можно вставлять через буфер обмена (перед этим, например, скопировав на любом сайте в буфер обмена).
    • Их также можно вставлять предварительно скопировав в буфер обмена как файлы.
    • Их можно "тасовать" внутри списка картинок и сохранять (для офлайн просмотра).
    • Существует масса настроек поведения показа картинок и их онлайн-поиска.
  • Добавлено множество новых упражнений по словарному запасу.

  • Улучшены некоторые особенности использования и исправлены мелкие ошибки.


Version 1.1.0.0

  • Теперь можно учить лексику намного эффективнее. Реализован режим, который позволяет давать оценки усвоения вами слов/фраз из excel-словарей. И далее учить только те слова, которые вы еще плохо помните.

    Шкалу оценок можно выбирать любую, по умолчанию от 1 до 5 (как в старой школе), причем если в другой раз выбираем другую шкалу, например от 1 до 10 (как в новой школе), то ранее выставленные оценки автоматически масштабируются в новую шкалу.

    Предполагается следующая методика:

    • как обычно, программа предъявляет вопрос - слово из словаря.
    • после того как будет показан ответ, теперь можно его оценить по выбранной шкале (в виде звездочек рейтинга).
    • например, если слово совершенно незнакомое, мы поставим ему 1 бал, а если абсолютно знакомое, можно ему поставить максимальный бал и тогда оно больше не будет нам предъявляться.
    • при следующем проходе, будут показаны только слова которые имеют бал меньше максимального, а также ранее выставленная оценка.
    • по мере усвоения слов, увеличиваем их оценки, до тех пор пока они все не достигнут максимального бала.
    • в перерывах, представляется более удобным сохранять/востанавливать текущее состояние, а не запускать тренинг заново.
    • лично я, ставлю бал больше 1, а имеено 2-ку, только если назвал слово. А более высокие оценки ставлю только если верно представил как оно пишется.

    Для каждого направления (либо от родного языка к иностранному либо обратно) оценки свои. Т.е. выучив словарь, например, в режиме от родного к иностранному можно поменять направление (от иностранного к родному) и проработать уже данное направление. Для него применяются новые, независимые от первого направления оценки.

    В дереве упражнения, в контекстном меню, а также при запуске тренинга, можно посмотреть подробную статистику по оценкам.

    • Для выбранных направлений и словарей, программа позволяет стереть оценки, если возникнет такая потребность (предварительно будет выдано последнее предупреждение на подтверждение операции).
    Оценки можно стереть также вручную (в том числе уже выборочно для отдельных слов) открыв соответствующий словарю excel-файл.

    • в 20-й ("V") колонке хранятся оценки от родного к иностранному
    • в 21-й ("W") - от иностранного к родному
    • но колонки можно назначить и другие, в том числе и одну и ту же на оба направления. Они задаются параметрами FnToNvMarkColumn и NvToFnMarkColumn в файле упражнения.

    • Если шкала оценок <= 10, то чтобы дать оценку, можно использовать клавиатуру: 0-9 и A - для 10-ки (как известно, в 16-ричной записи A - это 10).

    • Можно задавать одну из 2-х стратегий изучения лексики (есть идеи, в будущем, добавить еще больше статегий).

    • Окошко оценки можно масштабировать и перемещать как удобно. Есть настройка определяющая разрешен ли форсаж при открытом окошке. А также настройка, будет ли программа ждать оценки от пользователя или пропускать слово, если пользователь не успел отреагировать по истечении времени задержки.

    • Кисть (цвет) звездочек-оценок можно поменять в опциях.

    • Старый режим также остается в силе. Для этого надо просто снять галочку "Use marks". Оценки, конечно, не стираются, они только не будут использоваться.

    • Есть еще другие нюансы и опции, которые проще увидеть и попробовать в программе, чем описывать...

  • Для excel-словарей, при их запуске, можно задавать порцию слов, которую хотим учить. По умолчанию "-1", что означает все слова.

    А также задавать будут ли слова предъявляться в том порядке как они идут в excel-файле или каждый раз случайно перемешиваться.

  • В excel-словарях можно определять колонки категорий (или групп), по которым будут группироваться слова, например "одежда", "пища", "основная лексика"... Таких колонок групп может быть несколько, так, "одежда" может быть в свою очередь разбита на "женскую" и "мужскую" подгруппы и т.д. Уровень вложенности подгрупп не ограничен.

    При запуске упражнения можно отметить какие группы/подгруппы хотим учить. По умолчанию отмечены все.

    Если заданы несколько колонок групп, то из их значений строится иерархическая древовидная структура. Однако, на данный момент, эта структура представлена в интерфейсе программы в виде простого списка, где значения подгрупп отделены друг от друга разделителем " > ", например: "одежда > женская". Мне показалось такое представлени дерева более простым, поскольку обычно вложенность подгрупп не более 2-х. Но, если многим вариант "честного дерева" (как в дереве упраженний) покажется более удобным, то, нет проблемм, переделаю на это представление.

    В файле упражнения колонки групп задаются перечислением через запятую в параметре GroupByColumns. Например, см. \exercises\словарный запас\1-е слова - english-first.json.

    В качестве альтернативы порций слов о которых говорилось выше, можно задать колонку групп-порций, например формулой: =ЧАСТНОЕ(СТРОКА();15) +1 для разбивки по 15 слов. Для \exercises\словарный запас\1-е слова - english-first.json см. колонку "E" в соответствующем excel-файле на соответствующем листе. Кому-то такая альтернатива может показаться более удобной и управляемой.

  • В диалоге параметров времен, возле каждой галочки времени появился знак вопросика, клик на который откроет теоретический материал по этому конкретному времени. Сводную таблицу времен можно увидеть кликнув на вопросик в "негативе" в левом верхнем углу матрицы времен.

    Все эти материалы находятся в виде htm-файлов в папке \options\materials\ru-en\. При желании, можно их заменить своими или отредактировать.

  • Реализована возможность полностью управлять ходом тренинга с клавиатуры. Довольно удобная вещь, особенно для ноутбуков без мыши:

    • «пробел» или «→»   – перейти к следующему шагу тренинга.
    • «←»   вернуться на шаг назад.
    • «↓»   повторить текущий шаг.
    • «↑»   пауза/продолжение.
  • Теперь программа показывает описания к тренингам (если они есть).

  • В дереве упражнений, реализовано контекстное меню, где щелкнув правой кнопкой мыши на упражнении, можно увидеть пункты:

    • «Open file folder»  – открывает в проводнике папку тренинга и выделяет его в ней.
    • «Marks statistics»  – показывает статистику для excel тренингов.
    • «Description»  – показывает описание тренинга если оно есть (задается в его файле).
  • Произведена некоторая реструкторизация Есть несколько новых файлов упражнений. В папке \exercises (french) можно увидеть тренинги базовой лексики Французского языка. А в \exercises (china) - китайского. Что касается лексики, то пара языков может быть любая. Находите готовые файлы или составляйте свои и пользуйтесь!
    По поводу французских (или других) голосов, знаю где найти, пишите на почту - отвечу./

  • Добавились новые настройки (см. окно опций, раздел "General").

  • Изменена иконка программы (возможно не окончательный вариант, еще в поиске самой красивой :)).

  • Исправлены мелкие ошибки.