Ant-keyboard. Часть 1 — общий дизайн и разработка

от автора

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

Содержание статьи:


Истоки

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

Также весьма любопытный комментарий оставил tonsky.

Про RSI (Туннельный синдром), который также является одной из основных причин ухода от стандарта, тоже много сказано здесь:

А что касается названия проекта, то первоистоки кроются в фамилии автора.


Предыдущий опыт

Ранее я писал уже о своём опыте создания нестандартных раскладок, а посему и начну статью освещением моих мыслей и опыте по поводу своих предыдущих раскладок:

В целом… они отвратительны. Вот общий список недостатков:

  • Первый недостаток, который бросается в глаза — слабое чередование рук (правая рука нагружена сильнее). Причём мало того что правая рука нагружена сильнее, так она ещё и постоянно смещается со стартовой позиции печати, в отличие от левой руки, которая лежит как влитая. Особенно заметны эти недостатки в англоязычном двораке. В дикторе-же, который создавался как аналог дворака, это было заметно в меньшей степени, что позволило ей просуществовать в изменённом виде на моей клавиатуре и по сей день.
  • Следующий недостаток — арифметические символы там расположены в неудобном месте, и в обеих раскладках расположены в разных местах. Хотя изначально я хотел расположить их в одних и тех-же местах в обеих раскладках, чтобы не путаться. Ибо путаница в расположении символов в стандартных раскладках была одной из причин ухода от стандарта.
  • Также твёрдый и мягкий знак в русской раскладке находятся в «закулисье». Со временем я понял насколько это было плохой идеей располагать их в тех местах.
  • Ну и в целом раскладки неоптимальны, хоть и выигрывают в некоторой степени у qwerty и йцукен.

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


Идея создания

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

Хотя нет, вру, нашёл — это небезызвестная клавиатура ErgoDox. И её я бы с удовольствием приобрёл. Хоть и не лишена она недостатков в моём понимании:
Первый недостаток достаточно незначительный и субъективный: слишком много периферийных клавиш сгруппировано в пятом (самом нижнем ряду), что заставляет руку смещать со стартовой позиции печати, выгибать пальцы, и т.д.

Второй недостаток возможно выдуманный: у меня пальцы длинные, (9 см. средний палец, 8.5 см. указательный и 8 и 6 см. на безымянный и мизинец. Но это так, если кто любопытствует.) посему, возможно мне будет несколько неудобно печатать на эргодоксе.

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

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

Так-то, идея моя чрезвычайно проста:

  • Как можно меньше клавиш, но не превращая клавиатуру в аккордную (чтобы не приходилось часто нажимать несколько клавиш).
  • Эргономика и удобство. Дабы не калечить руки, ибо RSI это не шутка, и хреново лечится.
  • Кнопки модификаторы (shift, ctrl, alt, fn) и системные кнопки (enter, backspace и проч.) смещены к большим пальцам, которые в стандарте не нагружены практически ничем, а вместо них нагружены наоборот мизинцы, самые слабые пальцы на руках.
  • Равномерно нагружены обе руки.
  • Максимальное чередование рук тоже является немаловажным фактором.
  • Оптимальное расположение клавиш, символов и букв. Дабы частоиспользуемые символы / буквы были расположены ближе к наиболее сильным пальцам. Но в то-же время чтобы не приходилось тянуться, выгибать руку или пальцы, для доступа к наиболее редкоиспользуемым.
  • Грамматические, арифметические и прочие символы находятся на одних и тех-же местах для обеих раскладок, дабы не путаться в символах при переключении раскладки.


Базовая раскладка клавиш

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

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

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

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

Проблемы мизинца

Глядя на эту раскладку на самом деле уже можно судить о некоей неоптимальности. Я имею ввиду то, что мизинец на обеих руках нагружен восемью кнопками, против четырёх для безымянного и среднего пальцев. Это столько-же, сколько на указательном. Да, там расположены наиболее редкоиспользуемые символы и буквы, но тем не менее, факт налицо.
Есть вариант создания дополнительного ряда снизу, но этот вариант предполагает чрезмерное выгибание пальцев вниз, и смещения руки со стартовой позиции, дабы нажать на клавиши в нижнем / верхнем ряду. Тем не менее этот вариант имеет право на жизнь, и возможно я в будущем поэкспериментирую с этим. Ibnteo уже экспериментирует.

Иной вариант решения проблемы заключается в удалени «лишних» 8 клавиш по бокам, а символы, расположенные там, набирать через alt+<клавиша>. Но русский язык, с его 33мя буквами в алфавите, вряд-ли будет счастлив такому исходу.

Был на самом деле и другой вариант расположения базовой раскладки, вот такой:

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

Проблемы большого пальца

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

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

Второе решение предложил suenot, заключается он в том, чтобы некоторые клавиши перекинуть в fn ряд, уменьшив таким образом количество кнопок с восьми, до шести. Но об fn ряде я намерен поговорить чуть позже.

Третье решение предложил ibnteo, заключается он в том, чтобы использовать универсальную квази-кнопку.
Суть метода: убрать все клавиши-модификаторы, и оставить лишь Quasi-L и Quasi-R.
Предложение поступило лишь недавно, и я пока не успел его обдумать, но в целом выглядит интересно.

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

Так, или иначе, эксперименты с расположением клавиш продолжаются.


Клавиатуры-аналоги

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

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


Железо

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

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

Скрытый текст





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

Далее, свитчеры:
Свитчеры планируется использовать cherry-ml, по причине моей любви к низкопрофильным клавиатурам.
Но если этот вариант совсем не вариант, и вы можете подсказать идеи получше, то пожалуйста напишите об этом.
Также на самом деле как я погляжу ML свитчеры достаточно непопулярны, а это может намекать на том что они как-бы «неочень».

Плюс колпачки подыскать проблема, а посему мне придётся использовать клавиатуру-донора.
В качестве клавиатуры-донора я предусмотрел Cherry-G84-5200.
В любом случае утверждение выше может быть опять-же ошибочным, и автор статьи просто искал не в том месте не в то время, и колпачки под ML не миф, и их легко достать.

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

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

Далее, раз уж заговорили о встроенной флешке, так почему-бы не встроить туда-же card reader и usb hub?
Да и за примерами таких клавиатур далеко бегать не надо:

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

Закончу тему железа парой слов о контроллере:
Контроллер планируется использовать avr 162 mu, чтобы не изобретать велосипед, и использовать вариант, который уже работает у моего друга и коллеги.
Хотя не исключаю что буду использовать и другие контроллеры, это надо ещё будет посмотреть.


Расположение системных клавиш и клавиш-модификаторов

Расположение системных клавиш и клавиш-модификаторов такое:


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

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

  • Теперь десятипальцевый метод печати действительно соответствует своему названию, и мы действительно употребляем все десять пальцев при печати.
  • Пользоваться клавишами-модификаторами теперь стало намного удобнее. И, при нажатии (к примеру) shift, не нужно смещать руки, и заставлять безымянные пальцы, пусть на короткое время, но печатать на восьми кнопках, вместо положенных ему 4-х.
  • Горячие клавиши теперь тоже доступнее, и «тролльские» хоткеи, которые заставляли руку тянуться через всю клавиатуру, теперь тоже стали доступнее. (Но касательно горячих клавиш, я на самом деле хотел остановиться и поговорить о них чуть подробнее, чуть позже.

Также можно в качестве преимуществ данного метода процитировать комментарий suenot по поводу использования CatBoard:

«Капслок прибит, потому что клавиша бесполезная. но я могу набирать легко КАПСОМ с помощью шифта, при этом не теряя скорость, просто удерживая шифт большим пальцем. Большие пальцы работают отдельно и вовсе не мешают набирать остальным 8 пальцам текст. УПРАЖНЕНИЕ №8 теперь проходится с таким ощущением, что пользуешься читами.»

Казалось-бы всё идеально, и у смещённых к большим пальцам клавиш нет никаких недостатков, но… возникает вопрос — а как нажимать сочетания клавиш ctrl+shift или alt+shift например? Нажатием двух кнопок одним пальцем? Можно конечно и так, хоть и выглядит этот вариант невероятно костыльным.
Другой недостаток кроется в расположении клавиш escape и delete. Удобно ли будет их доставать в таком положении? Хотя если в эргодоксе аж 3 кнопки расположены подобным образом, то доставать их должно быть удобно.

Как исправить эти недостатки?
Ну… примеры решений я уже высказал чуть выше, но если оставить расположение клавиш так как есть, не меняя их на thumbpad’ы и прочее, то касательно сочетаний горячих клавиш у меня есть весьма интересное решение связанное с fn слоем. Но об этом чуть ниже, а пока я хотел-бы поговорить о расположении символов в своей раскладке.


Расположение символов для обоих языков

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

Статистика символов для английского языка

, 4385330
. 3781070
" 908360
— 900300
‘ 861540
; 262610
) 259980
( 255150
: 239880
! 221960
? 218300
/ 99270
[ 73330
] 73170
% 33900
$ 32420
| 30980
_ 29870
* 27530
= 23260
+ 23120
> 18340
< 13070
& 12280
` 11870
\ 11190
^ 8110
# 4960
@ 3500
~ 2300
{ 1790
} 1480
Статистика символов для русского языка

, 888818
. 593655
— 350253
? 70078
! 49002
: 40238
« 39290
» 39221
… 34908
; 10686
) 9260
( 9020
" 7790
* 4782
] 3579
[ 3577
‘ 2641
“ 666
” 506
/ 487
% 221
№ 219
> 62
< 56
& 51
+ 39
_ 37
= 36
} 10
# 10
$ 7
| 5
^ 4
@ 4
` 1
~ 1

Источники статистики:
Для английского языка взята готовая статистика, предоставлявшаяся с программой вычисления раскладок (о которой позже).
Для русского языка статистика вычислялась на основе ёфицированных текстов объёмом примерно 100 мегабайт. (о ёфикации также расскажу отдельно чуть позже).

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

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

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

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

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

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

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

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

Прочие знаки препинания

Располагая остальные знаки препинания я уже меньше руководствовался частотой их употребления. Ибо, если располагать к примеру вопросительный и восклицательный знаки согласно их частоте, или ещё хуже — заставить программу сделать это, то получится в итоге что восклицательный знак будет находиться где-нибудь рядом с местоположением буквы икс (‘X’) (в qwerty раскладке), а вопросительный где-нибудь на месте бывшей буквы пи (‘P’). Произойдёт так, ибо программа исходит из критериев частотности, а не критериев похожести или употребления символов в человеческих языках.

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

Так, вопросительный и восклицательный знаки я расположил на местах цифр 1 и 2 в стандартных qwerty и йцукен раскладках.

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

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

Оставшиеся грамматические знаки, такие как апостроф и двойные кавычки, располагаются на месте цифр 3 и 4 в стандартных раскладках. Но для русской раскладки также добавлены символы, отсутствующие в английской раскладке. А именно: французские кавычки-ёлочки (« »). Добавил их в раскладку, ибо по факту эти кавычки — стандарт для русского языка.

Однако отличия от стандартного йцукена и qwerty заключаются ещё в том, что в русской раскладке убран нумерологический знак (№), а в английскую добавлен знак параграфа (§) и знак евро (€).

Арифметические символы

Арифметические символы, такие как =, +, -, *, /, % и такие как скобочки всех четырёх видов ( ( ), [ ], { }, < > ) сгруппированы вместе.

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

Математические знаки, такие как =, +, -, *, /, % находятся на клавишах цифр 5 6 7 8 9 0 стандартных qwerty и йцукен раскладок.

Скобочки находятся по обе стороны клавиатуры, по краям. Так, открывающие скобки, такие как ‘(‘, ‘[‘, ‘{‘, ‘<‘ находятся по левую сторону клавиатуры, на самой крайней верхней клавише, а закрывающие (‘)’, ‘]’, ‘}’, ‘>’) по правую сторону клавиатуры, на самой крайней правой клавише.

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

Так, скобочки вида "[ ]", "{ }", "< >" отсутствуют в раскладке. И вместо квадратных скобок в раскладку добавлены французские кавычки-ёлочки, о которых упоминалось ранее.

В целом, по арифметическим символам всё.

Прочие символы

Прочие символы, такие как: ‘&’, ‘|’, ‘^’ сгруппированы и размещены в правой части клавиатуры. Причина группировки: их употребление в популярных языках программирования в качестве логических операторов, и не только. Они вынесены на нижний (не требующий зажатия клавиши shift) слой. На верхний слой тех-же клавиш вынесены знаки ‘\’, ‘_’, ‘`’.

Оставшиеся символы, такие как ‘@’, ‘§’, ‘$’, ‘€’, ‘#’, ‘~’ расположены по левую сторону клавиатуры, на клавишах, зеркально-симметричных предыдущим клавишам.

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

Для английского языка:

Для русского языка:


Цифры

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

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

У меня есть теория на сей счёт, почему цифра 9 расположена именно там:
Дело в том, что клавиатуру дворак изобрели в 1936-м году, и когда машинистки записывали дату, то она непременно начиналась с 19XX.

Вторая догадка:
Я не собираюсь утверждать, но есть мнение что «хитрый психологический трюк» с ценниками употребляли ещё в прошлом веке. Имеется ввиду стоимость на товар, вида $99.
Хитрость заключается в том что видеть двухзначную цену на какой-либо бирке психологически более комфортно, нежели трёхзначную, посему и «хитрили» таким образом маркетологи.

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

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

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

Частотность чисел

0: 1691
1: 945
2: 856
3: 418
4: 200
5: 585
6: 126
7: 52
8: 114
9: 58

Учитывая данную частотность, сразу понимаешь логичность расположения чисел, в порядке от сильных пальцев к более слабым.
Но цифру 9 я таки переместил в самый край ряда. Почему? Да потому-что на дворе давно 20XX года, да и с ценниками я не балуюсь. А иных причин располагать девятку на приоритетном месте я не вижу.

Посему, в своей новой раскладке я расположил числа так:

Было непривычно по началу (естественно), но по ходу пользования я привык, и сейчас не ощущаю абсолютно никакого дискомфорта в наборе чисел.
Наоборот даже это более удобно нежели стандартное расположение чисел по их возрастанию, ибо 0 и 1 действительно употребляются чаще всего, и нажимать их слабыми пальцами рук действительно менее удобно. Тут естественно могут пойти споры что мол: «Как же так!!! Я годами набирал числа так, как они представлены на qwerty и йцукен раскладках, и ничего!!! Не ощущаю никаких неудобств и дискомфорта!!!» На что я отвечу чуть позже, когда я заведу речь об удобстве и скорости использования стандартных и нестандартных раскладок / клавиатур.


Вычисление собственных раскладок

Вводная

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

Критерии вычисления раскладки примерно следующие:

  • Максимальная частотность. То бишь — наиболее частоупотребляемые символы находятся ближе к самым сильным пальцам.
  • Максимальное чередование рук. Дабы избежать необходимости 3 и более буквы подряд печатать одной рукой. В идеале — каждая следующая буква печатается другой рукой. В вычисленных раскладках удалось добиться 70%-ного чередования рук.
  • Максимальный балланс между руками. Идеал — 50% нагрузки на обе руки. В нынешних раскладках удалось добиться приблизительно именно этой цифры, с отклонениями в полпроцента.

Программа вычисления

Если браться за какие-либо вычисления, особенно если считать надо много, то самым логическим способом будет переложить эти вычисления на плечи компьютеров. Не зря же они ещё в прошлом назывались Электронными Вычислительными Машинами, верно?
Да и слово «компьютер» с английского переводится как «вычислитель».

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

Но тут же возникает и другое гениальное озарение, помимо осознания прямого назначения компьютеров:
Я-ж не единственный в мире программист!!! И наверняка в мире нашёлся хотя-бы один такой-же программист, кому в голову пришла примерно такая-же идея: заставить «вычислителя» вычислять оптимальные раскладки для клавиатуры.

Таких программистов несколько, и первым (из известных) был некто Питер Клауслер. Он-то и написал первую программу, с помощью которой и создал свою первую раскладку. И если вам интересно, то вот она:

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

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

Но данная глава посвящена не истории, и не чужим раскладкам (о них позже), она посвящена выборе программы для вычисления раскладок.
И программа эта — keyboard layout optimizer, написанная Майклом Диккенсом. (Michael Dickens: mathematicalmulticore.wordpress.com/ )

В целом о самой программе я говорить не буду. Небольшая программа, написанная на языке C, призвана вычислять идеальные раскладки для клавиатур. Блаблабла, и так далее. Перейдём лучше непосредственно к вычислению:

Английский язык — вычисление раскладки

Параметры:

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

В целом, таблица штрафных очков для английского языка у меня выглядит так:

 50 40 30 20 30    30 20 30 40 50 30 20 10  0 10    10  0 10 20 30    60 50 40          40 50 60 

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

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

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

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

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

Кроме штрафов у программы есть куча других параметров, но в рамках этой статьи я их пропущу.

Лирическое отступление

Стоит сказать что раньше я считал по другому принципу: у меня различие между рядами не было столь заметно.
То бишь — для указательного пальца, перемещение вверх на верхний ряд стоило не 20 очков, как сейчас, а всего 10.
Тоже-самое касалось и нижнего ряда.
Нужно также сказать что точки у меня находились сверху, а не снизу.

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

Если кому интересно, по таким критериям я вычислял раньше:

 40 30 20 10          10 20 30 40 30 20 10  0 10    10  0 10 20 30    40 30 20 30    30 20 30 40 

Результатом таких параметров стала английская раскладка, на которой я пишу сейчас (и которая скоро отойдёт в историю ибо пусть даже в принципе она не плоха, но таки я понял что уж лучше сделать так, чтобы руки как можно меньше перемещались по рядам, и решил сконцентрировать всю ОГНЕВУЮ МОЩЬ на среднем ряду. Также понял что точки с запятой лучше сместить вниз, о чём я уже неоднократно говорил.

А для русского я оставил модернизированный диктор, ибо программа, написанная Диккенсом, не предоставляла гибкости работы с unicode-символами, да и статистики ёфицированных текстов у меня в то время не было под рукой.

Непосредственно вычисление:

Итак!!! Базовые параметры вбиты, программа откомпилирована и запущена. Машина загудела, задымилась, и начала вычислять раскладку.
Уходим пить чай, и возвращаемся примерно через 6 часов. (По правде сказать на самом деле можно было так долго и не ждать, ибо параметры я вбил наиэлементарнейшие, и программа нашла идеальную раскладку меньше чем за 5 минут. Но я решил ей дать время «подумать», и отключил только когда был стопроцентно уверен что раскладка не поменяется.)

Итак, результат:

 B F D L M    J U O P K C S T N R    I A E H G   X V W        Y Q Z 

Полный результат

Hands: 49% 50% Fingers: 5.0% 9.0% 14% 22% 0.00% 0.00% 20% 20% 7.0% 3.0%   B  F  D  L  M    J  U  O  P  K  C  S  T  N  R    I  A  E  H  G     X  V  W          Y  Q   Z  b  f  d  l  m    j  u  o  p  k  c  s  t  n  r    i  a  e  h  g     x  v  w          y  q   z Fitness:       72987340 Distance:      57757290 Finger work:   0 Inward rolls:  6.66% Outward rolls: 1.95% Same hand:     30.02% Same finger:   2.51% Row change:    10.38% Home jump:     0.66% Ring jump:     1.63% To center:     6.81% To outside:    0.00%

Что-ж, раскладка готова. Как проверить её эффективность?
Не мудрствуя лукаво, я придумал такой способ:
Берём статистику букв, по которой работала программа:

Скрытый текст

   66596020 //это пробел e 38971520 t 29466790 a 26035020 o 24106500 i 23572230 n 22356420 s 21332390 r 19201760 h 17015720 l 13065700 d 12335570 c 9523460 u 8926290 m 8124820 f 7010750 g 6586340 p 6255080 w 6099490 y 6010040 b 4921900 v 3396020 k 2363610 x 641980 j 459570 q 362340 z 283710 

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

На основе неё делаем частотную схему:

Можно идти по другому пути, и сделать шкалу частотности по группам букв:

На основе которой делаем другую схему:

После создания наглядных схем сразу видем закономерности:

  • Самые частые буквы английского алфавита (‘E’, ‘T’) находятся на средних пальцах, хотя я их ожидал увидеть не иначе чем на указательных.
  • Усиление среднего ряда в принципе достигнуто, хотя я вижу забегания на верхний ряд таких букв как ‘O’ и ‘L’. А они как мы видим — достаточно популярные буквы. Но менять их местами с ‘S’ и ‘H’ менее рационально, как мне кажется, хотя на счёт ‘O’ и ‘H’ я бы поспорил. В любом случае, после полевых испытаний уже будет ясно что к чему.
  • Ну и на среднем ряду, как мы и ожидали, сконцентрированы самые непопулярные буквы.

В целом, по английской раскладке всё.

Русский язык — вычисление раскладки

Прежде чем говорить непосредственно о вычислении раскладки для русского языка, я хочу сделать важную ремарку:
В статистике символов использовались тексты, содержащие букву ‘ё’. Для меня это важный критерий, ибо я считаю что букву ‘ё’ нужно употреблять ни смотря ни на что. Почему? Причина проста — я противник превращения русского языка в одно из подобий некоторых европейских языков, где разговорный язык и язык письменный — «две большие разницы», как говорят одесситы (или принято считать что они так говорят). И вместо того, чтобы учить один язык, мы учим два.
То бишь, иными словами — я ЗА то чтобы слова читались так, как они пишутся. Отсутствие буквы ё противоречит этому правилу.

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

А то что знаменитый самизнаетекто писал что две точки сверху буквы ухудшают читабельность… Ну… Я даже не знаю как комментировать это. Это попросту бред.
Да, понимаю, что людям, всю жизнь читавшим текст без буквы ё будет первое время непривычно читать ёфицированный текст. Но это-же не изучение с нуля нового алфавита? И человек привыкнет, и после того когда 10 раз повстречает букву ё (условно говоря), на 11й будет читать уже без запинок.
Думаю эту статью можно использовать в качестве примера такого текста. И если вы прочли статью от начала и до сего момента, пожалуйста отпишитесь в комментариях по поводу запинаний от наличия в тексте буквы ‘ё’.

В целом, суммарно использовано примерно 100 мегабайт ёфицированных текстов. Искренне надеюсь что этого было достаточно, чтобы просчитать достаточно прозрачную статистику.

Непосредственно вычисление:

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

 60 50 40 30 20 30    30 20 30 40 50 60 40 30 20 10  0 10    10  0 10 20 30 40 80 70 60 50 40          40 50 60 70 

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

Результаты вычислений:

 Ж Г Д П Р М    Ь У Я Ы Х Ю Й В С Т Н Л    И О Е А К З Щ Ц Ш Б Ч        Ъ Э Ё Ф 

Полный результат

 Hands: 49% 50% Fingers: 9.0% 9.0% 11% 21% 0.00% 0.00% 23% 10% 10% 7.0%   Ж  Г  Д  П  Р  М    Ь  У  Я  Ы  Х  Ю Й  В  С  Т  Н  Л    И  О  Е  А  К  З Щ  Ц  Ш  Б  Ч          Ъ  Э  Ё  Ф   ж  г  д  п  р  м    ь  у  я  ы  х  ю й  в  с  т  н  л    и  о  е  а  к  з щ  ц  ш  б  ч          ъ  э  ё  ф    Fitness:       10147500 Distance:      8337690 Finger work:   71375 Inward rolls:  5.29% Outward rolls: 2.13% Same hand:     23.85% Same finger:   1.28% Row change:    8.48% Home jump:     0.44% Ring jump:     1.39% To center:     4.92% To outside:    0.00% 

После того как мы вычислили раскладку, делаем всё как и в прошлый раз: берём статистику, по которым работала программа, и делаем из неё наглядные схемы частотностей:

Частотность букв

 	7521823 о	4494892 а	3248635 е	3186253 и	2783308 н	2687370 т	2480068 с	2153053 л	1992066 р	1855584 в	1779347 к	1384333 м	1300210 д	1225529 у	1144930 п	1135757 я	849268 ы	774398 ь	763829 г	711041 з	690934 б	686311 ч	586511 й	463387 ж	414047 х	366672 ш	335618 ю	242049 ё	204997 ц	161017 щ	144430 э	139543 ф	72755 ъ	11251 

«Частотный спектр»:

Частотная таблица:

Схема представляющая расположение букв согласно «частотного спектра»:

Схема представляющая расположение букв согласно частотной таблице сгруппированных символов:

Что-ж я могу сказать глядя на эти схемы?
Сразу видно что принцип «сильной середины» тут действует на полную катушку. Также как и принцип слабого третьего ряда.
Самые частые буквы сгруппированы на правой руке, что однако не значит что руки будут печатать неравномерное количество символов.
Если программа не врёт, то руки на самом деле идеально сбаллансированы, и на каждую приходится ровно 50% всей работы.
А также можно судить что чередуемость рук лучше, по сравнению с английской раскладкой: 23% против 30%.
Да и пальцы тоже чаще чередуются.
Только правда работа пальцами выше чем в английской раскладке. Но я думаю это таки из-за количества символов на палец. Их так, или иначе больше чем на английской раскладке. То-же самое касается очевидно и других параметров, которые я озвучил выше.
Кстати!!! Что любопытно — параметр fitness заметно ниже чем в английской раскладке.
Напоследок следует ещё раз отметить что программе на группировку схожих символов плевать, и она их располагает согласноо частотности. Именно поэтому буквы ‘Ш’ и ‘Щ’ находятся хоть и близко но не рядом друг с другом.

Второй вариант раскладки:

Помните я что-то говорил про чатоту употребления запятой и точки в русском языке? Что запятая используется чаще чем половина букв? (Если конечно статистика не врёт.)
Так почему-бы не попробовать вычислить ещё одну раскладку, но где точка и запятая таки смещены в верхний ряд, где они и должны быть в русской раскладке согласно статистике.

Итак, параметры частот букв те-же самые что и в прошлый раз, посему выкладываю уже готовые раскладки.

Оговорю только параметры штрафов:

 60 50 40 30 20          20 30 40 50 60 40 30 20 10  0 10    10  0 10 20 30 40 80 70 60 50 40 50    50 40 50 60 70 

То бишь ничего примечательного. Две клавиши смещены вниз, их штравы увеличены на 20 (с 30 до 50-ти очков). Так как они теперь находятся на самом нижнем, наименее приоритетном ряду.

Результат вычисления:

 Ж Г Д П Р        У Я Ы Х Ю Ч В С Т Н Л    И О Е А К З Щ Ц Ш Б М Й    Ъ Ь Э Ё Ф
Полный результат

 Hands: 49% 50% Fingers: 9.0% 9.0% 11% 21% 0.00% 0.00% 23% 10% 10% 7.0%   Ж Г Д П Р        У Я Ы Х Ю Ч В С Т Н Л    И О Е А К З Щ Ц Ш Б М Й    Ъ Ь Э Ё Ф ж г д п р        у я ы х ю ч в с т н л    и о е а к з щ ц ш б м й    ъ ь э ё ф  Fitness:       10438645 Distance:      8591540 Finger work:   120655 Inward rolls:  5.21% Outward rolls: 2.19% Same hand:     23.85% Same finger:   1.17% Row change:    8.16% Home jump:     0.60% Ring jump:     1.77% To center:     4.39% To outside:    0.00% 

Схема, основанная на «спектре частот»:

Схема, основанная на «группах частот»:

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

рассказать про казуалов и список цитат
рассказать что именно такой реакции казуалов я и ожидал. цитата генри форда
альтернативы стандартным раскладкам для казуалов
статистика казуалов
рассказать почему клавы непопулярны
подумать над предложением суенота о функциональном ряде
старые раскладки
главный критерий перехода на нестандартные раскладки и клавиатуры — удобство, а не скорость.
мои общие размышления на счёт стандартных раскладок йцукен и кверти
запятая в йцукен
адаптация раскладки под стандартные клавиатуры
вычисление раскладки под стандартные клавиатуры
будущие планы
размеры клавиатуры
какая программа использована и поблагодарить автора
рассказать какими раскладками и какой клавиатурой я печатаю
написать обязательно резюме, краткий экскурс по всему прочитанному.
написать в конце to be continued
БОНУС!!!

ссылка на оригинал статьи http://habrahabr.ru/post/150948/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *