‘Weather Typing’のエントリ
引っ越しに備えて通信環境を整理。
まず @Niftyを解約。というかインターネット接続には使ってなくて,NIFTY-Serve を解約と言った方がピンとくる感じだが,ここ数ヶ月全く接続してなかったのでお引っ越しを機に。
次に今更なテレホも解約しなくては,と思って Web を見てみたけどネットからは申込みはできるけど解約はできないのかな。
Hi-HO は今までのように電話回線でつなげなくなるが,デナスのためにそのまま契約を残す方向で。まあその代わりに他の接続手段を用意してたりするわけだが。
あと denasu.to が使えなくなる関係上ミラーサーバとかサイト内検索が使えなくなる。ミラーサーバは既に更新してないからいいけど,検索はどうしよう。はっぱ氏サーバに置いておこうかな。あと denasu.to のメールアドレスとメーリングリストが使えなくなるのは結構痛い。
最後にロビーサーバ。そろそろ廃止の時期なわけだが,ここにきてデナス基地で新たな動きが。元々4~5月解散予定だったが,だらだらと存続するらしい。というわけでロビーもそっちに移転できるかな。移転と言ったり廃止と言ったりころころ変わってるが,まあそういう方向で。
ウインドウズROM!のタイピングソフト企画にウェザタイが掲載される予定になってたので本屋でその部分だけ確認。
プログラミング, コンピュータ Weather Typing
コメント・共有する
第2回WT大会が開催されるというのがありましたが,
3月第4週~4月第1週、午後10時~1時
というとロビーの休止or廃止or移転と完全にかぶってるわけで。ま,まあロビーがなくても大会できます,よね。
てなわけでロビー。サーバ管理者は3月中に常時接続不能な環境に引っ越すことが決定。さらに,高速回線を持つ denasu 基地については数ヶ月内の解散が既に決まっている。ちなみに私は 3 月終わりから 6 月くらいまでネット接続がかなり制限されると思われ,安定した後も常時接続固定 IP というのは無理な環境なのでサーバ運営は不可能。今残された可能性を模索中というかこのままだと 3 月中に廃止だろう。
サーバが復活することが決まっていればはっぱ氏のところへ移転も考えられるけど,denasu.to サーバの廃止が完全に決まった以上,永続移転になってしまうので,その辺はどうですかね>はっぱ氏
あとはサーバを公開して,ユーザーさんで(内輪で)ロビーサーバを立ててもらうくらいしかない。
ま,そんなところで。
プログラミング Weather Typing
コメント・共有する
昼間,ロビーを荒らしつつゾンビ部屋解明を行っていた。一応原因は判明。ロビーの仕様上1人が複数の部屋に入ることを許しているのだが,1人が同じ部屋に3回以上入った場合,部屋に残ってしまっていた。通常のロビークライアントを使っている分には問題が出ることはほとんどないはずだが,telnet で入って適切なデータを流したりタイミングが悪いとそういうことが起こるようだ。とりあえず明日ロビーを再起動して修正版にする予定。
プログラミング Weather Typing
コメント・共有する
開発版をアップ。とりあえず変更点は3つ。1つ目は昨日書いたロビーの検索機能。2つ目は本体側でウィンドウがアクティブでない場合,FPSを落とすように変更したこと。これは,ゲーム中にロビーなどでチャットしてるときに必要以上に重くならないようにするため。3つ目は本体側でゲーム中に速度と正確性を表示したこと。少々見づらいが,まあ表示方法はこれから深く考えるとして。
プログラミング Weather Typing
コメント・共有する
RedHat Linux。Apache,PostgreSQL は入っていたらしい。ので java だけインストールした。とりあえずロビーは動くようになった。
ロビークライアントに検索機能を付けてみた。というか ID_EDIT_FIND メニューアイテムを付けただけなのだが。まだ開発版アップはしていない。
プログラミング Weather Typing
コメント・共有する
まっちー氏が RichEdit を使ってエディタを作っていた。で,構文強調用に色を付けるとアンドゥで問題が出るとのこと。実際やってもらうと,文字挿入-色付けが別々の操作になっててアンドゥが確かに変。この辺は融通が利かないので結局最初から自分で作るしかないのかな。
ついでに RichEditView で作ると勝手に検索機能が付くことを教えてもらった。ロビークライアントにも検索機能付けようかな。
プログラミング Weather Typing
コメント・共有する
昼間ちょっとロビーを調査していて,実はパスワード関連がコンパイルされてなくてバグっていたことが判明し,急いでロビーを再起動しました。なので,17日から24日までにパスワードを変更した方は前のパスワードに戻っている可能性が高いのでご注意ください。
で,何を調査していたかというと,サーバをどこかへ移転したときのために転送量をしっかり測っておきたかったわけで。実際の結果を見るとかなり余裕って感じだった。
プログラミング Weather Typing
コメント・共有する
1日中ロビーの一斉落ち現象を解明していて,なんとか原因は判明し,修正完了。今回は(今更)負荷シミュレータを作ってテストしてみた。一応ローカルのテストでは50人程度が1秒に一回発言しても大丈夫だった。
で,今回の変更は少しでも早く反映したかったので1:52にロビーを再起動しました。
プログラミング Weather Typing
コメント・共有する
今週はいろいろあってメールも返信できなかったので,今日まとめて返信しました。ご了承下さい。
で,それにちょこっと関連して2/8の日記にロビーサーバ公開の話を書きましたが,あれはロビーサーバプログラムを公開したらロビーサーバが各所にできて,管理人はバージョンアップ以外ロビーサーバ管理・運営しなくていいかな,ってことです。
とはいえその場合問題が大量に思い浮かぶので,それを解決しないとできない。というわけでさすがに3月までというのは無理だろうけど。
プログラミング Weather Typing
コメント・共有する
WeatherTyping1.7 アップ完了。とりあえず,最後の開発版から変わったのはワード指定をちょっと便利にしたくらい。メールで要望下さった方ありがとうございます。後は背景をちょっといじったりランキングのアドレスを可変にしたり。ワードについてはパジさんから今回はパスとのことだったので追加なし。
VS.NET,Ctrl+F6でタブ切り替え。あ,なんか久々にメモ代わりに使った。
プログラミング Weather Typing
コメント・共有する
明日中にウェザタイを1.7にしようかと思う。
ロビーのお話。1月の日記で書いたが,ロビーサーバの管理者が引っ越す関係上,しばらくサーバが使えない事態が発生する。で,今日パジ氏と会ってその辺を話し合っていたのだが,当初の予定であった Denasu System 本拠地への一時退避というのは無理そう。あっちはあっちでいろいろと大変で,本拠地はもうすぐ閉鎖されるようだ。よって後は,はっぱ氏のサーバを間借りするか管理者のお引っ越し完了まで待つかなのだが,結構サーバ管理の負担も大きいし,引っ越し後にサーバが立てられるかというのもまだ未確定だったりするので,はっぱサーバに任せるのも気が引ける。今更レンタルサーバというのもイヤだし。
てなわけで今のところ可能性が一番高いのは3~6月のうち2~3ヶ月間ロビーが閉鎖するということで。で,この話日記に書いておいても誰も見てなさそう(シャドールームの悠木さんは見てくださってるようで話題にしていただきましたが)なのでロビーに行ってちょこっと告知しておいた。状況上偽物っぽい感じになってしまったが本人なので。ってここに書いても意味ないんだって。
プログラミング Weather Typing
コメント・共有する
久々に開発版をアップ。2/8までにバグ等でなければver1.7にします。一応変更点は,
- ロビー,無視リスト機能
- NICOLA,規格に近づくように修正
無視リストについては,もちろん荒らし対策。指定したハンドルの方の発言やログイン・ログアウトは無視される。サーバ側での対応に比べると甘めかも知れないが,作者側としてはクライアント側での対策でいくつもり。
NICOLAについては,親指スレを参考に,NICOLA企画書に合うように変更。具体的には同時打鍵判定時間を取り入れたのと,文字キーと親指キーが連続で押された場合,親指キーが一番近い文字キーとセットになるようにした。
プログラミング Weather Typing
コメント・共有する
ランキング。テルさんにロビーでテストしていただいたのだが,原因は分からず。HTTP ステータスコード 302 Found が出て,そこへリダイレクトしているのだが,どうもうまくいかない。RFC もっとちゃんと読まないとだめなのか。
親指シフトスレ。なかなか勉強になった。親指キーが独立したキーコードを出さない場合は WeatherTyping 側で対応するのは不可能っぽい(左右親指キーが無変換・変換キーのコードを出しているならば可能)。あと無変換・変換が効かないとかスペースに対応させるとおかしいというのは要調査か。一応自分の環境では動いているのだが。
基本的に作者が NICOLA レベル 2 なため,同時打鍵というものが正確に分かってない可能性が高いし,高速打鍵をした場合の動作も結構怪しい。なので,普段から NICOLA を使っている方が試してくれるのはかなりありがたい。どんどん意見を出してもらえれば可能な限り対応しますのでよろしく。
プログラミング Weather Typing
コメント・共有する
少し時間ができたので掲示板に挙がっている問題を修正。ランキングについては HTTP の Redirection に対応していなかったのが原因。ついでにとりあえず適当に作ってあった HTTP モジュールをもう少しちゃんと作り直した。
ロビーの二重起動については,一定時間で退席になる機能のための DLL において,ロビークライアントを 2 回起動すると 2 回キーボード・マウスフックをかけていたのが原因。1 度フックをかけたら 2 度目はかけないように修正。
denasu.to の話題。3 月にサーバ管理者の引っ越しがある。それに伴って denasu.to サーバも移転を考えなければならない。ロビーサーバ廃止は考えていないが,サーバ管理者の引っ越し先,Denasu System 本拠地のどちらかに移転することになるだろう。いずれにせよその間は長期間ロビーが使えなくなる(場合によっては数ヶ月とかかかるかも)。一時的にどこかへ移転して続けるかも知れないが,全くの未定。
で,裏で進んでるランキングサーブレット化計画とワードサーバ計画も中断。これができたら Ver1.7 にしようかと思ってたのだが,今実現させてもしばらく使えない。なので,今月か来月中旬辺りにはそのままVer1.7にしてしまう予定。まあマニュアルさえ更新できればすぐなんだけど。
プログラミング Weather Typing
コメント・共有する
ウェザタイ1.7とかランキングJSP化とか進めたいんだけど,本職(?)と,何故か購入したFlashMXが忙しくて全然更新してなかったりして。
タイピング関連のスレッドを見てて,ウェザタイ作者が書き込んでる? みたいなのがあった。一応私が書き込むとしたらここに書いた報告してると思うので。ま,どうでもいいですけど。
プログラミング Weather Typing
コメント・共有する
ロビーサーバを再起動しました。その場にいらっしゃった方,ご協力ありがとうございます。
でしばらくロビーにいたのだが,どうもWin98系で開発版を実行するとファイルダイアログ(参照ボタンを押したときのファイルを選ぶダイアログ)が出ないという報告を頂いた。
この辺は全くいじっていないので,コンパイラをVS.NETに変えたことが原因であることは明白。なのでとりあえずGoogleで検索してみるとずばり解決方法が載っている。詳しくは省くが,どうやらCFileDialogのコンストラクタの引数が増えていて,最後の引数をOSによって変えてやらなければならないらしい。この辺はMFCのソース(dlgfile.cpp)を参照。
早速修正したものを開発版にアップしておいた。しかしコンパイルし直しただけでこんなところが動かなくなると困ってしまう。
掲示板でのバグ報告。
時々Qwertyの時と同じ計算方法になっているようです。
こっちも.NETに変えたときに入り込んだバグだった。まあこっちは私がミスしただけなんだけど。
簡単にいうと,.NETはdoubleからintへの変換に警告を出してくれるようになったのだが,それを全部一気に直したときに,変なところでintにキャストしてしまったので入力形式の重みが全て1倍になってしまっていた。これも修正して開発版にアップしてある。
更新内容もかなりたまってきたしそろそろVer1.7にしようかな。
プログラミング Weather Typing
コメント・共有する
ロビー,スクロールバーが最下部になければスクロールしない機能がようやく実装完了。MFCを使用している場合,下のようなコードで OK と思われる。
// 元々選択されていた部分を保存
long org_start, org_end;
richEdit.GetSel(org_start, org_end);
// スタイルを変更するかどうか
bool modifyStyle = false;
// 変更前のスタイル
LONG style = ::GetWindowLong(richEdit.GetSafeHwnd(), GWL_STYLE);
// スクロールバーが存在
if((style & WS_VSCROLL) != 0)
{
// スクロール情報を取得
SCROLLINFO scrollInfo;
if(richEdit.GetScrollInfo(SB_VERT, &scrollInfo))
{
// 選択されているか,最終行でなければスタイルを変更する
if((org_start != org_end)
|| (scrollInfo.nPos < (scrollInfo.nMax - static_cast<int>(scrollInfo.nPage))))
{
modifyStyle = true;
}
}
}
if(modifyStyle)
{
// ECO_AUTOVSCROLL スタイルを解除する
richEdit.SetOptions(ECOOP_XOR, ECO_AUTOVSCROLL);
}
// カーソルを最後に持っていく
richEdit.SetSel(0x7ffffffe,0x7fffffff);
// 追加部分の開始位置を保存
long start_start, start_end;
richEdit.GetSel(start_start, start_end);
// メッセージを追加
richEdit.ReplaceSel(message);
// 追加部分の終了位置を保存
long end_start, end_end;
richEdit.GetSel(end_start, end_end);
// RichEdit 用フォントフォーマットを作成
CHARFORMAT2 format;
format.cbSize = sizeof(CHARFORMAT);
format.dwMask = CFM_COLOR | CFM_SIZE | CFM_FACE | CFM_BOLD | CFM_ITALIC;
format.yHeight = font_size;
format.dwEffects = (font_bold ? CFE_BOLD : 0) | (font_italic ? CFE_ITALIC : 0);
strcpy(format.szFaceName, font_name.c_str());
format.crTextColor = font_color;
// 追加文字を選択
richEdit.SetSel(start_start, end_start);
// フォントを設定
richEdit.SetSelectionCharFormat(format);
// 選択部分を元に戻す
if(org_start == org_end)
{
// 選択範囲がなければカレットを最後に置く
org_start = 0x7ffffffe;
org_end = 0x7fffffff;
}
richEdit.SetSel(org_start, org_end);
if(modifyStyle)
{
// ECO_AUTOVSCROLL スタイルを元に戻す
richEdit.SetOptions(ECOOP_OR, ECO_AUTOVSCROLL);
}
というところでロビークライアントをアップ。変更点は,
- 発言エディットボックスの自動水平スクロールを外し,俗に言う右端で折り返すようにする
- スクロールバーが一番下にない,もしくは選択がある場合は自動スクロールしないようにする
- ロビーに入るときのメッセージを表示
- 部屋入室メッセージを指定,表示できるようにする
- 新しいロビークライアントがあった場合,メッセージが出るようにする
- ゲームクライアントのバージョンを表示するようにする
ただし,上の2つ以外は明日辺りにロビーサーバを再起動した後有効になる。また,旧ロビークライアントでも接続出来るが,メッセージは表示されない。
プログラミング Weather Typing, Win32
コメント・共有する
denasu.toの回線増強計画が一応完了。パスワードが…で…だったり,何故か外部からつながらなくなったりと問題はあったが,今はなんとか動いてる模様。問題の速度はというと,どうなんだろう。来週のグッジョブで分かるかも。
TOD2003を購入。早くランキングが欲しい。
プログラミング Weather Typing
コメント・共有する
ロビーのスクロール拡張,つまり最終行にカーソルがなければ自動スクロールしないという機能のことだが,かなり難しい。メッセンジャーの挙動を調べたりしたのだが,フォーカスが消えたときにカーソルをあらかじめ下に持っていくとかスクロールする瞬間にスタイルを変えるとかは分かったのだが,そういう風に作ってもうまくいかないし。どうやればいいのか。
2002/11/12にちょっと触れた話。晋遊舎ムック「間違いだらけのパソコンソフト選び」という本にウェザタイが掲載されている。タイピングのページだけ読んだのだがよく分からなかった。
プログラミング Weather Typing
コメント・共有する
グッジョブ効果によりロビーも火曜日深夜は人が多い。で,ピークの42人は持ちこたえてたものの23:13:56から一斉落ち現象が発生し,どうにもならずロビーを再起動した。10日ほど前に多少改善してから結構安定してて,先週の火曜日の45人も持ちこたえてたのに残念。エラーログを見てると排他制御で行くはずのない場所に制御が行ってる気が。ともあれもう少し見直すか。
で,その後ロビーにいたのだが,ロビーのスクロールをなんとかせよとの要望が何人かから挙げられてたので考えてみるつもり。
リプレイ対戦。Win98で試したところ,通常のプレイで動かなかった。今の開発版では直ってますので昨日までにダウンロードした方で動かなかった方はお手数ですがもう一度ダウンロードして下さい。
プログラミング Weather Typing
コメント・共有する
TOD2003に対抗(?)して,Weather Typingにリプレイ対戦機能を追加。設定ダイアログで,[リプレイ]-[リプレイ対戦]にチェックを入れることで,リプレイデータと一緒にワードを打つことができる。対戦の練習としては今までもCPU戦があったが,これはあくまでシングルプレイの補助用の意味合いが強く,あまり対戦している気分はない。これに対してリプレイ対戦は,マルチプレイでの対人戦をかなりシミュレートできる。対戦したいけどロビーに行くのはちょっと,というような方はこれで対戦の面白さを知ってもらえるといいなあ,とか,あわよくばそのままロビーに来てみて欲しいなあ,とか。
注意事項
- あくまでリプレイなので,リプレイ上で対戦が始まれば自分も勝手に始まるし,全員がリタイアすれば自分も勝手にリタイアする。
- 何度も同じ文章で打てるので,ランキングには参加できない。
- 4人対戦リプレイと対戦する場合,幻の5人対戦になる。
- 対戦を行うたびに1人ずつ増えてしまうため,リプレイ対戦のリプレイはサポートしない。
ちなみにリプレイデータと対戦できるといっても,もちろんリプレイデータがなければ楽しめないわけで,できればいろんなところでいろんな人が自分のリプレイを公開してもらえると,初心者さんとかも楽しめていいなあ,と思うわけで。
いっそデナスサイト上でリプレイをアップロードできるシステムを作ろうかな。ちょうど今まで作ってたPHP+MySQLのファイル投稿システムも完成して,それを改造すればリプレイアップシステムにもなりそうだし。
プログラミング Weather Typing
コメント・共有する
なかなか凄かった。とりあえず今のロビーの回線で40人は耐えられることが分かったというか。
ちなみに回線高速化計画は進行中なのだが,サーバ管理者の都合上,12月になる予定。それでもうまくいくかは分からないのだが。それまでに高速化を前提としてロビークライアントを強化しようかな。いろいろたまってるし。
ところで昨日はウェザタイも収録されているフリーソフト関係のムックが発売予定だったのだが,出版社のページを見る限り…以下略。
TOD。バグが少なくなってランキングが新たに開催されてLAN対戦で同期が崩れなくなってたら買おうっと。
プログラミング Weather Typing
コメント・共有する
機能アップした開発版を,ロビーにいらした方に宣伝し,試してもらったりしたのだが,DLL ダウンロードについては概ね大丈夫そう。いざとなったらインストーラ付きを公開するという手もあるが,Hi-HO に置ける容量も限界があるので厳しい。
ロビーで出ていた話で,入力形式のプラグインというのがあった。とりあえず DLL を追加すると入力形式が増える,というのはやりたいのだが,こういうのは最初に仕様をちゃんとしないとすごいことになるので時間をかけたいところ。とはいえ入力形式部分はちょっと複雑で全ソース公開しないと作者以外にプラグイン作れない気がする。CPU対戦プラグイン化とかだったら仕様公開すれば楽に作れるかな。これを機にリファクタリングか。
というところで開発版の更新もたまってきたので,そろそろ WeatherTyping ver1.7 にしたいところなのだが,目玉機能が特にない。この状態だとわざわざダウンロードする人も少なそうなのでもうちょっと保留。
プログラミング Weather Typing
コメント・共有する
開発版をアップ。とりあえず .NET でコンパイルしたので,開発版のところに書いてあるように DLL を 3 つダウンロードしてください。一応ロビー関連でいくつか操作を改善してあるので,ロビーを使っている方は落としてみると少しは便利かも。
Windows100% のタイピングソフトのページにウェザタイを載せて頂いた。ありがとうございます。ところで,フリーソフトを載せている雑誌では作者の方に掲載誌を無料で配ったりしているのだが,これってメールで掲載ページだけ送ってもらうとかできないかなあ。掲載ページだけでいいんだけど1冊もらっとく,とか住所教えたくないから自分で買う,とか結構いそうだし。ま,全ページ分の作者が集まって1冊作っちゃうとコピーが氾濫するけど。
プログラミング Weather Typing
コメント・共有する
ウェザタイを VisualC++.NET でコンパイルしてみた。というわけで次期バージョンからは MFC70.dllとMSVCR70.dll が必要となる。一応 Denasu 内からダウンロードできるようにしておくつもりだけど。
.NET関連を含めていくつか箇条書きでメモ。
- 自動退席。WH_MOUSE グローバルフックをかけたとき,パケットを受信したときにも何故か WM_MOUSEMOVE が通知される。一応カーソル位置が同じなら無視するようにしておいた。
- MFC7.0 を使用すると RichEdit2.0 がそのまま使える。EM_AUTOURLDETECT メッセージをビューに投げると URL が検出され,SetEventMask(ENM_LINK) を設定しておくことで EN_LINK が通知される。
- 現在,XPで使用するとき用にXP用マニフェストファイルを配布しているが,次バージョンからはリソースに含めるのでダウンロードの必要はない。
- 最初,何回ビルドし直してもMFC42.libが開けないというエラーで失敗していた。原因はワークスペース(ソリューション?)に入ってなかったライブラリがリビルドされてなかったため。
- double->int へのキャストや int->unsigned int などのキャストに,デフォルトで警告が出るようになってて修正は結構めんどう。
- unsigned char,signed char で 128 以上の値があるとデバッガ上で 0 に見える。なんか設定があるのだろうか。
あと問題は Win98 系でちゃんと動くかってところか。
プログラミング Weather Typing
コメント・共有する
ロビー,自動退席機能をサポートしてみた。まだアップしてないけど。技術的にはグローバルフックを使ってキー・マウス入力をフックし,何秒入力されていないかを返す外部DLLを作成する,という感じ。ただ,MSNメッセンジャーとか見てもそれらしいものが見あたらないので,違う方法があるかも知れない。
ついでに,チャットウィンドウでURLがリンクになる機能のためにRichEdit2.0を使いたいのだが,MFCでRichEdit2.0を使うにはVisualC++.NET(MFC7.0)を使うのが一番楽。しかしVisualC++.NETを使ってしまうとMFC70.dll等をダウンロードしてもらわないといけないわけで,どうしよう。
プログラミング Weather Typing
コメント・共有する
久々にロビーに行ってみたら VRAM の話が。今まで書いてない気がするので一応ここにも書いておこう。ウェザタイの動作速度は VRAM の量にかなり左右される。そのため,「ウェザタイがどうも重い」という方は以下の順に試してみると動作が軽くなっていくはずである。ちなみにウェザタイの動作速度は,[設定]の[画面]-[FPSを表示する]をチェックすると確認できる。
- Windows の画面モードを16色にしてみる
- [設定]の[画面]-[背景]を[背景色]にしてみる
- [設定]の[画面]-[画面モード]を[フルスクリーン]にしてみる
以上の手順をやると,CPU が Pentium266 程度,VRAM が 2MB 程度のマシンでも FPSは最大の 60 までは出る。
まあ,対戦を行う場合はウィンドウモードじゃないとチャット等に不便だが,シングルモードならこの設定でも問題ない場合は多いと思う。
プログラミング Weather Typing
コメント・共有する
1ヶ月ぶりに開発版をアップ。ロビーでレベル10以上の場合,かなりの場合で正常に表示されないというバグ修正と,成績ファイルの書き出しで失敗した時にファイルが壊れてしまう可能性を少なくする。
C++ の stringstream をバイナリで使いたかったのだが,0 がくるとそこで切れてしまう。以前 Windows 用にメモリストリームも作ったのだが,Linux だとうまくいかない。で,strstream の方を使ってみたら何故かバイナリもうまくいく。そういう仕様なのだろうか。
プログラミング Weather Typing
コメント・共有する