Универсальная клавиатурная раскладка

в 8:11, , рубрики: diy или сделай сам, keyboard layout, периферия, Читальный зал

Предыстория и предпосылки

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

На каждой раскладке свой набор символов, из-за чего для некоторого набора нужно было переключать раскладку, вводить символ, а после возвращаться на прошлую; на каждой раскладке своё расположение для одних и тех же символов; некоторые востребованные символы и вовсе доступны только через комбинации с alt; ужасное расположение «ё» на русской раскладке; ну а об общем позиционировании букв на «qwerty» вы наверняка уже читали ранее, как и о полулегенде о намеренно сложном для набора расположении, как костыле для обхода западания клавиш на первых пишущих машинках.

Тогда я стал искать, что же предлагают альтернативные раскладки. Как оказалось, они все пытаются решить только последнюю проблему. Бесспорно, весьма успешно, но только одну-единственную проблему. И только для английского языка. Для русского найденные раскладки выглядели крайне сомнительно и, как мы убедимся позже, едва ли были лучше стандартной. Также многие английские раскладки, очевидно, разрабатывались с оглядкой на «qwerty», не создавая альтернативу, а попросту немного изменяя стандартный вариант позиционирования.

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

Немного поголосив «как же так получилось» и «ведь можно сделать так, и так» внезапно дошло – а ведь действительно можно. И начались попытки создания своей раскладки, в которой были бы учтены все названные и неназванные проблемы.

Как и в любом проекте – первые версии были откровенно плохи. От одних решений приходилось сразу отказываться, к каким-то искать другие подходы, какие-то додумывать до нужного вида. И всё это, конечно же, должно быть обосновано, ведь просто «накидать из головы» несложно, но результат, увы, в таком случае будет соответствующий.

Решения, которые будут описаны ниже взвешены, множество раз обдуманы и, по возможности, будут ссылаться на какие-либо цифры и факты, а не на собственное желание сделать «так-то». Собственное желание обозначено именно в предпосылках, а реализация уже должна опираться на объективные данные.

Дисклеймер

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

Пост написан с точки зрения процесса создания проекта, с объяснениями некоторых моментов от первого лица. Более формальное описание, по общему объёму эквивалентное тексту ниже, с описанием реализации и некоторыми «узкими» моментами, содержится в readme к проекту.

Периодически я буду ссылаться на подсчёты, сохранённые в external/calculation.xlsx файле, взгляд на который, по ходу прочтения, также рекомендуется для большего понимания.

Текущая версия является единой фонетической двускриптовой клавиатурной раскладкой. О каждом прилагательном мы ещё поговорим.

Раскладку можно логично разделить на две взаимосвязанные части: буквенная раскладка стандартного вида и символьная раскладка с некоторыми особенностями и функциями.

Буквенная раскладка

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

Как можно понять, насколько удачное расположение символов? Выделить объективные критерии удобства. Ими стали:

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

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

Для последнего критерия буквенная часть клавиатуры была разделена на «группы удобства». Самой объективной группой является первая – домашние позиции пальцев, всем известный набор «фыва олдж» (в «йцукен» представлении). На неё мы и будем обращать внимание впоследствии.

Частотные анализы

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

Этап подбора анализов оказался несколько разочаровывающим, и впоследствии я к нему возвращался не раз, с целью как-либо улучшить и дополнить его. Но каждый раз я находил только новые копипасты и ссылки на одни и те же анализы, не все из которых даже являются полноценными анализами, имеют свои допущения, а некоторые и вовсе были откровенно ложны. После отбора достоверных анализов, чтобы хоть как-то расширить выборку, был написан небольшой пакет на python для создания частотных анализов (о чём был мой первый пост) и выполнены собственные анализы.
Итоговая выборка – 13 символьных частотностей для английского языка, 8 для русского, 6 биграммных частотностей для английского и 4 для русского.

Так как объём данных, на которых основывались анализы, весьма разнился, было бы некорректно учитывать их просто по среднему арифметическому, а в случае полноценной оглядки на объём – анализ с максимальной базовой выборкой просто бы перекрывал данные от прочих. Потому дабы немного сгладить значения объёмов я взял их кубические корни, от которых уже и подводил средние значения частотностей *.

Результаты "мета-анализа"

Универсальная клавиатурная раскладка - 1

Универсальная клавиатурная раскладка - 2

Универсальная клавиатурная раскладка - 3

Универсальная клавиатурная раскладка - 4

Ссылки на все использованные анализы, в порядке объёма выборки по убыванию

Английский язык; базовая частотность:

Русский язык; базовая частотность:

Английский язык; парная частотность:

Русский язык; парная частотность:

Создание раскладки

На основе выделенных критериев и собранных анализов в excel'е был создан лист с автоматическим подсчётом значений, на основе введённой раскладки.

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

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

Универсальная клавиатурная раскладка - 5

Не отходя от привычных методов именования, название раскладки составилось, с небольшой стилизацией, по первым символам верхнего ряда – «qPhyx».

Значения по критериям

Давайте взглянем на автоматически рассчитанные значения созданной раскладки:

  • чередование рук – 70.58% и 71.23%
  • вероятность «чистого» повторного нажатия одним пальцем – 2.55% и 4.54%
  • равномерность нагрузки рук – 48.36/51.64% и 52.35/47.65%
  • максимальная разница нагрузки пальцев – 4.86% и 8.98%
  • использование «домашней» группы – 64.95% и 58.07%

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

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

йцукен (ru)

  • чередование рук – 53.50%
  • вероятность «чистого» повторного нажатия одним пальцем – 19.17%
  • равномерность нагрузки рук – 53.53/46.47%
  • максимальная разница нагрузки пальцев – 29.72%
  • использование «домашней» группы – 33.86%

Занимательный факт: две трети всех нажатий в «йцукен» приходятся на указательные пальцы. А подобная сгруппированность популярнейших символов в результате приводит к тому, что и каждое пятое нажатие будет выполняться одним и тем же пальцем. О каком «десятипальцевом наборе» в такой ситуации может идти речь?

яверты (ru)

* Учитывались только буквы основного буквенного блока.

  • чередование рук – 48.11%
  • вероятность «чистого» повторного нажатия одним пальцем – 8.98%
  • равномерность нагрузки рук – 53.40/46.87%
  • максимальная разница нагрузки пальцев – 13.09%
  • использование «домашней» группы – 25.92%
qwerty (en)

  • чередование рук – 52.60%
  • вероятность «чистого» повторного нажатия одним пальцем – 7.08%
  • равномерность нагрузки рук – 58.69/41.31%
  • максимальная разница нагрузки пальцев – 20.17%
  • использование «домашней» группы – 25.70%
workman (en)

  • чередование рук – 55.96%
  • вероятность «чистого» повторного нажатия одним пальцем – 2.91%
  • равномерность нагрузки рук – 51.49/48.51%
  • максимальная разница нагрузки пальцев – 11.14%
  • использование «домашней» группы – 63.71%
colemak (en)

  • чередование рук – 58.64%
  • вероятность «чистого» повторного нажатия одним пальцем – 1.26%
  • равномерность нагрузки рук – 48.38/51.62%
  • максимальная разница нагрузки пальцев – 12.05%
  • использование «домашней» группы – 64.95%
dvorak (en)

  • чередование рук – 70.67%
  • вероятность «чистого» повторного нажатия одним пальцем – 2.61%
  • равномерность нагрузки рук – 43.30/56.70%
  • максимальная разница нагрузки пальцев – 9.48%
  • использование «домашней» группы – 58.92%

Больше раскладок и их значений вы можете найти в упоминавшемся .xlsx файле. Здесь перечислены лишь основные показатели наиболее важных к упоминанию раскладок.

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

Символьная раскладка

Требования к символьной раскладке, включая уже озвученные ранее:

  • единство символов для любой буквенной раскладки
  • разграничение между буквенным и символьным слоями
  • группировка символов по логическим категориям
  • расширенный набор символов; добавление диакритических символов
  • расположение с учётом «групп удобства»

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

Опробовав различные варианты, я выбрал двух финалистов, что открывает сразу 66 позиций для расположения в буквенном блоке. В качестве модификаторов был выбранalt и, тут мы подошли к самому потенциально отпугивающему моменту проекта, длинные нажатия. Не спешите закрывать страницу. Я действительно считаю это решение хорошим, и пользуюсь им уже более года, начиная с первых попыток создания этого проекта, и за это время я ни разу о нём не пожалел. То, что я называю «длинным» нажатием на деле занимает 0.15с, и может быть легко перенастроено в процессе использования на любое другое значение. Мне, на текущий момент, значение в 0.12с кажется наиболее оптимальным.

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

Озвученные ранее позиции были заполнены следующим образом:

Универсальная клавиатурная раскладка - 6

Зелёным выделен основной набор символов, используемый повсеместно, и присутствовавший на «qwerty-йцукен». Серым выделен дополнительный набор символов из числа более или менее востребованных. Синим – базовые навигационно-управляющие команды. В углу, под извечным «ъ», расположились комбинируемые акут и гравис, в первую очередь как маркёры основного и побочного ударений.

Итак, что мы имеем по изначальным условиям:

  • символы образуют собственный единый и независимый от буквенной раскладки слой
  • символы сгруппированы по категориям
  • включены дополнительные символы и команды, из числа потенциально востребованных
  • распределение с учётом «групп удобства» соблюдено

И, чтобы долго не затягивать, давайте познакомимся со вторым потенциально спорным моментом и перейдём к цифровому ряду:

Универсальная клавиатурная раскладка - 7

Да, здесь немного переназначены привычные enter/caps/backspace.
На самом деле просто esc и backspace опустились пониже на одну-две клавиши, из-за чего доступ к ним значительно упростился (новый "enter as backspace" с шифтом работает ещё и как delete), а enter переехал на противоположную сторону. Это второй упоминавшийся потенциально спорный момент, но, повторюсь – это направлено исключительно на повышение удобства, в чём вы можете убедиться сами прямо сейчас – поставьте пальцы на домашние позиции и посмотрите, как к каким клавишам, из перечисленных, вы тянетесь, и насколько предложенный вариант удобнее.
Чуть опустевший backspace теперь выполняет функции медиа-управления.
Функция caps lock перекрыта, но так как она может представлять интерес для отдельных пользователей, она может быть назначена на бывший esc в настройках.
На этом спорные моменты закончились, а вот пост ещё нет. Впереди непосредственно цифровой ряд и особенно радующие меня языковые модификации.

Цифровой ряд

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

Под альтом расположилась чуть ли не вся используемая различными языками комбинируемая диакритика. С её помощью раскладка может быть использована для всех языков, имеющих оную в своём алфавите или в особенностях письма. К слову, за исключением английского, диакритику в той или иной мере использует абсолютное большинство языков на латинице. В частности, из первых 15 крупнейших языков этой категории регулярная диакритика отсутствует только у непосредственно английского и индонезийского.
Под обычным нажатием с alt расположены надстрочные диакритические символы, под «длинным» с alt– подстрочные (кроме двух последних символов).

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

Языковые модификации

К вопросу мультиязычности есть всего один устоявшийся подход – создание отдельной раскладки под каждый язык. Поначалу я также стал делать переложения на прочие языки, с некоторой опаской подумывая о том, что они могут не вписаться в такую цельную фонетическую систему. Но опасения были напрасны. Новые раскладки не просто отлично вписывались в единую раскладку, они, напротив, подняли вопрос – а в чём разница между двумя смежными раскладками? Общая картина частотностей едина, базовый набор символов, по большей части, един. Выходит, только в специфичных языковых символах? Тогда проскочила новая дерзкая мысль – а почему бы не превратить раскладку для языка в раскладку для всей письменности, без ущерба для функциональности первой? От скольких неудобств это бы избавило! Ведь такой раскладкой смог бы пользоваться в равной мере и носитель русского, и носитель другого кириллического языка, и тот, кто постоянно перемежает два или даже более языков одной письменности, что далеко не редкость. Аналогично и для латинской письменности.

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

Модификации «привязаны» к письменности и учитываются раздельно. В отображении выше показан вид с основными модификациями для латиницы и кириллицы.

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

Что же, перейдём к самому разбиению и результатам.

Стоит предварительно внести ясность: буквы с диакритикой в разных языках могут являться как отдельными алфавитными символами, так и просто буквами с добавленной диакритикой.
Пример: ñ в испанском языке графически эквивалентна n + диакритическая тильда, однако в алфавите закреплена как самостоятельная, отдельная буква. Или, более близкий пример – наши привычные й и ё.

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

Латинская и кириллическая стороны модификаций несколько разнятся концептуально, что обусловлено символьными особенностями участников этих категорий. Начнём с латинской:

12 доступных символов разбиты на две категории – самостоятельные символы и символы упрощённого набора. Самостоятельные символы – ł đ ı ß ø æ œ, с небольшой оговоркой для ł, доступны из любых модификаций, что, следовательно, позволяет использовать языки, доступ к которым они открывают также из любых модификаций. Символы упрощённого набора – те, которые могут быть реализованы в виде с комбинируемой диакритикой, и именно они будут меняться при выборе модификации, в зависимости от потребностей выбранного языка.

Пара комментариев к ñ и đ и оговорка об ł

– n с тильдой. Данный символ сам по себе, без прочих, открывает упрощённый набор для испанского языка и всех языков, на которые повлиял последний – испанидад. Из-за этого он занял свободное место в модификациях, в которых количество символов упрощённого набора закончилось на четырёх, потенциально расширяя область применения данных модификаций.
ł – l с диагональным штрихом. Ситуация зеркальная по отношению к предыдущему символу – символ, хоть и является буквой с диакритикой, находится в категории самостоятельных, т.к. не может быть корректно отображён в виде с комбинируемой диакритикой. Также он имеет достаточно ограниченное использование, и от него не зависят прочие символы. Из-за этого, в модификациях, требующих 6 дополнительных символов, последнее место было отдано от "ł". Но таких модификаций не так много, что не делает этот факт чересчур значимым.
đ – d со штрихом. Как и предыдущий – не может быть корректно отображён в комбинированном виде. Вдобавок, он имеет свои особенности для двух конкретных модификаций – исландский/староанглийский и язык мосси. Всё дело в том, что в данных модификациях используются собственные вариации данного символа, имеющие собственное название и применение. Во всех модификациях, помимо оговоренных выше, это đ Đ, для исландского/староанглийского это ð Ð, для мосси – ɖ Ɖ. Обратите внимание, что варианты в верхнем регистре, несмотря на единое начертание, являются разными юникод-символами.

Расположением символов упрощённого набора по «динамическим» позициям были составлены модификации для латинской письменности. При позиционировании символов были попытки располагать одинаковые или графически близкие символы на одинаковых позициях, но это не всегда представлялось возможным. Итоговое количество – 31 модификация, 24 из которых составлены с 5 динамическими символами, а 7 – с 6.

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

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

Полностью поддерживаемые языки «из коробки»
Языки, доступные к набору из любой модификации, при этом имеющие упрощённый набор из основной. Испанский, немецкий, шведский, датский, финский, норвежский,…

Диакритически поддерживаемые языки с опциональной модификацией для упрощения набора
Позвольте на примере – турецкий: язык может быть использован с любой модификацией (к примеру, с основной ñ å ä ö ü), при наборе дополнительных символов в два нажатия через диакритические символы, но при выбранной турецкой модификации (ç ş ğ ö ü) эти же символы становятся доступны через одинарное нажатие, не теряя общей функциональности.
К этой категории поддержки относятся турецкий, румынский, хорватский (гаевица), словенский, эстонский,…

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

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

Неподдерживаемые языки
Языки с основной письменностью отличной от латиницы и кириллицы. Для всех из них поддерживаются все варианты романизации (в том числе, из разряда недоступных на стандартной ISO basic Latin).

Теперь о кириллических модификациях.

Так как в кириллическом наборе дополнительных языковых символов отсутствуют единые «над-символы», использование которых может быть востребовано из любой модификации, а также учитывая, что все символы являются самостоятельными, ввиду того факта, что комбинируемая диакритика крайне печально работает с кириллицей – все 12 мест являются динамическими.
Это позволило объединить в группах целые ряды языков, итоговое количество которых – 4 группы + 1 отдельный язык. Также это влияет на то, что здесь нет «основной» модификации, хотя, фактически, из-за расположения по востребованности, её место занимает группа «украинский, белорусский, ...».

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

Завершение

Proof of concept

С полной реализацией данной раскладки можно ознакомиться и опробовать на гитхабе. Текущая версия доступна к использованию на Windows, а также существует переложение на Android. Помимо реализации концепта, которому посвящён весь текст выше, также имеется различная вспомогательная внутренняя и внешняя функциональность, относящаяся непосредственно к использованию, и освещённая в соответствующих разделах readme.

Итоги

Преимущества:

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

Итоговый охват полностью поддерживаемых языков – 88.89% интернета, согласно данным w3techs.com за 19.10.2021.


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

Автор:
TLHE

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js