竹内くん、いいよ、竹内くん。
竹内くん、いいよ、竹内くん。
テストを改修中。それが終わったら何か出します。いや、出せたらイイナ。
今使っているイベント配信機構がもうずっと長いこと気に入らない。何が気に入らないかって言うとイベントリスナー(ハンドラ)登録部分。いちいちリスナーインタフェースから継承して、オーバーライドするのが面倒。なのでメンバ関数ポインタ呼び出しをヒープへの割り当て無しでラッピングするテンプレートクラスを書いて(boost::functionに効率の良いallocatorを指定する方が良いかどうか迷った)、それをリスナー登録の時に使おうとしたのだけど、実はリスナーインタフェースの基底クラスはデストラクタで自分宛のメッセージをキューから削除する処理を行っているんだった。ダメじゃん。デストラクタにその処理を行う関数呼び出しを毎回書くとか、それだけのために何かを継承するのだったら今までと変わらないよ。むしろ忘れる危険性があるし。それだったら今までの方がシンプルで効率も良く、安全だ。別に自由なメンバ関数を呼んでもらえないことが困るってほどでもないし。ということでせっかく書いたテンプレートクラスはお蔵入りです。時間を無駄にした。いや、勉強になった。
結局このあたりはオブジェクトの寿命管理の呪縛から逃れられないんだよね。イベントをきっかけにイベントハンドラになっているオブジェクトを削除するなんて事は良くあるわけだし。boost::signalですらtrackableを必要とする。さらにイベントハンドラがイベント発生元を削除したいケースも良くある。GCがあれば何て事は無いんだろうけどなぁ。侵入型の参照カウンタで自分自身をロックするくらいでも何とかなる?
ちなみにQtだとこんな感じらしいです。つまりはイベントの通知は自分が削除されても良いタイミングで行え、それが出来なければタイマーか何かで遅延するか、自分が削除されたことを検知せよ。頭痛い。いや、興味深い。
やっぱり囲碁は自由に打たなきゃつまんないよね。縮こまっちゃダメ。自由に打って負けたのなら、まあ、仕方ない。
この間作った文字レイアウトライブラリが気に入らない。何が気に入らないかって言うと文字クラス(文字の分類)まわり。そもそもJIS X 4051の文字クラスだけでは不十分なのは当たり前なんだよな。あれは半角とか全角とかの区別は無いし。いろいろ調べていたらInDesignの「文字組み設定の手引き」にInDesignでの文字クラスのことが書いてあった。
なのでInDesignの体験版をダウンロードしていじる。InDesignの文字クラスには読点類がある(JIS X 4051だと読点類は終わり括弧類に含まれている)。それもカンマと読点、ピリオドと句点がそれぞれ独立している。連数字をうまく扱うにはその方がいいかも。あと、半角のASCII文字は欧文用文字として扱われるみたい。ただし、半角数字は半角数字という独立したクラスが用意されている。ちなみに全角数字というクラスもある。A等の全角アルファベットはその他の和字として扱われている。それとInDesignでは文字クラスは純粋に文字間の空き量を指定するのに使われているっぽい。行の分割点を求める場合(禁則処理など)は別途指定の禁則処理セットや既定のアルゴリズムが使われているようだ。
というわけで、これらをふまえた上で、ライブラリの文字クラスを修正。半角と全角は完全に区別できるようにする。つまり、始め括弧類を半角始め括弧類と全角始め括弧類の二つに分ける、といった具合。それぞれ別の空き量を指定したいし。和字と欧字は半角か全角かで分けるのではなく、純粋に文字の意味で分ける。なのでAは(全角)欧字。文字クラスの数がかなり増えてしまうけど、ま、いいでしょ。あと、読点類と句点類の細分化で連数字まわりの曖昧性を排除。
味楽る!ミミカのマツタケ狩りで流れていたBGMがどう聞いてもカレイドスターのBGMにしか聞こえなくて(炎の上で綱渡りなやつ)、またカレイドスターを見始めてしまった。いったい何度目だろう。
それにしても、やっぱりカレイドスターはイイ。夢を見続けた者だけが開ける扉がある。
本屋で見かけて思わず買ってしまいました。五路盤と思って侮る事なかれ。どちらが何目勝っているかまで読まなくてはいけないのですが、これがなかなか難しい。なんとか勝てる手順を見つけて解答を見てみると答えは合っていても読んでいない別の変化もあったり。いや、詰め碁の本ってみんなそんな感じですけど。薄い文庫サイズの気軽さがgood。
これを読んで十九路盤が強くなるかどうかはちょっと分かりませんけど、負けてばっかりの対局より、こういうちょっとしたパズルを解いている方が楽しいよなぁと思う今日この頃。
形式が決まったところで内容が出来るわけではありませんので。当たり前ですが。
確か今日は休日なんだけど、何の日だっけ? まあ、いいや。(注:これを書いているのは19日(火)の朝です)