過去雑記

旧鯖時代の雑記です。新しいの。リンク切れに注意。


2007: 12345678910
2006: 123456789101112
2005: 123456789101112
2004: 456789101112

過去雑記

2006/3/1(水)

Wiki建ててみた22:04:45

いい加減XML手打ちもめどくなってきたのでWikiを建ててみました。鯖はここの移転予定地。雑記システムの更新とともに移転予定、、、なのですが、いまだコードも書いておらずいつになるか激しく不明。もうサードパーティでいいかなぁ。

WikiもWikiで吐き出すHTMLが気に入りません。やっぱりデータ形式はXMLでXSLTで変換が最強だと思うわけですよ。雑記システムもXMLはくものがあれば乗り換えるのですが。。。

コメントはありません。

2006/3/5(日)

1月くらいからの散財そして3万リロード11:32:05

1月終わりと先日買ってきたもの。

いまさらながらトリコロ プレミアムファンブック。前行ったときには置いてなかったのに、コーナーが組まれてたのをみるに久々の新刊で便乗して倉庫から出してきたのか。

さぼってるあいだに3万リロードしてますね。しかし記念企画など用意しているはずもなく。まぁ3月中にトップ絵は変えようと思い、いろいろと書いてますけど。昔のタッチで書けなくなっているんですよねー。どうしても顔のデッサンがおかしくなる。目が大きい萌え系のタッチばかりしていた弊害か。ちょっとショック。

コメントはありません。

2006/3/10(金)

更新するネタもなく00:32:05

Wikiを更新してごまかしてみる。

コメントはありません。

2006/3/12(日)

受験時期なのか引越し時期なのか21:16:30

今回は新幹線を選択したものの大混雑。学生服っぽいのも見かけるので受験期かなと思うも、もう大体が終わってますし、引越し/住まい探しかなあ?どちらにせよいやな時期にしたものです。

コメントはありません。

2006/3/13(月)

ショック22:12:14

私のクラス名の付け方はよくないらしい、、、が、原因が英語の語彙力の無さに来ているので解決しがたく。。。とりあえずライブラリには使わない言葉だから問題ないかなと逃げておく。

トップ絵はいまだ雪かきしており季節はずれ感漂っていますが、3月中の更新は無理そう。(高校の)卒業式シーズンは終わったので入学式/新学期あたりをテーマにしようかと。

コメントはありません。

今日の散財23:41:18

姉妹の方程式#1, #2

ほのぼのしてていい感じです。

コメントはありません。

2006/3/14(火)

疲れが取れない23:21:56

どうも不安定です。風邪っぽいし。どうしたものか。

コメントはありません。

2006/3/15(水)

Dispose()するならイベントの削除も必要11:30:26

なんかもやもやしていましたがよーやくサンプルを思いつきました。おかげで寝不足です。さて次のコードはコンストラクタでcontrolにイベントを追加していますが、削除はしていません。このような場合どうなるでしょう?当然ながらDispose()はイベントの解除を行いません。(ていうかこのサンプルだと何もしませんが。何かを管理してるクラスをあらわしてると思ってください。)そのためDispose()を呼び出し、参照を解除して開放した気分になっていてもイベントはインスタンスが破棄されるまで生き続けます。もっとも参照をイベントが握っているためGCが動いてもインスタンスは破棄されませんが。この場合controlが破棄されるまでHogeクラスの参照は持続します。コレは場合によっては問題を引き起こします。

class Hoge : IDisposable {
    public Hoge( Control control ) {
        control.KeyDown += new KeyEventHandler( OnKeyDown );
    }

    public void Dispose() {}

    public void OnKeyDown( object o, EventArgs e ) {
        Console.WriteLine( "Key Down" );
    }
}

C#2.0から追加された匿名delegateですがこいつにはまた別の問題があります。何らかの方法でHogeクラスの参照を消した後GC.Collect()を呼び出すようにし、次のコードをcontrol.KeyDownをコメントアウトした状態とそうでない状態で実行してみてください。

class Hoge : IDisposable {
    public Hoge( Control control ) {
        control.Click += delegate
            {
                Console.WriteLine( "Click" );
            };
        //control.KeyDown += new KeyEventHandler( OnKeyDown );
    }

    ‾Hoge() {
        Console.WriteLine( "Delete" );
    }

    public void Dispose() {}

    public void OnKeyDown( object o, EventArgs e ) {
        Console.WriteLine( "Key Down" );
    }
}

匿名delegateのみのほうはファイナライザが動いてしまい、インスタンスは開放されます。KeyDownも定義した場合は当然開放されません。Hogeクラスのインスタンスは開放されていますがClickイベントは問題なく実行されます。逆アセンブルしてみると原因は一目瞭然ですが、これは匿名delegateがインナークラスとして(つまりは別クラスとして)コンパイルされるためです。そのため匿名delegateが定義したイベントはHogeクラスとは関係ありません。なおHogeクラスのメンバ(ローカル変数はだめ)を呼び出していれば、匿名delegateクラスのコンストラクタにHogeクラスのインスタンスが渡され、Hogeクラスは匿名delegateクラスの中で参照されます。この場合Hogeクラスの参照は生きていることになりHogeクラスは開放されません。

長々と書いてきましたが、結論としてはDispose()でイベントも削除しろという一言に尽きるわけですが。後半なんて内容ずれかかってるし。ちなみに匿名delegateは直接イベントの削除ができないので一度変数に確保してやる必要があります。

コメントはありません。

2006/3/20(月)

やることいっぱい22:29:56

とりあえず火災保険の手続き終了。駅前の交番とうちは管轄が違うとかでえらい手間取りました。ていうかうちの管轄となっている交番の場所がわかりません。まぁそんなに利用するものでもない(てかしたくない)のでいいですかな。次は回線契約ですか。。。

コメントはありません。

2006/3/29(水)

あー日付変わってるし00:27:39

とりあえず当面のごたごたの処理終了。ぼちぼち復帰します。

コメントはありません。

2006/3/30(木)

下絵はできた23:52:46

でも塗る気がしません。どしたものかなー

コメントはありません。

2006/3/31(金)

車に引かれる23:35:10

曲がり角で衝突。曲がり角で細い道だったからスピードは出てないものの、この辺の交通マナーは何とかならないものか。

コメントはありません。

goto Top

Copyright(C)方位記号