last update: 2013/09/03

2006/01/27

疲れてるなぁ

相手のことをあまりよく知らないってことは、相手のことを知る楽しみがたくさん残っているということだ。

いやーまいったまいった。プログラム書いててこんなに後悔したのは久しぶりです。まぁここに書いてもたぶん全然通じない話なので、書いちゃおう。

うちの研究室では手書きでかいたうねうねした線を、どのぐらい丁寧とかてきとーとかそういう感じのを速度と加速度からパラメータ化して手書きの曖昧さを加味して、それによりどんな幾何曲線を書こうとしてたかというのをファジィ推論してぽーんとその書きたかったであろう曲線として出力するっていう技術について研究してるわけです。この理論作ったのが、うちの研究室の教官(理論作ったときは民間人で、その後うちの大学にきたっぽい)。

で、オレがやってるのはそのコア技術の実装…ではなくて、その理論によって出された曲線とかを管理して実際のアプリケーションとの橋渡しをするライブラリをつくってるみたいな雰囲気なわけです。ここで必要とされるデータ構造っていうのは、おおざっぱにいうと、ユーザの一筆分のデータを保持するStrokeっていうのと、その一筆の中の一連の描画の流れから描画の区切りを検出してその区切りごとに分けたFragmentってやつなんですよ。ほら、三角形とかは、直線3本っていうFragmentから1つのStrokeを構成してる、みたいな感じね。んでこれを管理するModelがあるので、これをそれっぽく表すと、

3層構造です

こんな感じ。まぁ木構造だけど、Fragmentから下にはぶらさがらないので、一番上から2段たどればFragmentにありつくってわけですんで、あんまりなんも考えずにそれぞれModel、Stroke、Fragmentを別々のクラスで作ったんですよ。なので、ModelにはStrokeの管理コードを書いて、StrokeにはFragmentの管理コードをかいたんです、別々で。

で、これの上位プロジェクトでは、さらにここで複数のStrokeを組み合わせて立体を作ろうみたいな話があって、立体をSolidとしてこれを表すと、

4層構造です

まぁこんな感じです。てことで、オレはModelはSolidを管理するように変更するコード(まぁ実際はModelの派生クラスですが)を書いて、さらにSolidがStrokeを管理するコードをかかなきゃならなかったんですが、さらに、今週ちらっと話をしたときに、「そもそも立体の構成要素のStrokeを、グループ化して複数のStrokeから立体の断面とかを構成するようにしたいねぇ」「うんたしかにそうだー」みたいな話になったわけです。ってことでEditGroupを導入すると

5層構造です

うわあああもういやだよこれ! なんで5層とかになってるの! そしてオレはSolidがEditGroupを管理するコードをかいて、EditGroupがStrokeを管理するコードを書いて……って! そんなバカな! どんな非効率だよそれ!

明らかにオレの見通しが甘かったのがバレバレです。ここまで木構造がでかくなると思ってませんでした。こういう時のソリューションは、おとなしく木のパーツを構成するNodeクラスを定義して、Nodeクラスで子Nodeを管理するようにする。んで、Model、Solid、EditGroup、Stroke、FragmentはNodeから派生すれば、木構造の管理コードはすべてNodeに入っているのでそれを意識せずそれぞれの振る舞いを定義できる、という風にすればいいわけですね。

…久々に見通しの甘いコードを書いてしまったせいでかなーり後悔気味です。

窓使いの憂鬱導入

なんというか、今まで気付いてなかったんですけど、このコンパクトキーボード、◆がWindowsキーになってるんです。

何の違和感もなく使ってましたが、よく考えてみたら普通のキーボードって[Ctrl][Win][Alt][Space(か無変換)]って並びになってますよね。そこのところこのキーボードは[Fn][Alt][Win][Space]って並びになってて、WinとAltが逆なんですよ。まぁ正直この配置でもプログラムとか書く分には慣れてるといえば慣れてる。しかし、ゲームをやるときはもうなんかAltの場所を指が覚えてるのでAltのつもりでWindowsキーを押しまくってこれは大変。

ということで、どっちにしろ一部ゲームはF1〜F10と数字の1〜0をスワップしないとゲームできなかったので、窓使いの憂鬱を入れていろいろ設定しました。コレ便利だなー。

たいぷちゃんが「入れるのをためらう理由がわからない」って言ってたけど、たしかにまったくもってその通り。これで、日本語キーボードを引っ張り出してきて使う必要もなくなったので、さっさと日本語キーボードははずしてしまいました。なのでWinDDKでがんばってフィルタドライバ書いて日本語キーボードと英語キーボードを共存させるぞーみたいなことをする必要もなくなった、と。めでたしめでたし。

ちなみにそこのところ、HHKLite2だと窓使いの憂鬱をつかわなくてもディップスイッチでAltとWinの位置を入れ替えることができるうえに、それぞれのキーの大きさがおなじなんで、キートップを物理的に入れ替えることができるっぽい雰囲気ですね。…便利そうだ。まぁ、キートップなんてかざりですよってことでそのまま使ってます。

comments powered by Disqus