2008年12月27日

懐かしの本たち

   このエントリーをはてなブックマークに追加 Clip to Evernote
本棚がいっぱいになってしまったので、古い本を処分することにしました。
コンピュータ関連で処分したのは以下の6冊です。

oldbooks2

さすがにもう読むことはないと思う...
  

Posted by gushwell at 17:55Comments(0)TrackBack(0)

2008年12月18日

C#で順列を列挙する

   このエントリーをはてなブックマークに追加 Clip to Evernote
1,2,3 という要素に対し、

{ 1,2,3 }
{ 1,3,2 }
{ 2,1,3 }
{ 2,3,1 }
{ 3,1,2 }
{ 3,2,3 }

とすべての順列を列挙するにはどうしたら良いのだろうか。

以下、試しに書いてみたコード。

static List<List<T>> AllPermutation<T>(T[] nums) {
    if (nums.Length == 1) {
        List<List<T>> list = new List<List<T>>();
        list.Add(new List<T> { nums[0] });
        return list;
    } else {
        List<T> subNum = nums.ToList();
        subNum.RemoveAt(0);
        List<List<T>> sub = AllPermutation<T>(subNum.ToArray());
        List<List<T>> result = new List<List<T>>();
        foreach (var x in sub) {
            for (int i = 0; i < x.Count() + 1; i++) {
                var temp = x.ToList();
                temp.Insert(i, nums[0]);
                result.Add(temp);
            }
        }
        return result;
    }
}

private static void Hoge() {
    int[] nums = { 1, 2, 3, 4, 5 };
    var r = AllPermutation(nums);
    foreach (var a in r) {
        foreach (var x in a)
            Console.Write(x);
        Console.WriteLine();
    }
}

たぶん、動いていると思う。
でも、数が多くなると、表示されるまで、間が開いてしまう。

やはりこういった時は、IEnumerableを戻り値にするほうがよさそうだ。
ついでに引数の型なども変更。

static IEnumerable<T[]> AllPermutation<T>(IEnumerable<T> nums) {
    if (nums.Count() == 1) {
        yield return new T[1] { nums.First() };
    } else {
        IEnumerable<T> subNum = nums.Skip(1); 
        var sub = AllPermutation<T>(subNum); 
        foreach (var x in sub) {
            for (int i = 0; i <= x.Count(); i++) {
                var temp = x.ToList();
                temp.Insert(i, nums.First());
                yield return temp.ToArray();
            }
        }
    }
}

このような再帰を使った場合、スタックオーバーフローが気になる。
でも、この手のコードを再帰を使わないで書く方法がわからない。
どうも、再帰なしで書くのが苦手だ。
Stackを使うことになるのだろうか?
  
Posted by gushwell at 21:52Comments(2)TrackBack(0)

2008年12月14日

XContainer.Descendants メソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
Descendants()メソッド。

おおっ、こんなメソッドがあったのか?
LINQ to XMLの紹介の記事では、このメソッドが紹介されているのを 見たことなかったので、 今まで存在を知らなかった orz...
確かに、DOMのGetElementsByTagName に該当するメソッドがなかったら、面倒でしかたないですからね。

XDocument xdoc = XDocument.Parse(
    @"<People>
         <Person>
             <Name>坂本竜馬</Name>
             <Age>35</Age>
         </Person>
      </People>");
var q = xdoc.Root.Descendants()
    .Where(e => e.Name == "Age")
    .Select(e => e.Value);
q.ToList().ForEach(Console.WriteLine);

検索対象が子孫要素なので、Age要素を取得できます。
  
Posted by gushwell at 22:19Comments(0)TrackBack(0)

2008年12月09日

失敗

   このエントリーをはてなブックマークに追加 Clip to Evernote
メルマガ「C#プログラミングレッスン」ですが、予約配信機能を使い
配信しようとした際に、間違って、来週発信する予定の号を今週発信
してしまいました。orz
なので、今日は、No188とNo189の二つのメールが同時に発信されて
しまいました。

なんて、ドジなんだろう、自分。

ということで、来週はお休みということで(^ ^;

  
Posted by gushwell at 20:50Comments(0)TrackBack(0)

2008年12月08日

コンソールアプリの終了に異常に時間がかかる

   このエントリーをはてなブックマークに追加 Clip to Evernote
コンソールアプリの終了に異常に時間がかかるようになってしまった。
Visual Studio 2008から起動したときが特に遅いように感じる。
PCを再起動しても、現象は変わらないし、原因が全くわからない。
そのため、数日前の状態にシステムを復元することにした。

備忘のため、復元後に行ったことを以下に記す。

1. コンソールアプリをエクスプローラから起動してみる。
起動や終了でもたつく様な問題はない。

2. Visual Studio 2008を起動
Microsoft Visual Studioは最初の仕様のために環境を構築中です。数分間お待ちください。
のダイアログが出て、数分間後にVisual Studio 2008が起動。
なぜ、このダイアログが出たのか不明。

3. 再度、コンソールアプリをエクスプローラから起動してみる。
起動や終了でもたつく様な問題はない。

4. 確認用に作成していたソリューションを Visual Studioで開く。

5. Ctrl+F5で実行。
コンソールアプリが、なかなか終わらないという問題はない。

6. F5で実行。
問題ない。
Visual Studio 2008が操作ができるようになるまで、若干間があくけど、
これは、もともとそうだっから、今回の問題とは関係ないだろう。

ということで、結果的にはシステムの復元で問題が解決したことになる。
Windows Updateで更新された何かが悪かったのだろうか?
それとも、
KB957507の『FIX:-英語版以外の Microsoft Visual Studio 2008 Service Pack 1 をインストールした後一部ローカライズ IntelliSense のテキストが英語に戻る』
の修正パッチが悪かったのだろうか?
Webで検索しても、そのような記述は見つからなかった。
とりあえず、このまま様子見とする。
  
Posted by gushwell at 22:40Comments(0)TrackBack(0)

2008年12月07日

C#デザインパターン、引っ越し完了!

   このエントリーをはてなブックマークに追加 Clip to Evernote
このブログにアップしたデザインパターンのコードをこちらのサイトに移す作業をしていましたが、やっと終わりました。、『増補改訂版Java言語で学ぶデザインパターン入門 / 結城 浩(著)』に掲載されている23個のパターンを網羅しています。
  
Posted by gushwell at 22:43Comments(0)TrackBack(0)

2008年12月04日

dir *t の結果

   このエントリーをはてなブックマークに追加 Clip to Evernote
abc.text
abc.txt
abc.dat
abc.settings
abc.at
abc.t

というファイルが、d:\tempにあった時に、

D:\temp>dir *t

で表示されるファイル名は何か?

答えは、すべてです。

abc.settings

も表示されます。

ということで、

string[] files = Directory.GetFiles(@"C:\temp", "*t");

の結果も、上記すべてのファイル名が取得されます。

Windowsのバカああー!
  
Posted by gushwell at 22:09Comments(2)TrackBack(0)

2008年12月02日

VistaのAeroが無効になっていました

   このエントリーをはてなブックマークに追加 Clip to Evernote
いつの間にか VistaのAeroが無効になっていました。

システムのプロパティの「詳細設定」ー「パフォーマンスオプション」ー「視覚効果」で、「デスクトップコンポジションを有効にする」と「ウィンドウとボタンに視覚スタイルを使用する」には、チェックがついています。
テーマのサービスも動いています。

でも、なぜか、「コントロールパネル」の「デザインの設定」の配色一覧に「Windows Aero」が表示されていません。

「コントロール パネル」−「パフォーマンスの情報とツール」で、「スコアを最新の情報に更新」でパフォーマンスを調べましたが、最低ラインの3は確保できています。

何でだろう。
調べたら、ディスプレイの色16ビットになっていた。
これだ!
そういえば、何かの確認で、16ビットにしたような...
ここを 32ビットにしたら、「デザインの設定」の配色一覧に無事 Windows Aeroが一覧に出てきました。
よかったよかった。  
Posted by gushwell at 23:04Comments(0)TrackBack(0)