ロビーサーバ復旧完了。
Silverlight。TextBoxのスクロールできないのかな,と調べてみた結果,ScrollView ElementにTextBox Elementを入れればいいことが分かった。これにVerticalScrollBarVisibility="Auto",ScrollView.ScrollToVerticalOffsetを組み合わせれば一通りのことができる感じ。
ロビーサーバ復旧完了。
Silverlight。TextBoxのスクロールできないのかな,と調べてみた結果,ScrollView ElementにTextBox Elementを入れればいいことが分かった。これにVerticalScrollBarVisibility="Auto",ScrollView.ScrollToVerticalOffsetを組み合わせれば一通りのことができる感じ。
Silverlight版ロビーサーバをローカルではなくWebサーバ上に置いて実験してみた。でもロビーサーバに接続しようとするとAccessDeniedが返ってくる。Webで検索するとSilverlight 2 beta 1 and Socket Exception: Access Deniedというページに原因が書いてあった。どうもサーバのドメイン名の逆引きができないとダメらしい。まあIPアドレス指定すれば使えるから実験としてはいいか。Silverlightの正式版ではこの辺りの制限は緩くなるっぽいし,何か作って公開するまでには正式版が出てる,かなあ。
第1ロビーサーバが停止している間にロビーサーバの気になっていた箇所を修正している。Unicode正式対応とか英語化とかゲームごとにサーバを分離とか。なので第1サーバ自体が復旧してももうしばらく第2サーバをメインにしておくかも。
ロビーサーバ停止中。HDDが死んだらしい。OS入れ替えて設定して,ロビー動かして,になるので復旧はしばらく先。
Silverlightの実験として,ロビークライアントを作ってみる。Silverlight 2.0からは日本語入力とSocket通信がサポートされたので,なんとなくうまくいった。でも使用できるポートが4502-4532に制限されているので,そのままではウェザタイのロビーサーバには接続できない。まあSilverlightでネット対戦ゲームは作れそうってことで。
以下画面キャプチャ。IEの中でロビークライアントが動いている。ホントはぱじさんのFlashクライアントと同時接続して,JavaのサーバにC++/Flash/Silverlightクライアントから同時利用,というわけのわからない画面が欲しかったんだけどとりあえずここまで。
Silverlightの開発環境があまりに混沌としているのでメモ。以下を使えばSilverlight 2.0開発,実行が可能(必須ではないが)。
今やすっかりFlashの人になったぱじさんがロビークライアントFlash版を実験してた。私もSilverlight版を作ってみるかな。
ぱじさんの「これからは全世界対応だよね」という発言でチャットの文字コードをUnicodeにしたのだが,UTF-16だとうまくいかない。UTF-8だとうまくいく。どうやらFlashのバイナリソケットのUnicode書き込みはUTF-8にしか対応してないような感じ。ドキュメントにはUTF-16も使えるように書いてあるっぽいんだけどなぁ。
# ちなみに現状公開しているロビークライアントはSJISしか使えないが,実は非公開でUnicode対応版があって,私だけ使っている。公開するタイミングがない。
しばらく前から,VistaのMedia Centerでテレビ番組表のダウンロード成功率が悪くなっている。というか画面上は成功と出ているのだが番組表を見ると失敗している感じ。番組ガイドの設定で一から設定しなおすと,エラーコード13で失敗しているらしい。何度も繰り返すと成功するってことはサーバが混雑してる系なんだろうか。
だいぶ前からウェザタイの通信機能を再設計している。なんせウェザタイが使っているDirect Playは廃止が決まってるしIPv6対応予定もないし。ということで,どうせ互換性がなくなるならリプレイの分割とか途中ワード切り替えとか考えているのだが,いったいいつになるのか。
まあそれはおいておいて本題。P2Pのネット対戦の方式を自分で検討していると,今まで不思議だったDirect Playの挙動がよく分かる。今はもうないようだが,数年前,むなしいさんのウェザタイページに,私も知らないウェザタイの挙動が書いてあった。例えば,プライベートIPアドレスの人は1人なら混じっててもOKとかプライベートIPアドレスの人は2番目に入らないとダメ,とか。当時は理由が分からなかったが,今なら何となく分かる。
#簡単に今の憶測を書くと,4人対戦の場合,実は3人がホストになっていると思われる。というかP2Pの4人対戦だと,必然的に3人がポートを開かないと対戦ができないはず。で,DirectPlayの場合,2番目に入った人だけが本当のクライアント,つまり自分ではポートを開かず,他の人のポートにつなぎにいくだけ,になっているのだろう。つまりウェザタイのマニュアルとかFAQは少しウソが混じっているとも言えるわけだが,まあ今更ですよね。
TOD2。とりあえずVery Hardノーコンクリアまで頑張ったので満足。ラスボスで死ぬ瞬間にライフが増えたのが奇跡的。あとはネットランキングが開催されることを信じてドリルモードをやり混むか。っていっても遅いPCでありえない点数が出る問題がある限り無理か。
ザ・タイピング・オブ・ザ・デッド2。なかなかいい感じ。未だにドリームキャストが現役だったとは。
World Tester 1.3を公開。といっても新機能はほとんどなし。裏でちょこちょこやっていた外部仕様と関係ない修正が中心。Weather Typing もいろいろ修正はやっているのだが,公開できる状態にはなっていない。
Vista SP1インストール。特に問題なし。
昨日書いていたロビーから落とされる現象について。どうもファイルの入出力に時間がかかっていることが分かり,その辺を改善して,しばらく様子見。
様子見がてら,久々にロビーに入り浸ってみる。TOD2(サ・タイピング・オブ・ザ・デッド2)体験版の話題が多いのだが,スペックが足りない人が続出しているっぽい。多分ゲーマーにとっては当たり前のスペックなんだろうし,SEGAも普通のゲームと同じ感覚で作ってるんだと思うが,TOD2に関してはタイピング練習が目的の一般的なユーザも買うわけで,そこにずれが生じそう。製品版はどうなのだろう。
その他既にいろんなところで言われていると思うが,箇条書き。
#その後製品版でAlt+F2でドリルキャンセルできるのを確認。体験版はどうだったかなあ。
ロビー。1年くらい前から出ている,ロビーから落とされる現象を調査しているが,未だ原因分からず。とりあえずここにコードを載せてみる。いろいろ省略してるけど,イメージ的にはこんな感じ。ロビーのユーザ名とパスワードを管理するクラス。
public class LobbyTable { Map _users = new HashMap(); public LobbyTable() { // ファイルからユーザ名とパスワードを読み込んで_usersを初期化。 // 実装は省略 load(); } public synchronized boolean login(String name, String password) { if(_users.get(name) == null) { _users.put(name, password); // ファイルにユーザ名とパスワードを書き込む // 実装は省略 save(); } else { if(password.equals((String)_users.get(name))) { return true; } else { return false; } } } public synchronized void changePassword(String name, String password) { _users.put(name, password); // ファイルにユーザ名とパスワードを書き込む // 実装は省略 save(); } }
で,発生するエラーが以下。
java.lang.NullPointerException at Lobby.LobbyTable.changePassword (LobbyTable.java:91) …
HashMap.putの引数は2つともNULL可なのでnameとpasswordは関係ない。実際デバッグコードを入れてもNULLにはなっていない。java.util.HashMapのソースコードを見ても特にNullPointerExceptionが発生しそうなところはない。残るのは_usersがNULLの可能性だけだが…。同期処理で失敗して,っていうのが考えられそうだが,それだとsynchronizedMapを使えば解決するのかもしれない。でも原因が分からないまま変えるのも気持ち悪い。
発生確率はかなり低め。ロビーが混んでるときに起こりやすいかも知れない。Javaのすごい人からのツッコミを期待して…。
Visual Studio 2008 英語版を使用しているのだが,いつからか,日本語を入力すると,変換中の文字のフォントが小さくなるようになった。変換が確定すると普通の大きさになる。とりあえずVisual Studio 2008をImmSetCompositionFontでブレークしてみる,どうも本来はMSゴシックが使われるところが,メイリオが使われているっぽい。HKCUレジストリのVisual Studio 2008関連を削除しても直らないので,Vistaの何かの設定を見ているようだが…。原因不明。
何もネタがないのでMSDNネタ。Windows Server 2008が出た。日本語版も同時なので落としてみたいところだが,2.7GBはちょっと。にしても使用可能ライセンスが1500本になってるけどホントかなぁ。Vista Enterpriseは15ライセンスなんだけど…。
スキー場2日目。すごい吹雪。ふと手元を見ると雪の結晶が肉眼で見える。結晶は顕微鏡で見るものと思ってたのでちょっとびっくりしたが,フラクタルだからかあ,と思うと何となく納得した。どこまで大きく作れるんだろう。
掲示板にロビー不安定の報告が挙がっていたので,高速バスからロビーサーバ再起動を試みるが,SSHログインがなぜかできなかった。残念。
スキーの物理シミュレーションのため(なのか?)蔵王へ。ちゃんと摩擦で曲がるようにするのはなかなか大変そう。
Weather TypingのFAQだが,ふと読んでみると変な箇所が。「まず DHCP でプライベートアドレスを自動設定にしている場合は,手動設定にして IP アドレスを固定します。とりあえず現在設定されている IP アドレスに設定しておけばよいと思います。」いや,そりゃまずいだろう。勝手にDHCPのIPアドレス振っちゃったら他のPCとかぶってしまう。
Weather Typingのマニュアルも結構前に作ったものなので今見返すと結構変なことが書いてある。ということで次バージョンで全面見直しが必要か。って次っていつになるんだろう。
恒例のdenasu新年会。今後の方針を話し合う。ついでになぜかダーマ神殿を見学してみた。雰囲気が怖い。
実家へ帰る。わざわざ国際展示場を通過してみたのだが,いきなり満員電車になってすごかった。
ぱじさん作のFlashゲーム第2弾ができたということなのでリンクをはってみる。
World Testerは行列計算をDirectXを使っているのだが,そのせいで計算精度がfloat型になっている。そこでdouble型で計算したらどのくらい精度が上がるかを知りたくなったので行列とベクトルとクオータニオンを実装してみた。結果は結局あんまり変わらなかった。
せっかく作ったのだが速度が遅いのでやっぱりDirectX使用に戻すか,SSE2を使って速度を上げてみるか考えているところ。
Visual Studio 2008インストール完了。とりあえずβではビルドが通らなかったWorld Testerが通るようになっていた。
ダウンローダが使えないので自作ダウンローダを作って落とそうかと思っていたのだが,ようやくVisual Studio 2008が従来のダウンローダ(Microsoft File Transfer Manager)で落とせるようになったのでそっちで落とすことにした。こっちの動作は実績もあるし安心。
相変わらずMSDNネタ。Visual Studio 2008正式版のダウンロードが始まったのでダウンロードを始めてみたのだが,Akamai ダウンロードマネージャでしかダウンロードできない。このActiveX(Javaか?)コントロールの仕様が面白い。ダウンロード時のURLにセッションIDみたいのがついているのだが,セッションが切れると続きはダウンロードできない。このURLはダメとかいうエラーを出してそれまでにダウンロードしたファイルを消す。ネットで探してみると1GB落として消えたとか98%落として消えたとかいろいろと報告が挙がっている。FAQを見てもネットワークエラーが起きたら最初からやり直せとか書いてあるし。これはダウンローダなのだろうか。
MSDNダウンロードページにアクセスできない問題。MSのblogで修正完了の情報が。試してみたらアクセスできるようになっていた。今月末でVisual Studio 2008リリース(英語版のみ?)らしいのでなんとか間に合った感じ。
MSDNダウンロードページにアクセスできない問題。MSのblogによると今日明日にかけてメンテナンスがあって,11008エラー対策も入ると書いてある。いくつか想定原因があってその1つを直すとあるので直るのかわかんないけど。
MSから電話がきた。
質問:Microsoftの会員専用ダウンロードページが見えないんですけど。 回答:多分原因は分かりません。またいつか連絡するかも知れません。
さすがプロですね。
Nortonが期限0になる問題は,Symantecからテンプレメールが届いた。プロダクトキーのレジストリとファイルを削除し,サービスが起動するか確認し,再アクティブ化らしい。その回答が来る前に何度も再インストールして今は再現していないから試してないけど。
別件で,特定のSPAMでNortonが落ちる現象が最近多発している。というか結局メールのウイルスチェックをオフにしたので対策されたのかまだなのか分からないけど。
MSDNの方は回答がかなり適当。何ヶ月もダウンロードサイトにサインインできないって質問を書いたのだが,回答は「一時的に不安定だったと思うからもう一回やってみて」だった。何ヶ月も一時的に不安定なのかと。で,やっぱりサインインできないんですけど,と返信したら,環境の問題ぽいからキャッシュクリアしろとか他のマシンからアクセスしろとかいう回答が返ってきた。それは最初のメールでさんざんやって,環境の問題だと思ってる,って書いたじゃん。結局日本の事務局では何も分からないんだろうけど。
ちなみにMSDNのフォーラムにも報告があがってるけど結局解決はしてないみたい。FireFoxでやればいけるという噂もあるが,うちではうまくいかなかった。FireFoxでいけるんなら,「MSDNはIEに対応していないんですね」っていうメールを出せるのでそれはそれで面白かったんだけど。
Microsoftのダウンロードページから巨大なファイルをダウンロードしようとすると,ダウンロード マネージャ使う? ていうリンクがある。Vistaでこのダウンロード マネージャを使い,デスクトップにファイルをダウンロードしたのだが,ダウンロードしたファイルが見つからない。実行してみると仮想CDにマウントはできるので,どこかにあるはず。と思ってProcess Explorerでオープンハンドルを検索。結局以下の場所に見つかった。すごいパス。IEの保護モードで保存したファイルはここにあるっていうのは有名な話なのだろうか。
C:UsersusernameAppDataLocalMicrosoftWindowsTemporary Internet FilesVirtualizedCUsersusernameDesktop
「Visual Studio 2008 Beta 2」をインストールしてみた。Silverlight 1.1開発をやってみよう。てことで「Microsoft Silverlight Tools Alpha for Visual Studio 2008 Beta 2」をインストールしようとしたが,以下のエラーでインストールできない。
You must install Microsoft Visual Studio 2008 Beta 2 before installing this product.
結局Visual Studio 2008のVisual Web Developerを選択していなかったのが原因だったのだが,どうやって調査したかをメモしてみる。
テンポラリフォルダにあるSilverlight Toolsインストーラのログを見ると,CA_CheckVSカスタムアクションで失敗している。で,テンポラリフォルダに展開されたsilverlighttools_vs.msiをWindows SDKのorcaで開いてみると,CA_CheckVSはMSWAPP.DLLというファイルの存在(とバージョン)をチェックした結果,なければエラーメッセージを出すようになっている。そこでVisual Studio 2008のvs_setup.msiを同様にorcaで開いてみると,MSWAPP.DLLは「Visual Web Developer」機能に含まれていることが分かった。つまりVisual Web Developer機能を選択しないとSilverlight Toolsはインストールできない。てかVisual Web Developerが必須なんてどこにも(かどうかは分からないけど?)書いてないじゃん。
解決していないことをここに書いてもあんまり意味がないのだが,書いておく。進展したらまた書くってことで。
Norton Anti Virus 2008がいきなり期限切れになった。Nortonスレを見てみるとかなりの人で同じ現象が発生している模様。Norton 2007でも同じらしいし。Nortonアカウントに不思議な製品が登録されているのは何か関係あるのだろうか。てことでSymantecにメールしてみた。
#何度も消してインストールを4回くらい繰り返したらなんとなく直った。Nortonスレを見る感じではすぐ再発するらしいけど。
かなり前からMSDNのダウンロードページにアクセスできない。11008エラーになる。何かついでなのでこっちもMSに報告を出してみた。