‘プログラミング’のエントリ

ウェザタイのポート。やはり混乱しそうなので,デフォルトは今まで通りってことで。デフォルトでうまく対戦できる場合はそのままで,4人対戦などができない場合は全員が「ポートを指定しない」オプションにすると対戦できるようになるかも知れない,程度に考えてください。


音を鳴らさないオプション。DirectMusic 初期化エラーの応急処置なわけだが,音源がないマシンなどでも動くようになるという副作用もあるので,解決してもこのまま残しておくと思う。


掲示板に書いたのでこっちも。ウェザータイピング大会というのが行われているようで。リンクはしない方がいいのかな。ウェザタイの楽しみ方の究極形はやっぱり大会だと思うので,というかリプレイなんかはそのために作ったようなものだったりするので,こういう企画は嬉しい。で,大会で問題となるのは,参加者集めと個々のユーザの環境整備だと思うが,私にはこの 2 つとも大変なので自分で企画するのは思いとどまっていたりして。ともあれ応援してます。

ウェザタイがもっとあらゆる環境で安定すればもっとスムーズにいくんでしょうが,その点は申し訳ありません。まあ,いろんな環境でのバグ報告が来るというのはソフトが広まっている証拠と言えなくもないので喜ぶべきかも知れませんね。

ウェザタイのアーカイブのサイズについて。今更気付いたのだが,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 の親指シフトをどのキーにするかを設定できるようにする。もし専用キーボードで反応すれば「専用キーボード対応」となるのだが,多分無理だろう。ハンデ中はフォーカス枠を出さないようにする。


検索が復活。

k.f 氏に教えてもらった terrarium をやってみる。これは植物・草食動物・肉食動物による生態系シミュレーションなのだが,動植物の振る舞いを .NET 対応言語で記述出来る。さらにP2Pでネットワークにつながっていて,自分の作った動植物を世界中に広めることができる。とりあえず何も作らずに30分程つなげていただけでかなりの動植物がやってきて勝手に生態系を作っていた。早いとこ C# でも勉強して自分のキャラクターを広めていきたい。

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

  • 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 人対戦については実際にテストしないと分からないが,直っているといいなあ。

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

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

現役引退した 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 つはバグなのか仕様変更なのか分からないが,せめて動作を選べるようにオプションを用意して欲しかった。(実はあるのか?)

ウェザタイ,実行ファイルの削減について。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 を呼び出す。但し,きちんと点滅させるにはタイマー等を用いなければならない。