Carpalx はキーボード配列を最適化して,超楽で手の負担を軽減できる配列を作れるってソフト.

完成した配列もあるし,このコードを使って新しい配列探すのもオツじゃね?

X11 用定義ファイル
X11 用の carpalx 配列定義を提供してくれた Sven Hallberg に多謝.

好きな子には QWKRFY 配列か,完全に最適化された QGMLWY 配列を勧めな.

逆にムカツク奴にゃ TNWMLC 配列,これだね.

なんかアイデアあったらくれよな
≪訳注:メールアドレスは原文筆者のもの.メールする場合は日本語ではダメなので,英語で.≫

Carpalx - オレオレ鍵盤配列を設計だ

完全最適化された QGMLWB 配列みたいなオリジナル配列で,過負荷からあなたの手を救い,タイピングの教祖的地位をゲットだぜ! それかダークサイドに堕ちて,手指粉砕間違いなしの TNWMLC 配列みたいなの作ってオフィスのあの子をドン引きさせ,グズどもに使わせ天誅を下すとかどうよ?

Carpalx の目的

Carpalx プロジェクトは打鍵負担の定量的なモデルを導入し,これを適用することで (a) QWERTY やその他の Dvorak や Colemak といった代替配列を評価し,(b) 与えられた入力セットに対して打鍵負荷を最小にするようなキーボード配列を見つけよう……ってもの.ここに提示する試みでは英文テキストを入力としているが,これは本来任意であって,フランス語のコーパスやスペイン語,もっと言えば C や Python なんかのプログラミング言語でも構わない.

世の中には多くの配列があるが,Carpalx プロジェクトは単に新配列を提唱するだけでなく,打鍵負担の完全なパラメトリックモデルも示すという点がよそとは違うところ.

ブラジルファッションにおける Carpalx

キーボード配列設計とファッションデザインのコラボとして――なんちゅー組み合わせだよ!――ブラジルのデザイナー Julia Valle が Carpalx の凶悪配列 (TNWMLC) 彼女の 2011 冬ブランドのデザイン要素として使ってくれたんだぜ.

この作品はリオデジャネイロのショーにて発表された.1956 年のスミス・コロナ製タイプライターのパーツで作られた美しすぎるネックレスで,衣服にアクセントを加えたんだ.

こいつぁもう趣味分野横断の,奇跡的連携と言っていいレベル.キーボード配列の研究が堕落して,最も打ちにくい英語用配列ぅとかいうものを生み出したかと思ったら,それが美麗な服飾デザインになっちゃったわけよ.このアイデアの連携は俺にとっちゃ特別な意味があるんだわ.っつーのも,以前にファッション写真撮影にちょいと手を出したことがあるのよ.

だが QWERTY,お前はダメだ

"stewardesses" って打ってみろよ.つらいっしょ? これを何度も打ったらもう速攻で左手を休ませたくなる.で今度は "chrząszcz" って打ってみ(ポーランド語で甲虫の意だ)? マジ無理って感じでしょ? ね? 打ってみて痛いほどわかったと思う.悪いのは君の能力じゃなくて――キーボード配列だよ.いや,もしかしまくると能力のせいかもしれないけどさ,それを解決すんのは俺の専門じゃないんで.

図 1 | 全国津々浦々で目撃される QWERTY 配列.君のキーボード配列もこれに基づいている可能性が高い.英語圏じゃないなら,この QWERTY となんか違ってるかもしれんが.

QWERTY 配列には良い面と悪い面がある.何しろどこにでもあるもんで,これで打てればそのスキルはどこでも通用するよ,ってのがいい面.一方,その残念設計のせいでタイピングが本来あるべき姿よりムズいものになっちゃってるってのが悪い面(それがこの配列の目的のひとつ――機械式タイプライタがジャムらないようにスピードを制限する――だったりするんだが ≪訳注:これはガセネタであることが知られています.原文通り訳しましたが事実としては誤っているのでご留意下さい≫).

もちろん,あらゆる配列の限界として,高々 1 種のテキスト(英語とか)でしか抜きんでた性能は発揮できないってのはある.単独の配列で 2 つ以上の言語をタイピングしていれば,どの言語かでは打ちにくいなとなるだろう.プログラムのコード書く人なら,きっとそのコードはあなたの話す言語とは(文字の出現頻度や組み合わせに関して)だいぶ異なってるはずだ.Ruby みたいなやわらかインタプリタ型言語では Perl みたいな他の言語にみられるノイズの軽減ができる(いや俺どっちも好きよ?)っちゃできるけど,やっぱ依然としてプログラミングでよく使う文字(= + - 等)はキーボードの僻地に追いやられてるわけでね.

俺はこのサイトで,まず他の名だたる配列をもってきて,その強みと弱みを示してやろうと思うよ.んでから,carpalx の打鍵負担モデルを使って計算で生成された若干の配列を提案させて頂こうじゃないかと.

Carpalx の歴史

キーボード配列を再設計するってのは 3 ステップで 1-2-3 って示せるほど単純な話じゃない.むしろこの場合 x-y-z は x, y, z を変数として打鍵負担を最小化するような組 x-y-z って高尚な意味なわけよね! 配列設計の難関は,打鍵負担をどう見積もるかっていう定義の部分にある.言いかえれば,一連の評価の規則が与えられさえすれば,それを最小化する配列を見つけに行くのはまあなんとかなるわけだ.その規則群を定義するのこそがムズいわけ.

さてこの Carpalx プロジェクト,元々は打鍵負担モデルを開発することで Dvorak 配列を再現できるかしらん,って思って取り組みだしたんだったりする.最初の(なんともうぶな)望みはパラメトリックなモデルを作ること――それも,良い感じに調整すると Dvorak 配列ができるようなやつを作ることだった.言いかえれば,いかな変数の組が Dvorak 配列で最小化されているのか知りたかったわけだな.

ところがどっこい,最初のモデルで最適化計算をブン回したら,あっという間に Dvorak 配列より負担値が小さい配列を得てしまった――つまり速攻で Dvorak 配列が改良できちまったってことさ(その俺モデルによる評価において,だが).そのついでに,Dvorak 配列を生成するようなモデルを探すのは絶望的な話だってことがピキーンとわかってしまった.だって評価モデルの数は,配列の数なぞとは違って,不可算無限個あるんだもの.そんなわけで目標は当初のモデル探しから変わって,イケてて使える打鍵負担モデルを作り,それでもって最強の配列を探すこととなった,はたして褒めちぎられてる Colemak 配列超える配列を見つけられるだろうか?

Carpalx は Perl スクリプトで,モデルのパラメータを読ませれば確率的シミュレーションを行って,与えられたモデルパラメータに対して負担度を最小にする配列を探索できるってものになってる.

Carpalx の目次

複数ページにまたがって大量のコンテンツがあるぜ.以下に示す順にページを読むといいんじゃなイカ?

手法

既存配列の評価

配列の最適化

応用 - 要素別の最適化

carpalx を動かす

Carpalx の手法

打鍵負担モデルを練り上げるにあたり,QWERTY, Dvorak, Colemak に Arensito やその他諸々の既存配列を有効活用した.モデルの候補を使ってこれら配列を評価してみることで,モデルの善し悪しの指標にできるわけだ.

例えばだな,Colemak 配列は QWERTY 配列よりゃ打ちやすいことが広く知られてるわけだから,モデルは必ずこれを裏付ける結果を出せなきゃいけない(当たり前すぎるね)ってのを要件にした.さらに,普遍的に有利そうな配列の指標となる概念をモデルに組み込んだ.いくつかの指標(例えば小指の使用頻度はどの程度がいいかとか)にはまだ議論の余地があるにしろ,ホームポジション使用率を高めて指の移動距離を減らすとか同指異鍵を減らすとか同手内交互打鍵を減らすとかは,同意が得られる話でしょ.以上のも含めて有益な配列指標はこのへんに一覧してあるんで.

Carpalx では打鍵者の様々なクセに合わせるために,運指距離,手・段・指によるペナルティ,打鍵経路によるペナルティからなるパラメトリックなモデルを用いる.そして焼きなまし法(モンテカルロ法)を使い,与えられた入力文に対する負担度が低い配列を探索する.

最適化計算時にモデルの影響をもろに受ける,望ましい配列改良ポイントは以下のようなものだ:

長い時間をかけて,モデルは異なる 3 つの構成要素――ベース負担度・ペナルティ・運指経路の 3 つだ――で望ましい特徴(と望ましくない特徴)の程度を見積もるというものに進化していった.これら要素を集計することでトータルの打鍵負担度が算出され,それが配列の評価となる.例えば,快適な打鍵の組み合わせ('afj' はナイスなアルペジオ打鍵動作だが,'but' はそうではなく,'omy' に至っては超不快,とか)は運指経路の要素で数値化できる.

図 2 | QGMLWB 配列英文入力用に最適化された配列のひとつだ.古典小説を学習セットとしてモデルのパラメータを調整し,文字キーを再配置することで打鍵負担の最小化を達成.QWERTY を完全粉砕するばかりか,Colemak からさらに 5% も負担度を改善するって優れものだ.

Carpalx は英文入力のための優れた配列を研究したいなってことで作られた.それゆえシフト状態を含めて自由にキー定義を移してどうのってことはできないんだよね.大文字出すための単一の通常シフトだけは考慮に入れてくれるけど,それにしても小文字と大文字は同一のキーに置くって制限があるわけ.なもんで発音区別符 (è é ë etc) とか活用しちゃう系言語とかの配列を,文字キーと区別符キーをそれぞれ動かして最適化~みたいなことは残念ながら今のとこ無理.≪訳注:日本語入力におけるシフト面によって別の文字が出るかな配列とかも当然ダメってことです.ローマ字入力用に最適化した英字配列は作れますが.≫

単語の負担度ランキング

Carpalx は一連の統計情報を使って配列の性能を評価する.定量的でそれゆえ直接に比較可能になって嬉しい一方,それらの値は意味的解釈が難しく,実際のタイピングにおける概念に当てはめるのも難しいかもしれない.

で,配列の「良さ」をもっと主観的にわかりやすく示したいなーと思って,上記してきた負担度の定義に基づいて,単語の打ちやすさランキングなんてもんを作ってみた. QWERTY, Dvorak, Colemak, QGMLWY (完全最適化した最強配列), TNWMLC(逆向きに最適化した最凶配列)のそれぞれについてまとめてあるぜ.

いくつかの単語については下の表にまとめましたよ.単語の負荷は一文字あたりの値にした上で比較してあるから,単語の長さとは関係ないってことに注意してくれ.

配列 打ちやすさごとの単語例
もっとも楽 平均的なあたり もっともつらい
QWERTY alleges, fiddle, jiffle, kiddie ingent, limnery, pignorative, sumphishly pazazz, pizzazz, poppas, razzer
Dvorak condensity, equation, ethion, theist defile, fiddleys, suborder, unenviable allvar, lazars, plazas, razzly
Colemak desiring, sentry, steeps, stints implete, leafgirl, mythify, odours cazzie, pazazz, pizzazz, razzle
QGMLWY anneals, arbitrator, attend, neatly besigh, incursive, lauder, sparing buzzwig, fizzle, puzzle, zyzzyva
TNWMLC bedbug, culmed, jazzed, knocking, wizzen bunglesome, flouting, grunewald, miltier hetter, sheeter, teeter

新配列の恩恵

別に俺はイケてる配列を探そうとした最初の物好きでも最後の偉人でもないからね.Dvorak とか Colemak とか Arensito とか Capewell のことを思えば明らかよね.

もし QWERTY でバチバチ打ち込む人で,そういう繰り返しの作業のせいで痛みや不快感を覚えるんなら,そういう代替配列を使うことを考えたらどうでしょうかね.Colemak とか,このサイトで載せてる完全最適化配列とかさ.新配列使えばきっと:

で,習熟した暁にはこの配列により:

もし最後のをすぐ達成したかったら,無刻印の Das Keyboard Ultimate モデルあたりとの合わせ技マジおすすめ.

ご冗談でしょう,Martin さん

もし以上の文句が怪しげなテレビ通販的な響きだとしたら,それはあれだよ,俺自身がおいおい本当に良くなるのかよこれって若干思いつつキーボード配列を変えまくるって道を選択しちゃった人なんで,自分のそういう経緯を面白おかしく伝えりゃいいやって思ってるからこんなんなったって話よ.

ごく少数派のタイピストしか非標準な配列なんて使っちゃいないし.あ,ここで標準の配列とか言ってるのは最寄りのネットカフェに行ったら置いてあるやつって意味ね.北アメリカでは QWERTY が標準だし,違う配列使ってるのとかマジモンの希少人種ですよ.

現実的にゃ,どんなローカル標準配列からだろうと,配列を乗り換えるなんてこたー普通あり得ないわけですよ(だから俺はそのローカル標準配列を変えるべきじゃんと思うんだけどね).なんでって,そりゃ簡単な話で,再訓練すんのが超絶だるいからさ……だからこそ,それを成し遂げたヤツは天晴れなわけだが!

言っとくけど俺は,このページを読んでよっしゃ合点承知とダッシュで帰宅してゴリゴリ打鍵スコア計測してオリジナル配列作って今日からこいつが俺の愛車だイヤッハーとかやってくれる誰かさんがいるなんてこと,つやつや思っちゃおりませんからね? で,もし本当に配列乗り換えようとか思っちゃってるんだったら,俺は余裕で部分最適化配列 QWKRFY をオススメするよ(英文入力限定ね).これは QWERTY からたった 5 組のキーを交換するだけでかなり良い線行くんで.あと,以下ではこっからどう発展させれるかなっていう実際的な提案をしとく.

国際化

Carpalx はどんな言語データに対しても動くよ.入力テキストは自然言語だろうがプログラミング言語だろうが,打てる文字ならなんでもオーケー.

ただ今のところ,キーのシフト状態の扱いに限界がある.まずキーはアンシフト・シフトの二つのシフト状態しか持てない.QWERTY 配列ではそれらシフト状態で小文字/大文字を出したり,数字/記号,記号/記号を出したりするわな.つまり 1 キーに 2 文字が乗ってるわけだけど,これをキー単位で一緒にしか動かせないって制限がある.例えば,「;」と「:」は必ず同じキーに割り当てられる.その最終的なキーボード上での位置がどこであってもだ.≪訳注:日本語キーボードの QWERTY だと「;」のシフト面は「+」ですが,英語物理配列上の QWERTY 配列では「:」です.≫従って,シフト面の文字は独立に最適化することができない.

発音区別符みたいのが大量にある言語だと,追加の文字は国際化キーボードの AltGr キーを使って出すそうだね.そういう特殊文字は第 3 の,あるいはそれ以上のシフト面にあることになる.Carpalx がそういうシフト状態をしっかり認識した上で最適化を行うには,もっとコードを弄る必要があるな.

俺には英語を打った経験しかないもんで,Carpalx を自分の言語環境で使えたらなーなんて興味持ってくれた海外のユーザさんがいたら,連絡欲しいなと思ってる.シフト面にある文字は直接打てる文字とは独立に動かせた方が嬉しいのかな? 状態(Shift + AltGr とか)を含む打鍵のコストを表現するには,負担度モデルをどういう風に調整するべきだと思う?

配列変更のためのツール

Windows - portable keyboard layout (PKL)

Windows を使ってるなら,Portable Keyboard Layout (PKL) がおすすめ.簡潔で完結してるアプリで,その場でキーボード配列を切り替えることができる.どこでも自分の配列を使いたければ,こいつを USB メモリにでも入れて持ち運べばいいと.

UNIX

執筆中ですがな

Tutors

執筆中ですがな