2009-01-01から1年間の記事一覧

Type initializer についてまとめ

参考資料 ECMA-335 (4th edition) Type initializer とは Type initializer は CLI 仕様で規定されている、型それ自体を初期化するための特別なメソッドである*1。要するに(C# で言うところの) static メンバの初期化子や static コンストラクタを実行してく…

C# での Singleton についてまとめ

type initializer を使った Singleton パターンの実装のスレッドセーフ性について訊かれたことがあったので、それについて調べたことをメモってみた・・・らいつの間にかまとめっぽくなってしまったのであった。 参考資料 ECMA-335 (4th edition) http://www…

Net_Growl を使ってみた

ref: Net_Growl 2.7.0 ref: ネイティブMacアプリをPHPで操作しよう (3/3)- @IT 関連: OS X に macports で入れた pear (@ PHP 5.2.10) が使えない現象とそれへの対処 - やこ〜ん SuperNova2せっかく pear のテストのために Net_Growl pear パッケージを入…

OS X に macports で入れた pear (@ PHP 5.2.10) が使えない現象とそれへの対処

ref: Memo ref: pear-forum.org 症状 pear や pecl のパッケージをインストールしようとすると、 % sudo pear install -a HTTP_Request pear.php.net is using a unsupported protocal - This should never happen. install failedという風に、pear コマンド…

MethodInfo.GetGenericArguments() と System.RuntimeType と配列の covariance

概要 配列の covariance のおかげでデバッグに手間が掛かった、という話。 キーワードについて MethodInfo.GetGenericArguments メソッド これは、メソッドの型引数を表す Type[ ] を返す。 System.RuntimeType は、System.Type の .net 上における実装。 Sy…

Ubuntu 8.04 (hardy heron) に mono 2.4 をインストール

我が家のメインサーバーである Ubuntu 8.04 (近々 OpenSUSE にリプレース予定) に mono 2.4 をインストールしてみたのでメモ。Ubuntu 8.04 の公式パッケージなどでは mono 1.x になってしまうので、ソースからビルドした。 環境とインストール後の状態 % una…

System.Type.GUID プロパティと GuidAttribute

ref: Type.GUID プロパティ (System) ref: GuidAttribute クラス (System.Runtime.InteropServices) まとめ GuidAttribute を型に付けることで、Type.GUID の値を指定できる GuidAttribute を付けておけば、コンパイラやランタイムに依存せずに Type.Guid を…

xterm-color の TermInfo がない @ Solaris

ref: http://www.linux.or.jp/JF/JFdocs/Text-Terminal-HOWTO-15.html最近新しい環境に ssh でログインすることがあったのだが、その際に vi, emacs, less などなどがまともに立ち上がらない シェルによっては Backspace などが効かない ということがあって…

日記間違い

別の blog に書くはずの(あまりこちらに関係ない)記事をうっかり書いてしまった・・・。これはやはり対策が必要だ・・・。RSS リーダーなどのアンテナに引っかかってしまった人*1には申し訳ない。今後は書く前にアカウントをチェックするのと、そもそも日記…

interface 型の Type.GetMembers や GetMethods では継承元は無視される

ref: Type.GetMethods Method (BindingFlags)具体的にどういう事かは ref 先のユーザーフィードバックのコメントに詳しいが、要するに interface の Type に対して GetMembers などを呼んだ場合、基底 interface のメンバーは列挙されないということである。…

mono Bug 463323, 475962 について調べてみた&動的なメソッド呼び出しの実装を追いかけてみた

最近 C# なコードを仕事でも使う縁に恵まれているのだが、そこで mono の Delegate.DynamicInvoke 関連で興味深いバグがあると聞いたので、調べてみた。また、せっかくなので Delegate.DynamicInvoke や MethodInfo.Invoke などに端を発するメソッド呼び出し…

mono での NewGuid と RngCryptoServiceProvider

mono において Guid.NewGuid() で Guid がどうやって生成されているのかが気になったので、せっかくソースコードが公開されていることであるし、読んでみた。また、NewGuid の実装には後述の通り RngCryptoServiceProvider が使われているので、結果として m…

コレクション(配列など)のシャッフル

ref: ランダムソート(笑)とは - 西尾泰和のはてなダイアリー ref: 単純で正しそうなものが正しいとは限らない - Radium Softwareネット上で、配列などのシャッフルについて検索すると、ソートの比較関数に乱数生成機を渡すとか書いてあるのが多いのでなんか…

wikiforme もどきの補足的な機構: 親子関係の補完

ref: WikiForme 0.5 開発裏話 1 - Blog by Sadayuki Furuhashi補完の発想は↑のリンクにある wikiforme の振る舞いとほぼ同じであるが、リンク先の方法だと(id:saiya_moebius が理解するには)いささか面倒なので、もう少し簡略化してみた。このやりかたのポイ…

wikiforme もどきの基本的な機構: 記法のパースと木構造(XML)の出力

思想は wikiforme と大きく変わらない。具体的には、 元の記法には何らかの形で、ノードの開始を明示する ノードの終了が明示されていない場合、適宜補完する 階層の一部を省略された場合、適宜補完する ノードの終了や階層の中間のノードの補完は、ノードの…

wikiforme もどきを作るとしたら

うだうだなメモ。そういえばこのブログにうだうだなメモを書いたことはなかったような。 元ネタ 「wikiforme」の検索結果 - 古橋貞之の日記 新しい構造化Wiki記法パーサーの設計案 - sdyuki-devel やりたいことの核心 以下の二つが id:saiya_moebius 的にや…

XNA な ContentProcessor を自作した場合、それをローカルエリアでない場所に置いてはいけない

XNA でカスタム ContentProcessor を作った場合、それをローカルエリアでない場所(ネットワークドライブなど)に置いてしまうと、参照設定したにも関わらず、VisualStudio のプロパティウインドウの Content Processor 欄のドロップダウンの候補に表示されな…

RSACryptoServiceProvider にて「指定された状態で使用するには無効なキーです。」

ref: Key not valid for use in specified state...what do you mean? ref: novolocus.com - このウェブサイトは販売用です! -&nbspnovolocus リソースおよび情報 ref: RSACryptoServiceProvider.Encrypt Method (System.Security.Cryptography) | Microsof…

Generic な型への演算子適用を可能にするユーティリティを書いてみた

元ネタ ref: 早く C# 4.0 出ないかなぁ。 - ++C++; // 管理人の日記 ref: [サンプル] ジェネリックな複素数型 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C コード 本体: SUtils/SUtilsCore/Operators UnitTest(兼サンプル): OperatorsTest.cs …

a == b かつ !(a = b)

C# の言語仕様には、表題の通り a == b !(a !(a >= b) を全て満たす値の組み合わせがある、という小話。なお、ユーザー定義の演算子で〜というオチではない。(続きを読む、で隠してみた)

pdb2mdb で、Mono 環境でもスタックトレースに行番号が出るようにする

要約 .net framework 上で Debug ビルドすることで得られる .pdb ファイルを、Mono 2.x で使える .mdb ファイルに変換することで、.net でビルドしたバイナリのデバッグ情報を Mono 環境でも使えるようにする、という話。こうすることで、.net framework 上…

XML ドキュメント コメントでの、ジェネリックな型やメンバに付く

要約 XML コメントにて Generic な型やメンバを参照する場合、IEnumerable{int} のように書くことができる。ちょっとしたことだが、忘れがちな事である上、ぱっと検索しても出てこなかったのでメモってみた。 詳細 C# の XML コメントにて、特に、 や ... な…

文字列クラスのメソッド数

文字列(String)クラスのメソッド数。Python: 37 Java: 65 Ruby: 119圧倒的じゃないか、我が軍は。ちなみに、実際に数えたらRuby 1.8で102、Ruby 1.9で103だった。ruby -e 'p ((String.instance_methods - Object.instance_methods).size)' Matzにっき - Numb…

インスタンスが属するクラスをあとから変更する操作を C# で 〜RealProxy バージョン〜

元ネタ インスタンスが属するクラスをあとから変更する操作をいろいろな言語で - Smalltalkのtは小文字です C#と諸々 インスタンスが属するクラスをあとから変更する操作を C# で 概要 元ネタにある C# 版では、オブジェクトへの参照が持っている型ハンドル…

RealProxy (実プロクシ) と透過的プロクシと IRemotingTypeInfo

CLI(や CLR) は、通常はスタックベース*1の世界でメソッド呼び出し*2を処理している。しかし、CLI にはそれらスタックベースの処理を、メッセージと呼ばれるオブジェクトを受け渡す形に変換する機構が備わっている。どのような機構かと言うと、透過的プロク…

OS X に macports でインストールした mono で Graphics や Forms を使うための設定

OS X (10.5.6) に macports で mono をインストールしたはいいが、Windows.Forms や System.Drawing なアプリを動かすために設定が必要だったのにビックリしたので、備忘録をかねてメモ。

CLI や C# における -0 (マイナスゼロ) や符号のコピー

サンプルコード float pZero = 0.0f; float nZero = -0.0f; // True Debug.WriteLine("pZero == nZero: " + (pZero == nZero)); // False Debug.WriteLine("+∞ / pZero == +∞ / nZero: " + (float.PositiveInfinity / pZero == float.PositiveInfinity / nZe…

System.IO.TextReader.Peek の戻り値でストリームの終わりを判定してはいけない

ref: Microsoftのバグ!? | 自由人usk-mの気ままなブログ"StreamReader Peek" や "TextReader Peek" でググると Peek() の戻り値が -1 かどうかで判定しているコードがたくさん引っかかるが、実際には TextReader.Peek() はストリームの終わりでなくても -1…

浮動小数の比較の実装

一つ前のエントリ: http://d.hatena.ne.jp/saiya_moebius/20090111/1231669765 「float と 80bit FPU」 参考: ��ư�������������� (Boost の close_at_tolerance についてのドキュメント)浮動小数な値同士を比較することについて、Boost のドキュメントに ��ư…

C# 3.0 自動実装プロパティがどう自動実装されるのかを調べてみた

自動実装プロパティがどう自動実装されるのか気になるので調べてみた。 なお、仕様書を読んだわけではない点に注意。 動作を調べるために使ったコンパイラ .net framework 3.5 の csc mono 2.0.1.0 の gmcs コンパイル結果 csc にしろ gmcs にしろ、コードは…