読者です 読者をやめる 読者になる 読者になる
ようこそ。睡眠不足なプログラマのチラ裏です。

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(ライブラリ)をロードするというシナリオは、意外と要求されることが多いのではないかと思います。 利用する関数があらかじめ明確になっているのであれば、その…

C#で和暦について本気出して考えてみた【初級〜中級編】IFormattable、ICustomFormatter、IFormatProviderインターフェイスを実装してみよう。てゆうか、プロのプログラマなら当然正規表現を使いたいよね!

思いつきで「C#で和暦について本気出して考えてみた」の不定期連載を開始します。 タイトルが長すぎというツッコミは、心の中にそっとしまっておいてください。 予定している連載内容【初級〜中級編】 和暦構造体を作ろう。 IFormattable、ICustomFormatter…

C#でもタプル使いたいよね。で、GetHashCodeのオーバーライドはどう実装すればよいの?

遅ればせながら、C#でもタプルが欲しくなった今日この頃。 C#4.0では標準でタプルを用意してくれるっぽいけど、今すぐ欲しいよ。 HaskellやPythonなどにあるタプル。C#でも使いたいよね!タプルとは、いくつかの値(数値型、文字列型など)をひとつにまとめて…

Excelのカラム名(26進数ぽ)を数値(10進数)へ変換。頑張れ日本のC#er。

以前、数値をアルファベット(26進数ぽ)へ変換、それはExcelのカラム名的な何か。という記事を書きました。 これは、10進数から26進数へ変換を行うだけの、ごくごく簡単なアルゴリズムです。 しかし、うちに来た人は「26進数から10進数 Excel 変換 C#」という…

任意のジェネリック型を動的に生成

ちょっとしたスニペットを置いておきます。任意のジェネリック型を動的に生成するためのメソッドです。 例えば、アセンブリ外に非公開の型についてジェネリック型を利用したいような場合等に有用です。 System.ReflectionやらSystem.Reflection.Emitを使って…

TextBoxってReadOnly = trueでもフォーカスあたる。空気読めなさすぎだよね。

WindowsApplicationの標準コントロールってKYだよねというお話C#でもVB.NETでも当然同じなんだけど、TextBoxコントロールのReadOnlyプロパティをtrueに設定したら、 入力を受け付けなくなるので、背景色をグレーに設定したりする。でもフォーカスは普通に受…

さっそくC#でプログラム言語「てってってー」のインタプリタを書いたよ

何かを受信(^o^)ノ プログラム言語「てってってー」 javascript - てってってー言語を移植してみた - 404 Blog Not Found Wikipedia - Brainf*ck というわけで、C#erな自分はC#で「てってってー言語」のインタプリタを書いてみました。 基本「Brainf*ck」の…

C#で順列(Permutation)と組み合わせ(Combination)をすべて列挙してみよう

さて、いきなり少年メリケンサックですが、気にしないでください。帰らないでください。内容はまともです。 C#で順列(Permutation)を列挙する実装については、割と書いている人がいます。 でも、組み合わせ(Combination)を列挙する実装は、あまり書かれてい…

モテようとして、C#でXOR使ってリバースしている奴がいたんですよ

いろいろなリバースのアルゴリズムを見てみましよう。 まずは表題のリバースのアルゴリズムについて、どうぞ。なんとなくモテようとしている感のあるリバースモテようとして、C#でXOR使ってリバースしている奴がいたんですよ・・(以下略)。 こんな感じで pub…

型なしDataSetと型付DataSet、そして片想いORマッピング的な何か。

ネタ元 山本大@クロノスの日記 - アンチ型付DataSet派の自作ORマッピングよりなぜ型付DataSetを使うのか、型なしDataSetは使わないのか型付DataSetについては、嫌な思い出も少なくないので不満がないわけでもないのだけど、 常識的に考えて「型付DataSetを…

ニコ動APIとLINQ to XMLでごにょごにょしよう

ニコニコ動画APIで動画情報とかサムネイルとかコメントとかFLVファイルとかいろいろ取得したりする 手抜きで作りかけの雑なC#のコードを今更ながらあげておきます。 いろいろダメなところ(手抜き)があるので、もし参考にするのであれば、そこん所ご注意くだ…

移動とリサイズ可能なコントロール

ネタ元:VB.NETで作る!移動、リサイズの出来るコントロールを作る http://shinshu.fm/MHz/88.44/archives/0000043418.html 単純におもろいなぁと思いまして、C#でMix-inっぽくシンプルにコントロールに実装できるように それ用のインターフェイスおよび、そ…

FlagsAttributeとビット演算のちょっとしたレシピ

「ハッカーのたのしみ」はかなりの良書。いまさらFlagsAttributeのレシピ、リターンズ。.NET FrameworkにBitCountくらい標準であってもいいのにね http://d.hatena.ne.jp/zecl/20100228/p1 ※この記事の内容は古いです。上記の記事をあわせて読むことをオスス…

カレー好きのための、ラムダ式でカリー化な拡張メソッド。

以前、C#2.0の匿名メソッドによるカリー化 という記事を書きました。 では、C#3.0ではどうなるのでしょう。 もちろんC#3.0でも匿名デリゲートを使うことはできますが、C#3.0であればやはりラムダ式です。 記述が簡潔になって、より直感的で分かりやすくなり…

C#でmap(写像)、foldlとfoldr(畳み込み)、unfold(解きほぐし)とか

※追記しました。2008/12/16 オブ脳寄りの人間なので、どうしても関数型脳に染まりきれないところはあるんですが、 今年Haskellを学んでみて、foldとかunfoldってのは、すっげー便利だなと思いました。 そんなわけで、C#でちょっくらfoldとかunfoldしてみよう…

IEnumerableをシャッフル!

ネタ元:id:kawatanさんのエントリより http://d.hatena.ne.jp/kawatan/20081210 IEnumerableを実装していれば何でもシャッフルって、素敵ですね〜。 カードゲームなんか作るときにサクッと利用できちゃいますね。 よいものは盗んじゃおう!ということで、さ…

C#でTypeSafeEnumを書いてみた

タイプセーフenumパターンというのがあったのですね。知りませんでした。 ジョシュア ・ブロック氏が「Effective Java」という本の中で提案していたものらしいです*1。 いやはや、もっと幅広く勉強せんとなぁ・・。ということで、 id:bleis-tiftさんのエント…

いまさらC#でライフゲームを書いてみた

どう書く?orgにて、C#で既に書いてらっしゃる方が多数おられますが、 どうもコードを短くすることに重点を置いて書いているような感じで、正直なんだか読みにくいなーと思い・・・。 冗長だけどわかりやすく、オブジェクト指向っぽくライフゲームを書いてみ…

常識的に考えてErrorProviderを使いたいよね

VB.NETでもC#でもいいんだけど、.NET Framework2.0以降でWindows.Formsなアプリを作る場合、 入力検証を行うようなときは、ErrorProviderを使いたいよね!*1というお話は、 .NETで飯を食っている人にとっては割と常識ではないかと思っていたのだが、実際のと…

C#でFLVファイルをお手軽再生

ニコニコ動画などから得られるFLVファイルですが、 C#でお手軽に再生するには、ActiveX Control(AxShockwaveFlash)に頼るといいっぽい。 アスペクト比が指定できなかったり、再生できないFLVも結構あるようですが、まぁお手軽ということで。 ※FLVファイルを…

特定のインターフェイスを持つプラグインを取得

以下のような感じで、特定のインターフェイスを持つプラグインを取得するメソッドを作ってみた。 複数の種類のプラグインを利用するアプリなんてそうそうない気がしないでもないが、 こんな感じでひとつ作っておくと便利。やっぱLINQとyield使うと、かなりす…