2011年12月31日土曜日

日本No.1の頭脳王で回答者の扱いが酷かった

「日本No.1の頭脳王!大決定戦!!」というTV番組を見ました。 その回答者の扱いが酷かったですね。 名前の表示が、氏名の代わりに製作スタッフが用意したキャッチコピーになってました。 名札もキャッチコピーが大きな文字で氏名は小さ目。 呼ばれるときも必ずキャッチコピー付き。 なんか、TV番組が用意した最初の問題が「オレ達アンタらをこういう扱いしかしないけど、頭いいなら何とかしてごらんよ」であるかのように見えて仕方がありませんでした。 見始めて5分あたりから「馬鹿にされてるぞ。アンタら、馬鹿にされてるぞ。」と心の中で繰り返してました。

ゲストの芸能人の太鼓持ちも徹底してましたね。 見え透きすぎていて、やはり馬鹿にしているようにしか聞こえません。 回答者が不憫でした。 まぁ、実力のある回答者からしてみたら、視聴者からどう思われようがマイナスにはならないんでしょうけど。

2011年12月17日土曜日

アメリカのラジオでのテレビゲームの扱い

作業をするときのBGMとして何か聞きたかったのでアメリカのインターネットラジオ「NPR」を聞いてました。 時間は20時のちょっと前くらいです。 何を言っているのかは全く分からず。 まぁ、「音が聞こえればいいや」ってのと「言葉が分かってしまうと逆に作業の邪魔」ってことでの視聴です。

英語は全く分からないんですが、ポツポツと聞き覚えのある単語が出てきました。 「Dance dance revolution」とかって言ってますね。 どうやらゲームの話題のようです。

日本のメディアでは「ゲームは不健全」っていう昔の価値観が残っていて、報道で出てきたとしても1歩引いた扱いになります。 「アメリカだとどうなるのかなぁ」と思い、作業の手を止めてちょっとだけ音に注意を払ってみると、パーソナリティのオッサンがどや声で「Skyrim」と言ってました。 「オイオイあんたそのゲームやってるのか」と。

アメリカではそういう扱いなんですねぇ。 日本では無いです。 数十年後にポスト小倉さん的な人がゲームの紹介するようにとか、なるんでしょうか?

ちなみに、小倉さんの公式ブログをちょっと見てみたら投稿タイトルに「スカイリム」の文字が!? と思ったら「スカイハイ」の読み間違いでした。 野球の話題だったようです。

2011年12月13日火曜日

.net framework : 指定バイトでアライメントされたバッファを作る

[StructLayout(LayoutKind.Sequential, Pack = 16)] でいいかと思ったらダメでした。 MSDNライブラリによると「各フィールドが構造体の先頭を基準に整列されます」だそうです。

アライメント分だけ多めにバッファを作って、オフセットを計算して使うしか無さそうですね。 こんな感じかな?

byte[] buffer = new byte[size + byteAlignment];
UInt64 p = (UInt64)buffer;
offset = byteAlignment - (int)(p % (UInt64)byteAlignment);
if (offset == byteAlignment)
    offset = 0;

マネージコードでbyte配列を作っただけだとガベージコレクタの都合でバッファが移動されることがあります。 そうなるとズレて最初のアライメントが無駄になってしまいます。 それを防ぐためにGCHandleでバッファをロックし続ける...というのは止めた方が良さそうな予感がします。 ライフサイクルが長いバッファをロックし続けるとメモリの使用効率が落ちるケースがあるからです。

2011年12月10日土曜日

wpf : 色んな形式の画像ファイルをPbgra32形式に変換してWriteableBitmapに読み込む

色んな形式の画像ファイルをPbgra32形式に変換してWriteableBitmapに読み込むコードのサンプルです。 まず、BitmapDecoderを使ってそのままの形式で画像ファイルを読み込み、FormatConvertedBitmapでPbgra32形式に変換します。

private WriteableBitmap LoadBitmap(string path)
{
    using (FileStream stream = new FileStream(
        path,
        FileMode.Open,
        FileAccess.Read,
        FileShare.ReadWrite | FileShare.Delete) ) // ロックしない
    {
        BitmapDecoder decoder = BitmapDecoder.Create(
            stream,
            BitmapCreateOptions.IgnoreImageCache, // キャッシュしない
            BitmapCacheOption.Default
        );

        FormatConvertedBitmap bmpSrc = new FormatConvertedBitmap(
            decoder.Frames[0],
            PixelFormats.Pbgra32,
            null,
            0
        );

        return new WriteableBitmap(bmpSrc);
    }
}

2011年12月6日火曜日

PS3にPS1のコントローラを接続

「PS3用のレバーを持ってないからPS3の格闘ゲームに手を出しにくいなぁ」などと考えている今日この頃、動画配信サイトでチャットしてたら偶然PS3にPS1のコントローラを接続する方法を知りました。 このようなPS1→USB変換コネクタを使うだけで良いようです。

検索したら普通にあるし。 こういうのを使えばPS3用のレバーを買わなくても良さそうです。 PSボタンが無いのを気にしなければ古い変換コネクタでもOK。 PS1のレバーも変換コネクタも持っているので「ゲームソフトを買うか買わないか?」っていうだけになりました。

少し考えたら、PS3のコントローラはUSBとBluetoothなんだから、PCで使えるのがPS3で使えてもおかしくないんですよね。 「家庭用ゲーム機のコントローラは専用品」っていうふうに刷り込まれてたので、それに考えが至りませんでした。

実際にPCに挿しているコントローラを変換コネクタごと引っこ抜いてPS3に挿したら、ボタン配置は入れ替わっていたけど普通に動きました。 ボタンの入れ替わり方は、