天高工房

キーキャップに印字して遊んだり電子工作して遊んだりしたことを書くかもしれません。

分割キーボードを定義する

通常のキーボード定義の話は本稿では省略します。

環境

この記事を書いているとき、QMKバージョンは 0.6.242 でした。

新しい分割キーボードの定義

分割キーボードを新しく定義する際にやるべきことは3つです。

rule.mk

以下を追加して分割キーボードに関するライブラリの読み込みを有効にします。

SPLIT_KEYBOARD=yes

config.h

TRSを用いた単線通信の場合は以下を定義します。使えるピンは D0, D1, D2, D3, E6 の5ピンです。

#define SOFT_SERIAL_PIN DX

TRRSを用いたI2Cを使う場合は以下を定義します。

#define USE_I2C

キーマップの定義

キーマップを定義する前にレイアウトマクロを定義します。この際に、そのまま行を2倍にします。

前半行が左手、後半行が左手になります。

分かりやすさのため、前半はprefixをKでなくL、後半のprefixをRとする人もいます。

キーマップはレイアウトマクロを使って過不足なく定義してください。

ファームウェアのビルドと書き込み

ファームウェアのビルド方法は変わりません。

書き込みは両デバイスマイコンに書き込んでください。

オプション

マスタデバイスの向きを切り替える

ここでいうマスタデバイス(マスタ)とは、分割キーボードのうちUSBケーブルでPCと接続された側のデバイスのことをいいます。 逆に、マスタデバイスとオーディオ4極ケーブル等で接続されたデバイスをスレーブデバイス(スレーブ)とします。

デフォルトではマスタは左手です。そのため、USBが接続されたデバイスは必ず左手として認識されます。

ハードウェアの変更なしにUSBを右手に接続したい場合は以下を定義します。

#define MASTER_RIGHT

それぞれのデバイスが内部に両方のキーマップを持っていますので、キーコードで一時的に左右の手を切り替えることもできます。

skyhigh-works.hatenablog.com

ハードウェアに変更を加えて

ハードウェアに変更を加えることが可能な場合は、空いているGPIOを一つ用意します。

#define SPLIT_HAND_PIN your_choose_pin

そして、左手になるデバイスのこのピンをVCCに接続してください。右手になるデバイスはこのピンをGNDに接続してください。

これで、左右の役割が固定されるのでどちらのUSBに接続しても役割が変わらず利用できます。

左右の手で異なるマトリクスを使う

追加で接続されるデバイスは右手扱いになります。以下の定義をすることで異なるピンアサインを定義できます。

#define MATRIX_ROW_PINS_RIGHT {X,X,X.,..,X}
#define MATRIX_COL_PINS_RIGHT {X,X,X,...,X}

注意事項として、現在は MATRIX_ROW_PINSMATRIX_ROW_PINS_RIGHT は同じ長さにしなくてはならない、とあります。

ピン数さえ揃えれば動作します。

確かオタクスプリットで使いました。

RGBLED

QMK用語でとても分かりにくいものにLEDがあります。

  • BACKLIGHT(普通のLED)
  • RGBLED(neopixel系)
  • RGBMATRIX(普通のLED+LEDドライバだったけど最近neopixel系も盛り込まれた)

これらはすべて別個です。 ここではRGBLEDもしくはLEDという語句を使ったとき、ws2812やsk6812といったneopixel系の単線通信マイコン内蔵のフルカラーLEDのことを指します。

まずLEDの信号を吐き出すピンを定義します。左右とも同じピンを使います。

define RGB_DI_PIN YOUR_LED_PIN

次に、左右それぞれのLEDの数を指定してください。

define RGBLED_SPLIT {LEFT_NUM, RIGHT_NUM}

以上です。RGBLIGHT_SPLIT という定数もありますが、これはRGBLED_SPLITを定義したときに暗黙に定義されるので設計者が定義する必要はありません。定義するとコードレビュー時に「意味ないから消せ」っていわれます。

参考ページ

@mtei 氏の連続ツイートを主に参考にしました。

また、Discordでまとまっているという情報があったので以下のドキュメントを参照しました。

github.com

おまけ

QMKの標準スプリットキーボードは、スレーブデバイスのLEDはサポートしてないそうです。

どうやら、TRRSで片方を単線通信用、片方をLED信号用にすることで実現できるようです。品質の良くないケーブルを使うと動かなくなりそうですね。

光らせたい&OLEDを点灯させたいというのはよくわからないので、Helix回路/コードを流用するのがよいのではないでしょうか。

正確な日付は覚えていませんが、現在は単線通信でもRGBLEDがサポートされています。

分割キーボードで右手用デバイスにUSBを刺す(左右のデバイスの役割を交換する)

QMKでは分割キーボード(スプリットキーボード)をサポートしています。現在のキットで一般的な構成は以下の通りです。

  • 左右基板にそれぞれpromicroを取り付ける
  • 左右基板にそれぞれTRRSジャックを取り付ける*1
  • 左右基板の通信をTRRSケーブルで行う*2

この際、両方ともにpromicroがあるのでどちらでもマスターにできるように見えますが、デフォルトでは左がマスターです。

左手にUSBケーブルを指せば使えますが、右手にUSBケーブルを指したいこともあると思います。その場合どうすればいいかを調査しました。

一時的に交換する

SH_から始まるkeycodeを使うことで一時的に左右の手の切り替えができます。トグルや交換の有効無効、長押し中のみ切り替えなどがあります。「キーを押し続けている場合は手を交換」は片手キーボードを実現するための機能かもしれません。

この交換は電源を切った場合交換しない状態に戻ります。

詳細は以下URLを参照ください。

beta.docs.qmk.fm

恒久的に交換する

デフォルトではUSBを差したデバイスが左手扱いされます。これを右手扱いに変更したい場合はkeymapフォルダ内の your_keyboard_name.c に以下の定数宣言を追加します。

#define MASTER_RIGHT

*1:単線通信のみサポートする場合はTRSでも可

*2:単線通信のみサポートする場合はTRSでも可

キーボードわいわい会を開催しました

ほとんど勢いでキーボードmeetup「キーボードわいわい会」を開催しました。

connpass.com

すでにshela_氏により2年ほど前に「HHKB hacking会」が開催されていたことを観測しているので愛知で開催されるキーボードイベントとしてはおそらく2回目です。

背景

NGK2018BでLTしましたけど反応がいまいちでした。twitter見る限りぼちぼちいたようなのですけれど、音楽性の違いが露骨にでるので難しいですね。

しかし、来栖川電算さまから提供いただけることになりました。思い立ったら吉日ということで初週開催です。

振り返り

どんな人が集まるかわからなかったので適当にLT(Longtime Talk)と休憩/わいわいを交互にやろう、と決めていました。

開始予定は13時15分くらいだったのですが、13時5分くらいには全員そろっていたのでちょっと早めに始めました。

私は「キーボード、普段使ってると思うけど思ったより知らないこと多いから色々構成要素見てみようぜ」みたいなスライドを作りました。規格系の配列はこんな感じでこんな違いがあるよ、そこから最近の拡張はこんなのがあるよ、みたいなのを雑に20分くらいで話しました。

次に、@shela_氏により、HHKB hacking会のスライドベースでざくっと説明がありました。過去の会では2時間くらいかかったそうで、結構流したはずなのに今回は50分くらいはかかっていたかと思います。

このあたりで14時半とかでした。

その後自分がkinesisなど見たかったので1時間くらいあれやこれやわいわいしました。

一応もうひとつ「もっとゆるくやっていこう」みたいなネタがあったので脱線しつつざっと話しました。

その後荷物をまとめつつ適当にわいわい、18時頃解散しました。

開催の様子

やらかしをしたので写真は一枚もありません。

キーボードわいわい会 に誰かあげている可能性はあります。

次回?

今回会場提供いただいた来栖川電算様から引き続き開催されるようであれば提供できます、という申し出をいただきました。 また、参加者の方からも弊社使えますとご提案いただけましたので、開催場所はなんとかなりそうです。

あくまでも勉強会などではなく集まってわいわいするmeetupとしてゆるゆるやっていきたいな、とは思いますが、だらだら目的もなく集まっても締まりがないと思うので何かしらまとまる方法がないかなーと考えています。

やるとすると、15分くらいの持ち時間で語りたいことを語る枠を最大3枠くらい用意するのがまず良いかな、と考えています。

また、これは賛否が分かれると思うのですが、当日LT指名とか、発表聞いてみたい人投票とかやってみたいなぁという気持ちもあります。

とりあえず意見ください。

無変換/変換でIMEのON/OFFを切り替える

この記事をみて「そういえば試してみるかー」と思ったら面白いことがわかったので書きます。

www.itmedia.co.jp

前書き(読み飛ばしてください)

OADG109AベースのキーボードはANSIに比べてスペースキーが短くなる代わりに「無変換」「変換」「カタカナひらがな漢字」といったキーが追加されています。

そしてIMEのON/OFFは左上のやや遠い位置にある「半角/全角」で実施すると信じられています。このトグル式の評判がよくないです。引き合いに出されるのはMacOSのキーボードです。MacOSではOADG109Aではない配列のキーボードが採用されています。そのため無変換/変換といったキーは存在しません。代わりに「英数」「かな」があります。これは書いてある通りに入力モードを切り替えるボタンです。どうも「脊髄で理解させるため」の設定だそうです。

従来の手法

WindowsでもMacOS方式を実現したいという声は少なくないです。OS/IMEの機能として持っていないわけではないのでIMEの設定を変更することで従来より実現できます。

スクリーンショットを撮影して説明しようと思いましたが、ほぼそのままのサイトがあったのでやり方はそちらを見てください。

www.onebizlife.com

公式アナウンス

冒頭で紹介した記事でデフォルト設定が従来の手法で紹介した記事の最終的な設定になることが決まったようです。

www.itmedia.co.jp

オチ

IMEの設定を見ていたら、「Shift+無変換」で英数入力に切り替わることが分かりました。 試しに英数入力状態で「変換」を押したら日本語入力に切り替わりました。

無変換単独ではカタカナ変換に使いたいのでなんかこれでもういいじゃん、となりました。

つまり、我々はなにも追加の設定をしなくても、僅かな好奇心さえあれば無変換のカタカナ変換を維持したままMacOS方式に近いIME切り替え方式を得ることがすでにできていたのです!!!!

まとめ

  • 「Shift+無変換」で英数入力
  • 「変換」で日本語入力

なおサンプル数1(自分のみ)です。再現したら教えてください。

無変換/変換でIMEのON/OFFを切り替える

この記事をみて「そういえば試してみるかー」と思ったら面白いことがわかったので書きます。

www.itmedia.co.jp

前書き(読み飛ばしてください)

OADG109AベースのキーボードはANSIに比べてスペースキーが短くなる代わりに「無変換」「変換」「カタカナひらがな漢字」といったキーが追加されています。

そしてIMEのON/OFFは左上のやや遠い位置にある「半角/全角」で実施すると信じられています。このトグル式の評判がよくないです。引き合いに出されるのはMacOSのキーボードです。MacOSではOADG109Aではない配列のキーボードが採用されています。そのため無変換/変換といったキーは存在しません。代わりに「英数」「かな」があります。これは書いてある通りに入力モードを切り替えるボタンです。どうも「脊髄で理解させるため」の設定だそうです。

従来の手法

WindowsでもMacOS方式を実現したいという声は少なくないです。OS/IMEの機能として持っていないわけではないのでIMEの設定を変更することで従来より実現できます。

スクリーンショットを撮影して説明しようと思いましたが、ほぼそのままのサイトがあったのでやり方はそちらを見てください。

www.onebizlife.com

公式アナウンス

冒頭で紹介した記事でデフォルト設定が従来の手法で紹介した記事の最終的な設定になることが決まったようです。

www.itmedia.co.jp

オチ

IMEの設定を見ていたら、「Shift+無変換」で英数入力に切り替わることが分かりました。 試しに英数入力状態で「変換」を押したら日本語入力に切り替わりました。

無変換単独ではカタカナ変換に使いたいのでなんかこれでもういいじゃん、となりました。

つまり、我々はなにも追加の設定をしなくても、僅かな好奇心さえあれば無変換のカタカナ変換を維持したままMacOS方式に近いIME切り替え方式を得ることがすでにできていたのです!!!!

まとめ

  • 「Shift+無変換」で英数入力
  • 「変換」で日本語入力

JISキーボードって...クソだよねー!

この記事は18日目の記事です。

adventar.org

ポエムしか書く気がないので適当な題です。あ、私は普段いわゆるJISかJIS寄りのキーボードしか使ってないです。

JISキーボードって...クソだよねー!

と度々言われるし、実際キーボード設計をするときに面倒な要素がある*1ことに気づいて私も嫌いになりました。

しかし、よくよく考えるとJISでどんな感じで定義されてるのか見てませんでした。見ようと思いましたが、安くない金を支払わないと見れないようなので結局JISもANSIも見ることはしませんでした。ストリーミング的な形で読めるようなので一応読みました。

よってこの記事は断片的で不確実な情報を元に書きます。

厳密なJIS準拠はもはや存在しないっぽい

キーボードは「X6002 情報処理系けん盤配列」で定義されています。が、最新は1980のようです*2

当然Windows95がでてくるより前ですので、現在の状況とは乖離があります(復改だとかまっ消だとか)。また、MODキーなども規定されていません。記号の印字位置も現在とは異なります。規格で印字位置まで定義されていると誰かいってた気がするけどどういうことなんだ...

現在までに残っている要素は、「QWERTY」「ロジカルペアリング」「ISO Enter」くらいではないでしょうか。どちらかというとこれらはISOで定めようとしていた要素な気がします。

現在一般的な108キーボードはJIS風ではあってもJISではないことがわかりました。どちらかというとJPキーボードでしょうか。

追記分

109キーボードIBMが1990年あたりに原型となるキーボードを作成し、OADGが2003年あたりに設定したもののようです。ただしOADGは2004年に活動休止しています。

厳密にはOADG109とOADG109Aが存在し、現在日本語キーボードとして販売されているのはOADG109Aです。一部記号の配置が異なるのみで、それ以外は同様です。

PCオープン・アーキテクチャー推進協議会 - Wikipedia

JPキーボードの欠点

最も辛い欠点はEnterキーです。配置の研究をしているときに気づいてしまったのですが、JPキーボードで打鍵をしているときは右手が左右に動くというか、右に1stepずれます。この動作はなんとEnterキーを押すためのものだったのです!小指もなんとなくEnterを押す準備をしてしまっているので左手ほど小指が自由に動いてくれないように感じます。

小指の可動域は手のひらが同じ位置の時、右にはずれますが右上にはずれません。これはANSI Enterはそのまま押せるけれどもISO Enterは押せない、ということを意味します。BackSpaceも右上と遠い位置にあるのでこれを連打するときにも動きますが、これは後述の理由から無視出来ます。

JPキーボードの利点

スペースキーが短いことです。これまた配置の研究をしているときに気づいたのですが、スペースキーを押す場所はかなり狭く固定されると思います。掌が動かないほうが良い以上、親指が叩く位置も一定だからです。私なんて常に左手で左端でした。1uあれば足りちゃいました。ANSIみたいに6uとか必要ないです。

厳密には、スペースキーが短いことではなく、スペースキーが短いことによるキーの追加がうれしい点です。他の記事でも述べていますが、親指にはもっと多くの役割が与えられるべきです。具体的にはBackSpaceやEscなど押しにくい上隅に追いやられているキーや、IME切り替えキー、Enterキーなどです。

アメリカなどの国でも、親指の役割を増やすということを気にしている人たちがいるようで、スペースキーが二つに分割されたキーボードも出てきています。

JPキーボードだとすでに無変換と変換がありますので3キー相当です。さらにスペースキーを半分にすると4キーになります。すべてを1uにすると6キー分の空間が確保できます。現在私が使っているXD75はすべて1uのキーボードなので親指担当キーは6キーあります。すでに運用をしていますが6キーまでなら十分打ち分けることがが可能です。それ以上は可動域の関係で厳しいのではないかと思います。

提案

以下のような感じのするといい感じになるのではないでしょうか。

  • A行より上をANSI系のキーサイズ
  • Z行以下をJP/OADG系のキーサイズ
  • BackSpaceは1u
  • 何なら最下列はすべて1.5uや1.25u

参考までに、RealforceのJPモデルの最下列はほとんど1.5uです(スペース、Win、Appのみことなる)。

各々が各々の考える"正義"を貫いていこうな!!!

私はロジカルペアリングに慣れきってしまっているからこのままいくよ!!!

参考資料

日本工業標準調査会:データベース検索-JIS検索

X6002で検索

アニメ『ポプテピピック』第2話・パロディ元ネタ解説 - 特になし

キー配列 - Wikipedia

JISキーボード - Wikipedia

http://kanji.zinbun.kyoto-u.ac.jp/~yasuoka/publications/ISCIE2004.pdf

http://www.sanosemi.com/biztech/document/keyboard-picture2009-2.pdf

https://ia801604.us.archive.org/21/items/OADG1991/%EF%BC%AF%EF%BC%A1%EF%BC%A4%EF%BC%A7%E3%83%86%E3%82%AF%E3%83%8B%E3%82%AB%E3%83%AB%E3%83%BB%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9%20%E3%83%8F%E3%83%BC%E3%83%89%E3%82%A6%E3%82%A7%E3%82%A2%E7%B7%A8%201991%E5%B9%B4.pdf

*1:ほとんどのキーは配列を使って配置の自動化ができるが、ISO Enterキーだけ例外処理をしないといけない

*2:削除された新JISを除く

新世代キーボードの永字八法

この記事はAdvent Calendar 2018 自作キーボード#3の1日目の記事です。

adventar.org

「自作キーボード」という名前で国内のキーボードキットが盛り上がって1年ほどになるでしょうか。市場規模がまだまだとても小さいので、今日も先行者たちが銀の弾丸ことendgameを求めて突っ走っています。

今回は、トップダウン的ではありますが現状のキーボードキット/小ロットキーボードのもつ要素について書きます。

新世代キーボードの永字八法

現在までキーボードはタイプライターに起源を持つANSI/ISO/JISかつQWERTYが全盛であります。しかしながらこれらはすべて歴史的経緯による不合理の塊で、規格品で量産されているから入手性がよく、これさえ使えればどこでも同じことができるようになってしまったが故に使われているにすぎません。

そんな不自由なキーボードを滅する銀の弾丸のように登場したのがErgodoxです。このErgodoxは非常に革新的なキーボードであり、現在国内外で制作されている左右分割キーボードの多くはErgodoxの血脈です。Ergodoxはより効率的な入力を実現するための要素がふんだんに盛り込まれているため、新世代キーボードの永字八法といって差し支えないでしょう。

Ergodoxの持つ要素をそれぞれ見ていきたいと思います。

分割

Ergodoxをみた人々がとりあえず口にするのは「割れている」ということです。見ただけではっきりわかる違いです。

左右の手は独立して入力をするので1枚である必要はなく、左右の手が独立して自由な位置で入力できることで姿勢の改善が見込まれる、ということで話題になりました。現在でも国内のキーボードキットを買い求める人は分割を求めていることが多く、おそらく肩こりや首の痛みの特効薬だと考えているように思います。

閑話

残念ながら、キーボードを分割にしたところで首の痛みは治りません。キーボードを買い換える前にまず机と椅子、それとディスプレイの位置を見直すべきです。私は普段首の痛みなんて発生しませんが、とある場所で働いていた時だけ酷く痛み、日常生活にも支障がでました。調査したところ、問題だらけでした。

  • 机が一般的なもの(H:700mm)より100mm低かった
  • 机が一般的なもの(D:700mm)より100mm奥行きが短かった
  • 椅子を後ろに移動する十分な空間がなかった
  • ディスプレイの支給がなくノートPCでの勤務を強いられていた

基本的に、背中を曲げると首や背中、肩を痛めます。逆に背中を曲げなければたいてい問題ありません。 上記環境は、背中を曲げなければどうしようもない環境であったため、首に絶大な普段がかかっていたようです。

また、姿勢を支える筋力が低下して骨格で姿勢を支えている状況ではどうあがいても改善されません。歩いたり走ったりして姿勢を支える筋肉を用意してください。それだけで十分改善が見込めます。

銀の弾丸を手に入れても暴発する銃なら意味がないです。

左右対称

利き手があるとはいえ、人間の手は左右で対称な形をしています。にもかかわらず現在の規格キーボードは歪です。左手は最小限の数にもかかわらず、右手のカバー範囲は左手よりも3列多いです。さらにカーソルキーやテンキー、はてはマウスまで右手領域です。

左右対称形にすることで、左右の手の負担の差を減らすことが見込めます。

親指キー

規格キーボードでは何故か親指の役目が非常に少ないです。少なくとも現状は、非常に長いキーが親指のカバー範囲の大半を占めてしまっています。その悪しきキーの名は、スペースといいます。

意識して入力をしてみるとわかるのですが、大体叩く位置は決まっています。なんであんなにも長いんでしょうか?

JISだと無変換と変換がありますが、無変換はカタカナ変換、変換は再変換機能ですのでそんなに多用するキーではありません。

親指にアルファベット以外に高頻度で使うキーの役割を与えることで親指以外に文字入力に注力してもらうことができます。

人差し指キー

親指の次に強い指は人差し指です。小指に仕事を任せるなら、人差し指に任せるべきです。一番内側なので視認性もよいです。

列方向のの整列

タイプライターは鍵盤をたたくとハンマーが駆動してもじを入力する仕組みです。そのためハンマーが干渉しないように行方向に各行は異なる位置だけずれています。タイプライターの名残であって入力効率には一切関係がありません。ソフトウェアキーボードや、モバイルデバイスのハードウェアキーボードをよく見ると、規格キーボード同様に行方向にずれてるケースもありますが、列方向に整列していてZの行だけ右に一つずれているケースを見ることができます*1。しかし、それを意識せずに打鍵できる程度には入力効率に影響がないものです。

この中途半端なズレは、慣れれば全く問題ないですが、慣れるまで文字がどのキーに割り当てられているか惑わすだけの存在です*2

列方向のずれ

各指の長さは違います。中指は数字行まで届きますが、ほかの指は頑張って薬指で、小指に至ってはQ行にすら届かないでしょう。

指の長さに合わせて上下位置を調整することで手の角度や位置を動かすことなく打鍵ができるようになります。

所感

どうでしょうか。こんな感じの情報がErgodoxには収められているように私は感じています。逆に、規格キーボードから変更がある要素が多すぎるため気合がないと常用することは難しいです。私はぶん投げました。毎日のようにヤフオクにErgodoxEZが流れているのを見るに、強すぎる道具に肉体がついていかなかった人々は少なくないように思います。そこら辺の背景から私はErgodoxに移行できた人々を"適合者"と呼んでいます。

私にはErgodoxは早すぎた、と感じているのでXD75にJISっぽい配列を割り当てて、レイヤリングを格子配置でぼちぼち楽しくやっています。

*1:規格キーボードでZの行が実質一つ右にずれているため。ずれたとこには大抵シフトが入る

*2:いまとなってはもう思い出せません