たこぜりー研究室

大腸菌DNAは4.64Mbp。酵母は13Mbpで、ヒトは3Gbp

スポンサーサイト

#
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

FxCop の MSDN Libary へのリンク

#518
FxCop のルールで貼られているリンクが http://msdn2.microsoft.com/library/ で古い、つって何とかしたいとき。

FxCop.exe.config 内の

<add key="DocumentationUrlRoot" value="http://msdn.microsoft.com/ja-jp/library/" />

から変えられる。ついでだから、日本語に飛ぶようにしておいた。

単体テスト

#517
今日、初めて単体テストでコーディングミスを発見して、単体テストに感謝した。Visual Studio 2008 いいぜぇ。

入れ子にされた型引数

#516
[C#] ディクショナリを内部に使い、等価性が定義された何かをカウントするクラスということで…
public class Counter<T>
 : IEnumerable<KeyValuePair<T, int>> where T : IEquatable<T>
{
  private Dictionary<T, int> dic;

  public void Count(T item)
  {
    int n;
    dic.TryGetValue(item, out n);
    dic[item] = n + 1;
  }

  public IEnumerator<KeyValuePair<T, int>> GetEnumerator()
  {
    return dic.GetEnumerator();
  }

  IEnumerator IEnumerable.GetEnumerator()
  {
    return GetEnumerator();
  }
  ...
}

これがテストプロジェクト
エラー
アセンブリ '**.dll' の処理中にエラーが発生しました:
型またはメソッドは 2 個のジェネリック パラメータを含んでいますが、1 個の汎用引数が指定されました。各ジェネリック パラメータに対して 1 つの汎用引数を指定しなければなりません。

となってしまった。

IEnumerable<KeyValuePair<T, int>> の実装を外せばエラーが消えるのだが…

型引数が入れ子になりすぎるのか?
にしてもなぜテストプロジェクトでエラーが起きるのか?
汎用引数って IEnumerable のことか?

よく分からん。

An update to FxCop is available?

#514
fxcop1.png

ちなみに FxCop v1.36 (9.0.30729.1) 。
リンク先のインストーラで再インストールしてみても、アップデート可能とのメッセージが消えず。[続きを読む]

Silverlight 3 Tools きたかな

#510

そろそろ Silverlight 3 にするか

#509
マイクロソフト、2010 年度の経営方針を発表-Windows 7 で業界全体を活性化 [Enterprise Watch]

↑を見ると「Silverlight 3 の提供開始 (7 月)」とあるので、そろそろ試すかと思ったら、Visual Studio 2008 ではまだマルチターゲティングができない、とのことだった。
どうすっかな。試したいことは色々あるんだが。

反復子の戻り値の型

#507
最近 IEnumerable<T> が戻り値のメソッドばっかりで yield return 書いていたもんだから、IEnumerator<T> が戻り値でもよかったことを忘れてた。
自動生成されたクラスが両インターフェイスを実装しているからか。

do while continue でうっかり

#504
例えばある尤度関数を最大化するようなとき、
int count = 0;
double x = 10000, value = 0;
do
{
  if (count == 0 && !範囲チェック(x))
  {
    x /= 2; continue;
  }
  value = 偏微分計算(x);

  if (十分0に近い(value))
    break;

  x = 次の値(x, value);
}
while (++count < 100);

bool 範囲チェック(double x)
{
  return 2次偏微分計算(x) < 0;
}

範囲チェック() は 1 回しか評価されず。
continue の後、while の内容通るんだな・・・orz
for とか foreach のときを考えれば条件式を通るのは当たり前なのだが・・・、do にいきなり飛んでくれるものだとうっかり勘違いしていた、かも。

Silverlight 2 のローカライゼーション #4

#503
前回 : Silverlight 2 のローカライゼーション #3

えらく放置していたがこれで手を打った。

まず、新しい Silverlight アプリケーションのプロジェクトを作成。
ホストするサイトに追加する。

Resources.ja.resx をそのプロジェクトに移動。
App.xaml とか既定のアイテムはほとんど削除。
参照設定も mscorlib のみ。
当然 [assembly: AssemblyCulture("ja")] 。

配置の方法は 2 つあって、

1. サイト側で「構成固有のフォルダへのコピー」を有効にする。そして、xap を置いておきたいフォルダ名を構成名にする。
2. Silverlight ビルドオプションで xap ファイル名を変える。

で自動化。

読み込みは Startup イベント時に
private void OnStartup(object sender, StartupEventArgs e)
{
  WebClient wc = new WebClient();
  wc.OpenReadCompleted += OnStartupAfter;
  wc.OpenReadAsync(
    new Uri("ja/App.xap", UriKind.Relative));
}

private void OnStartupAfter(object sender,
  OpenReadCompletedEventArgs e)
{
  if (e.Error == null && !e.Cancelled)
  {
    StreamResourceInfo xap = new StreamResourceInfo(
      e.Result, "application/x-silverlight-app");
    StreamResourceInfo dll =
      Application.GetResourceStream(xap,
      new Uri("ja/App.resources.dll", UriKind.Relative));

    AssemblyPart part = new AssemblyPart();
    part.Load(dll.Stream);
  }
  this.RootVisual = new Page();
}

これで東アジア言語をサポートしていない環境でも動いてくれる。

IE8 上での Silverlight 2

#500
HTML で Silverlight 2 をホストしているんだが、IE8 でみると・・・

Silverlight object の下に謎のスペース

なんだこの下のスペースは。
互換表示にすると消えるので、IE8 だけで発生する模様。

そこでさっそく新機能の開発者ツールを使う。
すると IE8 モードだと

 html: 842 x 532
 body: 838 x 528
 div: 821 x 528
 object: 821 x 528

だが、互換表示だとすべて 838 x 528 になっていることがわかった。つまり、html がなぜか 4 x 4 だけ太っているようだ。div が細くなっているのはたぶんスクロールバーの分。

上の画像だと 4px 以上の高さがあるように見えるが、Safari 対策用の iframe のスタイルに { display: none; } を加えると、スペースは小さくなって高さ 4px になる。なおこの iframe 、IE8 モードだと 5 x 532 のサイズになっている辺りが謎 (width と height は 0 に指定してあるのに) 。

ひとまず html, body { overflow: hidden; } にして回避することにする。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。