ようこそ。睡眠不足なプログラマのチラ裏です。

C#3.0

SilverlightやWPFやってっと、弱い参照のキーと値を管理するWeakDictionaryが欲しくなるよね。

「弱い参照」と「強い参照」.NET Frameworkでは、ガベージコレクションによってメモリが管理されます。 変数(フィールドやローカル変数など)に格納されている参照のことを「強い参照」と言います。 強い参照によるオブジェクトは、そのオブジェクトがアク…

C#で今風メタプログラミング。Expression Tree(式木)に慣れ親しもう。

久しぶりにExpression Tree(式木)をいじってました。 .NET Framework4では式木が大幅にバージョンアップして、複文や条件分岐、ループなどが表現できるようになりましたが、 それによってどんな面白いことができるかは、まだ模索中だったりします。 今回はと…

拡張メソッドバブルのこのご時世、ふつうのデリゲートをジェネリックデリゲートに変換したいことってあるよね。

拡張メソッドバブルのこのご時世、ジェネリックデリゲートに対して拡張メソッドが定義されていることとかも少なくない。 ということで、ふつうのデリゲートをジェネリックデリゲートとして扱いたい!なんてケースもあるようなないような。いや、きっとありま…

MVVMパターンのViewModelで、INotifyPropertyChangedをいちいち実装すんのかったるい。かといって、AbstractなViewModelBaseは継承したくないでござるよ。

INotifyPropertyChanged インターフェースを実装した抽象クラス ViewModelBase は、残念な俺俺設計MVVMパターンでViewModelを実装する場合、INotifyPropertyChanged インターフェースを実装するのが面倒という理由もあって、 INotifyPropertyChanged インタ…

F#でMVVMパターン。はじめてのWPFプログラミング。ModelとViewModelをF#で、ViewはXAMLとC#で。

遅ればせながら「WindowsForm終了のお知らせ」を感知WPFに関しては、仕事で使う機会もなく、自宅に満足な開発環境もなかったという理由で、 関連記事の流し読み程度はしていましたが、基本華麗にスルーしてきました。 しかし、Windows7が好感触だったり、今…

C#でもLazy Evaluationしたいよね。カリー化しーの、遅延評価しーの、トツギーノ。

.NET Framework4.0には System.Lazy なんてものが追加されていて、 もしかして遅延評価標準サポートktkr?と、思わずwktkした人も少なくないのでは。 ですが、これはインスタンスの生成を遅らせるだけの代物でした。多くのC#erの期待は一瞬にして儚く散って…

わー!taguoさんお久しぶりです。まさにメモウマ状態!!

前回のエントリメモ化を抽象的に考えて一般化する。これぞジェネリックプログラミングの神髄!なんつってーをうけて、 taguoさんが、メモ化について良質な記事を書いてくださいまいました。ありがとうございます! めもだいすき - 一生酩酊 まさにメモウマ状…

メモ化を抽象的に考えて一般化する。これぞジェネリックプログラミングの神髄!なんつってー

前回のエントリーで書いた関数の「メモ化」について抽象的に考えて、 ジェネリックプログラミングをしてメモ化を一般化してみましょう。 ググッたところ、1つの引数をとる関数のメモ化関数は多くの人が書いていますが、 2つ以上の引数をとる関数のメモ化関…

この関数呼んだら毎回超モッサリするんだけど?だったらメモ化とかしてみたら?というただのメモ

メモ化とはプログラムを高速化するための最適化技法のひとつで、 関数呼び出しの結果を保持しておいて再利用するというものです。 1度呼び出された関数が再度呼び出されたときに再計算をせずに、保持しておいた値を再利用する手法です。 具体的には、キーと…

ISAさんがかんがえたSortedList{T}を、ちょっと自分風に弄ってみたよSortedList{T}

ネタ元: ぼくのかんがえたSortedList - こげこげ堂はてな支舗 http://d.hatena.ne.jp/isaisstillalive/20091022/1256188497 ISAさんがかんがえたSortedList{T}を、もうちょっと考えてみた自分だったらこうするかなぁ的に、id:isaisstillaliveさんのコードに…

Undo,Redoの実装って何回かしかやってない気がする。ジェネリックなCommandパターンとMementoパターンの応用で大体いけそうな気がする。

不足気味でしたので、たまにはC#分を補充しておきます。 ↓ ↑ もう1年近く前になるんですね。以前、下記のエントリが注目を浴びていて、 わたしも楽しく読ませてもらいました。 Undo,Redoの実装って何十回もやってる気がする - あしあと日記 http://d.hatena…

シリアル化可能なStateパターン的に使えるタイプセーフEnum。たぶん最終形態(フリーザ様的な意味で)

id:atsukanrockさん、トラックバックありがとうございます。 「 熱燗ロックのブログ - .NET Frameworkで、シリアル化可能なタイプセーフenumを実装する - その2」を受けまして、 さっそく、まねまねさせて頂まして、再びTypeSafeEnumを書き直しました。 そう…

C#で振舞いを抽象化してStateパターン的に使えるTypeSafeEnumを書いてみた。Delegate.DynamicInvokeのオーバーヘッドっていかほどなの?

以前書いたAbstractなTypeSafeEnumでは、振舞いについてFuncデリゲート固定として実装していました。 でもやっぱり、ちゃんとしたStateパターン的なTypeSafeEnumが欲しいよね。 というわけで、タイプセーフEnumの振舞いについてジェネリックで抽象化してみま…

ケブンッリジ関数でどう書く?orgデビューしてみた

微妙に風化したお題ではありますが、どう書く?orgデビューしてみました。 using System; using System.Linq; namespace ConsoleApplication1 { class Program { static void Main() { var str = @"こんにちは みなさん おげんき ですか? わたしは げんき …

OrderedDictionaryクラスのジェネリック対応してみた。System.Collections.Specialized 名前空間以下のコレクションはジェネリック対応されていないんだよね。

System.Collections.Specialized 名前空間以下のコレクションについて以前、「.NET Frameworkの代表的なコレクションとかいいつつ非ジェネリックって…?なんぞこれ。」を書きました。 このエントリでは、素敵な方たちにはてなスターを頂き、共感していただけ…

スコープ間またはスレッド間をまたいで、オブジェクトの有効期間を管理する

MSDN マガジン - CLR 徹底解剖 オブジェクトの有効期間を管理する 残念ながら、C# には、スコープ間またはスレッド間で使用できる using キーワードと同等の簡単なコンストラクタはありません。このため、Dispose の呼び出しをコンポーネント間でネゴシエー…

イベントリスナが先にお亡くなりになっています。あれ?残念ながらメモリリークです。あのね、WeakEventパターンを使うといいと思うんだ。WeakEventManagerから派生して、抽象的なWeakEventTriggeredManagerクラスを作ってみよう。

WeakEvent パターン(msdn.microsoft.com)というのがあります。 WPFでごにょごにょしているような方であれば、ご存知の人も多いようですが、 WPFと無縁の人たちにとっては、認知度がかなり低いようです。 WeakEventパターン*1が有用となるシナリオは、なにもW…

C#からOpenCVで顔を検出して"ゆっくり"してみよう

なにやら↓こういうのが流行っていたようですね。元ネタ Perlでアニメ顔を検出&解析するImager::AnimeFace Yukkurizer - アニメキャラゆっくり化CGI 何かを受信(^o^)ノ *1 ゆっくりしてみようというわけで、やつけで適当にC#でゆっくりしてみました。 C#やVB…

演算子オーバーロードを活用してジェネリックオペレータを作る。それは即席自作演算子的な何か。

C#に限った話ではなく、その他のプログラミング言語(C++やD言語など)でも、 演算子オーバーロードを利用するようなケースは非常に限られていると思う。 というのも、適切に利用せずに無闇に使うとメリットよりもデメリットの方が大きくなる場合が多いからだ…

はてなハイクAPIを使ってみよう(LINQ to XML)

C#から「はてなハイクAPI (http://h.hatena.ne.jp/api)」を利用するサンプルを作りました。 他の言語のサンプルは割りとあるようですが、C#ではなかったようなので。 画像を添付した投稿については面倒くさいので直接はサポートしていませんが、 呼び出し側…

迷路の生成とその解

パラドックス大全 - 世にも不思議な逆説パズル 著:ウィリアム・パウンドストーン 訳:松浦俊介 という本を読了しました。冒頭の水槽の脳の話から最後まで楽しく読めました。 その中で、NP完全と迷宮の話がでてきまして、大変興味をそそられました。 プログ…

.NET Frameworkの代表的なコレクションとかいいつつ非ジェネリックって…?なんぞこれ。

CodeZineにて .NET Frameworkの代表的なコレクションと使い方 http://codezine.jp/article/detail/3640 という記事がありまして、結構な数のはてブをゲットしている人気記事のようでした。 でもなんで?というのが正直な感想です。「なんで?」の意味すると…

CSPで暗号化する場合、非対称秘密キーをローカルなんかに平文で保存しないでください。

[方法:キー コンテナに非対称キーを格納する] http://msdn.microsoft.com/ja-jp/library/tswxhw92.aspx 非対称秘密キーは、ローカル コンピュータにそのまま平文として保存しないでください。 秘密キーを格納する必要がある場合は、キー コンテナを使用する…

レーベンシュタイン距離とN-gramモデルのアルゴリズム。それは擬似Google Suggestっぽい何か。

きっかけはレーベンシュタイン距離 - shin5papaの日記 http://d.hatena.ne.jp/shin5papa/20090311/1236745197 レーベンシュタイン距離とN-gramモデルで、擬似的なGoogle Suggestレーベンシュタイン距離を使うことによって、擬似的にGoogle先生の「もしかして…

ジャグ配列ジェネレータ(ちょっとしたスニペット)

ジャグ配列を作るのって、じみ〜に面倒だったりしませんか。 そんなあなたに、ちょっとしたC#スニペット。こんなんどうでしょう。 using System; using System.Drawing; using System.Runtime.CompilerServices; namespace ConsoleApplication1 { public cla…

globalコンテキスト キーワードと名前空間エイリアス修飾子(::演算子)

確かC#2.0から地味に(こっそり)追加されたキーワードだったと思いますが、 globalコンテキスト キーワードって、マイナーっぽいですね。 これを使って書いてるコードを仕事では見たことがないし。完全に存在が忘れられている感すらあります。 オライリー本の…

ExpandableObjectConverterっていちいち実直に実装するのは面倒だよね。Reflectionを活用してネストしたプロパティを楽に量産してみよう。

ExpandableObjectConverterのサブクラスで実装する内容TypeConverterAttribute属性を用いて、ExpandableObjectConverterおよび、その派生クラスを指定することで プロパティグリッドにネスト表示されるプロパティを作成することができます。 通常、Expandabl…

拡張ユークリッド互除法も再帰で書いた方が自然に見える

最適化のために最大公約数を求める必要があって、 ユークリッド互除法と拡張ユークリッド互除法を書いたので、チラ裏に残しておく*1。 ユークリッド互除法まずはよく見る実装をC#で public static int Gcd(int a, int b) { while (b != 0) { int r = a % b; …

コントロールのTabIndex順で処理したいことってあるよね。階層のTabIndexを表現してみよう。

またまたWindowsApplicationにおける標準コントロールが、空気読めなさすぎなのではないかというお話。 C#でTabIndexの階層構造順にControlを並べ替える方法の1つの例を示します。 TabIndexプロパティだけじゃ、TabIndexの階層構造わかんねーじゃん各標準コ…

動的にDLL(ライブラリ)をロードしてアセンブリを作って、P/Invokeなdelegateを生成してみよう。

C#で動的にDLL(ライブラリ)をロードしてアセンブリを作って、P/Invokeなdelegateを生成動的にDLL(ライブラリ)をロードするというシナリオは、意外と要求されることが多いのではないかと思います。 利用する関数があらかじめ明確になっているのであれば、その…