2009年2月24日火曜日

Array.ForEachで書き換え

ちょっと期待したけど、やっぱりできませんでした。理屈は分かるんだけどね。

T[] array = new T[count];

for (int i = 0; i < array.length; i++)
{
array[i] = new T();
}

↓

Array.ForEach(array, delegate(T t){ t = new T();});

VS ImageLibrary

すごく今更なのだが、Visual Studioにアイコンセットが含まれているのを知った。もっと早く知っていれば...

[VisualStudio2005]
C:\Program Files\Microsoft Visual Studio 8\Common7\VS2005ImageLibrary

[VisualStudio2008]
C:\Program Files\Microsoft Visual Studio 9.0\Common7\VS2008ImageLibrary

2009年2月19日木曜日

メソッドスコープの型パラメータとコンストラクタ

class Super { }
class Sub : Super { }
上記の様に、クラスに継承関係がある場合、以下のようなメソッド呼び出しを行ってもエラーとなりません。
#オブジェクト指向の基本です。
public static void Hoge(Super super) { }

public static void Main(string[] args)
{
Hoge(new Sub());
}
ただ、Genericが絡んでくるとうまくいかない場合があります。例えば、以下の例はコンパイルエラーとなります。
#Javaなら大丈夫らしいですが...
public static void Hoge(List<Super> list) { }

public static void Main(string[] args)
{
Hoge(new List<Sub>());
}
でも、List<Super>もList<Sub>も同じように処理したいことはあります。そんなときは↓の様に書くことになると思います。
public static void Hoge<T>(List<T> list) where T : Super { }
で、今日同じことをコンストラクタでやろうとしてつまづきました。↓って書けないんですね。
public Hoge<T>(List<T> list) where T : Super { }
仕方がないので、コンストラクタをprivateにして、CreateInstanceメソッドを使って初期化したんですが、一般的なやり方なのでしょうか?
public static Hoge CreateInstance<T>(List<T> list) where T : Super

2009年2月18日水曜日

Windows Updateにより、VB6コントロールが使えなくなる

Windows UpdateでMSHFlexGridが使用できなくなった。という話を見かけた。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=48226&forum=7

ActiveX の Kill Bit 更新プログラムのロールアップが原因らしい。
http://www.microsoft.com/japan/technet/security/advisory/960715.mspx

VBと完全に手を切りたい今日この頃、Microsoftも少しずつVB6の動かない環境を整備しているように感じた。

Windows 2003 Server(x64)のバックアップエラー

Windows 2003 Server x64 SP1 R2のバックアップが失敗していた。

気付いたのは今日だが、過去のバックアップ履歴をみたところ昨日からっぽい。
バックアップファイルが2KBになっていたため"たまたま"気付いたのだが、タスクの終了コードは0となっており、一見成功っぽく見えるのでたちが悪い。
※イベントログにはNTBackupのエラーが記録されていたが、こっちは監視していなかった...

バックアップのレポートには、

ボリューム シャドウ コピー作成: 試行 1
処理が完了する前にタイムアウトしました

ボリューム シャドウ コピー 0xffffffff の作成中にエラーが戻されました。

ボリュームのシャドウ コピーの作成中にエラーが返されました:ffffffff
バックアップを中止しています。

となっており、シャドウコピーが失敗したらしいことが分かる。エラーメッセージを元に、ググってみたところ、似たような症状を訴えている方が見つかった。
http://odenkan.blog71.fc2.com/blog-entry-10.html

サーバで使用しているSQLServerは2005だし、別タスクで行っている同じドライブのボリュームシャドウコピーは問題なく作成されている。おかしな話だ。

原因はよく分からないまま時期的なものから、WindowsUpdateを疑ってみる。すると、2/12付でSQL Server 2005 Service Pack 2 のセキュリティ更新プログラム (KB960089)がインストールされているのを発見。先ほど見た記事も(バージョンは違うが)SQLServerが絡んでおり、偶然とは思えない。

ちょっと(かなり?)根拠には弱いがいい機会なので、試しにSQLServer2005SP3を適用してみることにした。
結果、無事バックアップに成功した。本当にSQLServerとWindows Updateが原因だったかは不明だが…

2009年2月6日金曜日

ReSharper4.1の試用期間を終えて

ちまたで色々と話題のReSharperを試用して1ヶ月がたちました。結論からいうと、購入はしない方向で決定です。

使いこなせていない感はありありなのですが、簡単に使ってみた感想を。(あくまでも私の環境(※)でのお話です)
※WindowsVistaUltimetSP1+VisualStudio2005SP1+C#+Core2DuoE6850+Memory2GB

良かった点

  • 未使用のusingの整理
  • 未使用変数・メソッドの発見
  • XMLコメントの整合性チェック
  • ソースコード修正候補の提示
  • Unitテストが便利

悪かった点

  • とにかく重い
    VisualStudioのエディタの幅を変更するだけで、応答がなくなる。
  • ソースコード内の日本語が文字化けする
    ビルドした際に、ソースコード内の日本語が勝手に文字化けを起こす。
  • 英語Only
    日本人にはつらい。メンバーに展開しにくい。
  • 一部、スニペットがおかしい
    propがC#3.0向けだった。

2009年2月3日火曜日

ATOK2009

IME2007に愛想を尽かしてから、ATOKの定額コースを利用しています。
http://www.justsystems.com/jp/products/atok_teigaku/feature1.html

で、本日ATOK2009に更新されました。
Webでは発売日が、2/6になっているのでちょっと得した気分。
http://www.justsystems.com/jp/products/atok/