2006-01-06 [長年日記]
もっと脳(中略)の漢字認識率がすばらしすぎる件について
結論からいってしまうと、通常の文字認識とは違い答えがあるからということになる。つまり、あらかじめ書かれるべき文字を知っているので、その文字とだけ比較すればいいから認識率がいいと感じるのだろう。単一の文字との比較ではないという意味で、漢字記憶*1は例外だが、それにしても想定すべき答えはあるので程度問題である。その証拠に、答えでない漢字を書くと認識が途端に怪しくなる。
ということがいいたいんではなくて、お手軽版の、お手軽筆跡診断は合コンで使えるんじゃないかとか(相手にもよると思うけど)、そういう話。
*1 36文字の漢字を記憶して書く
ソウルキャリバー データ破損
この前、データの破損は起きなかったと書いたけど、しっかり壊れていた。セーブの段階では(データを読み直すわけではないので)何も起きていないようにみえるけど、この時点でデータ破損は起きていて、その次にデータをロードしたタイミング(今回は新ディスクでロードしたとき)でデータ破損が発覚した。
現象的には納得できたので、データ破損に関しては本当にこれで終わり。
で、最初からやり直しているわけだけど、期間が開いたせいもあって微妙にやる気がでない。現在Storyモードを全キャラ一回ずつクリアしたのと、クロニクルモードの最終面まで。武器は購入済みが二割程度。防具は三割程度だと思う。
memcpyとポインタ変数
例えば、以下のようなプログラムを書いたとしよう。
unsigned char *p = malloc(MALLOC_SIZE); /* snip */ memcpy(&p,&c,sizeof(c)); // bug
最後の行は、pに間違って&をつけている。ただ、memcpyの第一引数はvoid *でunsigned char **にもマッチするため、コンパイルエラーとはならず、意図しない動作となる。
しかし、この手の間違いは非常に見つけづらい。なぜなら、メモリ破壊などの異常動作が起きるわけではなく、この部分に関してだけいえば何もしていないように見えるからだ。
で、こういう間違いを機械的に見つける手立てはないものかなぁと思った次第。
(追記)memcpyではなくて、直接代入しる!という意見もあるとは思うのだが、例えば4byte境界にない可能性がある領域にlongのデータを押し込みたい場合にはこういう書き方がスマートだと思うので、この書き方を変えたくはなかったりする。
XANADU NEXT
FALCOMからパッチをダウンロードして適用。ゲームパッドが使えるようになった。ボタン配置がUSB<->PlayStation2コントローラ変換機に最適化されている(L1/R1でマップ回転とか)。快適すぎる。というか、対応するつもりがあるのなら最初から対応しろよ。
ストーリ的にはほぼラスボス戦を残すのみだったので、そのままクリア。18時間かかったらしい。追加ダンジョンのパッチも当てたので、これはそのうちやる予定。