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

スマートボールとビリヤードをやってきた。というか物理シミュレーションのために観察してきたというか。


物理シミュレーションって結局は現実世界で現実世界をエミュレーションしようとしているわけで,ファミコンでファミコンエミュを作ってるような感じがしてある意味不毛なんだけど,ボールの重さが1つ1つ違うビリヤードはどうなるのかとか現実とはちょっと違うことを試せるのは十分価値があると思った。

Dependancy Walkerをずっと使っていたが,Profile機能があるという情報を4号に聞いた。4号も昨日知ったらしいけど。フックを行って使っている関数を監視する。

しばらく書きためていたインストーラについてのTipsを公開してみた。ま,とりあえず置いておけば後で役立つかな的な感覚で。

円盤をサポート。まだ当たり判定が地面とだけだけど。

で,今日の不思議。10円玉を指ではじいて回転させるデモを作ってみたが,最後に直立してしまう。バグってるぽい気もするが,まっちーさんがいうには10円玉は完全な円盤ではないからじゃないか? とのこと。本来なら直立するのが正しいのだろうか。

もう一つ。回転が遅くなってくると机上を旋回し始める。これは以前のボーリング理論でいうと,回転が遅くなることで回転軸が斜めになって曲がってしまう,のか?

うーむ。まだすっきりしない。4号と相談してみよう。

ペンチ型の物体(下図)を無重力で回転させる。これはなかなか感動的な動きをするので是非宇宙船をチャーターしてやってみてもらいたい。まあ,ネット上に動画があるので最悪それでもいいかも。とりあえずPC上で再現できたのでOK。

2005082901

 

静止画なのが残念。Direct3Dを動画で保存してGIFアニメにできればいいんだけど…。

複合物体のサポート。上下に大小の球を配置したオブジェクトを作ってひょうたん型に。この物体を逆さまにして回転させるとひょうたんがコマに。下部に重りを付けると起き上がり小法師に。てな具体でだいぶ表現力が向上した。

2005082601

夏休み。

前半は物理シミュレーションの高速化をやっていた。今まで衝突判定のスピードを考えず,直方体なら面6つと点8つに分解して「面と点」など汎用的な処理にしていた。で,それだと直方体4つくらいで10FPSまで落ちてしまったので,結局「直方体と床」とか「直方体と球」とか個別に判定するようにして,なんとか直方体15個で30FPSくらいまでにはなった。まだ遅いような気はするけど。

後半はサーブレットとJSPの勉強。仕事とも趣味とも全く関係ないけど,やっぱり広く浅く知るには試験勉強でしょ,ってことでSUNの試験を申し込んでいる。ぷよSUNが懐かしい。

あれ,夏休みに読み切る予定だったハリーポッターが10ページしか進んでない…。

物理シミュレーションはサイコロ+球までは再現できるようになった。そろそろ重くなってきたのでスピードを気にしていかないと。

実装していると物理の勉強では不思議に感じなかったことが不思議に感じてくる。とりあえずメモ。

  • 静止摩擦と動摩擦は係数が違うだけだと思っていたが,静止摩擦は力と反対方向,動摩擦は相対速度と反対方向という違いがある
  • 摩擦力は接する面積に関わらず一定。静止摩擦は垂直抗力に比例するが,動摩擦は速度に関わらず一定
  • 球が転がっている場合,地面に接している点は相対速度0なので普通の動摩擦は発生しない。この場合,地面と球の変形などで転がり摩擦という別の力が発生する(と考える)
  • 例えばボーリングなどで,地面と垂直の軸に沿って回転をかけた場合,前方に転がしてもカーブはしない。ボーリングの場合,投げる方向とその横向きに回転がかかるからカーブする

Darren ShanのDemonata(Lord Loss)を読み終わった。次は買ったけど積んであったハリーポッターだけど,電車で読むためにはまた上中下に分ける必要がありそうな分厚さ。

どうやらウェザタイで何か動きがある模様。ここで書いてもいいのかなあ。

物理シミュレーションはドミノが倒れるところまでできてきた。但し倒れる際にめり込んでしまうのだが。

2005071001

白いのが主人公で悪のドミノをなぎ倒すゲーム。なのか?

まっちーさんに触発されてゴールデンウィーク辺りから物理シミュレーションの勉強中。てことでウェザタイの開発は全然やってないのでこの日記もあまり更新してなかったりする。

表示部分は,3Dシューティングを作ろうとしていたときのソースがあるのでそれを流用。ようやくサイコロが転がるくらいまできた。問題はこれで何を作るかということだが。とりあえず前からやりたかったドミノ倒しでも作ってみますか。

先週あるつてでVisual Studio2005セミナーに行ってきた。2002-2003のマイナーアップデートとは違っていろいろ変わっている。気になるところでは

  • .NET Compact Framework2.0
  • プロファイラ復活
  • リファクタリング,ユニットテスト支援
  • VSS2005
  • Team System

実際にβ2を入れてみたが,重い以外はなかなかいい感じ。

PocketPC2003 SEエミュレータでLobby for PPCを動かしてみた。最初に古いバージョンとかの警告が出る以外は動作に問題はなさそう。ちなみにVGAで動かすと,文字が大きいだけでちゃんとフルスクリーンで動作している。LandscapeやSquareにするとスクロールバーが出ているのがちょっと変だけど。

ロビーサーバは5/3の早朝,復活した模様。原因の詳細は聞いていないのでよく分からないのだが,電源が落ちていた,のかな。


PocketPC版ロビークライアントを公開。ほとんど自分で使うためのものだけど,もしかしたら誰か必要としているかも知れないので公開。

2005050301


そのうちちゃんとしたドキュメントは書くつもりだけど,以下開発メモ。

  • 動作環境はPocketPC2002またはPocketPC2003搭載機。といってもVGA機とかだとウィンドウがちっちゃいとか問題あると思う。
  • なお,PocketPC2002についてはVS.NETのエミュレータの動作確認のみで,実機で動かしたことはない。
  • 制限事項1。チャット部分はユーザが編集できる。これはTextBoxをReadOnlyにすると背景色が変わってしまうのと,背景色を変えられなかったためだが,将来バージョンの.NET Compact Frameworkでなんとかなることを期待してそのまま。
  • 制限事項2。発言があった場合必ず一番下までスクロールする。本当はスクロールバーの位置を見てスクロールするか判断するべきだが,やり方が見つかってない。
  • 制限事項3。メンバ一覧とチャット部分の仕切りは移動できない。これも将来の.NET Compact Frameworkに期待。
  • 制限事項4。状態の変更は未サポート。
  • 制限事項5。メンバ毎の発言色は未サポート。

どうもbeanfan.comにつながらない。管理者連絡待ち。

というところで急遽マトゥ氏管理の第2ロビーサーバを昇格させてみたのだが,どうも動きがおかしい。ソースを見ていると,排他制御が変な部分があって,既存のメンバのメッセージが到着しないと新規メンバが参加できないという状況だった。beanfan.comではある程度切れ目無くメッセージが届いていたということか。とにかくその部分は修正し,稼働中という状態。

.NET Compact Framework。いろいろと制限はあるものの少しずつロビークライアントを実装してみる。以下開発メモ。

とりあえずTips的なものはMSのFAQが詳しい。


Visual Studio.NET 2003にはPocket PC 2002エミュレータというのが付属していて,VirtualPCっぽい感じ(というか提供元Connectixってなってるし同じものなんだろうけど)で使いやすいのだが,以下の設定でつまづく。

  • ホールドどうやってやるんだろう,と悩んでいたのだが,ホールド開始までが長いだけだった。かなりの時間押しっぱなしにしないと認識されない。
  • 実際に使う機会は少ないと思うが,ホストキーがデフォルトで右Altになっている。家のノートには右Altなんてないのでどうしようかと思っていたらVisual Studioの[ツール]-[オプション]の「デバイスツール」で設定できた。

HttpWebRequestでWebサーバにアクセスすると「チャンクの長さは無効です。」というエラーが表示される。これは.NET Compact Framework最新版では直っているようなので.NET Framework 1.0 SP3をダウンロードし,ファイル共有経由でnetcf.core.ppc3.x86.cabをエミュレータに配置して実行。


4号(誰)情報によると,.NETでは他のスレッドにメッセージを投げるとうまくいかないということでInvokeを使うらしいわけだが,.NET Compact Frameworkでは引数を付けてInvokeを呼べないという制限がある。で,スレッド上でのメソッド パラメータの呼び出しに載っているControlInvokerを使った。

ロビーの緊急待避モードの拡張を行う。とりあえず緊急待避モード時はタスクトレイに入るようにする。以前電卓を作ったときは意識していなかったが,Explorerを再起動したときにタスクバーからアイコンが消えるのは何とかならないかなあ,と検索してみる。IE4.0以上がインストールされているときはExplorerが再起動したときにTaskbarCreatedユーザメッセージが送られるとのことなのでそのタイミングでアイコンを再登録すればいいらしい。

ついでに緊急待避モードは今のままではウィンドウがアクティブの時にしかできないので,ウィンドウが隠れているときでもきくようにホットキーを設定できるようにする。制限事項として,他のアプリケーションと競合したらだめってのがあるが,とりあえずかぶらないようにして下さいというしかないのかな。

ロビーを荒らしながらPocketPC版ロビークライアント開発。LAN経由でネットにつなげられるようになっていないのでデバッグがめんどいながらも,サーバにつないでチャットするだけはできた。

2005041001

 

実際ここからがめんどいんだけど・・・。


ロビーでの要望。

  • ロビーは現状SJISでサーバへ送っているので表現できない文字がある。ちなみにローカルのリッチエディットには送信前の文字列を入れているのでローカルには表示される。
  • ロビークライアント背景色の指定。

掲示板にも書いたが,しばらくPC環境のない場所へ行ってしまう。PocketPC+AirEDGEがあればある程度のことはできるが,それにも限界があるわけで。ま,しばらく様子見。ちなみに,最長で5月という噂。

それに先駆けていろいろと整理。しばらくメールがサーバにたまってしまうので,デナスのページから作者のメールアドレスを消した。今まではランキングのパスワード変更とか雑誌の掲載時とかの連絡用にメールアドレスを公開していたが,1日に50通くらい来るしウィルス付きだったりするので,しばらく削除しないとHi-HOのメールサーバがいっぱいになってしまう。これでどのくらいSPAMが減るのだろうか。

うーむ,こんなことなら早いところPocketPC用ロビーでも作っておくべきだったか。

Weather Typing 2.0.1を公開。修正点は以下の2点。リビジョンアップなので基本的にバグ修正のみ。

  • リプレイ対戦ができない問題を修正
  • リプレイビューア,リプレイファイルが表示されない場合がある問題を修正

なお,WeatherTyping.exe自体は開発版で公開していた物とほぼ同じ(バージョン情報のみ違う)なので,既に開発版を使っていてリプレイビューアを使っていない方はダウンロードし直す必要はありません。

掲示板の,「リプレイビューアで総時間が0になる」問題。リプレイファイルが複数あり,旧バージョンが新バージョンよりも位置的に前にある場合に発生する。かなり以前から存在した問題のはず。てことで,リプレイ対戦の問題も含めて今日か明日中には2.0.1として正式版として公開する予定。

Vectorからウェザタイ2のダウンロード数が来た。ちなみにウェザタイ2の場合,Vectorのダウンロード数は全ダウンロード数の約30%ほどなので,デナスからのダウンロードをVectorへのリンクにすると3倍以上のダウンロード数になるわけだ。ま,やらないけど。

Cマガを立ち読みしてて,DirectPlayが今後なくなる予定だということを知った。とりあえず原文は…ってことで以下に書かれている。DirectX 9.0 SDK Update – (December 2004)1月以上前の情報ですね。ウェザタイはどうしよう。今後のDirectXでもランタイムは使えるんだろうけど,開発用ヘッダやライブラリが付いてこないというのはもう諦めろってことですか。次回バージョンではWinSockで書き直すのか…かなりめんどい。

MSDN オペレーティングシステムのDVD 10枚が送られて来た。っていってもOSは2003と2000サーバ以外元々正規のものが手元にあったのであんまり意味はないんだけど。てことでWindows2003でActive Directoryを使ったサーバ構築をしてみた。いろいろ日記ネタができるかと思ってたけど本を参照しながらだったので割とすんなり完了。

3連休。ウェザタイのテストという名目でずっとVirtualPCにOSのインストールをしていた。とりあえずWin95/98/Me/2k/XP/2003では動作することを確認。ちなみにダメなのはWin3.1/NT。


掲示板で報告されているが,ウェザタイ2.0でリプレイ対戦ができないというバグがあった。どうやら2.0.0.0から1.8.9相当にロールバックしたときに戻し忘れた部分があったせいらしい。とりあえず影響はリプレイ対戦のみであり,正式版だと2MB以上をまたダウンロードしてもらわなければならないため,正式版とはせず開発版とした。

やっぱり年越しはロビーなのでロビーへ。そして,今年中にウェザタイを2.0にするという目標があったので開発版をそのままWeatherTyping2.0として正式公開。

ロビーサーバは今のところbeanfan.comで動いている模様。管理者情報によるともう1回引っ越しがあるようなのでそのときはまた停止することになると思う。

で,ロビーサーバ休止中に運営しようとしていた仮サーバ。マトゥ氏に作業をしてもらったのだが,どうもつながったりつながらなかったりでそうこうしているうちに本サーバが復旧してしまったのでとりあえず第2サーバとして残している。


DELLから電源ケーブルが届いたので交換。


2つ目のMSDN契約。どういう扱いなんだろう。

ロビー停止中,かな。情報によるとサーバPC破損との噂。本人から聞いてないのでよく分からないけど。てことで一時的にマトゥサーバを間借りしようと思っているのだが,早くJava入れてアカウントください>マトゥ氏って段階。

12/19-12/26まで開発版として公開していたWeatherTyping2.0(ファイルバージョン2.0.0.0)だが,どうも過去バージョンとの互換性が完全に取れないことが判明。これを直すには過去バージョンとの互換性を切る必要があるのだが,どうせ互換性を切るなら次バージョンでプロトコル自体を新規に設計し直したい。そこで,以下のように方針を決定。

WeatherTyping2.0はファイルバージョン1.8.9.1+バグ修正のみとしました。2.0.0.0は破棄とし,2.0.0.1を公開しましたので,2.0.0.0を使っている方は申し訳ありませんが2.0.0.1にして下さい。

  • 2.0.0.0は他のバージョンと互換性がないので正常に対戦ができません。
  • 2.0.0.0で作成したリプレイは他のバージョンでは再生できません。

おそらくこれで特に問題がなければそのままWeatherTyping2.0正式版になると思われる。


その他修正。ロビーのタスクバー点滅をOFFにするオプションを追加。

品質向上その2。特定条件においてワードがプレイヤーごとに違うものになる場合があるのを修正。って結構致命的な気が。まあこの条件が揃うことはあまりないとは思うけど。

品質向上その1。ロビーサーバから強制切断されたときにもう一度ログインするとフリーズする現象を修正。LeaveCriticalSectionを呼びすぎていた。