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

明日から冬休み。この間にウェザタイのバグ修正と入力プラグインでも,って感じですかね。手始めにロビーの音が鳴ると落ちる現象を調査。どうもwaveOut系APIの使い方が間違っていたようで,複数の音が一度になるとまずかったらしい。これは修正完了したので開発版にアップしておいた。


ロビーを複数起動すると落ちる問題。これは手元のWin98では再現しない。Win98SEだけってのはあまり考えられないかなあ。


やっぱり年越しはロビーで,ってことで今日からロビーに入っているわけだが,WindowsCE版の需要が(ごく1部で)あったりで面白い。

久々に時間がとれたので一気に掲示板に返信を。しかし,もう少しさかのぼると解決していない問題がもっとありそうな気がする。一回書き込みを見直さないとダメそう。

先週は忙しくて日記ネタもなかったので何も書かずにいようかと思ってたけど,タイピングスレを見てちょっとだけ。

TODはカナとローマ字の記録が分かれていないというのが挙がっていたので,ウェザタイはどうだったっけと思って調べてみた。

ウェザタイの場合,入力方法とワードの組合せごとに最大50位まで,記録全体で最大1000位まで保存できる。よって,入力方法5種類をフルに使う場合,ワードが5種類以上になると下の記録が消えていくことになる。すると入力方法の1つが極端に点数が低い場合はその入力方法の記録が全て消えてしまうということになる。今のところ入力方法5種類をフルに使う人はそういないと思うが,これから入力方法プラグインで入力方法を増やしたら困る場合も出てくるか。

ちなみに,対戦履歴ファイルは全て残すことが重要だし自分で編集できるので保存数無制限にしてある。しかし成績ファイルはユーザが自分で中身の管理はできないからサイズ制限をかけざるをえない。プラグインサポートしたときは10000位くらいまでは残せるようにしようかな。

ワードサーバ,明らかに誤記または前半後半が間違っていると思われるものを直してみた。ワードサーバを始める前はもっとワードがグチャグチャになるかな,と思っていたが,実際に運用してみると割ときちんと登録してもらえているのでありがたい限り。ただ,明らかに登録者の意図とは違うな,とこちらで判断したものは予告なく修正させて頂きます。もし,元のままで間違ってないよ,というものがあればお知らせ下さい。

一般から募集する限り,ルールは最低限にして自由に作ってもらった方がいいという考えで,ワードの作り方は特にマニュアル明記していなかったのだが,1つだけ補足。

私とぱじ氏がウェザタイ用ワードを大量に作成したときの経験からいうと,前半ワードは後半に名詞がくることを前提に,後半ワードには名詞が来るようにすると,うまくワードがつながって面白いものができやすいです。今登録されているものだと,前半ワード「剣と魔法と」後半ワード「くま太郎」なんかがいい例ですね。この辺は次のバージョンのマニュアルに付記しておきます。

ローマ字入力のC。「し」の時に「SHI」を使うとうまくローマ字表記が出ないというバグがあった。で,それを直したものを開発版にアップした。しかし,今度は「C」を使用すると「しゃ」「しゅ」「しょ」のときに「CIXYA」「CIXYU」「CIXYO」と出るようになってしまった。ウェザタイのローマ字認識のやり方だとこれに対応するのはちょっと難しいので対応はもう少し先。

DvorakのCに対応した版を開発版にアップ。

ローマ字入力のCに対応した版を開発版にアップ。


Norton Anti Virus2004をダウンロードで購入。早速2002からバージョンアップしてみると,ウィルスメールをちゃんとはじいてくれる。2002では何故か反応してくれなかったのだ。まあプレビューすると反応してたからいいんだけど。

#でもHi-HOメール,近頃ウィルスとspamが大量にくるのだが,なんだろう。


ウェザタイテスト用に仮想PCソフトを入れようと思い,VMWareとVirtualPCを試してみる。VMWare上のWindows98では音声がとぎれがちになる以外は問題なく動いた。VirtualPCはもっと音がとぎれる感じ。ま,買うとしたらMicrosoft版VirtualPCが発売されてからか。

ローマ字入力のCの話。うちのATOK14の標準設定の立場は・・・というのはさておき,かなり使っている人がいるということで,CA CI CU CE CO かしくせこ? に対応しますか。今のウェザタイはバージョンが違ってもつながらなくなくことはないですし。この連休中かな。


で,気付いたが1.8をVectorに送るの忘れてた。既に2ヶ月だし開発版出してるし今更って感じだ。1.81にしてしまおうかな。

VS.NETでリモートデバッグを行う方法。

msvcmon.exe
ATL71.dll
MFC71.dll
msvcp71.dll
msvcr71.dll
msvci70.dll
debug.bat
DBGHELP.DLL
NatDbgDM.dll
NatDbgTLNet.dll
PSAPI.DLL

をリモートマシンに置いておく。でリモートマシン上でmsvcmon.exeを実行。

次にローカルマシンでプロジェクトのプロパティのデバッグでリモートデバッグを選択し,デバッグ対象の実行ファイルを選択。この実行ファイルはローカルとリモートで正確に同じ場所にする必要がある。

デバッグを実行するとリモートマシンでプロセスが立ち上がる。

リプレイファイルに関して修正したものを開発版にアップ。リプレイビューアでファイルが開けないという話はちょっと前にロビーで聞いていたのだが,なかなか調査もできなかった。で,今日試してみたところ,ファイル名にスペースが入ってる場合に失敗するのが分かったので修正してみた。

不具合とか要望とかそろそろ分からなくなってきたので整理しないと。

ウェザタイ開発版をアップ。プロキシサーバを指定できるようにした。今まで,ランキングアップロードやワードサーバにアクセスするためには,直接サーバへアクセスできる環境でなければならなかった。今回のバージョンでは,最初のダイアログの[プロキシサーバ]ボタンからプロキシサーバの設定を行えば,プロキシ接続でWebが閲覧できる環境ならサーバにアクセスできるようになった。LAN環境などで今まで不便だった方はどうぞ。


で,プロキシ認証をDeleGateで試していたので最低限の動作方法をメモ。

認証用のアカウント作成

delegated -Fauth -a mortarco:password denasu

プロキシサーバ起動

delegated -P8080 SERVER=http AUTH=proxy:pauth AUTHORIZER=denasu

HTTPクライアントを修正してみた。今までウェザタイで使っていたのは単にポート80でサーバにつなぐだけ,という実装だったのだが,今までの掲示板の書き込みなんかでもあったようにこれではさすがに機能不足。ということでプロキシサーバと認証に対応。これで例え学内・社内LANの中で新記録が出てもプロキシサーバ経由ですぐ記録が送れるはず。ただ開発版はもう少し調査してから。

これでHTTP1.1に対応できればいいんだけど,持続的接続とかチャンク形式とか一気に実装が難しくなる。


TOD2004ですか。「従来の常識では考えられない、滑らかな通信対戦」というのが気になるところ。ドリルモードの対戦てのは面白そう。とりあえず買っておくか。

1台のPCだけで対戦しよう,って需要はあるのだろうか。てのは置いておいて,DirectInputって複数キーボードの対応はしてなかったんだっけ。

久々に逆リンクをたどっていると,ワードファイルをURLで指定すると上から順に出題されるというようなことが書いてあった。なるほど。確かにそういう仕様になりますね。つまりストレンクスモード(って何だ)にしたい場合はワードをWeb上に置いてURLで指定すればよいと。但しワードの自動生成はできないよ,と。


掲示板のウェザタイ音楽再生の話。その後自分のマシンで試すとちゃんと再生されていた。Win98で試さないとダメかな。てところで止まっている。

ちょっと前からPocketPCのMSN Messengerにログインできないと思ったら,PC版も含めて古いバージョンのクライアントではログインできなくなったいたのか。独自のメッセンジャクライアントもダメになってしまうのだろうか。


サーバ問題についてはまた動きが出たのだが,前の時の例もあるのではっきりするまでは発表しない方針で。

ロビーとワードサーバに使っているサーバに再び危機が。時期的には11月中とのことだが,どうなっていくのか。

入力形式プラグインだが,よく考えてみると対戦時にそのプラグインを持っていないと対戦できない。解決策として,まず相手のマシンから勝手にダウンロードというのは危険すぎるので論外。DCOMでリモート呼び出しという話もあるが,速度的に厳しそうだしそこまでやるのもどうかと思うし。なかなか難しい。

26日の収録のメール。よく読んでなかったが,今読んでみると掲載の報告とある。返事しなくていいのね。じゃあいいや。

久々にはっぱさんとチャット。タイピングのクセを学習させて仮想CPUを作るにはどうすればいいかを聞いてみるとHMMとの答えが。勉強しなければならないのか。いや,きっとはっぱさんが作ってくれるだろう。

しばらく前に松4氏にウェザタイ 1.8 をやってみてもらったところ,リプレイが見られないとの話を聞いた。松4氏のことなので特に気にしてなかったが,今日ロビーで同じような話を聞いたので,ちゃんと調査を行うことにする。


今週 1 週間,ウェザタイの入力方式・仮想CPUプラグインを考えていたが,COM でやるには問題が。COM でプラグインを実現する場合,プラグインの DLL を個々にレジストリ登録,解除する必要がある。また,特定のインターフェースをサポートするオブジェクトを検索する手段は(全オブジェクトにQueryInterfaceする以外に)ないのでプラグインの GUID(CLSID)一覧をどこかに登録しなければならない。もちろんプラグインごとにインストーラを用意すればいいのだが,それば非現実的なので他の方法を考える。1 つ目の問題はプラグイン登録ツールか何かをこちらで用意すれば解決できそうだが,2 つ目の問題は何か工夫が必要。GetGUIDs メソッドを用意させるか別途テキストかなんかで用意するか。どうするのが一番いいのかな。それとも私が COM を知らないだけなのか。教えてはっぱさん。

ベタ DLL で作ればいいというのは…。つらい。


前回ウェザタイの紹介でロビーの画像を貼り付けていた雑誌(2003/06/07日記参照)からまた収録のメールが来ていた。当然のごとくver1.7。まあ断る理由もないので適当に返事を出しておこう。

# 後でちゃんと読んだら同じ雑誌ではなかった。出版社は同じだけど。

ウェザタイの入力方式と仮想 CPU をプラグインにしたいのだが,何で作ろうか迷っている。今 COM 勉強中なので COM にしたいけど,おおげさすぎだろうか。

松4氏が書いたC++コード。ちょっと変えてあるけど。

class A
{
public:
    void f();
};

void A::f()
{
    std::cout << "hello." << std::endl;
}

int main()
{
    A a = NULL;
    a->f();

 return 0;
}

一見 NULL Pointer Exception が発生しそうだが,VC でも GCC でも BCC でも通る。アセンブリレベルで見ると絶対アドレスで関数を呼んでいる。なので仮想関数だったりするとアウト。コンパイラ依存ぽいけど。

アイコンが上がったのでWeather Typing 1.8をアップしておいた。


VisualStudio.NET2003 になって,F4 キーで次のコンパイルエラーの場所にとぶのはどれなのか分からなかったのだが,F8 だというのが分かった。ビルドが F7 から CTRL+SHIFT+B になってたり,こういうのはあまり変えないで欲しいですね。VB がそうなのかなあ。

WeatherTyping,DLLを分離してロビーの方に試してもらったところ,重い現象はなくなったとのこと。というわけで正式に1.8として公開できそう。ぱじ氏からアイコンを提供してもらったら完成。

さて,1.8 で何が変わるのかというとあまり変わらないわけで。とりあえず

  • ワードクライアントが入ったバージョンを広めたい
  • DLL をいくつも配布するのは大変なので .NET2003 で統一したい
  • WeatherTyping ツールを一緒に配布したい
  • 1.7 から半年も経ってるし,そろそろバージョンアップしとこう

ということで一旦まとめようかという話。


そろそろ 2.0 問題が近づいてきた。すなわち,リビジョン番号は分かりにくいので致命的バグ以外では極力使わない作者としては,2.0 まであと 1.9 しかない。2.0 といえばメジャーバージョンアップだ。つまり,がらっと変えないと納得してもらえない。てことで 2.0 では結構変えるつもり。

2003/09/07のインストーラの話。よく見たらVS.NET2003が作成できるプロジェクトの中にインストーラプロジェクトがあった。これ使えばいいのか。でビルドしてみたら 2.5MB。うーむ。インストーラなし版も必要だからかなりプロバイダ領域を消費してしまう。やはり DLL だけパッケージを置いておくのが一番か。

ついでにいろいろ見ていると,C# 開発環境上で WindowsCE 用開発ができるようになっている。って VS2002 からあったのか知らないけど。さっそく試してみたがいい感じだ。iアプリは今更作る気しないので C# で PPC 開発をやろうかな。

WeatherTyping1.8 用にインストーラを調べた。昔 Microsoftさんが送ってきた VisualStudio Installer を使おうと思ってダウンロードしようとするが,VisualStudio6 のプロダクト ID を入れろと言われる。そんなのとっくにアンインストールしてるって。で,引き出しを調べると前送られた CD があったので入れようとしてみるが,ID を入れろと言われて断念。というわけで WindowsInstaller SDK をダウンロードしてみたが,何がなんだか。ネット上に(日本語の)情報もほとんどないし。一から調べないとだめか。

まっちーさんに触発されて COM の勉強を始める。『InsideCOM』を借りてきて読んでいるのだが,やっぱり Inside シリーズは詳しくていい感じ。といっても他は『InsideVisualC++ version5』しか読んでないけど。『InsideVisualC++ version5』の新しい版は出ない(出せない)のが残念。


本を読みながらロビーを覗く。どうも WeatherTyping1.7.2(相当)は対戦・動作が重いとの報告を受ける。.NET2002 から .NET2003 に変えたせいとは思えないので,やっぱりスタティックリンクが原因だろう。そうすると次バージョンは DLL 配布しかないか。DLL を付けたインストーラでの配布+DLL なしの圧縮ファイルという形式が一番か。

ワードサーバ。元々100ワードくらいはないと一般の人も登録しづらいと思って私とパジ氏で追加する予定だったが,ロビーの方達で100は超えたようで。この先とりあえずは私とパジ氏でワードを増やしていく予定なので,お気軽に追加して下さい。

昨日からの変化としては,ソート機能を付け加えた。検索機能も既に枠組みはあるので追加できるが,今のところ必要なさそうなので外してある。パラメータをごにょごにょっとやると検索できる,かも。

今後の展開としては,機能追加は置いておいて,一番重要なマニュアルを書かなければならない。特にウェザタイ用のワードの作り方は結構特殊なのでちゃんとした説明が必要だろう。


というところでそろそろ WeatherTyping1.8 にしたいところだが,目玉機能があまりない。半年かかってワードサーバ機能とDLL不要にしただけか。もっとこう,入力形式プラグインとか観戦機能とか付けたいところだが,結構大変。

ワードサーバを仮稼働させてみた。まだ機能的に不十分(検索とかソートとか)だが,一通りのことはできるはず。テストしてくれる方は,ワードサーバからワードを登録してみて下さい。ちなみに荒れるのを防止するためユーザ登録必須にしてあります。また,ふさわしくないワードが登録された場合もすぐ消します。

登録されたワードを使う側は,WeatherTyping開発版を落とし,ワードの選択欄から[公式ワードサーバ]を選択して下さい。


ロビーで「しぇ」を「SHE」で打てない,というのを聞いたので修正して開発版に置いておいた。のはいいんだけど,ついに Hi-HO の容量制限をオーバーしてしまったようなので,WeatherTyping1.6 は消しておいた。Internet Game Maker(IGM)などの関係で旧バージョンが欲しいという方は自分で用意するか,メールで連絡を。


ロビーでワードサーバを宣伝したところ,その場にいらした方がいくつか登録してくれた。こんな感じで一般の方も登録してみて下さい。ゆくゆくは他のタイピングソフト作者さんにワードサーバを使ってもらったり,他のプログラマさんがワードサーバ作ってくれたり,するといいなあ。

夏休み。てことで以前から動かないと言われ続けていた Windows + PHP + mySQL のシステム復帰を画策。メッセンジャでやりとりしつつ数時間。なんとか動くようになった。YN氏に感謝。結局動かなかった原因は,

  • データベーステーブル名の大文字小文字
  • php.ini の magic_quotes_gpc が ON になっていた

の 2 点。

Weather Typing を VS.NET2003 でビルド。

warning C4346: '...' : 依存名は型ではありません。

というエラーが出たのでヘルプで調べると,「依存名を型として扱う場合は typename キーワードが必要です。ISO C++ 標準に準拠するために行われた、Visual C++ .NET 2003 コンパイラでの互換性に影響する変更点」とのこと。というわけで『プログラミング言語C++第3版』で調べると確かにそんな仕様が書いてある。要するにテンプレート引数 template<class T> を使ったとき, T::x を使用したときにコンパイラがそれが型なのか関数なのか瞬時に判断できないので,型であることを知らせるために typename C::x としてくれという話。

ついでにライブラリを static にリンクして,DLL を落とさなくていいようにしようかと思い,static リンクに。しかし,いろいろなライブラリをリンクしているせいか,うまくいかない。最終的には全てのライブラリでランタイムライブラリの設定をマルチスレッド(/MT)にし,スタティック ライブラリで MFC を使用するにすることでビルドすることができた。結果,ファイルサイズもそれ程増えなかったので次のバージョンからはこれで配布する予定。これで DLL がなくて動かないという問題はなくなるはず。

というわけでテストも兼ねて開発版に VS.NET2003 でビルドしたバージョンを置いておいた。なんか使えないよ,って場合はご報告下さると非常にありがたいです。

# 機能的には何も変わってませんので…。


はっぱさんの日記で MSN Messanger6.0 の話があったので入れてみた。ログが XML で取れるようになったりその他いろいろ変わってたが,それより AirH" で安定動作するようになった気がする。前までは 2~3 分ほっておいたらいつのまにかサインアウトしていたが,そんなこともなくなったような。まあしばらく様子見。

ワードサーバ。ワードサーバ自体はだいたい完成しているのだが,どこのサーバに置くのよ,ってところで難航中。今日サーバ管理者に会おうかと思っていたが予定が合わず延期。