‘Weather Typing’のエントリ

ウェザタイのアーカイブのサイズについて。今更気付いたのだが,title.png がやけにでかい。png なので圧縮済みの状態として,実行ファイルを圧縮したものに近い大きさになっている。これを例えば 150×150 256bpp とかのタイル画像とかにすれば全体のアーカイブが 1MB を切りそうである。今の時代でも 1MB を切るか切らないか,というのは結構ダウンロードのしやすさで違うような気はする。多分次のバージョンではそうすることにしようと思うのだが,どうでしょう>Pha-jtd氏。

あと掲示板とカウンタとランキングが重いというのもあるので,Hi-HO eva サーバが 03/11 から Perl5 に対応したのを機に見直すつもり。

ウェザタイ。使用ポートをデフォルトでは指定しないように変更する。今まではポートを指定して,ルータの設定がポート 1 つで OK になるようにしていたが,これによって 6073(ホスト),2302-2400(ホスト・クライアント)となる。

他の DirectPlay8 ネットワークゲームに合わせる意味と,4 人対戦が安定しないのが少しはよくなるか,ということで変更したんですが,今まで動いていてこれで動かなくなった場合,今までのようにポートを固定するオプションをチェックしてください。

今更だが Pha-jtd 氏がタイピングにはまりだしたらしい。今まで氏は本腰入れて練習してなかったからなあ。ということでまたワード作成してるらしいのでちょい期待。


トップページ,掲示板とランキングの最終更新日時を表示するようにする。ちょっとだけ重くなったかも知れないが,結構便利かも。

開発を数ヶ月停止とか言っておいてロビーサーバをちょこちょこと試したりしている。一応ロビーにつないで,チャットをして,ホストになって,接続する,という一連の作業はできたりしたのだが,問題がかなりいろいろあって,完成度を高める時間がない故,完成はおあずけ。そういえばワード作成ツールも作っているが,コピーアンドペーストとアンドゥ機能を付けるのが時間かかりそうでこっちもおあずけにしてたりする。ああ,作りたい。

# この機能が完成していれば例の大会(?)のような場合にも便利だったかな,って思いますが,どうなんでしょう。

denasu.to でウェザタイのロビーサーバを作ったらという話を Pha-jtd 氏とする。ロビーサーバ作成自体は面白そうなんだけど,需要ってあるのかなあ。需要がありすぎても denasu.to は回線が弱々なので無理だけど。

vector に ver1.5 が登録された。今回は割と早かったような。ちなみにこの間表示形式が変わったようで,新着順や人気順ランキングが見られるようになっている。


時代に逆行するようだが,ある事情で GIF の読み込みルーチンを作る。TIFF ライブラリについていたサンプルを真似してあっさり完成。しかし特許的にフリーソフト等に組み込むことはできない。残念。そういえば MNG って今どんな感じなんだろう。

ランキングにも登録して頂いてますが,シャドールームさんからのアクセスがすごいことになっている。他にも近頃,いろんなサイトで好意的に紹介頂いているようで,ありがとうございます。ってここに書いても誰も読まない気もするけど,作者がいろんなところに出没して宣伝するのもなんかうっとおしがられそうなのでここで挨拶に代えさせて頂きます。

# 上ので分かると思いますが,REFERER は取っているので,リンク頂いているページはだいたい見ております。

Weather Typing ver1.5 をアップ。これでバグ報告以外は開発を数ヶ月停止することになると思う。

ウェザタイ。Pha-jtd 氏と話していて,画面をもう少し凝ろうということに。少なくとも今のままではタイトルが適当すぎる。あと,プレイ履歴を保存出来るようにし,勝敗数・レベルなどを表示するようにして,バグがとれれば ver1.5 として公開出来るかも。

Vector を見ていて,ワード自動生成機能を持ったタイピングゲームを発見する。しかもウェザタイより公開が 2 ヶ月ほど早い。同じ事を考える人はいるのね。

#と思ったら 2001 年公開じゃなくて 2002 年公開かな? まあどっちでもよいですね。

Hi-HO が 3/11 から Perl5 に切り替わるらしい。これで少しきれいな CGI が作れるかも。


ウェザタイ。NICOLA の親指シフトをどのキーにするかを設定できるようにする。もし専用キーボードで反応すれば「専用キーボード対応」となるのだが,多分無理だろう。ハンデ中はフォーカス枠を出さないようにする。


検索が復活。

ルール拡張版を開発版にとりあえずアップ。今のところこのくらいはサポートできた。未サポートのものとして,

  • 1着から一定時間は打てる機能
  • 規定ワードで終了機能

がある。

「1着から一定時間は打てる機能」は,作っていて正確な時間がどうやっても得られないのが分かり保留。対戦なので全員がぴったり同じ時計を使わないと同期が崩れてしまうわけだが,誰の時計を使ったとしてもその人が有利になってしまうのは避けられない。

「規定ワードで終了機能」は実装したものの,ルールが分かりづらくなりすぎるのでやめた。とりあえず「30点終了・1ワード1点」にしたものと機能がかぶってしまうし。

起動オプション「/single」はシングルプレイの起動が遅いため。ネットワーク系統を初期化しなければかなり起動は早くなるのだ。リプレイファイル指定は,関連づけすれば.wrダブルクリックで再生ができるようになった。

ランキングの表示を変えてみる。前のようにワードごとにランキングを表示すると,ワードファイルを増やすとワケが分からなくなるという理由なのだが,少しは分かりやすくなったのだろうか。

データベースが使えるともう少し凝った処理ができるのだが,Hi-HO + Perl ではめんどいのでこのくらいで。

ウェザタイのランキング。作者が何もしていなくても更新してくれる方がいてくれるのが非常にありがたい。また開発続けようかな,って気になってくるわけだが,やっぱりこの時期はどうにも忙しいわけで。とりあえず NICOLA の設定を直したら Vector にもう 1 度メール出してみようかなあ。

Vector にウェザタイ Ver1.4 のメールを送ったのだが,3週間近くたっても登録されない。登録されてから開発版を上げていこうと思っていたのだが…。まあいいや。


Netmeeting リモートデスクトップを使う。XP リモートデスクトップじゃないのは Win2000(Mebius)をサーバにしたいため。

conf.exe で Netmeeting を設定

適当にサーバを設定

適当にクライアントを設定

でつながった。ちょっと重いけどまあなんとか。

一通りのテストが終わったのでネットワーク対戦タイピングソフト Weather Typing Ver1.4を公開。

ウェザタイ開発版を更新。本当は ver1.4 にしたかったのだが,割と大きく変更してしまったので一応。変更内容は,

対戦中・自分の打つ行が 1 番上に来るようにする。
おびらんさん他からの要望。一番下の人がどうしても不利になるってことで。
タイトルにバージョン情報を表示。
バージョン確認ダイアログが表示出来ないため。
かな入力時,問題文が全角の場合の処理を変更。
例えば NICOLA で全角の「?」は右シフト+「1」,半角の「?」はシフト+「/」など。
トータルポイントを常に表示するように変更。
画面右下に常にトータルポイントを表示し,常に更新するようにする。
対戦ルールをワード数のみとし,勝敗を「N ワード打ったときのトータルポイント」で決めるように変更。
ルールがわかりづらいのと,勝敗をトータルポイントで決めた方がよい,ということでこのようにしてみた。

話題(?)のツールをウェザタイで使ってみるが,なんかうまくいかなかった。


とりあえずやっとドキュメントが整ったので,Weather Typing ver1.4 公開準備中。

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

ウェザタイ,実行ファイルの削減について。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 を使わずに自分で書く,または,ソースコードにテーブルを書かずに,リソースファイルみたいな形式で持たせる,というのを今のところ考え中。

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

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

ふうう。この 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 人対戦以上の場合のパケットを解析中。