miau's blog?

function(タイピング)から学んだこと

function

「function」の入力をいかに早く入力できるかを競うタイピングゲームです。

ということでしばらくこれにハマってたんだけど、色々学んだのでメモ。(長文注意)




■そもそも、なぜ function を速く入力するのか?

ぼくはまちちゃん!(Hatena) - function

あたりを見ると経緯がわかるんじゃないかと。

■やってみた

0.6 切るくらい。自分の 2 倍近い速度でタイピングできる人間がいるのは知ってたけど・・・0.2 切るってあんた化け物か。

■さらにやってみた

さらに何十回かやってると、functin になってしまうことが多いことに気付く。
えー?ちゃんと「o」押してるよ!何か変じゃない?
この Flash がおかしいんじゃね?と思ってエディタでも同じことをやってみるけど、同じ症状。

じっくり調べてみると、どうも「t」と「i」を押したまま「o」を押下しても、キーボードが反応してくれないことがわかった。「f」「u」「n」とやった場合はちゃんと反応するし、それ以外に幾つか試したけどだいたい反応してるのに。なんで?

順番を変えて「i」「o」「n」と押下しても「n」が反応してくれないところをみると、どうも同時に入力できないキーの組み合わせがあるらしい。Windows の問題かな?と思って Linux でもやってみたけど、現象は同じ。キーボード自体の仕様ってこと?
(※後で調べてわかったけど、キーボードによってキーの組み合わせは違うみたいです)

■もっとじっくり調べてみる

「i」「o」との組み合わせで動かなくなるキーを捜してみると、4 5 8 9 ; b g h i l n o r t . / あたりがそうらしい。これってキー配置でいうと

4 5 8 9
r t I O
g h l ;
b n . /

この部分だよなぁ。配線か何かと関係あったりする?

■とりあえず

その辺にあった同タイプっぽいキーボードを分解してみた。

keyseat

シートが 2 枚入ってて、片方は横方向に配線されていて、もう片方は縦方向に配線されている。

↓見やすいようにスキャンしたもの
keyline拡大

・・・なんとなく原因がわかってきたけど、折角だから徹底的に調べるか。

■配線

○1枚目(横方向の配線)

9 本の線が走っている。線を A〜I で表すと、それぞれの線を通っているキーはこんな感じ。

A: Internet E-mail
B: tEnter t. t0 lShift Tab F1 F2 Sleep q w e r t y
C: t6 t3 t2 t5 t4 t1 rWin / . , 変換 Space 無変換 F6 F7
D: t9 t* t8 t/ NumLock t7 : ; l k rAlt F8 F9
E: t- t+ Up rCtrl d\ u i o p @ [ Enter u\ F11 F10
F: Right Down Left Pause ScrollLock 6 5 4 3 2 1 半角/全角 CapsLock lWin
G: rShift App ] BackSpace PrtScr F12 ^ - 0 9 8 7 カタカナ
H: PageDown End Delete F5 F4 j h g f d s a lCtrl
I: PageUp Home Insert F3 Esc z lAlt x c v b n m

○2枚目(縦方向の配線)

17 本の線が走っている。同じく 1〜17 で表すと、こんな感じ。

1: rWin Sleep
2: tEnter t1 Up Left App E-mail NumLock Insert Delete
3: End Home t/ t+ t2 t. Down Internet
4: PageDown PageUp t* t- t3 t0 Right ]
5: t9 t6 - @ c d w 2
6: 0 p : Space v f e 3
7: 9 o ; / b g r 4
8: 8 i l . n h t 5
9: 7 u k , m j y 6
10: ScrollLock F12 F10 F8 F6 F4 F2 Esc
11: Pause PrtScr F11 F9 F7 F5 F3 F1
12: 1 q s x [ ^ t8 t5
13: 半角/全角 Tab a z Enter BackSpace t4 t7
14: lShift 変換 rShift u\
15: CapsLock lCtrl rCtrl
16: lAlt 無変換 カタカナ rAlt d\
17: lWin

※上にも書きましたが、キーボードによって配線は異なるようです。

■つまり・・・

こういうことか。

1304 キーボードのしくみ を見るとわかるけど、縦方向と横方向の通電からどのキーが押されたかが判断される。

今回は
「t」: B8
「i」: E8
「o」: E7
なので、

(1) 「t」が押されると B-8 が通電
(2) さらに「i」が押されると B-8 に加え E-8 が通電する。
 これによってキーボードは「i」が押されたと判断する。
(3) 「o」が押されると B-8、E-8 に加え、B-7、E-7 が通電する。
 これは B7 に相当する「r」が押されたときと同様の通電なので、
 キーボードはどのキーが押下されたか判断できない


7 8 (1) 7 8 (2) 7 8 (3) 7 8
│ │ │ ┃ │ ┃ ┃ ┃
─[r]─[t]─B ─[r]─[◆]━B ─[r]─[◆]━B ─[◇]━[◆]━B
│ │ │ │ │ ┃ ┃ ┃
─[o]─[i]─E ─[o]─[i]─E ─[o]─[◆]━E ─[◆]━[◆]━E
│ │ │ │ │ │ │ │


ふー。すっきり。

■雑感とか

・原理はわかったので「t」を素早く離すように心がけたら入力ミスがずいぶん減った。
 これだけで 0.1 秒タイムが縮んだ。

・Realforce なんかでもこういう現象発生するんだろうか?
 もし発生しないのであれば、Realforce で入力が速くなるのは静電容量無接点方式といった機構だけの問題じゃないのかもしれない。

・そういう現象が発生するとしても、function の入力に適したキーボードは存在する。
 例えば自宅で使ってる HHK Lite は、f-u-n-c-t-i-o-n を入力する際に問題になる組み合わせは u-n-i だけっぽい。「u」と「i」は連続で押下しないので、家のほうがいいスコアが出やすいみたい。
 JavaScript や PHP のように「function」の入力を頻繁に行う人はこういうキーボードのほうがいい・・・というのは言いすぎか

・でも「どのキーボードでも入力できる」のを目指すなら、すぐに指を離す練習をしたほうが。
 以前書いたように kbdacc とか使うといいかも。

・最適化とかあまり得意じゃないので、ちょうどいい練習になった。
 u-n は指一本で打つとどうしても遅くなるので、中指-人差し指とかで入力するのがよさげ。
 左手も最適化できそうだけど、筋を傷めそうだったからやめ。

・3 つ以上のキーを同時押下できることを前提としたアプリケーションは作れない、と気付いてちょっとショックだった。「左Shift+右Shift+任意のキー」で動作するアプリケーションとか面白いと思ってたんだけどな・・・。

・仕事の進みが遅くなるから、function は会社でやらないほうがいい。


(2007-04-21 追記)

ここ数日アクセス数が跳ね上がってて「2ch にでも晒された?」とかなんとか心配してたけど、はてなブックマーク で結構コメントいただいてたようで。ありがとうございます。(特に最初に登録してくれた Hamachiya2 さん)

で、

「完全nキーロールオーバー」でググれ。話はそれからだ。

とのことなので早速ググってみた。

キーボード (コンピュータ) - Wikipedia

何文字まで同時にキーを押せるかを表わすのがロールオーバーである。
たとえば3キーロールオーバーなら3キーまで同時押し可能ということを指し、
nキーロールオーバーというのはどのキーを同時に押しても反応することを指す。

現在のキーボードはコントローラーによっていくつかの種類があり、安価な
メンブレンスイッチ(圧力が加えられると導通するシート状のスイッチ)の場合には
2〜3キーロールオーバー、メカニカルスイッチの場合には疑似nキーロールオーバーや
完全nキーロールオーバーとなっている。

但し、USBキーボードはその構造上、最高でも6キーロールオーバーまでとなっている。

なるほど。今回調べたことは、ここに書いてる通り。
そして Realforce 106 なんかはやっぱり完全nキーロールオーバーらしい。

News:「速く打てて疲れにくい」キーボードの秘密――東プレのRealforce 106

完全Nキーロールオーバー対応なので、高速入力時の同時押下も全て入力される。

この記事は見てたはずだけど、一文だけさらっと書かれてもその価値が理解できなかったんだと思う。

調べてみると、タイピングよりもアクション系のゲームのほうがこの需要は強いらしい。まあ、タイピングの場合は同時押しが必須というわけではない(速く指を離せばいいだけ)から、それはそうか。

Nキーロールオーバー - Wikipedia

通常の使用では、キーボードで同時に押されるキーの数は2つまでであるが、
ゲームソフトの中には3つ以上のキーを同時に押す必要が出てくるものも存在する。
(FPSゲームやリズムゲーム等)


さらに、3 つのキーを押すと、逆に押してないキーが押されたように解釈されるものもあるそうな。

DTXMania Q&A (よくある質問) - DTXManiaがちゃんと動かない篇

今売られているほとんどのキーボードでは、3つ以上のキーを同時に押すと、
さも「自分が意図しないキーが押されたかのように」ふるまい、
その結果自分が押したはずのキーが押されていないように見えることがあります。

はー。勉強になります。
そして Realforce 買いたくなってきます。困った。


(2007-05-01 さらに追記)

今更ながら、肝の部分がなぜか i-o-n の組み合わせで書かれてる間違いに気づいた。ので、t-i-o という問題で書き直しておいた。ついでに図もちょっと追加したり。

del.icio.us でも反応あったことに気づいて嬉しかったのでとりあえずリンク。日本だとはてブほうがユーザ多いのかな。

他の情報源も。

(ogijunの)あとで書く日記 - "function"のタイピングからキーマト解析

Oh! X誌上でキーボードの仕組みについて解説されてて*1、それで勉強したのだった。
その記事に従って分解してダイオード仕込んでみたりしたなあ。
たぶん捨ててないはずなのでまだどっかにあるはず。

*1:誌上ではisoを同時に打鍵するとaが入力されることから、isao現象と命名されていた

やっぱ昔は意図しないキーが押されるのが普通の動作だったみたい。
それにしてもダイオード仕込んでなにをやったのか、すごく気になる。
posted at 01:57:49 on 2007-03-31 by miau - Category: Hardwares No Trackbacks - Permalink

TrackBack

このエントリにトラックバックはありません
現在トラックバックは受け付けていません。

Comments

nobonobo wrote:

最近はフィルムベースだが、基板ベースの重たいキーボードのころはダイオードによるカラムとロウの回りこみを防止したタイプがあった。(いまからすればものすごいコスト高)
そのタイプなら、区別してキー判定が出来るはず。
2007-04-19 10:31:21

miau wrote:

情報ありがとうございます。やっぱり区別できるキーボードもあるんですね。

はてブでも色んな方からコメントを頂いているようですので、後ほど少し追記させていただきます。
2007-04-20 13:16:30

とくめいきぼう wrote:

DTXManiaのサイトでのキーボードの説明は、↓こちらの方がより詳しいようですよ。
http://www.donburi.to/~from...
ダイオードの話にもちらっと触れられているようです。
2007-05-03 11:46:19

miau wrote:

情報ありがとうございます。補足説明のページがあったんですね。見落としてました。
ここまで詳細な解説を初めから見つけていれば、今回これほど掘り下げる必要もなかったんですが・・・「同時に押しても反応しない」という方向で調べてたので見つけられなかったようです。

ダイオードの件も納得です。nobonobo さんのコメントの意味もようやく理解できました。
2007-05-06 23:20:59

Add Comments

現在コメントは受け付けていません。
お手数ですが、 こちら のコメント欄にでも記載していただければと思います。