Русский
Русский
English
Статистика
Реклама

Qwerty

Ретроспектива решений прошлого, которое влияет на наше настоящее и будет влиять на будущее

24.12.2020 12:19:48 | Автор: admin

Размер крупа лошади два тысячелетия назад определил размер ракетных двигателей сегодня.

Задумывались ли вы о том, как каждое наше решение определяет будущее? Иной раз не на один год, десятки, сотни, тысячи лет. Почему мы не можем делать двигатели ракет больше? Почему байт равен именно 8 битам, а не 7 или 16, а может даже 48? А ведь он был равен этим числам раньше! Почему виртуальный терминал Linux до сих пор имеет скорость порта подключения? Давайте поговорим о том, как какое-то решение в прошлом определяет наше настоящее, и как же мы можем повлиять на наше будущее.

Спейс шаттл и ширина лошадиного крупа




Это достаточно известная байка, которая разошлась по всему интернету. Как вы думаете, почему размер ракеты-носителя, прикреплённые по бокам от основного топливного бака, имеют такой малый размер? Это твёрдотопливные ракетные ускорители (боковой ускоритель МТКК Спейс шаттл (англ. Solid Rocket Booster, SRB)), которые были изготовлены на заводе в Юте. С инженерной точки зрения, было бы значительно лучше данный двигатель немного толще, но их необходимо было доставлять поездом с завода до места запуска. А железная дорога проходит через туннель в горах. Соответственно этим ускорителям необходимо было пройти через этот тоннель. Сам тоннель немного шире железнодорожного полотна. Стандартная колея железных дорог США (расстояние между рельсами) составляет 4 фута 8 дюймов (1435 мм).
Откуда взялось это число? США унаследовало этот стандарт от первых железных дорог в Англии. Железные дороги в Англии строились по тем же стандартам, по которым строились дожелезнодорожные трамвайные пути, называемая конка (конные трамваи), и они тоже использовали колею в 4 фута 8 дюймов (1435 мм).

Такое расстояние между колёсами вагона было выбрано для того, чтобы они попадали в колею на английских дорогах, чтобы колёса меньше изнашивались, а расстояние между колеями в Англии как раз составляет 4 фута и 8,5 дюйма. Но почему это так? Почему именно такое число?
Англия когда-то входила в Римскую империю, а поскольку первые боевые колесницы были сделаны в Императорским Римом, все они были одинаковы в ширине между колёсами.


Колея на пешеходном переходе римской дороги в Помпеи.


Другой пример колеи на древнеримской дороге.

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


Пример размера римской колесницы.

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

Размер байта и ASCII коды




Сегодня многие ещё со школьной скамьи знают чему равен размер байта, и для нас это очевидно: 8 бит. Но думали ли вы, почему выбран такой размер? С чем это связанно?
Вы будете наверное сильно удивлены, но байт не всегда имел размер равный восьми битам! Раньше байт мог иметь размер от 4-х до 60-ти бит! Например, ЭВМ БЭСМ использовали 6-битные символы в 48-битных или 60-битных машинных словах.

Но почему именно 8 бит? Одна из причин это двоичная система кодирования, так как наиболее удобными для обработки являются цифры, кратные степени двойки. Ну хорошо, скажите вы, почему тогда не 4, или 16, или 32? И будете правы.

Тут следует вспомнить ещё о том, что в 1963 году был принят Американский Стандартный Код для обмена информации (American Standard Code for Information Interchange) или сокращённо ASCII. Этот стандарт был разработан на основе телеграфного кода и его первое коммерческое использование было в качестве семибитного кода телетайпа, для отправки телеграфных сообщений. Первоначально основанный на английском алфавите, ASCII кодирует 128 заданных символов в семибитовые целые числа. Девяносто пять закодированных символов могут быть напечатаны: они включают цифры от 0 до 9, строчные буквы от a до z, прописные буквы от A до Z и символы пунктуации. Кроме того, исходная спецификация ASCII включала 33 непечатных управляющих кода, которые были созданы с помощью телетайпов; большинство из них уже устарели, хотя некоторые из них до сих пор широко используется, например, возврат каретки, перевод строки и код табуляции.


Семибитная таблица ASCII из руководства к принтеру до 1972 г.

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

В 1960-х компания IBM, которая так же участвовала в стандартизации ASCII представила для своей линейки вычислительных машин System/360 восьмибитовый Extended Binary Coded Decimal Interchange Code (EBCDIC). Следует понимать что EBCDIC и ASCII отличаются. Известность ЭВМ IBM System/360 привела к повсеместному внедрению восьмиразрядного байта.

Разработка восьмиразрядных микропроцессоров в 1970-х годах популяризировала этот размер памяти. Микропроцессоры, такие как Intel 8008, прямой предшественник 8080 и 8086, использовавшиеся в ранних персональных компьютерах, также могли выполнять небольшое количество операций с четырехбитными парами в байтах.

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

Американский стандартный код для обмена информацией (ASCII) был разработан под эгидой комитета Американской ассоциации стандартов (ASA), называемого комитетом X3, его подкомитетом X3.2 (позже X3L2), а позже X3 этого подкомитета. 2.4 рабочая группа (сейчас INCITS ). ASA стал Институтом стандартов Соединенных Штатов Америки (USASI) и, в конечном итоге, Американским национальным институтом стандартов (ANSI).

Подкомитет X3.2 разработал ASCII на основе более ранних систем кодирования телетайпов. До того, как был разработан ASCII, используемые кодировки включали 26 символов букв, 10 цифр и от 11 до 25 специальных графических символов. Для того, чтобы кодировать все эти данные, а также управляющие символы, совместимые со Стандартами международного телеграфного алфавита (ITA2) от 1924 года, требовалось более 64 кодов для ASCII. ITA2, в свою очередь, основывались на 5-битном телеграфном коде, который Эмиль Бодо изобрел в 1870 году и запатентовал в 1874 году.

Вы ощущаете эту связь поколений, что так или иначе даже сегодня мы пользуемся наследием телеграфного кода, который был изобретён 150 лет назад?!


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

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


Современная 8-ми битная таблица ASCII.

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

Устройство терминала Linux


На своей домашней системе, вы открываете виртуальный терминал линукс, который вообще работает в окне, и имеет абсолютно виртуальное представление. Но он до сих пор совместим со старинными терминалами.

Можно открыть терминал и ввести stty, то можно обнаружить что данная программа имеет скорость подключения, как и СОМ-порт. И вообще имеет кучу настроек termios для СОM-порта.
Я уже достаточно подробно останавливался в своих статьях о работе СОМ-порта в статье "UART и с чем его едят" и там было сказанно следующее:

Протокол UART (Universal asynchronous receiver/transmitter) или, по-русски, УАПП (универсальный асинхронный приемопередатчик) старейший и самый распространенный на сегодняшний день физический протокол передачи данных. Наиболее известен из семейства UART протокол RS-232 (в народе COM-порт, тот самый который стоит у тебя в компе). Это, наверное, самый древний компьютерный интерфейс. Он дожил до наших дней и не потерял своей актуальности.

Надо сказать, что изначально интерфейс УАПП появился в США как средство для передачи телеграфных сообщений, и рабочих бит там было пять (как в азбуке Морзе). Для передачи использовались механические устройства. Потом появились компьютеры, и коды ASCII, которые потребовали семь бит. В начале 60-х на смену пришла всем известная 8-битная таблица ASCII, и тогда формат передачи стал занимать полноценный байт, плюс управляющие три бита.

В 1971 году, когда уже начался бум микросхем, Гордон Белл для компьютеров PDP фирмы Western Digital сделал микросхему UART WD1402A. Примерно в начале 80-х фирмой National Semiconductor был создан чип 8520. В 90-е был придуман буфер к интерфейсу, что позволило передавать данные на более высоких скоростях. Этот интерфейс, не претерпев практически никаких изменений, дошел и до наших дней.

Обратите внимание, что на работу консоли linux снова оказывает какой-то древний телеграф! А почему? Всё достаточно просто, что для ввода-вывода раньше использовали то, что было под рукой, а именно телетайпы, которые позволяли вводить текст с клавиатуры и выводить его, печатая на бумаге.


Телетайп, который подключается по UART и может служить для ввода и вывода информации.

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

Выводы


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


Раскладка QWERTY, изобретённая в 1888 году для печатных машинок используется до сих пор.

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



Подробнее..

Ортолинейная сплит клавиатура это что такое? Обзор Iris Keyboard

06.08.2020 18:12:42 | Автор: admin
За сто с лишним лет клавиатуры сильно изменились внешне: стали лёгкими, тонкими, есть даже проекционные со сканером. Но рынок ничего не меняет в их раскладке (QWERTY появилась в 1890 году), клавиатуры не стали удобней для пальцев, не адаптированы для положения кистей и предплечий. Всё человечество стало проводить жизнь за компьютером, но эргономика главного инструмента ввода осталась в позапрошлом веке.

Я решил узнать, можно ли купить удобную клавиатуру в 2020 году. Краткий ответ: пришлось паять самому.




Недавно я купил механическую клавиатуру Vortex Core RGB. Мне понравилась механика, новое расположение курсоров и скобок, нормально привык к меньшему количеству клавиш. Но мне не хватало стабильности печати, поэтому я стал гонять тренажёр. Пришлось поставить руки правильно, но они стали уставать от неестественно прямого положения.

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


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

Что я ищу? Суммируя статью про дизайн клавиатур:

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

В поисках эргономики


Подбив требования, я начал искать новую клавиатуру.

  1. В офисе я уже видел Microsoft Sculpt, на ней руки лежат правильно, но кнопки всё ещё как на печатной машинке.

  2. Изгиба можно добиться иначе, совсем разделив клавиатуру пополам, например, Ultimate hacking keyboard.

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

  4. Можно разделить ортолинейную клавиатуру пополам, например, Levinson. Уже лучше, но есть ли ещё?



    Можно ли сместить кнопки вертикально, чтобы они легли ровно под пальцы? Конечно.
    Вариантов не очень много, но выбор есть.
  5. Model 01 keyboard крута, каждая клавиша уникальна, сделана под палец. Стоит $300, но снята с продажи, ждём новую.

  6. Ergodox EZ мне не понравилась: слишком большая даже на фото, не понимаю, что делать с таким количеством кнопок у большого пальца. С ценником тоже $300+.

  7. Можно сделать шаг назад, не разделять, а просто правильно поставить клавиши. Так сделано в Atreus, но продажи ещё не начались (по плану в августе-сентябре).



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

Сделать клавиатуру достаточно просто: нужен контроллер, кнопки, колпачки и доска, на которой всё держится. Даже плату делать не обязательно, кнопки к контроллеру можно присоединить проводами.

С софтом тоже просто: контроллер это Arduino, а для него есть опенсорсный QMK, который стал стандартом с кучей функций.

DIY: осталось только припаять


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

  1. Много кнопок у Helix.

  2. Средне у Iris.

  3. Мало кнопок у Kyria.

  4. Совсем мало у Jian, но зато адаптирован к русской раскладке.

  5. Пальцы двигаются не по прямой, а по дуге, можно ли так поставить клавиши? Да, если у вас Dactyl-ManuForm. Надо будет напечатать корпус на 3D-принтере, платы внутри нет совсем, всё на проводах. Сборка не самая простая.


Больше всего мне понравилась клавиатура Iris (под номером 2 в этом списке). Платы этого типа делают не первый день, к четвёртой версии плате уже не нужен отдельный контроллер, ATmega32U4 встроен и не занимает места.



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

Iris Keyboard: собираем сами


Сколько это стоит?


Купить все компоненты в одном месте не получится. Плата и корпус на сайте из Америки, кнопки на Гикбордс, колпачки на Алиэкспресс. Кнопки можно найти и на Авито, в Москве всегда есть из чего выбрать. Всё вместе вышло на 14 тысяч рублей (но изначально я забыл купить боковину, которая стоила ещё 2 тысячи).


Можно сделать дешевле: не покупать корпус, а свитчи взять на Авито, так получится уложиться в 10 тысяч рублей.

Можно сделать дороже: взять всё самое крутое. Набор красивых клавиш запросто может стоить $150, крутые переключатели Zilents обойдутся ещё в $60. Это без учёта доставки, которая обычно стоит около $30 на позицию. В итоге можно собрать клавиатуру и за 30 тысяч рублей ( $450, дальше оценивайте по курсу).

Как это спаять?


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

  • простой паяльник и подставка под него;
  • оловоотсос, чтобы перепаивать кнопки;
  • припой, чтобы скреплять;
  • флюс, чтобы чистить паяльник;
  • кислота, чтобы подготовить плату к пайке.


Рабочий стол в процессе

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



Плата крутая.

Встроенный процессор. Для большинства самодельных клавиатур надо припаивать Arduino, а он занимает кучу места, поэтому приходится обыгрывать его прямо в дизайне платы. У Iris с этим намного проще.

Шесть светодиодов уже встроено в плату, но можно допаять ещё под каждую кнопку.

Подключение через USB-C, платы соединяются через TRRS (это разъём как у наушников).

Поддерживает несколько видов переключателей: Cherry MX (и даже PCB Mounted), низкопрофильные Kailh choc (но только первой версии), Alps.

Ну и просто цвет красивый.



Не дожидаясь пайки, я вставил все клавиши и пощёлкал. Кайф, всё под рукой.



Позже я догадался, что корпус не картонный, а прозрачный, просто он обёрнут в бумагу против царапин. Ещё оказалось, что я забыл заказать боковую часть, потому что не стал разбираться, что значит Clear Acrylic Middle Tented. Без этой боковинки можно спокойно работать, просто не получится поставить клавиатуру под углом.

Пошаговая сборка клавиатуры


  1. Вставляете угловые механизмы.

  2. Насаживаете на плату, выравниваете, припаиваете.

  3. Добавляете остальные кнопки, припаиваете.

  4. Прикручиваете низ корпуса, добавляете кейкапы. Готово!


На пайку первой половины ушло полтора часа, но в основном я разбирался с паяльником и температурой. Вторую половину собрал за 20 минут.

На фото видны переключатели двух цветов, это разные типы кнопок:

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

Смысл в этом такой: у кнопок shift, control, alt не нужен бугорок, это вспомогательные клавиши, они нажимаются вместе с какой-то другой. Заранее я не знал, где они стоят, поэтому позже пришлось все ещё пару раз перепаять, оловоотсос пригодился.

Дно корпуса ровное, а клавиатура слишком лёгкая и скользит по столу. Самые простые силиконовые капельки решат проблему.



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

Обзор Iris Keyboard: от эргономики до ништяков


Разделённая на две части


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

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



Правильное расположение клавиатуры убрало неприятные ощущения в суставах, которые были после обычных клавиатур.

С особым выравниванием кнопок


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



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

Высокая


Неожиданностью оказалась высота клавиатуры 3 сантиметра. Это чудовищно много для комфортной работы. С высотой можно бороться тремя путями:

Уменьшить сам корпус. Убрать дно и приклеить коврик от мышки к плате (!), либо просто уменьшить расстояние, поставив новые распорки. Сам корпус может быть не акриловым в 3мм, а металлическим, получится ещё тоньше. Без корпуса высота уменьшается на треть.



Заменить переключатели на низкопрофильные, купить к ним низкие кнопки. Khail chock поддерживаются, заказал, жду. С новыми клавишами и без корпуса высота уменьшится вдвое. Это уже почти как Apple Magic Keyboard.

Поднять руки. Я купил пару подставок для кистей, пока работаю так. Немного надоедает поправлять их.



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



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

Готовая к наклонам


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



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



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

С кастомизированными кнопками


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



Или быть проще совсем без надписей и дополнительных кнопок.



Самая важная характеристика кнопки это её профиль. Их много разных.


Проще всего на ортолинейные клавиатуру найти кейкапы плоского DSA-профиля.



DSA мне не очень понравился, слишком одинаковые клавиши. Кнопки с наклоном интереснее, например, OEM-профиль с Алиэкспресс.



Для ортолинейных клавиатур выбор раскладок ограничен, потому что нужен Shift, Control и Enter размером в одну кнопку, а много где их нет в комплекте. В некоторых наборах можно взять буквенные кнопки от основного набора, а остальные докупить отдельно. Цена поднимается существенно, обычно выше $100 только за клавиши. Например, мне понравился GMK Nautilus, но нужный набор будет стоить $190. Это столько же, сколько стоит клавиатура сейчас.



Размером 60% от привычной


У клавиатуры меньше клавиш, нет ряда F1-F12, но ряд цифр остался, а значит не нужно сразу ломать все привычки. Иногда удобней нажать отдельную клавишу, чем уходить на другой слой, где цифры под пальцами. Если бы их не было, то шорткат скриншота на Mac стал бы ещё сложнее: вместо сmd + shift + 3 надо нажать сmd + shift + Fn + e.

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

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

Большой палец теперь не только нажимает пробел, но и меняет слои, зажимает модификаторы, жмёт enter, всего 6 кнопок. Можно выбрать любые клавиши, это зависит от ваших задач.

Кнопки под большим пальцем можно заменить, варианта три.

  1. Можно просто поставить кнопки. Нюанс в том, что эти клавиши повёрнуты на 90 градусов и смотрят вбок. Это неудобно в случае с изогнутыми клавишами, поэтому я поставил плоские из другого набора.

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

  3. А можно вместо верхней кнопки поставить крутилку. Об этом отдельно.


Крутилки


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

  • скролить страницу (имитировать колесико мыши);
  • двигать курсор;
  • менять громкость.

Я выбрал движение курсора, на второй слой добавил громкость. Самым весёлым оказалось крутить Youtube, ведь курсоры его проматывают.

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

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

Раскладка


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



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

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

Сначала кажется, что невозможно запомнить. На самом деле всё делится на этапы:

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

Пришлось подвигать на другие места shift, cmd, alt. Например, мне оказалось удобно иметь alt с каждой стороны, при том, что нажатие выполняет функцию enter. Тут всё зависит от шорткатов, которые нужны вам в работе.

Подписи для кнопок


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

Скобки и русский язык


Для программирования я поставил скобки вдоль центра. Удобно, но вместе с ними переехали и русские буквы Х и Ъ. Набирать их со второго слоя очень медленно.



В прошивке можно сделать так, чтобы короткое нажатие на левый shift набирало [, а на правый ], так нашлось место для Х и Ъ. Появилась новая проблема: чтобы набрать заглавную Х, надо нажать правый shift, а потом нажать левый. Для Ъ наоборот, но это приходится делать нечасто. Также можно набирать { и }.



Пользоваться правым shift я не привык, 90% опрошенных тоже. Пришлось попробовать и мне понравилось! Ломает голову, но разгружает руки.

Софт QMK


В клавиатуре крутится софт QMK quantum mechanical keyboard. Опенсорс, широко поддерживается, красота. Настраивать клавиатуру можно через конструктор на сайте или перепрошивать через терминал.

Конфигуратор на сайте


Сделать раскладку можно на сайте-конфигураторе config.qmk.fm.

Работает очень просто: перетаскиваете кнопки снизу наверх, жмёте скомпилировать (Compile), скачиваете (Firmware).



Через программу QMK Toolbox обновляете прошивку: выбираете файл, жмёте flash, нажимаете кнопку сброса на клавиатуре. Готово. У клавиатуры Iris кнопки сброса есть снизу платы, но можно повесить и на обычную кнопку в каком-нибудь слое.


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

Сборка на компе


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

Для установки QMK надо выполнить 4 команды
Установить brew:
brew install qmk/qmk/qmk

Запустить настройку:
qmk setup

Дать название вашей раскладке:
qmk config user.keyboard=clueboard/66/rev4
qmk config user.keymap=<github_username>


После установки у вас появится файл с вашей раскладкой.



Список клавиш можно найти на сайте QMK.

Если что-то поменяли, то достаточно выполнить:

qmk compile // скомпилирует вашу раскладкуqmk flash// загрузит раскладку в клавиатуру 

И потом нажать на клавиатуре кнопку reset.

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

void encoder_update_user(uint8_t index, bool clockwise) {    if (index == 1) { // Right encoder        if (clockwise) {            tap_code(KC_VOLU);        } else {            tap_code(KC_VOLD);        }    }}

Можно усложнить действия, добавив слои
void encoder_update_user(uint8_t index, bool clockwise) {    if (index == 1) { // Right encoder        if (layer_state_cmp(layer_state, _LOWER)) {            if (clockwise) { // Стрелки вверх-вниз                tap_code(KC_DOWN);            } else {                tap_code(KC_UP);            }        } else if (layer_state_cmp(layer_state, _RAISE)) {            if (clockwise) { // Громкость                tap_code(KC_VOLU);            } else {                tap_code(KC_VOLD);            }        } else {            if (clockwise) { // Стрелки влево-вправо                tap_code(KC_RGHT);            } else {                tap_code(KC_LEFT);            }        }    }}


Что можно сделать со своей прошивкой?


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

Space cadet shift


В обычной клавиатуре shift или alt работают только на зажатие. В QMK им можно добавить действие и на нажатие. Например, левый shift будет писать открывающую [, а правый закрывающую ]. Ещё я так настроил аlt/enter.

Макросы


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

Пара примеров. Обновление прошивки двумя командами можно свести до одной клавиши: вводим qmk compile, ждём пару секунд пока выполнится, вводим qmk flash и программно жмём кнопку reset. Весь процесс свёлся до одной клавиши.

Хоба
SEND_STRING("qmk compile\n");SEND_STRING(SS_DELAY(2000));SEND_STRING("qmk flash\n");reset_keyboard();


Многое в программировании можно свести до ввода таких команд. Например, скопировать название класса в буфер, а потом объявить переменную:

var  SomeClassMock: SomeClassInterfaceProtocol!

Код для этого
// write var ClassNameMock: ClassNameMockSEND_STRING("var "); SEND_STRING(SS_LGUI("v"));  // Past from bufferSEND_STRING("Mock: "); SEND_STRING(SS_LGUI("v"));  // Past from bufferSEND_STRING("Mock");


Не получится уменьшить первую букву переменной, но можно переместить до неё курсор (alt + влево два раза) и удалить (через del), останется только ввести букву самому.

Дописываем
SEND_STRING(SS_LALT(SS_TAP(X_LEFT)));SEND_STRING(SS_LALT(SS_TAP(X_LEFT)));SEND_STRING(SS_TAP(X_DEL));


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

Потом по такому же принципу можно инициализировать переменную:

someClassInterfaceMock = SomeClassInterface()

А затем и сгенерировать шаблон для мока в Spry:

сlass SomeClassInterfaceMock: SomeClassInterfaceProtocol: Spryify {    enum ClassFunction: String, StringRepresentable {        case empty    }        enum Function: String, StringRepresentable {        case <#empty#>    }}

В итоге, написание мока для зависимости у меня выглядит вот так:


Скорее всего, это можно сделать и в какой-нибудь программе, например, Keyboard Maestro, но есть и вот такая альтернатива. Из плюсов: подключив клавиатуру к любому компьютеру, вам не придётся настраивать окружение, всё уже работает.

Применений макросам много, надо просто поискать паттерны в своей работе.
Есть и другие фишки, но я их ещё не пробовал: auto shift, combos, tap dance, leader key и кучу всего привязанного к железу.

Итог


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

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

Есть и сложности. К новой раскладке привыкать не очень сложно, а вот хоткеи могут значительно поменяться и стать сложнее. Я стал упрощать, как сами хоткеи (cmd + shift + G для запуска тестов в Xcode это глупость), так и поменял раскладку, чтобы было удобнее нажимать их. 60% клавиатуры хороший компромисс для тех, кто не готов пожертвовать цифрами, как в 40% клавиатуре.

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

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

Не бойтесь пробовать и менять привычные инструменты!
Планы на будущее: уже заказал и хочу попробовать пару других клавиатур. Это Atreus, он недавно вышел с кикстартера, и скоро начнётся нормальная продажа, и 40% Jian с нормальной русской раскладкой, но на него надо успевать записываться, групбай почти закончился.

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

Мои размышления про экранную клавиатуру для Flipper Zero под экранчик 128х64 пикселя

28.08.2020 22:20:21 | Автор: admin

Недавно я увидел пост с приглашением разработчиков в проект Flipper Zero и подал заявку. Меня добавили в репозиторий с прошивкой и я стал много думать над юзабилити устройства. Приснилось, что мне надо отсканировать кучу ключей-брелков от разных подъездов. Во сне были разные люди, квартиры, дождь, и почему-то мне дали целую горсть этих желтых кругляшей, отличающихся друг от друга только количеством грязи на них. И естественно, чтобы как-то совладать с этим беспорядком, я решил внести все эти ключи во Flipper Zero.
Прямо во сне, я заносил новые идентификаторы и все они добавлялись в менюшку как Ключ, что делало действо еще бессмысленней. Получился большой список, состоящий только из слова Ключ. Подумалось, что надо переписать прошивку. И тут как раз преимущество сна все задуманное сбывается одномоментно. Ключи стали добавляться с рандомным суффиксом как Ключ 74, а следом за ним мог добавиться Ключ 22. Номер именно рандомный, не путать с контрольными суммами или хешами. В принципе, если есть хорошая память, то можно запомнить, что Ключ 22 от Ленина 54, а Ключ 74 от Пушкина 29. Подумалось, что неплохо бы как-то редактировать номера, прямо на Флиппере, прямо в списке ключей: у нас же свободны кнопки влево-вправо, пусть они инкрементируют/декрементируют номер! А длинное удержание вызовет вызов полноценной клавиатуры! Но стоп, какую клавиатуру рисовать? Стандартную Qwerty с переключением на Йцукен? Русифицированную Яверты? У нас же экран всего 128х64 пикселя, к тому же в него надо как-то запихнуть еще вывод набираемого! Как все это уместить? Неужели вводить текст Азбукой Морзе?



Примитивная клавиатура



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

Qwerty


Так, а что, если взять стандартную клавиатурку от Андроида, применить эффект линзы и посмотреть, что из этого выйдет? 10 часов в Афтер Эффектсе и вот оно:


У меня был скрипт, который конвертирует графику в CGA-палитру, после обработки получилось такое:


Мне это понравилось, и даже понравились полутона. СТОП. На Флиппере же чернобелый экран! Но зато он обладает энерционностью, а значит можно получить полутона, быстро включая/выключая пиксели. Пришлось изобретать свой вариант дизеринга. В процессе был изобретен Дизеринг Курильщика:


Это вариация дизеринга Баера и немного модифицированной матрицы распределения ошибок Билла Аткинсона. После некоторой отладки и исправления 9000 ошибок, получилось такое:


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

Хм, а если постараться и нарисовать как можно более маленькую клавиатурку?


В принципе, получилось неплохо. Все вмещается, если захотеть. Опционально можно припилить клавишу RUSLAT, как и много других полезных клавиш. Но каких? Залезть в стандарт HID и натырить оттуда клавиши кофе и красная кнопка?

Раскладка


Стандартная раскладка QWERTY имеет следующие особенности:

  1. Предназначена для печатающих машинок, подразумевающие ручной ввод (двух рук)
  2. Предполагается смена рук при наборе текста. Пока одна рука нажимает клавишу, вторая рука готовится к нажатию. Однако, многие слова английского языка могут быть набраны только на левой части клавиатуры.
  3. Диагональное расположение клавиш ведет свою историю от физического расположения рычагов на печатающей машинке


Следующие слова приписываются Августу Двораку:

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


Но так получилось, что ни Дворак, ни его приемник, Колемак, так и не завоевали популярности.
Но вернемся к Флипперу. У нас есть на нем рычаги? Можно ли использовать сразу 2 руки для набора текста? Имеет ли смысл чередовать руки? Хотим ли мы более эффективно задействовать мизинцы, как это рекламирует автор Колемак? Нужна ли нам совместимость с популярными Windows-хоткеями, такими как CTRL+C/CTRL+V? Ответ на все эти вопросы: НЕТ.

Шарики



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

!$%&'(),-./01234567
89:;?ABCDEFGHIJKLM
NOPQRSTUVWXYZ[]a
bcdefghijklmnopqrstu
vwxyz|АБВ
ГДЕЖЗИЙКЛМНОПРС
ТУФХЦЧШЭЮЯабвгде
жзийклмнопрстуфхцч
шщъыьэюяё


Забавно, но тут нету символа двойной кавычки ", зато есть ёлочки.

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



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

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

Первый опыт был таким:


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

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



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



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

С другой стороны, если положить это все в диаграмму Вороного


Выглядит очень круто! Хм, да с такой клавиатуркой можно будет даже оставить Флиппера и начать производство собственных реальных клавиатур! Правда, кому еще нужны клавиатуры для 1-пальцевого ввода? Что мне писать на кикстартере? Пойду плакать в подушку над очередным своим бесполезным изобретением.

Генетика



Ладно, поплакав, я продолжил свои изыскания. За основу я взял прототип китайской клавиатурки:


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

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

Было много экспериментов:

  • Сначала я переставлял 2 соседние клавиши местами, а в конце выяснил, что лучше передвигать клавишу по всему полю
  • Количество мутаций в одном поколении варьировал от 30 до 3000. Выяснил, что пусть лучше рожает чаще и чаще дохнет, для эволюции это полезней остановился на 30.
  • Мутировать за раз лучше как можно меньше, таким образом оно сможет более точно подстраиваться на последних этапах, когда все будет почти закончено.
  • Эволюционная яма наступает не сразу, а где-то за 5к итераций до того, как станет очевидной
  • Если уперлись в яму и долго не можем найти новых улучшений, то лучше все бросить и начать с нуля, может быть в этот раз эволюция пойдет лучшим путем. Из-за этого в результатах есть досадные недостатки в виде пары клавиш, которые присутствуют не в своих кластерах


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











Местами мне очень нравится получившийся numpad, местами кириллица и латиница образовали некоторое подобие Инь и Янь, почти везде символы доллара, евро и фунтов находятся рядом, как и символ процента. Номер слева означает, сколько раз надо будет нажать на кнопки джойстика, чтобы набрать тестовый текст. Возможно, если бы я запустил симулятор на недельку, то были бы более интересные варианты, но у меня старенький компьютер для таких экспериментов. А внимательный читатель найдет еще и полупасхалку-полубагу: почти на всех вариантах раскладки присутствует слово KFC, так как обучалось оно на статье про KFC и каких-то теннисисток.
В принципе, меня подмывает взять и переставить некоторые клавиши руками, особенно кириллическую Й, которая вечно оказывается около латиницы, или же латинскую Х, которая порой бывает среди кириллицы, а символы равномерно распределить кругом или ссыпать в кучку, но А что ответит эволюция на это? Насколько эффективным будет такая перестановка? Да, писать интерактивную переставлялку мне было лень. Но оно и к лучшему: теперь я знаю, что даже для кириллицы/латиницы может быть несколько раскладок, а пользователь уж пускай сам выбирает, что ему лучше.

Если интересны другие варианты раскладок, которые сгенерировались за время обсчета, то посмотрите файлы layouts.html и layouts-more.html

Можно экспериментировать достаточно долго, вот идеи для опытов:

  1. Заворачивание краев пространства друг на друга. Т.е. это не курсор двигается по клавиатуре, а клавиатура двигается, причем по мере ухода в одну сторону экрана, она появляется с другой стороны.
  2. Отказ от двумерного пространства и заворачивание плоскости в какой-то трехмерный объект, скажем натягивание на глобус или же еще какую геометрическую фигуру. Возможностей зацикливания пространства становится больше.
  3. Добавление частоиспользуемых символов в нескольких экземляров. К примеру, почему бы не сделать десяток пробелов? Вот в Колемаке есть 2 бекспейса, только в нашем случае умножать стоит скорее пробел.
  4. Добавление частоиспользуемых буквосочетаний, на манер дерева Хаффмана, где длинные последовательности заменяются короткими. В нашем случае частые последовательности букв заменяются одинарными нажатиями
  5. Динамическое подставление символов, предугадывая дальнеший набор текста, как это сделано в Dasher


Если кто не знает про Dasher, то бегом сюда: f-droid.org/en/packages/dasher.android тут все про наш девайс и даже более: ввод текста с джойстиков, трекболов, мышек, глазных трекеров и прочих одноручных, однопальцевых и носимых устройств. Интерфейс может быть запущен хоть в разрешении 32х32 пикселя, и это без потерь для юзабилити. Работало на Pocket PC и пережило долгие годы! Но, как бы я не фанател от этой штуки, не смотря на большой выбор опций, я так и не научился этим пользоваться, ощущая при этом удобство, поэтому для меня это скорее технодемка возможностей, возможности взаимодействия с машиной. Если кто-то хочет портировать Dasher, то милости просим, патчи до сих пор приходят в репозиторий регулярно, думаю будет много желающих, увидеть такую штуку на своем Флиппере.

Сюда же можно занести разнообразные варианты аккордовых клавиатур, или же экранных клавиатур времен Palm, таких как MessagEase. Идея, лежащая в MessagEase замечательная, но проблема в том, что зажатие 2-х кнопок лично для меня неприемлемо, потому лично я превращать Флиппера в аккордовую клавиатуру не буду. Но я уверен, что настоящий хакерский девайс не сможет выжить без аккордовой клавиатуры, потому ее наверняка добавит кто-то еще.

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

Реализация



А в следующей части мы попробуем реализовать все задуманное. Мы напишем небольшой эмулятор и попробуем изобрести API.

На последок, вот вам еще несколько анимаций с концептами клавиатурки:


Клавиатурка, натянутая на то, что в Максе зовется Torus Knot:



А это, попытка натянуть сову на глобус^W^W^Wклавиатурку на сферу. Тут я немного поэкспериментировал с дизерингом, и к Дизерингу Курильщика у меня добавился еще и Дизеринг Эпилептика.


Аналогично предыдущему, только для CGA
Подробнее..

Из песочницы Клавиатура из пяти кнопок

30.10.2020 00:06:47 | Автор: admin
Графические интерфейсы штука удобная, но иногда их не хватает. Сделать удобный интерфейс это искусство и большая трата ресурсов. Поэтому в большинство программ можно попасть только через командную оболочку.

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

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

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

Размышления про клавиатуру в Flipper Zero вызвали вялотекущее обсуждение про оптимизацию способов ввода. Мне тоже нравятся велосипеды, поэтому вот пара диких идей.

Прокрутка с умной сортировкой


Будем отталкиваться от простого скролла символов.

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

Это довольно неудобно, сделаем пару улучшений.

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

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

image

Троичная система


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

Имеем 5 кнопок. Если одну будем использовать для подтверждения ввода, вторую для стирания последнего разряда, остается 3 кнопки на цифры. Допустим, вверх 0, вправо 1, вниз 2.

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

image

Двухмерный скролл


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

image

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

image

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

Вот ссылка на код демки, используемой в посте

Подключается как питоновская библиотека, функция ternary опционально принимает строку для редактирования. Чтобы перейти из режима навигации, надо нажать стрелку вверх. В режиме редактирования набирается троичный код символа (вверх 0, вправо 1, вниз 2, влево стереть последний разряд, Enter подтвердить). Для выхода надо нажать Enter, функция вернет отредактированную строку.

В функции roll все намного проще стрелками выбираем символ, подтверждаем кнопкой Enter. В первой верхней строке: вставка табуляции, Shift, Backspace, пробел, перевод строки, Delete и Caps Lock.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru