2010年03月25日

Html Agility Packで、エンティティ文字の解決

   このエントリーをはてなブックマークに追加 Clip to Evernote
C#で利用できるHtml Agility Pack というオープンソースの HTMLパーサーが、CodePlexがら入手できます。
HTMLをDOMに展開するので、XMLのDOMを扱ったことがあれば、それほど苦労することなく利用できます。

ただ、TextノードのTextプロパティを参照しても、> などのエンティティ文字がそのままなのには 困りました。
HtmlEntity というユーティリティクラスの DeEntitize メソッドを使います。


第1引数は何を入れたらよいのか良くわかりません。nullを入れておけばよさげです。
  

Posted by gushwell at 23:18Comments(0)TrackBack(0)

2010年03月22日

1次元ランダムウォークは株価の動きと似ているのか

   このエントリーをはてなブックマークに追加 Clip to Evernote
以前、2次元ランダムウォークのプログラムをこちらに掲載しましたが、
このページ意外とアクセスがあるようなので、こういった需要はあるのかなと思い、
今度は、1次元ランダムウォークのプログラムを書いてみました。
株価がランダムウォークの動きに従っているという説を確かめてみたかったというのもあります。
このプログラムでは、±5%の範囲で値を変動させています。
確かに想像以上に良く似たグラフになりますね。


このプログラムでは、SilverlightのWriteableBitmapクラスを使っていますが、WriteableBitmapでUIElement(ここではLineオブジェクト)を描画するには、以下のように、Renderメソッドを利用します。


WriteableBitmapクラスにDrawLineなどのメソッドがあれば便利なのですが、すべてRenderメソッドで統一できるよ、というその潔さは素敵です。
ソースコードは、こちらに掲載しています。  
Posted by gushwell at 22:09Comments(0)TrackBack(0)

2010年03月17日

ApplicationSettingsBaseクラス

   このエントリーをはてなブックマークに追加 Clip to Evernote
構成設定ファイルを扱う場合に、ApplicationSettingsBaseクラスって、とても良くできたクラスだと思うんだけど、
UserScopedSettingAttribute ではなく、ApplicationScopedSettingAttribute を付加した場合って、書き込みが出来ないんですね。

ApplicationScoped でも、設定ファイルに書き込みがしたいって要求はないのかな?
LocalFileSettingsProvider ではなく、自分で新たなプロバイダを書けばいいのだけれど、結構面倒そうだ。

それと、バージョン番号が違うと別のフォルダに保存してしまうという動作を変更できないのは、どうなんだろう
Upgradeメソッドがあるから、大抵は別フォルダにあっても問題ないのだろうけど、自分でバージョンコントロールを行いたいときにそれを変更する手段が無いのは困る。
こちらは、独自プロバイダーを書いても対応できないようだ。

それと、保存先を決定するバージョンが、アセンブリのバージョンっていうのも戸惑った。
ApplicationScoped の項目だけレジストリに書くような拡張をしようと思って、壁に突き当たった。
だって、Application.CommonAppDataRegistryで採用しているバージョンはProductVersionなんだもの...

結局、ApplicationSettingsBaseから派生させるのではなく、 ConfigurationSection から独自のSectionクラスを派生させて、 ConfigurationManager をラップした独自のApplicationSettingsクラスを 書いたほうが良さそうな気がしてきた。
  
Posted by gushwell at 23:27Comments(0)TrackBack(0)

2010年03月14日

C#で8クィーンゲームを作成 (あなたは勝てますか?)

   このエントリーをはてなブックマークに追加 Clip to Evernote
Gushwell C# Programming Pageに、「8クィーン・ゲーム」を掲載しました。
Silverlightで実際に対戦できるようにしています。

8×8のチェス盤に2人で交互にクィーンを置いていき、自分の手番のときに置き場所が無いほうが負けというゲームです。
なお、すでに置かれているクィーン(自分が置いたものも含め)の利き筋に新しいクィーンを置くことはできません。
いわゆる8クィーンパズルのゲーム版というところです。


※ボタンをクリックするとゲームが始まります。

この手の思考ゲームの基本の基本だけでプログラムが書けるので、学習用としては、なかなか良い題材だと思います。
ソースコードはこちらで掲載しています。  
Posted by gushwell at 22:54Comments(0)TrackBack(0)

2010年03月10日

引数なし Enumerable.Any メソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
Enumerable.Any メソッドって、シーケンスの任意の要素が条件を満たしているかどうかを
判断する機能としてしか使っていなかったけど、引数が無いAnyメソッドってあったんですね。
要素の有無を調べることができます。
見落としていました。

int[] array1 = new int[] { 1,2,3 };
int[] array2 = new int[] { };
Console.WriteLine(array1.Any());
Console.WriteLine(array2.Any());

で、

True
False

が表示されます。
  
Posted by gushwell at 23:07Comments(0)TrackBack(0)

2010年03月07日

C#4.0 : dynamicを使いジェネリックスで加算減算をする

   このエントリーをはてなブックマークに追加 Clip to Evernote
メールマガジン「C#プログラミングレッスン」No243では、 どう書くorgで出されているお題「隣り合う二項の差」のコードを示しました。
その以下に示します。


このメソッドは引数に、 int[], List<int>などは受け取れますが、double[], List<long>などは 受け取れません。


というジェネリックメソッドにしたとしても、


で、減算ができないため、コンパイルエラーになってしまいます。 このエラーを取るには、C#3.0では、力づくで場合分けするなどする必要があります。
参考URL:http://gushwell.ldblog.jp/archives/51533037.html

しかし、C#4.0ななると、dynamic型が導入されるので、 以下のように、書くことができます。


この機能があることで、ジェネリックの応用範囲がさらに広げられそうです。
  
Posted by gushwell at 21:10Comments(2)TrackBack(0)

2010年03月04日

僕も「ループを使わずに配列の順序を逆にする」を書いてみた

   このエントリーをはてなブックマークに追加 Clip to Evernote
元ネタ:ホワイトボードプログラミング

僕も再帰を使ったReverseを書いてみた。
題意とちょっと違うかもしれないけど、許してもらおう。
ちゃんとテストしてないけど、だぶん動くと思う。


最後の行のところが、ちょっとぐちゃぐちゃした感じだけど、もうちょっとすっきり書けないのかなー。

追記:ちょと書きなおしてみた。
  
Posted by gushwell at 21:58Comments(0)TrackBack(1)