2009/11/23

DRMなんて嫌いだ・・・

気がついたら
以前ダウンロードした音楽ファイルや
Windows Media Player で、
DRMのエラーが起こってた。

とうも、こないだマザーボードを交換したのが原因の様子。
DRMはハードウェアの構成情報を元にライセンスが
管理されているらしい。
で、
CPUとかマザーボードを変更したせいで
以前のライセンスがすべて無効になった、と。
システムドライブを交換したときは大丈夫だったのに・・・?

まぁ、とりあえず今回は何とかなったけど、
こういう時ってDRMはとにかく邪魔でしかないな・・・。

2009/11/22

テクスチャとGLSL入門の本



たぶん、
「床井研究室」 http://marina.sys.wakayama-u.ac.jp/~tokoi/
で掲載されている内容を書籍化したものだと思います。

いつも参考にさせていただいているサイトだし、
本屋で見かけたので買ってみた。
ちなみに、「入門2」とついているとおり、前編も出版されています。

Chapter 1 ~ 27 は固定機能を使った
テクスチャの基本と応用、
残りのChapter 28 ~ 36 がGLSLを使った
シェーダの基本と応用、
という感じの内容。

WEBサイトのほうをみての通り、
読みやすく丁寧に解説されてます。

OpenGLの基本的なことはある程度わかってきて
これからシェーダに手を出してみようかというのには
ちょうどいいかと。

2009/11/15

OpenTK 1.0 beta-1

OpenTK 1.0 beta-1が公開されたみたい。

どれ、ちょっくらみてみますかな・・・。

2009/11/12

マザーボードを交換してみた

そろそろ Pentium D ってのもいかがなものかな、という気がしてきたので、
思い切ってCPUとマザーボードを自分で交換してみることに。
最初はCore2 Quad あたりにしようかと思っていたが、
Core i7 シリーズの新しいのが発売されているようなので、
せっかくなのでそっちにしてみた。

CPU : Core i7 860
マザー : GIGABYTE P55M-UD2
メモリ : 1GB 1333MHz x2

グラフィックカードは前から使ってる
ASUSのGeForce 8600GTをそのまま。

おっかなびっくりCPUをセットしたりとかしながら、
なんとか無事に組み込みは完了。

電源系をつなぎ直して、
いよいよ電源ON。
ちゃんと起動画面が表示され、起動も無事に・・・
と思ったら、
ハードウェアの大きな変更が検出されたとかで
Windowsのライセンス承認が要求された。
この時点ではLANがまだ使えないようでネットに接続できず、
電話で10分ほど自動音声とやりとりするはめに・・・。
まぁ、それもなんとか終わり、
ドライバのインストールなんかもわりとすんなり完了。

で、再起動・・・。
起動するたびに、起動中にAHCIを有効にするかY/Nと聞かれるので
試しにYにしてみたら起動中に落ちて、セーフモードも起動しない状態に・・・。
よくわからんがYにしてはいけなかったらしい。
BIOSで「Integrated Peripherals」 - 「SATA RAID/AHCI Mode」
がAHCIになってたのでDisableにもどしたら、ちゃんと起動するようになった。

CUPが8スレッドも扱えるようになったし、
.NET Framework も近々4.0で
並列プログラミングのための機能が追加されるらしいし、
そのうちマルチスレッドでなにか遊んでみるのも面白そうかも。

2009/10/12

BinaryFormatterにアセンブリバージョンを無視させる

シリアル化、逆シリアル化に使われる
BinaryFormatterクラスについて。

どうやら、
逆シリアル化するときに
BinaryFormatter.AssemblyFormatプロパティに
FormatterAssemblyStyle.Simpleを設定しても、
ちゃんと機能してくれない(アセンブリバージョンの違いなどを無視してくれない)
といバグがあるらしい。
特に、ジェネリックなクラスを逆シリアル化する場合に
この現象が起こるっぽい。

回避策としては、
BinnaryFormatter.Binderプロパティに、
SerializationBinder抽象クラスを実装した自作のクラスのインスタンスを設定する
というのが有効のようだ。

で、
SerializationBinderクラスの実装方法。

実装すべきは
Type BindToType( string assemblyName, string typeName )
というメソッドひとつのみ。
名前通りアセンブリ名と型名が引数として渡されるので、
アセンブリバージョンを無視したいなら
return Type.GetType( typeName );
とすればいいんじゃない?
と、思うところだが、そうはいかない場合がある。

ジェネリッククラス(または構造体)の場合、
typeNameには、例えば
List<BinaryFormatterTest.Hoge>
を逆シリアル化するときには、こんな感じの文字列がはいってくる。

System.Collections.Generic.List`1[[BinaryFormatterTest.Hoge, BinaryFormatterTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ef4f1793c250e8fa]]


つまり、型パラメータにアセンブリの厳密名が入ってしまっている。
これを
Type.GetType( typeName );
とすると、
VersionやCulture、PublicKeyTokenがすべて一致するアセンブリが
見つからない場合、例外がスローされる。
なので、アセンブリバージョンとかを無視させたいなら、
Type.GetType()にtypeNameを渡す前に
どうにかしてtypeNameの文字列中から型パラメータの
Versionやらなんやらの文字列を強引に削除しないといけない。

で、以下、そのサンプルコード。
結構、強引にやってますが、なんとかうまくいくみたい。
バグがあったらごめんなさい。



public class IgnoreVersionBinder
: SerializationBinder
{
public override Type BindToType
( string assemblyName, string typeName )
{
int i = typeName.IndexOf( '[' );
while( i >= 0 )
{
i = typeName.IndexOf( ',', i );
int end = typeName.IndexOf( ']', i );
typeName = typeName.Remove( i, end - i );

i = typeName.IndexOf( '[', i );
}

Type t = Type.GetType( typeName, false );
return t;
}
}



2009/08/13

OpenTKが更新中

最近OpenTKの活動が活発になっているようだ。
まだ詳細はみていないが、
現在、正式にリリースされているのはver.0.9.8-2。
でもって、ver.1.0リリースに向けてver.0.9.9も公開が始まっている様子。
なにやらOpenCVなるもののラッパーも追加されたとか。
ver.0.9.9からwindowsでのFSAAをサポートするようになったっぽいが、
まだ試してないのでよくわからん。

2009/05/28

TeX : 索引ページのヘッダ・フッタ

なんか唐突だが、
TeXの小ネタ。

ヘッダやフッタをいろいろいじった文書を
fancyhdr パッケージを使って作ってた。
で、それにはmakeidx パッケージと mendex を使って索引もつけてたのだが、
どういうわけか、\printindex コマンドで出力した索引ページだけは
ヘッダ・フッタが強制的に(デフォルトの設定に)変更される。
fancyhdr を使わずにヘッダ・フッタを設定しても同じようなことが起こる。

まぁ、索引ページにあれこれヘッダ・フッタをつけるな、
と、いうことなのかもしれないが、
状況によっては
ページ番号の位置が索引ページだけ違うところにある、
なんてことにもなるわけで。

いろいろ原因を探ってみたところ、
結局、クラスファイル jsarticle.cls の
theindex 環境の定義に原因があった。
(この theindex 環境は、\printindex コマンドで取り込まれる
*.ind ファイルに書かれているので、直接使用することはない。と思う。)

jsarticle.cls ファイル中の theindex 環境の定義(1400行ちょっとあたり)
\newenvironment{theindex}{%
...

に続く、
\plainifnotempty
というコマンドをコメントアウトすると
(このコマンドがヘッダ・フッタをデフォルトに設定するらしい)
ヘッダ・フッタが索引ページで強制的に変更されることはなくなる。