「やまぶき」親指シフトロジック挙動。
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段階判定してる……というところに、工夫の細やかさを感じました。
……ただ、まだこの挙動をすっきりと消化できていないので、もうすこしじっくり読み返しつつ、動作チャートを書いてみたいところです。
それと、「選べる、ということの重要性」について、まだまだ自分の中での認識が足りてなかったな……と、その点について猛反省中です。
私は「なるべくシンプルなロジックで、なるべく広い範囲をフォローできる方が(実装側の都合では)いい!」と考えてるのですが、そればかりで「使い手のための自由度確保」について、考えが甘くなっていました。
「やまぶき」に宿った世界観は、相変わらず奥が深いなぁ……と。
……で、極端にシンプルなところを目指してる「タイムシフト」については、実際どうしよう?とか考え中。
自分でそーゆードライバが書けるわけでもないから、実現方法については未だに悩んだまま。
こーゆー「しんぷるなもの」で、どこまで行けるのか……ってところは、検証タイミングが得られ次第、テストしてみるつもり。