StatModeling Memorandum

StatModeling Memorandum

StanとRとPythonでベイズ統計モデリングします. たまに書評.

独自配列の格安分離型キーボード

ノートパソコンで長時間労働すると肩がこるなど疲労がたまります。そこで分離型キーボードです。Kinesis社のエルゴノミクスキーボードなど魅力的なキーボードはいくつかありますが、以下のようなデメリットがあります。

  • 値段が高い
  • 手がでかい外国人用なので遠くが若干打ちづらい
  • キーボードの分離幅を気分でカスタマイズしたい
  • キーボードがでかくて机が狭くなる
  • 重くて持ち運びが厳しい

そして色々考えた結果、5年ほど前に安いテンキー2個で分離型キーボードを実現するのが一番という結論に達して、ここ5年、業務でも4年ほど使用し続けました。動画は以下です。

キーの割り当てはかなり考えました。まずは「タイプ数カウンター」というソフトでデータをためました。ためたデータの集計は以下のとおりです(このカウント自体、この独自配列はじめたあとに収集したものだと気づきました…)。

key_namecount
ctrl966407
u301564
t237536
bs227530
s207693
n196818
enter189156
e175790
a166899
h158900
space134650
left125984
shift124190
i122057
right109367
down96574
o94534
k69776
up67637
r53913
f49240
m41529
d40515
b37284
c35741
alt33907
l31798
g25996
p24879
y24305
v23990
tab23721
216459
015436
j15340
del14499
114237
w13841
x12504
911958
z10619
810242
76712
35429
55231
q5002
esc4436
43042
62661
others272

集計ではどのキーからどのキーへタイプがつながりやすいかなどのn-gramは分からないのは難点ですが、それでも自分を見つめなおす情報に満ちています。当時はたしか窓使いの憂鬱で移動キーをCtrl+hとかしているためかとにかくCtrlを押す頻度が多いのが分かります。あとはこのデータを取った頃はCtrl+uをBSにしていたのでuも多いですね。楽しいですがこれを考慮に入れて割り当てるのにかなり試行錯誤しました。

悩んだところその1は使用する言語によってよく使う記号が異なる点です。当時はRubyC++とRをよく使っており、どれかを優先させればどれかが少し使いにくくなるので迷いました。その他の思い出は、僕は日本語をローマ字変換で打つので「子音を右のテンキーに母音を左のテンキーに配置することで速く打てる」という情報を見つけて、やってみましたが思ったより差はないように思います(僕がタイプがそんなに速くないためかもしれません)。「キーを押す頻度を右と左で均等にすることで手の負荷が均等になる」という情報を見つけて5:5ぐらいになるように配置してみましたが、左手が圧倒的に疲れます。最終的に右:左を6:4ぐらいになるようにしました。あとは小指を使うのがかなり苦手なのでなるべく小指の負担の軽い配置にしました。

最終的にここ最近ずっと使っている配列は以下の通りです。まずはデフォルトの状態から。

f:id:StatModeling:20201114160327p:plain

次に「記」キー(記号キー)を押したままにするとキーマップが以下のように変化して記号などが入力できるようになります。

f:id:StatModeling:20201114160322p:plain

数字のキーマップは省略していますが、実際にはほぼ記号と同様な感じで設定しています。

以降ではその実現方法について述べます。 OSはWindows 7, 8, 8.1 (32bit/64bit)で今まで運用しました。今回は64bitとして説明します。使用するソフトウェアは以下のとおりです。

  • HidKeySequence v1.22 URL1, URL2
  • XKeymacs URL (必須ではありません)
  • AutoHotKey URL (必須ではありません)

HidKeySequence

HidKeySequence(以下HKS)はテンキーに普通のキーを割り当てることができるようになるツールです。このソフトの前はMagicKeyPadというソフトを使っていました。HKSのメリットは全く同じテンキーを2つつなげてもHIDデバイスを別個に認識ができる点、Mac用のテンキーを認識できる点、キーリピートに対応している点です。最高です。 デメリットは開発者さまのWebページとtwitterアカウント(お世話になりました)が消えてしまった点、コマンドプロンプトIEなどキーイベントが独自のもの(?)では正常に動作しない点です。

僕はメリットを最高に生かして以下のようなキーボードを2つつなげて使っています。「00」キーがあるテンキーは、単に「0」キーのイベントを2連続発生させるものであって新たなキーを割り当てできないのでイマイチです。

設定画面のスクリーンショットは以下の通りです。一個ずつGUIで設定していきます。

f:id:StatModeling:20201114160356p:plain

XKeymacs

64bit版OSの場合はリンク先の「xkeymacs-110830.zip」の方をインストールする必要があります。こちらは歴史のあるソフトで使い方はいくらでもネット上にあります。

僕は主にEmacsの「set-mark-commond」をCtrl+Spaceに、「save-buffer」「Cut/Copy/Pate」「undo」とあとはカーソル移動系のみ設定しています。「set-mark-commond」と移動系は数少ない妥協できないポイントです。十字移動はviライクで行頭行末・ファイル頭ファイル末移動はEmacsライクに設定しています。

AutoHotKey

有名なソフトです。タイプ数を減らすための補助的な割り当てに使っています。一番よく使っているのは起動しているソフトをアクティブにする時です。例えば以下のように「Alt+r」に「Rが起動していたらアクティブにする、起動していなかったら起動してアクティブにする」というコマンドを割り当てる時に使います。「Alt+Tab」とか二度手間でイライラしますのでおすすめです。

!r::
   IfWinExist,ahk_class Rgui
      WinActivate
   else
      Run,"C:\Program Files\R\R-3.2.1\bin\x64\Rgui.exe" --internet2
   Sleep,100
   IfWinNotActive,ahk_class Rgui
      WinActivate
   Return

この他にはエディタとファイラのキーバインド設定が重要でしょうか。ここでは深く触れませんが、XKeymacsとAutoHotKeyとうまく住み分けることがポイントで、なるべくエディタやファイラで十分対応できる時はそちらを優先しています。

今さらこんな記事を書く理由はWindows10にあげる予定があって、今まで使っていたいくつかのソフトが使えなくなるかも、ということで書いています。いわば遺書なのです。今までソフトの開発者さま方、本当にありがとうございました。