ウェザタイ。やっぱり接続できない。
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 対応。とりあえずトップページと,掲示板,ウェザタイランキングだけ対応した。
WAP は Hi-HO が text/x-hdml に対応していなかった(はず)ため,index.hdml を表示できず,非対応。まあ CGI だけならできそうだが。
と思ったが,Hi-HO は .htaccess に対応しているらしい。
AddType text/x-hdml;charset=Shift_JIS .hdml
と書いておくことで,シミュレータから見ることができた。
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 とかで再現してくれればすぐ解決できると思うんだけどなあ。
Windows98 を Windows2000 に本格移行。PCMCIA モデムカードと合わせて,かなり快適になった。何よりエクスプローラが軽くなったのがすごくいい感じ。あとは DirectX 開発時にそうそう落ちなくなったとか,Win98 では終了しなくなっていたアプリケーションを強制終了させられるとか,恩恵は計り知れない。
手順をメモ。但し以下の手順で失敗しても責任は取れないのでご了承を。
- Win98 で Win2000 インストーラを起動。
- Win2000 では使用できないソフトが…とか言われてもとりあえず無視。
- 再起動後,最初の画面で F5 を押し,「Standard PC」を選択(これをしないとブルースクリーンで落ちる)。
- HD チェックを何回もしたり NTFS にしたりで数回再起動。
- Win2000 の画面で最後の設定というのが 1 時間以上。
- 自動認識しなかった & 使えないデバイスを設定(ディスプレイドライバは昨日の日記参照。16550 ことモデムは使えないので PCMCIA カードを使用)。
- DirectX 等,Win2000 用に再セットアップ。
以上で OK。上書きセットアップでも何の問題もなくセットアップできた。これでメビウスの寿命が 1 年くらい延びたかなあ。
ついに Mebius MN-390-X26 に Windows2000 をインストールすることに成功した。いままで考えられる手段を片っ端から試していたが,どうしてもディスプレイドライバ(Trident Cyber9388)で,「このデバイスが使用できる空きリソースが不足しています。(コード12)」というエラーが出ていたのだ。もちろんリソースを見ても,「競合なし」になっていて,問題はないはずなのである。また,このドライバも Windows2000 に入っているものなので,対応しているはず,というかこれで使えている機種も存在するようである。
で,今回試したのは,NT 用の Trident Video Accelerator Ver4.5034 というドライバである。(何故か富士通のページからダウンロードした。)もちろん通常 NT 用のドライバは Windows2000 で使えるわけがないというのは分かっているが,いろいろ検索すると(別機種で)結構それで使えてる人がいるらしい。で,大昔に Mebius MN-390-X26 用として SHARP から配布されている NT 用ディスプレイドライバを試したのだが,起動時にブルースクリーンでだめだった。のであきらめていたのだが,今回このドライバで試したところ,動いたのだ。DirectDraw も問題ない。もちろん理由はさっぱり分からない。
とりあえずディスプレイドライバさえ動けば,USB もオーディオデバイスも,モデムカード(内蔵のは認識しないので PC カードのを買った。ソフトウェアモデムに比べるとかなり快適)も,全部 OK なので,本格的に移行することができる(今は昔使ってた HD に入れ替えてインストールしている)。これでやっとウェザタイのデバッグをする度に再起動という悪夢から逃れられ,開発効率もあがる。万歳。
って言っても近頃学校が忙しくて開発できないけど。
# 一応入手法だが,2002/12/08現在,Google で[Trident Cyber9388 v4.5034]をキーワードにして探すと出てくる。いつまで残っているかは分からないが。
ウェザタイ,ワード送信機能を搭載した版を開発版に公開。Pha-jtd さんによると「夢の機能」だそうだ。氏は ver1.0 の時からこの機能を欲しがっていたのである。今までは,自分でワードを作った場合,相手にあらかじめメール等で送り,同じファイルを使ってもらわなければならず,非常にめんどうだった。で,今回の機能によって,自分のマシンに入れておけば自動で相手側にも反映されるようになる,ということである。
ちょっと試してみたが,自分の知らないワードが出てくるのはなかなか新鮮でいい感じだった。
ウェザタイにワード送信機能を搭載する。これは問題文章として,各プレイヤーのワードを順々に出題していくものだが,かなりプログラムを変更したので,少し安定するまで開発版には載せないでおく。
これを含めて安定したら,マニュアル等を整備して v1.3 公開にしようという感じ。ランキングに参加できる版を早く正式公開したいというのがあるので。
ウェザタイ(長いのでこれから略してこう言います)のおかげで毎日日記に書くことがあっていいなあ。
昨日 Hi-HO でランキング CGI のテストしてたら,数十秒反応がなくなって,hoge.pl.core を吐いて復活した。Hi-HO には内緒。だいたいうちの CGI も,昔に作った効率の悪いものなので本格運用に耐えられるのかちょっと心配。サーバに負荷かけまくってる気もするし。Hi-HO で,Perl じゃなくて使い慣れた C++ か Servlet が使えればもっと効率のよい & 安全な & 携帯でも使えるとか,そんなのが作れるのだが。
知り合いのサーバに移転するか,Pha-jtd さんがサーバ立てるのを待とうか,Perl CGI を構築し直すか検討中。
すごいバグを発見。今まで,画面を初期化するときは背景を読んで書き直す,画面全体を書き直すだけのとき(モード変更時等)は背景サーフェスから転送,としていたのだが,この条件分岐が間違っていた。ので,画面全体を書き直すときも,背景画像を読んで初期化していた。今まで,たかが 1 画面書き直すになんでこんなに時間がかかるのかずっと不思議だったが,こういうことだった。
で,これをなおしたらゲーム開始時や終了時も早くなって,「背景画像なし」モードも「背景色」モードもあまり変わらない速度になってしまった。今まで画面の再描画が遅いせいで対戦に負けていた人すみませんでした,って感じである。
まあ,背景色モードも,仕事中にやるときなどに役立つので一応残しておく。
お詫び(?)にランキング表示時にもう少し詳しい情報と,スクロールして多くの情報を表示するようにした。
掲示板に出ていた 3 人対戦の話。確認したいんだけど開発者が全然つかまらない。ここ読んでたら連絡欲しいなあ。まあみんな忙しいからしょうがないんだけど。
(Hi-HO じゃないアカウントでの)メールが 1485 通来る。携帯に転送してたらどうなってたことか。とりあえずメールボックスごとリネームして見なかったことにしておく。
Weather Typing。フルスクリーン時に Alt+TAB で最小化したのを戻す際,DirectDrawSurface7::Restore() を使っていたが,タイミングによっては失敗することが判明。どうやら画面モードが戻る前に Restore してしまっていたらしい。とりあえず成功するまでやってみることにした。こんなのでいいのかなぁ。
ネットランキング。段々人が増えてきてありがたい限り。そろそろデータを消すわけにもいかなくなってきたので,正式公開とします。アップロードのしかたをちゃんと書かねば。
Weather Typing ネットランキングを仮公開。やっぱりランキングがあると面白い,ということでネットランキングを作ってみた。
詳しくはWeather Typingのページを見てもらうとして,ここでは技術的なことを。
登録方法としては,CGI を使ってみた。専用のアップローダーが Hi-HO の Web サーバにつないでデータを送信する,といった感じ。
一応利点としては,
- 自動的にアップしてくれるからユーザー,管理者共に楽。
- CGI ならば Hi-HO で可能。
で,欠点は,
- 自動的にアップしてしまうから,陰でユーザー情報を送信しているかも知れないという不安がどうしてもある(だろう)。
- ユーザー数が多くなると,Hi-HO に負担を掛ける。
というのがある。一応送信している情報は,タイピング情報と IP アドレスだけなので安心して欲しい,というしかない。ネットワークに流れる情報を全て監視するソフトとかあれば確認できるかも。
Weather Typing 開発版。
- ウィンドウのサイズが微妙にずれていて,拡大・縮小するようになっていた。これを直したので,ウィンドウモードでは多少早くなった & 見やすくなったと思う。
- FPS の表示を 10 回計測毎の平均値に変更。
- ハイスコアデータを大幅に変更。今までのハイスコアは消えるが,今後ネットランキングをするようになったら,このデータで参加できるようにしようと思う。(但しまだ開発中なので,また変更するかも知れません。)
Denasu System ページ全体をリニューアル。とりあえず今の私にはこれが限界。一応前の状態より幾分良くなったはず。
GANGAS – Type Well Fanさんから Weather Typing を紹介してもらいました。ありがとうございます(ってこんなところに書いても誰も気付かないけど)。ここのサイトは,私が今ほぼ毎日やっている「タイプウェル」というタイピングソフトのページですが,参加者のレベルが高すぎてなかなかついていけません。頑張らねば。
参考までに私が普段プレーしているタイピングソフトについて。
- The Typing of The Dead PC 版(ゾンビ打)
- 少し前に学校のマシンで毎日やっていたソフト。学校ではやりにくい状態になったのと自宅のメビウスでは起動しないために,現在は休止中。言うまでもないのですが,Weather Typing はこのソフトの影響をかなり受けています。
- タイプウェル
- 英語のタイピング練習のために始めたソフト。現在はこればっかりやってます。
- 美佳のタイプトレーナ
- これも英語のタイピング練習のために始めたソフト。英語の文章を長々と打ち込めるのがよいです。
- Weather Typing
- 一応。近頃は周りの人が対戦しようと言ってこないので 1 人で練習中。
あとは市場調査と銘打って適当にネットでタイピングゲームを探してきてはプレイしてますが,なかなかずっとやり続けてるソフトはないですね。
Pha-jtd さんとの話し合いの結果,ウェブサイトをもう少し派手に改装することに決定。というか今が地味すぎなのだが。
とここに書いておけばあきらめずにやるかな,ってことで。
サポート掲示板を公開。Denasu System 開発ソフトに関して語り合う場所,ということだが,果たして一般の人からの書き込みはあるのだろうか。実は掲示板に関しては,昔に作って 2 年ぐらいそれなりにやっていたが,最後まで身内しか発言しなかったので,閉鎖したという経歴があるのだ。
まあ盛り上がるまでは気長に Pha-jtd 氏と Weather Typing のことを話していこうと思う。
もちろんこの日記への意見や感想等も歓迎なので,気が向いたら書き込んでやって下さい。
Weather Typing1.2 をアップ。もう少し機能追加する予定だったが,諸事情により忙しくなっているので今までの分をアップし,しばらく凍結。多分 7 月になったらまた作り始める,と思う。
K.F 氏に,IE で Alt+(右,左)を押すと前のページ,次のページへ行けるというのを教えてもらう。これは便利。ちなみに BackSpace は何故か知っていた。
ファイルダイアログ。最初のディレクトリがカレントディレクトリの時とそうでないときがある。これは,*.bmp 等のフィルタをかけてある場合,実際に *.bmp のファイルがある場合はカレントディレクトリ,ない場合はそれ以外になるらしい。
CFileDialog::m_ofn::lpstrInitialDir にディレクトリを指定すればそのディレクトリで表示される。
Weather Typing 1.11 をアップ。「ん」と「っ」が連続している問題の修正のみ。今後は新機能をどんどん追加していくので,次の正式バージョンアップはかなり先になると思う。
Pha-jtd 氏の家にて Weather Typing をコンパイルしてみる。しかし,ワークスペースが開けず,VC が落ちてしまう。で,「サービスパックは?」と聞くと,なんだか分からない仕草をしていた。つまりサービスパックを入れていなかったわけだが,本人曰く,「サービスパックなんていうのがあることを教えてくれていたら入れてたのに。そんな当たり前のこと誰も教えてくれなかったからぁ。」ということで,Pha-jtd 氏の手元にずっとあった C マガ付属のサービスパックを入れ,無事にワークスペースが開けた。
「絶対他に知らない人いるよ」という Pha-jtd 氏の言葉を受け,ここに書いてみた。
Weather Typing。「ん」と「っ」が連続しているとき,ローマ字がおかしくなるバグを発見。修正し,開発版においておく。まあ付属のワードにはそんなのは出てこないので発見する人はあまりいないと思う。
#ちなみに TOD ワードを打ち込んだものを試していて発見した。
Weather Typing。一回 Pha-jtd 氏に Win95 での動作を確認してもらって「Win95 対応」としたのだが,Pha-jtd 氏の家にて対戦を試してみると動作しない。Pha-jtd 氏のマシンのせいなのかなんかのか分からないが,とりあえずもう 1 度非対応ということにしておく。
Weather Typing。背景・ワードを Pha-jtd 氏にちょっと変更してもらい,これまでの変更・修正を含めたVer1.1を公開。
Weather Typing。ワードを打ち終わったとき,両方同時に打ち終わると,両方とも点数が入る,仕様だったのだが,そうなっていなかった。のでそうなるように修正。まあこのせいで最後に出る完了ワード数が 10/20 vs 13/20 のように全員足すと合計を越えてしまうのだが,仕方がない。一応これで全プレイヤーが同条件になった。
というところでそろそろ新たに変更した点も含めて安定化してきたので,ver1.1 に正式バージョンアップしようと思う。後はタイピングスピードが各プレイヤーで同じ値になるようにしたら,公開する予定。
ほとんど毎日デバッグにつきあってくれている Pja-jtd 氏に感謝。
フリーソフトのページによくあるご質問を公開。とりあえず DLL をダウンロードできるようにしておいた。
Weather Typing の変更点をまとめて。
タイピングスピード測定だが,単位は(ローマ字)/(分)。つまり 1 分間にどれだけアルファベットを打ったか,としている。ちなみに私の場合正確性を 97~98% くらいに心がけたときで 430 くらいだった。
この速度,ローカルマシン上で計算しているので,相手に表示される数値と自分に表示される数値は異なる。さらに,遅延が大きいと一瞬でたくさんの文字が送られるため,恐るべき高速度になったり,逆に全然文字が送られてこなくて恐るべき低速度になったりする。将来的にはローカルで測定したスピードを他の相手に送るようにしようかと思っているが,今のところ電話回線を用いた対戦では信用できない。
現在の正式版では,
- 相手が文字列を打ち終わる
- 自分は文字列の途中で次の文字列へ問題が進んでしまった
場合,前の文字列での入力が次の文字列に持ち越されてしまい,その文字が偶然次の文字列の最初の文字と重なってしまうと,ミス入力になってしまう。
これは,LAN 対戦のような遅延の少ない環境だと,次の文字列を打ってしまったことが自分で分かるのでまだいい。しかし,遅延が大きい場合は,画面上は先行入力で打ち終わっているのに,実際には打ち終わってなく,入力が次の問題に持ち越されるので何故ミスになったか分からなくなる,ということになってしまう。(分かりにくくてすみません)
そのため,現在は
- 次の問題へ行ったときに,その時点で先行入力を完了し送信待ちになっている文字を破棄する
- 問題の最初で一定時間の待ち時間を用意し,その間は入力ができないようにする
という処理を行い,回避することにした(現在の開発版)。
ハンデ機能については,ハンデを指定したプレイヤーは最初に一定時間入力ができなくなる,という感じにしてある。基本的にはハンデ 1 に対し 0.4 秒くらいのハンデタイムになっていて,問題が短いと短く,問題が長いと長く,というようになっている。
Alt+Tab については,Win98(フルスクリーンモード)+ DirectX(Input?)では何故か Alt+Tab でのタスク切り替えができなかったので自分で最小化するようにした。Win2000 では問題なく Alt+Tab が効くし,Win98 でもウィンドウモードでは効くので,何故 Win98 フルスクリーンモードだけ効かないのかは分からない。