「やまぶき」親指シフトロジック挙動。


 kouyさんが「やまぶきの挙動」について質問されているのを拝見して、思わず私も便乗質問を……。

 kouyさんの質問、私にとっても興味があります。
 文字キー同士同時打鍵と、親指連続シフトとでは、(仮に実装上の差異はあっても)同じ「考え方」で処理しているのではないかと想像しているのですが、実際の挙動についてお尋ねしたいと考えていました。


【私が想像している前提】
 [K]押下、[K]離す……は、[J]と[変換]の打鍵シーケンスに影響を与える要素ではないので、ここでは無視。
 そのため、(文字キー同士同時打鍵と同じ考え方で)[変換]押下、[J]押下、[変換]離す、[J]離す……というシーケンスで見る。


【私が想像している動作】
 [変換]押下を0、[変換]離すを100としたときに、[J]押下が90を超えていればシフト残りが起きたと見なして、シフトを「掛けない」([J]押下が90未満であれば、シフトを掛ける)……という判定をするものと、私は想像しています。
 そして、これと全く同じ考え方で、文字キー同士同時打鍵についても、「シフト残り」を検知してる。


 こういう認識であっているのかと、正直ドキドキものではありますが……正解についてお教えいただけますと嬉しいです。


 p.s.ただいま「やまぶき」の「シフト残り対策付き連続シフト」を使って、NICOLAが使えるか?実験への参加者を募っているところです。今のところテストいただいた4人中、4人全員の親指シフトユーザさんから「大丈夫っぽい」という反応をいただいてます。いいロジックは、配列の壁をも超える……という、そういう時代が来るのかもしれませんね。
Posted by 相沢かえで at 2010年04月25日 21:19


(from http://yamakey.seesaa.net/article/147080328.html#comment )


 私が考えてた前提って、所詮は「タイムシフト」の延長線上の話なので、たぶん間違ってるんだろうなぁ……とか思いつつも、とりあえず。
 それに対して、yamaさんから具体的な解説が。

文字キー同時打鍵シフトの判定の仕方は、kouyさんの認識で合っています。


親指シフトについては、先に押されたのが文字キーか親指シフトキーかによって少し違っています。


先に押されたのが文字キー([K]押下、[変換]押下、[K]離す、[変換]離す)のときは、「[K]押下」を0、「[K]離す」を100として、「[変換]押下」が前にくっつくか後にくっつくかを判定します。
「くっつく」という考え方はちょっと奇妙ですが、要は、同時打鍵時間範囲が90なら、「[変換]押下」が90以内(前にくっつく)のときはシフトが掛かり、90以上(後にくっつく)のときはシフトが掛かからないということです。


先に押されたのが親指シフトキー([変換]押下、[K]押下、[変換]離す、[K]離す)のときは、まず「[変換]押下」、「[K]押下」、「[変換]離す」の3点で判定し、「[K]押下」が前に付くならシフトが掛かったとみなし、後に付くなら、さらに「[K]押下」、「[変換]離す」、「[K]離す」の3点で判定して、「[変換]離す」が前に付くならシフトが掛からず、後に付くならシフトが掛かるという結果になります。
このように、先に押されたのが親指シフトキーのときは、2段階で判定しています。


今では2段階判定していますが、もともと(バージョン2時代)は後者だけでした。
文字キーと親指シフトキーでは文字キーの方が主なので、「文字キーの打鍵に対してどのシフトが掛かっているかを時間判定する」という言葉を素直に実装すると、後者の「[K]押下」、「[変換]離す」、「[K]離す」の3点で判定するということになります。
しかし、実際打ってみるとシフトミスし易かったので、前者も加えることになりました。
親指シフトキーと文字キーを同時に押したら、それはシフトが掛かったとしてよいだろうという判断です。


以上を踏まえて、「[K]押下、[変換]押下、[J]押下、[K]離す、[変換]離す、[J]離す」という打鍵列について解説すると、まず、「[K]押下」、「[変換]押下」、「[J]押下」の3点で判定し、「[変換]押下」がどちらに付くかを判定することになります。
「[変換]押下」が前に付くときは、[K]にシフトが掛かり、[J]については連続シフト判定(「[J]押下」、「[変換]離す」、「[J]離す」の3点で判定)扱いになります。
後に付くときは、[K]にシフトが掛からず、以下「[変換]押下、[J]押下、[変換]離す、[J]離す」のような親指シフトキーを先に押した状態とみなされ、まず「[変換]押下」、「[J]押下」、「[変換]離す」の3点で判定し、シフトが掛からないなら、さらに「[J]押下」、「[変換]離す」、「[J]離す」の3点で判定するという流れになります。
Posted by yama at 2010年04月26日 20:48


(from http://yamakey.seesaa.net/article/147080328.html#comment )

 押されたキーの機能にかかわらず、「最初に押されたキー」をまず基準として見る……というところが興味深いな、と。
 親指キーが押されたとき、シフト残り処理をするために2段階判定してる……というところに、工夫の細やかさを感じました。
 ……ただ、まだこの挙動をすっきりと消化できていないので、もうすこしじっくり読み返しつつ、動作チャートを書いてみたいところです。


 それと、「選べる、ということの重要性」について、まだまだ自分の中での認識が足りてなかったな……と、その点について猛反省中です。
 私は「なるべくシンプルなロジックで、なるべく広い範囲をフォローできる方が(実装側の都合では)いい!」と考えてるのですが、そればかりで「使い手のための自由度確保」について、考えが甘くなっていました。
 「やまぶき」に宿った世界観は、相変わらず奥が深いなぁ……と。


 ……で、極端にシンプルなところを目指してる「タイムシフト」については、実際どうしよう?とか考え中。
 自分でそーゆードライバが書けるわけでもないから、実現方法については未だに悩んだまま。
 こーゆー「しんぷるなもの」で、どこまで行けるのか……ってところは、検証タイミングが得られ次第、テストしてみるつもり。