++C++; // 未確認飛行 C ブログ

http://ufcpp.net/

Archive for 1月 2011

TC Labs、Portable Library Tools、cloud development kit for WP7、等々

leave a comment »

あと、DevLabs になんか増えてる。

分散データ処理やデータ分析系のものを集めて TC (Technical Computing) Labs と称するようになったみたい。含まれているのは:

  • Sho
    • データ解析用の線形代数ライブラリとデータ可視化環境
    • 付属のコンソールアプリ(IronPython ベース)で使うもよし、C# からライブラリ参照するもよし
    • 付属のコンソールアプリは IntelliSense 的な補完/ヘルプ機能が結構優秀
    • 競合しそうなのは R 言語かな?
  • TPL Dataflow
    • 元々 Async CTP に含まれていたものの一部で、単独での公開要望が高かったので独立
    • データ駆動な Actor (Agent)型のプログラム作成用のライブラリ
  • Dryad
    • 前からあるもの。TC Labs に編入
    • Windows HPC サーバー クラスター上で分散データ処理するための技術

Sho 辺りは何かデモ作りたいなぁ。固有値問題に帰着される問題で、一般受けしそうな話題って何かあったかなぁ・・・

Written by ufcpp

2011年1月30日 at 14:18

カテゴリー: .NET

Tagged with , ,

WPF の {Binding Path=/}

leave a comment »

昨晩、こんな話が:

コレ クションをバインドした時に何が起きているか

WPFのBindingのPathの解決は結構複雑なことをしております。何のせいでそんなに複雑になるかというと、「マスター詳細シナリオ」とか言う概念のせいだったりします。

マスター詳細シナリオ

以下のページ参照:

DataContextに何かコレクションを与えた上で、選択項目の詳細を見たいという場合があります。こういう状況を指して「マスター詳細シナリオ」と呼んでいるようです。

データ バインディングでは、以下のように、Path=/ と書くことで、「コレクションの選択項目を参照しろ」という意味になります。

<ListBox ItemsSource=”{Binding}” IsSynchronizedWithCurrentItem=”True” />
<ContentControl Content=”{Binding Path=/}” />

この例では、ListBox側で選択された行の要素がContentControlに表示されます。

あるいは、DataContext自信ではなく、その子要素のコレクション(例えばItemsプロパティとしましょう)をバインディングする場合には以下のように書きます。

<ListBox
ItemsSource=”{Binding Items}” IsSynchronizedWithCurrentItem=”True” />
<ContentControl Content=”{Binding Path=Items/}” />

さらに、以下のように、Path=/Name と書くことで、選択項目のNameプロパティを参照できます。

<ListBox ItemsSource=”{Binding}” IsSynchronizedWithCurrentItem=”True” />
<ContentControl Content=”{Binding Path=/Name}” />

Path=/ の省略

さて、ここからが問題。BindingのPathは、実は色々と省略が効きます。Bindingマークアップ拡張が内部で「そっちがダメならこっちをバインディング」みたいな頑張り方を結構しています。例えば、以下のように、/Name から / を取ってみましょう。

<ListBox ItemsSource=”{Binding}” IsSynchronizedWithCurrentItem=”True” />
<ContentControl Content=”{Binding Path=Name}” />

この場合にBindingがどういう挙動をするかというと、

  • DataContextに指定したコレクションがNameプロパティを持っている場合、そのNameプロパティをバインディング。
  • なければ、/Name と同じ挙動をする。すなわち、選択項目のNameプロパティをバインディング。

という判定を内部的に行っているようです。

この挙動に悩まされることはそう多くないとは思いますが、例えば、少々恣意的ですが、以下のようなデータをバインディングに使ってしまうと変なことが起こります。

public class SampleData
{
    public string Name { getset; }
    public int X { getset; }

    // Y は、SampleData にだけ持つ。
    // X 
 Name  SampleList に同名のプロパティを作ってしまう。
    public int Y { getset; }
}

//
こんなことわざわざする人がいるかどうかわからないけども、
//
要素の方と同じプロパティを持つ謎のコレクションを作成。
public class SampleList<T> : List<T>
{
    public string Name { getset; }
    public int X { getset; }
}

Bindingマークアップ拡張は内部で、動的な型(GetType() で得られる型)を見てデータ バインディングしているようなので、IListをDataContextに渡したつもりが、その実体の動的な型はNameプロパティを持っていて…ということも、原理的には起こりえます。

実例

ということで、1つ実例を:

実行結果のスクリーンショットを3枚ほど:

結果を見るに、正直なところ、Path=/ の省略はおすすめできないです。省略した場合には、以下のような挙動を起こします。

  • データ テンプレートの暗黙的な適用(リソース中でDataTemplateにDataType属性を付ける)ができない。
  • コレクション自信と要素に同名のプロパティがあったりなかったりするときの挙動が悩ましい(意図しない挙動になりかねない)。

問題

ドキュメント不足

でも、MSDNのサンプルの多くは、この Path=/ を省略していたりします。そのせいで、/ で「選択項目の参照」ができることを知らない人も多かったりします。

その割に、この辺りの挙動(/ を省略した場合、まずコレクション自信を調べて、なければ選択項目を調べる)に関する説明は自分の知る限り見たことがないんですよね。そりゃ、調べればわかりますけども。

.NET文化に合うのか

XAMLは、どうもHTML+JavaScriptとかXPathとかを意識して作られてるんじゃないかと思っているんですが、「知ってると便利だけども知らないとはまる」って感じの「便利な省略」が多いんですよね。かなりルーズ。

.NET文化的には、もっときっちり書きたいって思う人が多いはず(それが静的な型付けを使う意義なわけで)なので、このルーズさはあまりよくないのではないかと。

Written by ufcpp

2011年1月28日 at 19:47

カテゴリー: C#

Tagged with ,

Rx 製品化、NuGetのおすすめ、等々

leave a comment »

そういや、先日、テスト投稿してみたわけですが、MS Word からブログ投稿できるんですねぇ。↓この記事を見て気付く。

込み入ったもの書くときは Word で書いてみようかな。

Written by ufcpp

2011年1月22日 at 15:48

カテゴリー: .NET

Tagged with ,

MS Wordからブログ投稿

leave a comment »

Test

var props =
    from p in typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance)
    let orderAttribute = p.GetCustomAttributes(typeof(DisplayAttribute), false).OfType<DisplayAttribute>().FirstOrDefault()
    let order = orderAttribute != null ? orderAttribute.Order : int.MaxValue
    orderby order
    select p;

return string.Join(“,”, props.Select(p => p.GetValue(obj, null)));

 

a

b

c

d

1

2

3

4

I

II

III

IV

 

Written by ufcpp

2011年1月20日 at 23:54

カテゴリー: 未分類

WebMatrix、IIS Express、ASP.NET MVC 3 RTM、等々

leave a comment »

Written by ufcpp

2011年1月17日 at 17:00

カテゴリー: .NET

第63回codeseek&第5回日本 C# ユーザー会 勉強会

with one comment

今月は以下のテーマで勉強会を開きます。

  • 第63回 codeseek &第5回 日本 C# ユーザー会 勉強会
    • テーマ「若気の至りを清算しよう」(C# 1.0とか2.0時代のコードを今風に書き直そう)
    • 開催概要は下記にて
  • 日時: 2011年1月27日(木) 19:00~21:00
  • 場所: マイクロソフト新宿オフィス(OST)セミナールーム

開催の趣旨は以下の通りです。

いまだに「C# は○○に毛が生えた程度の言語」と思っている人に、C# の進化のすごさを見せつけましょう!

例えば、僕が昔作ったコードの例を挙げると以下のような具合です。

参加者の皆様にも、以下のような感じでまとめ資料などを持ち寄ってもらえるとありがたいです。

参加を希望される方は、codeseek の申し込み方法に合わせて、以下の内容で僕(連絡手段問いません。メールは ufcpp@live.jp)、または codeseek までご連絡ください。

  • メールタイトル:C# ユーザー会(codeseek 共催)勉強会参加希望
  • 名前(必須):
  • メールアドレス(必須):
  • 住所:
  • ハンドル:
  • 懇親会:参加する/未定/参加しない

いただいた情報はC# ユーザー会/codeseekの活動のためにしか使いません。

いただいた情報を会場にお知らせすることがあります。

Written by ufcpp

2011年1月17日 at 15:13

カテゴリー: C# ユーザー会

CSV 化

leave a comment »

何とは言わないけども、こうだと思うんだ:

コンマ区切り – 圧縮 (zip 形式) フォルダー サイズ- 4.3 KB (Order の取り方の部分をちょっと更新)

1ファイル化したもの - CS ファイル サイズ- 2.9 KB

Written by ufcpp

2011年1月13日 at 18:47

カテゴリー: C#