быт — Ботинок и карандаш https://bootandpencil.com bootandpencil.com Wed, 19 Nov 2025 18:32:00 +0000 ru-RU hourly 1 https://wordpress.org/?v=6.8.3 https://bootandpencil.com/wp-content/uploads/2021/10/cropped-logo_icon-3-1-32x32.png быт — Ботинок и карандаш https://bootandpencil.com 32 32 Несколько слов о клавиатурах https://bootandpencil.com/lifestyle/smth-abg-kbrds/ Thu, 04 Apr 2024 15:03:04 +0000 https://bootandpencil.com/?p=49599 Читать далее]]> Решил заморочиться вопросом скорости печати, а то ловлю себя порой на мыслях о том, что отказываюсь от идеи что-нибудь написать (в бложик или ещё куда) только из-за того, что лениво набирать буквы.

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

Контекст

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

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

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

Переход на механическую клавиатуру

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

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

Клавиатуры по цене крыла самолёта, что?

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

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

Конечная цель (в том виде, как я её представлял на момент затеи всего этого ещё в 2024-м году, и которой я так и не достиг) — слепая десятипальцевая печать в [neo]vi[m] на чём-то вроде этого:

MoErgo Glove80

Что всё это значит?

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

Попробую не слишком растягивая рассказать про основное.

Клавиатура — это, собственно, само устройство текстового ввода в сборе. Состоит из платы, корпуса, свитчей, стабилизаторов, кейкапов и прочего.

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

Например, мне пришлось немного модифицировать прошивку, чтобы можно было работать с альтернативной раскладкой Colemak DH mod Wide под MacOS (но об этом далее).

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

Сейчас многие платы собираются таким образом, чтобы работать с QMK (Quantum Mechanical Keyboard) — это такой набор инструментов и технологий, включающих прошивки, конфигураторы, средства для разработки и другие полезности, а также сообщество, которое эти инструменты и технологии разрабатывает и поддерживает.

Фишка QMK в том, что прошивки, собранные на базе этой штуки, распространены, хорошо документированы, удобно расширяемы и достаточно продвинуты с точки зрения предоставляемых возможностей: там и удобный конфигуратор, и поддержка VIA, и макросы, и куча других приятностей.

Некоторые производители предоставляют для своей продукции, основанной на технологиях QMK, собственные решения по настройке, например, Keychron Launcher:

Keychron Launcher, приложение, в котором можно настроить некоторые параметры без перепрошивки клавиатуры.

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

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

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

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

Вот он:

Прозрачные штуки с синими ножками — это и есть свитчи

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

Зачем?

Наверное, ответ на этот вопрос — это то, чего мне больше всего не хватало в многочисленных статьях, постах и заметках, посвящённых «механике».

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

Обычно говорят или о геймерах (но я к ним не отношусь, поэтому никак не могу субъективно оценить [не]оправданность использования устройств этого типа), или о хобби (что тоже не кажется близким), или о каких-то совсем уж странных вещах вроде «правильного звука щелчков при наборе».

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

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

Поэтому до какого-то времени вся эта движуха проходила совсем уж мимо меня.

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

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

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

Что именно? Тактильное ощущение от нажатия.

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

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

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

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

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

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

Какая?

Сначала присматривался к Drop Shift v2:

Drop Shift v2. Часть сайта производителя за пейволлом, поэтому размещу изображение тут.

Но расположение стрелок управления курсором и их соотношение с нампадом показались мне слишком уж инопланетными, и я не решился, сменив свои предпочтения на более попсовый Keychron Q6 Max (свитчи Gateron Jupiter Banana, кейкапы стандартные — KSA PBT, те самые, которые, по мнению части сообщества, позорят весь класс PBT-шных кейкапов):

Keychron Q6 Max, фото с сайта производителя.

Логичным в этом случае будет вопрос о том, в своём ли я уме был покупать полноформатную механическую клавиатуру в 2024-м году.

Отвечу честно: не совсем. Я не могу сказать, что мне вот-прямо-необходим нампад (это блок с цифрами справа), но без него я себя ощущаю неуютно.

Да, есть вариант с TKL (или даже меньше) + выносной блок (например, HHKB, культовый по-своему, но переоценённый + the Norbaforce Data Pad или, если цена последнего кажется неадекватной, то вам не кажется любой другой отдельный нампад), но как-то мне некомфортно пока что от этой идеи.

Собственно, TKL (ten key less — без десяти цифровых клавиш) клавиатура. Технически, она урезана больше, чем на десять клавиш, но название прижилось.

Это очень странное субъективное ощущение, когда ты понимаешь, что вообще A лучше, чем B (в принятой в данный момент системе оценок), но вот прямо сейчас ты выбираешь B потому, что «не готов перестраиваться под A».

Happy Hacker Keyboard — предмет многочисленных холиваров и пример минимализма в клавиатуростроении.

Выбрал полноформат — 108 клавиш (стандартные 104 + F13-F16). На дополнительные повесил run / debug / stop / step over, жаль двух — под step out и step into — не хватило в этом же блоке; при медленном наборе (и медленном придумывании того, что набирается) бывает удобно.

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

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

Читатель может задать резонный вопрос: а почему тогда не Hyper 7?

Hyper 7 во всей своей красе. Доведённый до логической завершённости Space-cadet.

Ответ будет всё тем же — не решился слишком далеко отходить от привычного опыта.

Тот же самый фактор — нежелание (и даже некоторый страх) отходить слишком далеко от привычного — остановил меня от покупки сплит-клавиатуры в качестве первой «механики».

Ultimate hacking keyboard 60 v2 + Riser 60

Есть мнение, что всякие раритетные устройства вроде TRON TK-1 — наилучший выбор, но, во-первых, их сложно найти, во-вторых, они часто стоят достаточно дорого и, в-третьих, не всегда понятно, как их вообще подключать и использовать.

TRON TK-1. Старая японская клавиатура. Говорят, достаточно удобна.

Среди всего многообразия механических клавиатур меня, помимо, собственно, приобретённого Keychron Q6 max, заинтересовали две модели.

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

Beam Spring B104

Их фишка в том, как устроены переключатели: в отличие от большинства других представленных на рынке механических клавиатур, эти не используют Cherry-совместимые свитчи.

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

Тот самый механизм с пружинкой, используемый в современных клонах старых клавиатур IBM.

До сих пор не уверен, что не зря купил другую, честно говоря.

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

Вторая клавиатура из моего шорт-листа — это MacTigr от Das Keyboard, вот она:

Das Keyboard McTigr

Устройство позиционируется следующим образом: «The Das Keyboard MacTigr feels like the mechanical keyboard that Apple could have made» («Так могла бы ощущаться механическая клавиатура от Apple»).

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

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

Раскладки

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

Да, их, клавиатурных раскладок, существует достаточно много, помимо привычной пары QWERTY / ЙЦУКЕН.

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

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

Считается, что QWERTY — очень плохая раскладка, а ЙЦУКЕН — приемлемая (не отличная, но и не совсем ужасная).

Заинтересовавшимся темой читателям я порекомендую документ с предсказуемым названием «Keyboard layouts doc», являющийся, на мой взгляд, весьма неплохим введением в тему.

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

Существует, грубо говоря, два вида клавиатурных раскладок (помимо кастомных): state-of-the-art и относительно попсовые.

Первые имеют более высокие показатели «быстропечатания». В качестве примеров приведу QGMLWY и Magic Sturdy. Вот так выглядит QGMLWY:

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

А вот так — Magic Sturdy:

Одна из «продвинутых» клавиатурных раскладок

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

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

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

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

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

Раскладка Дворака — пожалуй, самая популярная альтернативная раскладка.

Кстати, раскладка Дворака настолько популярна, что во многих операционных системах идёт в комплекте и настраивается простым выбором соответствующего пункта в меню.

Раскладка Дворака в MacOS.

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

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

Например, часто используемое сочетание CTRL+C в раскладке Дворака выглядит, по меньшей мере, странно (C — это восьмая клавиша в первом ряду, там, где обычно I).

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

Первый — это тотальное переназначение всех клавиш «по расположению», а не «по букве». То есть не «CTRL+C», а «CTRL+<третья клавиша в нижнем ряду>». Рабочее решение, но бывает, что требует весьма нетривиальных настроек (см. далее).

Второй — это создание «подложки»: при нажатии на некоторую клавишу, например, ALT или SHIFT, раскладка временно, пока клавиша зажата, меняется на привычную многим QWERTY.

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

Например, я часто использую сочетание CMD + SHIFT + C (копировать текущий URL в браузерах Zen и Arc под MacOS). В этом случае нужно следить, чтобы модификатор, временно активирующий подложку, не входил в используемые комбинации (либо настраивать длительность зажатия, sticky keys и прочи извращения сложности).

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

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

Рассмотрев разные варианты, я остановился на Colemak mod DH Wide:

Colemak DH с модом Wide Mod. Такое расположение должно помочь держать руки на большем расстоянии и за счёт этого снизить усталость кистей.

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

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

Апгрейд первый — клавиши

Говорят, механические клавиатуры нужны программистам, чтобы было куда тратить их огромные 300 К/нс. Я, конечно, не программист, но болезнь «улучшения клавиатуры» поразила и меня (блин, лучше бы я собственно умение код писать у них перенял).

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

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

Сравнение разных профилей клавиш: Cherry, KSA, OEM

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

Не знаю, как правильно это выразить, но кажется, что пластик клавиш как-то «не соответствует» всей остальной конструкции по «уровню» / «качеству» (читай: не вызывает такого ощущения «ыыыыы, прикольная же штука»).

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

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

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

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

Видел всякое — и мраморные клавиши, и металлические, и деревянные, и карбоновые, и, разумеется, пластиковые (про некоторые из них говорят, что они прямо-таки прекрасны).

Керамические

Но заинтересовали меня керамические. Да, вот такая я сорока-истеричка, которая любит всякое блестящее и необычное.

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

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

Во второй её пофиксили, сделав крепление пластиковым, не повреждающим свитчи, но добавили другую — теперь они не всегда ровные:

Кому-то не повезло получить брак

Комментарий производителя по этому кейсу сводится к вполне, на мой вкус, адекватному комментарию в духе «таков техпроцесс, облажались, заменим».

Пишут, что проблема решена путём отправки покупателю другого комплекта.

Металлические / вставные зубы

Есть у наборов Cerakeys ещё один недостаток. Точнее, не так.

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

Сейчас объясню.

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

Для того, чтобы облегчить ему эту задачу, производители стали делать клавиши «о» и «а» (‘f’ и ‘j’ в раскладке QWERTY) тактильно различимыми, имеющими слегка иную конструкцию по сравнению со всеми остальными.

Где-то ставят небольшие бугорки, где-то делают неглубокую выемку, где-то более острые/тупые грани, в общем, эти самые клавиши конструктивно должны выполнять роль ориентира:

Схема расположения рук на стандартной клавиатуре.

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

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

Отсюда — тотальные перестраховки.

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

Фото на фоне пластикового набора (с сайта производителя)

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

Незачем, вменяемого ответа у меня нет, просто заклинило, что хочу поменять всё:

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

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

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

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

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

В итоге получился вот такой попугай:

Я всё объясню! Честно!

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

На фоне этих, кажется, предыдущий не так уж и плох, да?

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

Это было бы слишком просто и разумно.

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

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

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

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

Так что можно было брать более строгую (и нравящуюся мне) расцветку и не заморачиваться зря всей этой фигнёй.

Да, в итоге получилось вот такое:

Вот так выглядит финальная версия моей клавиатуры

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

1. Сначала я купил набор очень дешёвых одинаковых по форме и размеру пластиковых клавиш с латинскими подписями, смонтировал их в раскладке Colemak DH Wide и какое-то время пользовался этим, чтобы сформировать хотя бы минимальную привычку к новой раскладке.

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

Подводные камни MacOS

Но если бы всем этим дело и ограничилось, то было бы слишком просто.

А как же написание или правка прошивки на C? А как же раскирпичивание программатором? Не, так дело не пойдёт!

Здесь нужно сказать, что вообще MacOS мне нравится.

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

Было.

Пока я не решил использовать раскладку Colemak Mod DH Wide, которой нет в штатном комплекте.

В чём проблема

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

То есть нельзя просто так взять и поменять их местами: независимо от того, какие буквы будут физически нарисованы на колпачках (если вообще будут), MacOS по-прежнему будет считать, что у вас QWERTY.

Стандартным рекомендуемым решением в этом случае является использование программы Karabiner-Elements.

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

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

Почему бы просто не создать альтернативную раскладку в MacOS?

Сначала я тоже так подумал.

Собрал в Ukelele новую раскладку под Colemak DH Wide, установил её в систему и… обломался.

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

Что происходит, когда пользователь нажимает некую клавишу?

Клавиатура посылает некоторый цифровой сигнал, число, называемое kVK_ANSI_V или физическим кодом клавиши.

Ещё раз: это просто число, не «буква» и не «символ». Например, для «V» это будет девять.

То, какое число соответствует какой кнопке, определяется на уровне клавиатуры.

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

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

То есть тот факт, что «девять — это V», задаётся на уровне компьютера.

Какой букве в русской раскладке будет соответствовать четвёртая слева клавиша в нижнем ряду?

Ответ зависит от того, как составлена «русская раскладка». Тут пока всё ОК: цифре 9 соответствует буква «М» (в стандартной раскладке ЙЦУКЕН).

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

Почти.

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

Например, популярное сочетание CMD + V (вставка ранее скопированного) включает в себя именно латинский символ «V», а не кириллическую «М».

Как же тогда оно работает, если установлен русский язык ввода?

Довольно хитро: MacOS «временно подменяет раскладку» при нажатых модификаторах (например, CMD) на «оригинальную английскую» (QWERTY).

Именно на оригинальную, а не на ту, которую мы можем задать с помощью Ukelele.

А поскольку расположение клавиш у Colemak DH Wide и QWERTY отличаются, горячие клавиши в «русской» раскладке перестают работать.

Точнее, они работают, но по-старому.

И получается, что, например, операция отмены последнего одной раскладке — это CMD+<первая клавиша нижнего ряда> (буква Z в QWERTY, которая будет работать в русской раскладке, поскольку она подменяется на QWERTY автоматически), а в другой — это CMD+<пятая клавиша нижнего ряда> (поскольку в Colemak DH Wide буква Z находится именно там).

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

Увы.

Зато мимоходом я отредактировал «русскую раскладку», чтобы при зажатой клавише Alt на клавишах, соответствующих гласным буквам в ЙЦУКЕН, печа́тались си́мволы с ударе́нием, э́то о́чень удо́бно при́ набо́ре те́кста.

Второй слой в «русской раскладке» с ударениями.

Меняем прошивку

Ок, простое решение не сработало, будем искать другое.

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

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

Или чтобы при одних условиях она давала «девять», а при других «пятнадцать».

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

А это уже открывает возможности реализовать «одинаковость расположения горячих клавиш».

Что мы собираемся делать

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

Первым делом мы вводим понятие раскладки в отношении самой клавиатуры (не в операционной системе).

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

Итак, делаем несколько слоёв — в одном у нас клавиши расположены в порядке Colemak DH Wide, а в другом — в стандартном QWERTY (мы ведь решили не менять «русскую» раскладку, чтобы не переучиваться).

А теперь — главное: делаем так, чтобы при включенном «русском» слое (то есть стандартном QWERTY) клавиатура проверяла, задействована ли одна из модифицирующих клавиш (то есть CMD или ALT), и, если да, то временно подменяла слой на Colemak DH Wide.

Осталось только согласовать эти слои с самой MacOS.

Для этого мы переопределяем поведение стандартного сочетания переключения клавиатуры — CMD + <Пробел>: теперь оно переключает слои внутри самой клавиатуры, а компьютеру отправляет разные сигналы в зависимости от того, какой слой устанавливается в самой клавиатуре.

В MacOS штатные настройки переключения реализованы достаточно неудобно, поэтому я использую стороннюю утилиту Input Source Pro:

Основная фишка этого инструмента — это возможность установить разные значения кодов для разных раскладок на уровне MacOS.

Штатными средствами мы можем задать только один сигнал, означающий «переключи раскладку», но тогда может случиться (и часто случается на практике!) рассинхронизация, когда слой, заданный на самой клавиатуре, не соответствует раскладке в MacOS.

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

Как мы будем это делать

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

К счастью, исходники доступны и неплохо структурированы: достаточно изменить файл keymap.c для нашей модели клавиатуры. У меня получилось вот так:


/* Copyright 2024 @ Keychron (https://www.keychron.com)
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 */

#include QMK_KEYBOARD_H
#include "keychron_common.h"

enum layers {
    MAC_BASE,
    MAC_FN,
    CYR_BASE,
    CYR_FN,
};

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {

    [MAC_BASE] = LAYOUT_109_ansi(
        KC_ESC,   KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,     KC_MUTE,    KC_PSCR,  KC_CTANA, RGB_MOD,  KC_F13,   KC_F14,   KC_F15,   KC_F16,
        KC_GRV,   KC_1,     KC_2,     KC_3,     KC_4,     KC_5,     KC_6,     KC_EQL,   KC_7,     KC_8,     KC_9,     KC_0,     KC_MINS,    KC_BSPC,    KC_INS,   KC_HOME,  KC_PGUP,  KC_NUM,   KC_PSLS,  KC_PAST,  KC_PMNS,
        KC_TAB,   KC_Q,     KC_W,     KC_F,     KC_P,     KC_B,     KC_LBRC,  KC_J,     KC_L,     KC_U,     KC_Y,     KC_SCLN,  KC_QUOT,    KC_BSLS,    KC_DEL,   KC_END,   KC_PGDN,  KC_P7,    KC_P8,    KC_P9,
        KC_CAPS,  KC_A,     KC_R,     KC_S,     KC_T,     KC_G,     KC_RBRC,  KC_M,     KC_N,     KC_E,     KC_I,     KC_O,                 KC_ENT,                                   KC_P4,    KC_P5,    KC_P6,    KC_PPLS,
        KC_LSFT,            KC_X,     KC_C,     KC_D,     KC_V,     KC_Z,     KC_SLSH,  KC_K,     KC_H,     KC_COMM,  KC_DOT,                KC_RSFT,              KC_UP,              KC_P1,    KC_P2,    KC_P3,
        KC_LCTL,  KC_LOPTN, KC_LCMMD,                               KC_SPC,                                 KC_RCMMD, KC_ROPTN, MO(MAC_FN), KC_RCTL,    KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_P0,              KC_PDOT,  KC_PENT),

    [MAC_FN] = LAYOUT_109_ansi(
        _______,  KC_BRID,  KC_BRIU,  KC_MCTRL, KC_LNPAD, RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,    RGB_TOG,    _______,  _______,  RGB_TOG,  _______,  _______,  _______,  _______,
        _______,  BT_HST1,  BT_HST2,  BT_HST3,  P2P4G,    _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    _______,    _______,  _______,  _______,  _______,  _______,  _______,  _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    _______,    _______,  _______,  _______,  _______,  _______,  _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,              _______,                                  _______,  _______,  _______,  _______,
        _______,            _______,  _______,  _______,  _______,  BAT_LVL,  NK_TOGG,  _______,  _______,  _______,  _______,              _______,              _______,            _______,  _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,    _______,    _______,  _______,  _______,  _______,            _______,  _______),

    [CYR_BASE] = LAYOUT_109_ansi(
        KC_ESC,   KC_F1,    KC_F2,    KC_F3,    KC_F4,    KC_F5,    KC_F6,    KC_F7,    KC_F8,    KC_F9,    KC_F10,   KC_F11,   KC_F12,     KC_MUTE,    KC_PSCR,  KC_CTANA, RGB_MOD,  KC_F13,   KC_F14,   KC_F15,   KC_F16,
        KC_GRV,   KC_1,     KC_2,     KC_3,     KC_4,     KC_5,     KC_6,     KC_EQL,   KC_7,     KC_8,     KC_9,     KC_0,     KC_MINS,    KC_BSPC,    KC_INS,   KC_HOME,  KC_PGUP,  KC_NUM,   KC_PSLS,  KC_PAST,  KC_PMNS,
        KC_TAB,   KC_Q,     KC_W,     KC_E,     KC_R,     KC_T,     KC_Y,     KC_U,     KC_I,     KC_O,     KC_P,     KC_LBRC,  KC_RBRC,    KC_BSLS,    KC_DEL,   KC_END,   KC_PGDN,  KC_P7,    KC_P8,    KC_P9,
        KC_CAPS,  KC_A,     KC_S,     KC_D,     KC_F,     KC_G,     KC_H,     KC_J,     KC_K,     KC_L,     KC_SCLN,  KC_QUOT,              KC_ENT,                                   KC_P4,    KC_P5,    KC_P6,    KC_PPLS,
        KC_LSFT,            KC_Z,     KC_X,     KC_C,     KC_V,     KC_B,     KC_N,     KC_M,     KC_COMM,  KC_DOT,   KC_SLSH,              KC_RSFT,              KC_UP,              KC_P1,    KC_P2,    KC_P3,
        KC_LCTL,  KC_LOPTN, KC_LCMMD,                               KC_SPC,                                 KC_RCMMD, KC_ROPTN, MO(CYR_FN), KC_RCTL,    KC_LEFT,  KC_DOWN,  KC_RGHT,  KC_P0,              KC_PDOT,  KC_PENT),

    [CYR_FN] = LAYOUT_109_ansi(
        _______,  KC_BRID,  KC_BRIU,  KC_TASK,  KC_FILE,  RGB_VAD,  RGB_VAI,  KC_MPRV,  KC_MPLY,  KC_MNXT,  KC_MUTE,  KC_VOLD,  KC_VOLU,    RGB_TOG,    _______,  _______,  RGB_TOG,  _______,  _______,  _______,  _______,
        _______,  BT_HST1,  BT_HST2,  BT_HST3,  P2P4G,    _______,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    _______,    _______,  _______,  _______,  _______,  _______,  _______,  _______,
        RGB_TOG,  RGB_MOD,  RGB_VAI,  RGB_HUI,  RGB_SAI,  RGB_SPI,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    _______,    _______,  _______,  _______,  _______,  _______,  _______,
        _______,  RGB_RMOD, RGB_VAD,  RGB_HUD,  RGB_SAD,  RGB_SPD,  _______,  _______,  _______,  _______,  _______,  _______,              _______,                                  _______,  _______,  _______,  _______,
        _______,            _______,  _______,  _______,  _______,  BAT_LVL,  NK_TOGG,  _______,  _______,  _______,  _______,              _______,              _______,            _______,  _______,  _______,
        _______,  _______,  _______,                                _______,                                _______,  _______,  _______,    _______,    _______,  _______,  _______,  _______,            _______,  _______)
};

#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
    [MAC_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [MAC_FN]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
    [CYR_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
    [CYR_FN]   = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
};
#endif

// === Перекодировка под Colemak Mod-DH Wide для хоткеев на слое CYR_BASE ===
const uint16_t qwerty_to_colemak_dh_wide[] = {
    [KC_Q]     = KC_Q,     [KC_W]     = KC_W,     [KC_E]     = KC_F,     [KC_R]     = KC_P,
    [KC_T]     = KC_B,     [KC_Y]     = KC_LBRC,  [KC_U]     = KC_J,     [KC_I]     = KC_L,
    [KC_O]     = KC_U,     [KC_P]     = KC_Y,     [KC_LBRC]  = KC_SCLN,  [KC_RBRC]  = KC_QUOT,
    [KC_BSLS]  = KC_BSLS,  [KC_A]     = KC_A,     [KC_S]     = KC_R,     [KC_D]     = KC_S,
    [KC_F]     = KC_T,     [KC_G]     = KC_G,     [KC_H]     = KC_RBRC,  [KC_J]     = KC_M,
    [KC_K]     = KC_N,     [KC_L]     = KC_E,     [KC_SCLN]  = KC_I,     [KC_QUOT]  = KC_O,
    [KC_Z]     = KC_X,     [KC_X]     = KC_C,     [KC_C]     = KC_D,     [KC_V]     = KC_V,
    [KC_B]     = KC_Z,     [KC_N]     = KC_SLSH,  [KC_M]     = KC_K,     [KC_COMM]  = KC_H,
    [KC_DOT]   = KC_COMM,  [KC_SLSH]  = KC_DOT,
};

#define DFU_HOLD_TIME 500
#define CTRL_SPACE_DEBOUNCE 150
static uint16_t dfu_timer = 0;
static uint16_t last_ctrl_space_time = 0;

bool process_record_user(uint16_t keycode, keyrecord_t *record) {
    if (!process_record_keychron_common(keycode, record)) return false;

    uint8_t mods = get_mods() | get_oneshot_mods() | get_weak_mods();

    // === Хоткеи на слое CYR_BASE с Colemak-позицией ===
    bool only_shift = mods == MOD_MASK_SHIFT || mods == MOD_BIT(KC_LSFT) || mods == MOD_BIT(KC_RSFT);
    bool only_alt   = mods == MOD_MASK_ALT   || mods == MOD_BIT(KC_LALT) || mods == MOD_BIT(KC_RALT);

    if (get_highest_layer(layer_state) == CYR_BASE &&
        record->event.pressed &&
        (mods & (MOD_MASK_CTRL | MOD_MASK_GUI | MOD_MASK_ALT)) &&
        !only_alt && !only_shift) {

        if (keycode < sizeof(qwerty_to_colemak_dh_wide)/sizeof(qwerty_to_colemak_dh_wide[0]) &&
            qwerty_to_colemak_dh_wide[keycode] != 0) {

            tap_code16(qwerty_to_colemak_dh_wide[keycode]);
            return false;
        }
    }

    // === Ctrl + Space: переключение между MAC и CYR ===
    if (keycode == KC_SPC && record->event.pressed &&
        (mods & MOD_MASK_CTRL) &&
        !(mods & (MOD_MASK_ALT | MOD_MASK_GUI | MOD_MASK_SHIFT))) {

        // Защита от быстрых повторных нажатий
        if (timer_elapsed(last_ctrl_space_time) < CTRL_SPACE_DEBOUNCE) {
            return false;
        }
        last_ctrl_space_time = timer_read();

        if (get_highest_layer(layer_state) == MAC_BASE) {
            // MAC → CYR: отправляем F18 для переключения на русский
            tap_code16(KC_F18);
            wait_ms(10);
            layer_move(CYR_BASE);
        } else {
            // CYR → MAC: отправляем F17 для переключения на английский
            tap_code16(KC_F17);
            wait_ms(10);
            layer_move(MAC_BASE);
        }

        return false;
    }

    // === DFU: Ctrl + Esc + F13 удержание ===
    if (record->event.pressed) {
        if ((keycode == KC_LCTL || keycode == KC_RCTL || keycode == KC_ESC || keycode == KC_F13) &&
            (mods & MOD_MASK_CTRL) &&
            (get_mods() & MOD_BIT(KC_ESC)) &&
            (get_mods() & MOD_BIT(KC_F13))) {
            dfu_timer = timer_read();
        }
    } else {
        if ((keycode == KC_LCTL || keycode == KC_RCTL || keycode == KC_ESC || keycode == KC_F13) &&
            dfu_timer && timer_elapsed(dfu_timer) > DFU_HOLD_TIME) {
            reset_keyboard();
            dfu_timer = 0;
        }
    }

    return true;
}

Дальше — компилируем по инструкции, заливаем прошивку на клавиатуру с помощью STM32_Cube_Programmer и… проклинаем собственную невнимательность.

qmk compile -kb keychron/q6_max/ansi_encoder/ -km clrl_space_toggle4

Ну точнее я проклинаю, читатель, я надеюсь, с таким не столкнётся.

Досадный фейл на пустом месте

Дело в том, что я изначально неправильно выбрал исходники — взял пакет для другой модели клавиатуры (Q6 Max вместо нужного Q6 Max knob).

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

Признаюсь, я знатно испугался.

Но всё закончилось хорошо. Правда, пришлось купить вот такой переходник USB -> ST LINK 2:

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

Контакты для подключения на плате Keychron Q6 Max.

Пришлось найти старую матплату и выдернуть пины оттуда:

Вот эти ребята!

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

Happy End.

А как было правильно сделать?

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

Можно, разумеется, но как же мазохизм?

Помимо уже упомянутого выше способа с установкой Karabiner-Elements (от которого по невыясненной причине мой старенький M1 изрядно теряет в отзывчивости), есть и более простое решение.

Например, использовать Colemak, а не Colemak DH Wide, ведь он есть в штатной поставке MacOS, и устанавливается он со всеми нюансами простым выбором в системной менюшке:

Совсем небольшое отличие — а насколько всё становится проще!

Однако мне показалось, что он не так удобен.

Для упрощения сравнения двух раскладок размещу здесь иллюстрирующие их изображения.

Сначала — Colemak:

Расклада Colemak без каких-либо модификаций. Источник: https://colemak.org/

Затем — Colemak DH Wide:

Colemak DH с модом Wide Mod.

Сто́ит ли оно таких мучений? Наверное, ответ на этот вопрос будет зависеть от субъективных эстетических и эргономических предпочтений.

Мне показалось, что да.

И как оно по итогу?

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

В этом смысле — успешный успех. А вот научиться слепой десятипальцевой печати я так и не смог.

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

Я так и не смог себя заставить тренироваться достаточно долго, чтобы достичь хоть какого-то прогресса.

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

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

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

Хотелось бы сказать, что, возможно, когда-то я освою это жуткое кунг-фу, но кого я обманываю?

Приятная побочка

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

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

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

То есть процесс выглядит так: нажимаем CMD + SHIFT + <ПРОБЕЛ>, возле элементов управления появляются шорткаты — набор символов, при нажатии которых соответствующий элемент управления будет активирован.

При нажатии последовательно клавиш «F» и «S» будет нажат кнопка «Мне повезёт»!

Результаты?

Стал ли я быстрее работать? Точно нет.

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

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

]]>