WinXP を(上書き)インストール。BIOS のアップデートと DELL US サイトの GeForce2 Go ドライバを入れただけで問題なくインストール完了。とはいえちょっと重い感じだったので全てクラシックスタイルにしてしまったため,Win2k とあんまり変わらない。

周辺機器的には,Smart Vision Pro2 USB は XP 対応ドライバが出ていたのでインストール。MO ドライブ等は c:winntinf(クリーンインストールだとフォルダ名が変わるらしい)から標準のドライバをインストール。1 つだけ,PCMCIA SCSI カード経由の外付け HD は,デバイスは認識するものの,ドライブが現れない。原因不明。

WinXP のリモートデスクトップを体験。友人が自宅のマシンを外から操作していた。セキュリティさえ大丈夫ならかなり便利そう。それに関連して(?),CD-ROMトレイをドライブを指定して開閉する方法。

MCI_OPEN_PARMS  mciOpen;
TCHAR           szElementName[4];
TCHAR           szAliasName[32];
DWORD           dwFlags;
DWORD           dwAliasCount = GetCurrentTime();
DWORD           dwRet;
TCHAR           chDrive;

chDrive = TEXT(drive_char);

ZeroMemory(&mciOpen, sizeof(mciOpen));
mciOpen.lpstrDeviceType = (LPTSTR)MCI_DEVTYPE_CD_AUDIO;
wsprintf(szElementName, TEXT("%c:"), chDrive);
wsprintf(szAliasName, TEXT"CD%lu:"), dwAliasCount);

mciOpen.lpstrElementName = szElementName;
mciOpen.lpstrAlias = szAliasName;

dwFlags = MCI_OPEN_ELEMENT | MCI_OPEN_SHAREABLE | MCI_OPEN_ALIAS |
          MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_WAIT;

dwRet = mciSendCommand(0, MCI_OPEN, dwFlags, (DWORD)(LPVOID)&mciOpen);

MCIDEVICEID wDeviceID = mciOpen.wDeviceID;
mciSendCommand(wDeviceID, MCI_SET, MCI_SET_DOOR_OPEN, NULL);

mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);

トレイクローズは,MCI_SET_DOOR_OPEN の代わりに MCI_SET_DOOR_CLOSED を指定する。

実は以前 Smart Vision という USB TV チューナー & キャプチャーを買ったのだが,研究室の人がエンコードについて話していたのに触発され,標準形式の MPEG2 から MPEG4(wmf)に変換する実験を行ってみた。以下手順。

  • Smart Vision でキャプチャ(m2p)
  • 付属の Video Studio で範囲指定し,[選択ファイルを新しいビデオファイルとして保存](m2p)
  • DVD2AVI で [Open],[Save Project] し,映像・音声を分離(d2v,mpa)
  • SCMPX で音声を wav に変換(d2v,wav)
  • AVIUtil で[開く]-[編集プロジェクトを保存] で映像と音声を結合(aup)
  • VFAPI Codec Reader で [ジョブを追加],[実行] で avi に変換(avi)
  • Windows Media Encoder で wmf に変換(wmf)

一旦 Video Studio で保存しているのは,これをしないと映像と音声を分離するときに時間がずれるからである。恐らくコマ落ちが原因だと思われるが,Smart Vision 付属の Video Studio プラグインで一旦保存するとコマ落ちが(多分)補完されたような感じになり,ずれなくなるようだ。

しかし何故こんなにいろんなソフトを使わなければならないのだろう。特に映像音声を分離してそのまま合成するところに不毛感が…。

#その後 AVIUtil の手順で直接 MPEG4 エンコードの AVI 変換にすることで,単純化した。WMF 変換途中で止まっちゃうことがよくあるし。

#さらにその後,エンコーダを指定すれば Video Studio から直接 MPEG4 エンコードできることが分かった。ので,Video Studio でファイルを MPEG2 720×480 29.97FPS で開き,エンコーダを指定してファイルを出力するだけで OK になった。

DirectPlay 回線シミュレータで遅延を大きくし,ウェザタイのテストをちょっとやってみたところ,つながらない現象が再現した。原因を調べると,プレイヤーダイアログ表示中にプレイヤーを追加しようとして,排他制御で止まっていた。とりあえずそこを直した版を開発版にアップ。4 人対戦については実際にテストしないと分からないが,直っているといいなあ。

DirectX8.1 がリリースされていたので試してみる。確か DX6 の時にあった DirectPlay 回線シミュレータが復活している。これでパケットロスとか遅延のテストが効率的にできそうだ。あとは VC から DirectX プロジェクトが AppWizard で選択できるようになった。

ウェザタイに関しては,掲示板に書いたとおり,TCP/IP 対戦ができなくなった。これは,恐らくセッション選択機能を省いたせいで,DX8.0 では動いたが,DX8.1 ではだめらしい。参考にした書籍のサンプルも動かなくなっていた。これはテストが完了し次第修正版アップ予定。

諸事情で沖縄県石垣島へ行く。Palm と携帯でネットに接続出来るので大丈夫と思っていたら赤外線 Palm 携帯接続キットが電池切れ。i-mode 以外ネットに接続出来ない環境となってしまった。携帯でメール書く気はしないので,結局ネットも PC もない生活を送る。これはこれでゆっくりしていていいけど。

ある課題を Ruby でやってみる。慣れないので難しいのだが,書いててなかなかいい感じ。Hi-HO が Ruby を許してくれれば掲示板を Ruby で書き換えたいのだが。やっぱり denasu.to サーバに移行するしか。

ちなみに denasu.to はパジャ氏と私で運営しているドメイン & サーバだが,なにぶん ISDN 環境なので本格的に Denasu System を移行するには頼りない。ま,そんなにアクセスないですけど。とりあえずミラーになってるので,Hi-HO が落ちたり私のアカウントが消されたりしたらこちらをどうぞ。

Denasu System サイト全体を検索するため,Namazu を設置。今まで,某所で日記だけ検索できるようにしていたが,denasu.to に移行し,Denasu System 全体を検索できるようにした。とはいえ掲示板はまだ検索できない。

最初検索結果が文字化けしていたが,export LANG=ja,export LANGUAGE=ja(bash)とすることで解決。

Norton AntiVirus2002 を買ってみる。元々ウイルスバスターを使っていたのだが,ユーザー登録やウイルス定義ファイルのアップデートでいろいろと問題があったので,乗り換えた。Norton にしたのは,DELL の新マシンに元々体験版(?)が入っていたため。今のところ快適。

DELL の Inspiron8100 だが,キー入力直後,タッチパッド,ポインティングスティックが効かなくなる,らしい。私の環境は,買って即 BIOS で機能を外してしまったので,全く問題ないのだが。

現役引退した SHARP Mebius に Microsoft Visual Studio.NET をインストールしてみる。こっちのマシンなら不安定になっても問題ない。

まず Windows2000 をクリーンインストール。LAN ドライバを入れ,グラフィックドライバを入れる。DVD ROM ドライブのある DELL マシンからインストールを実行。

IIS + FrontPage をインストール。W2KSP2 や IE6 を入れる。.NET をインストール。念のため IIS のパッチをインストール。結局 3 時間ぐらいかかった。

とりあえず VC++ と VC# のプロジェクトを作ってみた。やはり旧ノートでやると少々重い & 画面が狭い。

ILS2 以来やっていなかった 3D に再び手を出す。とりあえず 3D 関係の本を読みつつ DirectGraphics を試す。

最初 Z バッファの初期化を忘れて,実行するたびにオブジェクトが見えたり見えなかったりして困ったが,なんとか裸眼立体視 X File Viewer ができた。


そういえば書いていなかったが,IE6.0 を入れた。全体的には IE5.5 からそれ程違いはない。但し

  • ウィンドウズ終了時,エクスプローラを開いていても次回ログイン時に自動で開かない
  • エクスプローラで,フォルダ部分以外の横の列をクリックすると,フォルダをクリックしたことになる
  • IE のスムーズスクロールがデフォルトオフ(オプションで有効にできる)

という違いがあった。上 2 つはバグなのか仕様変更なのか分からないが,せめて動作を選べるようにオプションを用意して欲しかった。(実はあるのか?)

諸事情でクレジットカードの番号が変更になる。で,新しいクレジットカードが届いた 29 日に Hi-HO にメールを出したのだが,2 日に「届きました」というメールが届いた。クレジットカード番号変更は月末締切なのだが,これって間に合ったのだろうか。間に合ってない場合,最悪来月一ヶ月ネット接続不能 & アカウント消えてデナス消滅というのもあり得るわけで。どうしよう。

ウェザタイ,実行ファイルの削減について。STL を使っていた部分

map.insert(a)
map.insert(b)
map.insert(c)
…

MapInsert(a)
MapInsert(b)
MapInsert(c)
…

のようにラッピングし,インライン展開を抑制することで約 500KB 削減することができた。テーブルのコンパイルだも 30 分から 10 秒程度に減少。STL は使い方次第でコード量をかなり抑えることができるようだ。

ウェザタイの入力方式としてNICOLA 配列,50 音配列,dvorak 配列をサポートしてみる。

NICOLA 配列では,ウェザタイではデータ送信量を削減するために扱っていない「キーリリース」を扱わなければならないので,今までの構造では対応できず,入力部分を作り直す。この副作用で今までのリプレイデータが使えなくなってしまったが,対応要求があれば多分コンバータを作る予定。ちなみにリプレイデータはこの際なので圧縮をかけて出力するように変更した。

SHIFT キーの扱いについては,最も厳密に判断するようにした。即ちローマ字表示が a であれば SHIFT なし,ローマ字表示が A であれば SHIFT を押さなければならない。それに伴ってかなをローマ字に変換したとき,大文字になっていたのを小文字にするようにした。

「ヴ」をカタカナで出すように変更。「ヴ」には SJIS で 1 文字となるひらがなが存在しないため,今まで「う゛」と出していたが,親指シフトでは 1 ストローク,JIS かなでは 2 ストロークというのがめんどうだったのでこのようにした。


掲示板に少し書いたが,「新たなキー配列をサポートするたびにどんどん実行ファイルの大きさが巨大になるという問題」についてここでは少し技術的な話を。

入力方式のサポートについては,基本的に 1 対複数のテーブルを使っている。(例えば「し->SI」,「し->SHI」など)これを手っ取り早くサポートするために STL を使っているのだが,容赦なくサイズが大きくなる。テーブルの多いローマ字入力で obj は 500KB に達し,かな入力でも 300KB である。さらにコンパイル時間が,テーブルのコンパイルだけで数十分はかかるようになってしまった。これではどうしようもないので対策を考え中。

対策として,そもそも multimap::insert がコードサイズを大きくする要因な気がするのでその辺のコードを inline を使わずに自分で書く,または,ソースコードにテーブルを書かずに,リソースファイルみたいな形式で持たせる,というのを今のところ考え中。

DELL ノートの使い勝手。やはり 1400×1050 の画面は広大で,800×600 に慣れていた私としては落ち着かない感じ。液晶はドット欠けもなく綺麗。前の SHARP ノートを見るとドットが大きいのがよく分かる。3D については,TOD と DiabloII を動かしてみたが,快適。3DMark2001 では 1429。これで 3D ゲームを作る環境は整った。キーボードについては,ストロークが深い,Delete,Insert 等が右上にある,など SHARP とはかなり使い勝手が違うが,これはそのうち慣れるだろう。

DELL ノートを購入。とりあえずDELL Inspiron 購入記。使い勝手はおいおいここに書いていくことになると思う。

ウェザタイかな入力。ちょっとやってみたら割とすぐにできたので公開してみる。ただ,私はかな入力派ではないため,かな入力派の人がやってみるとおかしな部分があるかも知れない。

ランキングは,とりあえずローマ字入力かかな入力かを表示するようにしてみた。あと,まだ対応したばっかりでバグがあるかもしれないので掲示板での告知はしてなかったりして。

ふうう。この 10 日間,異常に忙しかったんだが,なんとか終わった。これでまたウェザタイとか他のことができる。


早速ウェザタイだが,ランキング,URL 欄にメールアドレスを書かれている方が。まあそれもありかな,ってことで URL 欄がメールアドレスだったら(@ があるかないか,という手抜きだが)mailto となるように変更してみる。

というところでウェザタイを Ver1.3 に。一応リプレイ機能を実装して,私の中にある機能は一通り実装終了。あとはバグがあれば修正していくが,機能追加はしばらく行わない予定。未だに 4 人対戦が不安定だったが,現バージョンではサンプルと全く同じに,Host して,Connect しているだけなので,これ以上はどうしようもない。

ウェザタイ。やっぱり接続できない。

Windows2000 を再インストールしてみる。今までは仮に Win98 からアップデートしていて,いろいろと変な問題があったのだ。とりあえず快適。


DirectMusic。BGM に MIDI を指定するとテンポがおかしくなるという問題を,まっちーさんから報告を受けていた。どうやら DirectMusic は MIDI ファイルをセカンダリセグメントで再生するとテンポがおかしくなるようなので,プライマリセグメントで再生するように変更。


DirectPlay。セッションの列挙をするのをやめることにした。おかげでかなりコードはすっきりしたというか複雑な部分は全くなくなった。が,いつも通り 3 人対戦以上は試していない。


タイトルバーを点滅させる方法。FindWindow を呼び出す。但し,きちんと点滅させるにはタイマー等を用いなければならない。

ウェザタイ。4 人対戦の機会ができたのでテストしてみる。まずアナログ 2 人 + フレッツ ADSL。これは ok で,3 人対戦はできた。次に フレッツ ISDN の人を加えて 4 人対戦(全員 Windows2000)。だが,フレッツの 2 人がホスト以外に見えず,現象は変わらず。


とりあえずログをとって,ちょっと変な部分を修正してみる。

ウェザタイ。Microsoft のサンプルを見ながら,ちょっとでも違う部分をかたっぱしから直してみる。一応いくつか気になる部分があったので修正してみる(Connect の非同期化と排他制御,ポート指定を Host,EnumHosts 前にやるようにする)。

さらに,ルータの設定等を少しでもいらなくするため,ホストとクライアントのポートを同じポートにする。このため,1 台のマシンで複数立ち上げることはできなくなったが,ルータの設定は

  • UDP ポート2234
  • UDP ポート16342

だけになった(はず)。


まっちーさんからの報告で,MIDI 再生時におかしな部分があるとのこと。調査中。

ウェザタイ。私の周りで,3 人以上でつながらない人に WindowsMe の方が多いので,Mebius MN-390-X26 に Windows Me を入れてみた。前試したときはインストールできなかった気がしたが,今回は何の問題もなくインストールできた。

最初,LAN カードを入れずに試すが,TCP/IP では起動できなかった。てことは,LAN カードを持っていない場合,TCP/IP ではダイアルアップで IP が割り当てられるまでは使えないということである。一応 Serial Service Provider 等を選べば起動はするので,この辺はマニュアルに書いておこうと思う。

で,Windows Me でのテストだが,とりあえずローカル対戦は問題なかった。今度,他の安定している人とこの環境でテストしてみようと思う。

DirectPlay で使用されているポートを調査。ルータ経由で対戦する場合,以下のように静的マスカレード設定すればウェザタイは動くと思われる。

  • UDP ポート2234
  • ホストの場合,UDP ポート16342
  • それ以外の場合,UDP ポート2300-2400

3 人以上対戦でつながらない問題,原因らしきものが 1 つ判明。セッションの列挙をキャンセル中に,セッション情報を破棄していた。キャンセルが早い場合は動きそうだが,ホストが多くてキャンセルに時間がかかる場合,おかしくなっていたのではないかと考えられる。が,今日のところは開発者がつかまらないので未テスト。


Hi-HO で WAP 対応ページを見るときの .htaccess について,追加

AddType text/x-hdml;charset=Shift_JIS .hdml
DirectoryIndex index.html index.shtml index.hdml

としておけば,ファイル名を指定しなくても,hdml を読んでくれる。

ウェザタイランキングに参加されている方と,IRC #weathertyping でチャット & 対戦を行う。4 人で対戦を試みるもことごとく失敗。3 人対戦は何回か成功した。皆,開発者組の私と Pha-jtd さんより速いので,歯が立たず惨敗。最後に,現在ランキングトップの Sakku さんと対戦させてもらったが,対戦であっさり 50000 点以上出すなど,とにかくすごかった。とりあえず,速い人との対戦にもっと慣れないといけないというのを実感。

開発者的には,対戦ができないのがどういう環境なのかが少し分かったのでよかった。現在,パケットアナライザで 3 人対戦以上の場合のパケットを解析中。

Denasu System i-mode,j-sky 対応。とりあえずトップページと,掲示板,ウェザタイランキングだけ対応した。

i-mode 版
j-sky 版

WAP は Hi-HO が text/x-hdml に対応していなかった(はず)ため,index.hdml を表示できず,非対応。まあ CGI だけならできそうだが。

と思ったが,Hi-HO は .htaccess に対応しているらしい。

AddType text/x-hdml;charset=Shift_JIS .hdml 

と書いておくことで,シミュレータから見ることができた。

WAP 版


DirectPlay が使用するポート。ネット上を調べていると,いくつかのページで

ポート番号 プロトコル
47624 TCP
2300~2400 TCP
2300~2400 UDP

と書いてある。これにウェザタイの使用ポート 16342 を指定すればいいと思う。47624 がホスト用で,16342 がメッセージ送受信用だとすると,2300~2400 って何に使うのだろうか。もう少し調査が必要。

CGI(掲示板,ウェザタイランキング,アクセスカウンタ)を大幅作り直し。といっても見た目には全く分からないが,今まで非効率だった部分を幾分効率的にしてみた。これで多少アクセスが多くなっても耐えられると思う。ま,まだそんなにアクセス多くないけど。

というわけで数日間この CGI 直しとかバイトとか学校のレポートとかをやっていたのだが,ようやくウェザタイの開発が再開できそうである。とりあえず対戦中落ちるバグと,DirectPlay の挙動の調査かなあ。

で,今 Pha-jtd 氏に頼んであるタイトルと背景,はっぱ氏に頼んであるものが上がったら Ver1.3 を公開,という形にしたい。

3 人対戦テスト。って論文明日までに書かないといけないのだが,せっかく Pha-jtd 氏と,バイト先のまっちー氏・Happa 氏が来てくれたのでやってみた。環境は,私とまっちー氏が普通の電話回線,Pha-jtd 氏・Happa 氏がフレッツ ISDN。このうち Happa 氏はセキュリティを高めているせいか,つながらなかった。残り 3 人は 1 回目はワード送信時に落ちたものの,2 回目はうまくいった。もう少し見直してみる必要がありそうだが,なんとか 3 人以上の対戦もできるようになったように思う。

久々に 3 人の開発者が集まったので 3 人対戦をテスト。私は普通の電話回線,1 人は ISDN,もう一人はフレッツ ISDN でルータ経由。ルータ経由の人はウェザタイポートを全てそのマシンに行くように設定済み(のはず)。

で結果だが,タイトルまでは行くものの,そこからスタートできない。リターンを押しても反応なし。2 人対戦や,ローカル 4 人対戦では可能なので原因不明。で,とりあえず詳細ログを取り,解散。

いろいろ見ていると,どうやらユーザー情報(ハンデとか)を送る部分で止まっているらしい。これは ver1.0 のときはなかったので,あの頃はうまくいっていたというのも納得だ。詳しく言うと

IDirectPlay8::SendTo()

から返ってこないらしい。ので,その後のメッセージ交換が一切行われなくなるらしい。とりあえずこのユーザー情報送信部分を移動させ,回避するようにしてみた。

しかし,再び 3 人対戦でのテストをしなければならないので,直ったとは言えないのである。一人は帰省中だしなかなか難しい。LAN とかで再現してくれればすぐ解決できると思うんだけどなあ。