2008年2月のエントリ

Vista SP1インストール。特に問題なし。

昨日書いていたロビーから落とされる現象について。どうもファイルの入出力に時間がかかっていることが分かり,その辺を改善して,しばらく様子見。


様子見がてら,久々にロビーに入り浸ってみる。TOD2(サ・タイピング・オブ・ザ・デッド2)体験版の話題が多いのだが,スペックが足りない人が続出しているっぽい。多分ゲーマーにとっては当たり前のスペックなんだろうし,SEGAも普通のゲームと同じ感覚で作ってるんだと思うが,TOD2に関してはタイピング練習が目的の一般的なユーザも買うわけで,そこにずれが生じそう。製品版はどうなのだろう。

その他既にいろんなところで言われていると思うが,箇条書き。

  • Loadingが長い。家のノート(Core2 Duo 2GHz/NVIDIA GeForce 7950 GTX 512MB)だと37秒。ゲームが始まってしまえば快適なのだが,ドリルが一回終わる度にLoadingが必要なのでめんどくさい。
  • ドリルの途中キャンセルができない
  • 他のノート(Core2 Duo 1GHz/945GMS Express)だとカクカク。まあオンボードだからそれでもいいんだが,スペックが遅いとゲーム内時間も遅くなって,とんでもなくいい結果が出る。これだとネット偏差値とかとっても意味ない気が。

#その後製品版で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ライセンスなんだけど…。