Archive for 1月 2011
TC Labs、Portable Library Tools、cloud development kit for WP7、等々
- 3-Screen Coding Is Here: Portable Library Tools allow you to target multiple .NET platforms with one binary!
- .NET 4、WP7、Silverlight 4、XNA 4.0 for XBox向けに共通利用可能なライブラリを作るためVS拡張
- Microsoft Uses Karaoke Feature on China’s Bing Dictionary
- 英語学習用、発音のところで、カラオケ字幕的なノリで、今しゃべっているセンテンスを色つけ表示してくれるらしい
- 日本展開まだー?
- Microsoft Research delivers cloud development kit for Windows Phone 7
- WP7 向けクラウド開発キット
- 今リリースされてる Windows Azure とかの各種サービス利用だけじゃなく、研究段階のサービスが2つ使えるとか:
- WP7 端末同士で通信するためのサービス
- 相手端末を探すための名前解決サービス
あと、DevLabs になんか増えてる。
分散データ処理やデータ分析系のものを集めて TC (Technical Computing) Labs と称するようになったみたい。含まれているのは:
- Sho
- データ解析用の線形代数ライブラリとデータ可視化環境
- 付属のコンソールアプリ(IronPython ベース)で使うもよし、C# からライブラリ参照するもよし
- 付属のコンソールアプリは IntelliSense 的な補完/ヘルプ機能が結構優秀
- 競合しそうなのは R 言語かな?
- TPL Dataflow
- 元々 Async CTP に含まれていたものの一部で、単独での公開要望が高かったので独立
- データ駆動な Actor (Agent)型のプログラム作成用のライブラリ
- Dryad
- 前からあるもの。TC Labs に編入
- Windows HPC サーバー クラスター上で分散データ処理するための技術
Sho 辺りは何かデモ作りたいなぁ。固有値問題に帰着される問題で、一般受けしそうな話題って何かあったかなぁ・・・
WPF の {Binding Path=/}
昨晩、こんな話が:
WPFのBindingのPathの解決は結構複雑なことをしております。何のせいでそんなに複雑になるかというと、「マスター詳細シナリオ」とか言う概念のせいだったりします。
マスター詳細シナリオ
以下のページ参照:
- データ バインディングの概要 (ページ内を「マスター詳細シナリオ」で検索すれば該当箇所に)
- IsSynchronizedWithCurrentItem プロパティ
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 { get; set; }
public int X { get; set; }
// Y は、SampleData にだけ持つ。
// X と Name は SampleList に同名のプロパティを作ってしまう。
public int Y { get; set; }
}
// こんなことわざわざする人がいるかどうかわからないけども、
// 要素の方と同じプロパティを持つ謎のコレクションを作成。
public class SampleList<T> : List<T>
{
public string Name { get; set; }
public int X { get; set; }
}
Bindingマークアップ拡張は内部で、動的な型(GetType() で得られる型)を見てデータ バインディングしているようなので、IListをDataContextに渡したつもりが、その実体の動的な型はNameプロパティを持っていて…ということも、原理的には起こりえます。
実例
ということで、1つ実例を:
- PathTraverseSample.zip(ソリューション一式、ZIP圧縮)
実行結果のスクリーンショットを3枚ほど:
結果を見るに、正直なところ、Path=/ の省略はおすすめできないです。省略した場合には、以下のような挙動を起こします。
- データ テンプレートの暗黙的な適用(リソース中でDataTemplateにDataType属性を付ける)ができない。
- コレクション自信と要素に同名のプロパティがあったりなかったりするときの挙動が悩ましい(意図しない挙動になりかねない)。
問題
ドキュメント不足
でも、MSDNのサンプルの多くは、この Path=/ を省略していたりします。そのせいで、/ で「選択項目の参照」ができることを知らない人も多かったりします。
その割に、この辺りの挙動(/ を省略した場合、まずコレクション自信を調べて、なければ選択項目を調べる)に関する説明は自分の知る限り見たことがないんですよね。そりゃ、調べればわかりますけども。
.NET文化に合うのか
XAMLは、どうもHTML+JavaScriptとかXPathとかを意識して作られてるんじゃないかと思っているんですが、「知ってると便利だけども知らないとはまる」って感じの「便利な省略」が多いんですよね。かなりルーズ。
.NET文化的には、もっときっちり書きたいって思う人が多いはず(それが静的な型付けを使う意義なわけで)なので、このルーズさはあまりよくないのではないかと。
Rx 製品化、NuGetのおすすめ、等々
- Announcing the Reactive Extensions Developer Center
- Rx は研究段階(dev lab)を卒業し、製品レベルと認められた(Developer Center 入りした)そうです。
- 11 Killer Open Source Projects I Found with NuGet
- NuGet から入手可能なおすすめパッケージ
- 見た感じ、業務系のウェブアプリ屋さんっぽい雰囲気のラインナップ
- A Windows Phone 7 Jump List Control
- デモ動画あり
- 確かにこのコントロールは欲しい
そういや、先日、テスト投稿してみたわけですが、MS Word からブログ投稿できるんですねぇ。↓この記事を見て気付く。
込み入ったもの書くときは Word で書いてみようかな。
MS Wordからブログ投稿
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 |
イ |
ロ |
ハ |
ニ |
WebMatrix、IIS Express、ASP.NET MVC 3 RTM、等々
- ウェブ関連一斉リリース
- そういや、こないだ出た EF CTP5、nuget 経由で入るらしいですね
- EFCodeFirst 0.8 って名前に
- Windows Push Notification Server Side Helper Library
- プッシュ通知のパターンの辺りの文章読むだけでも勉強になりそう。
- This is what Microsoft meant about Multitasking
- あくまで理想像。
- 墓標化(って言えばいいのかな、tombstoning)がちゃんとしてればほとんどの場面でマルチタスキングいらないよね、と。
- でもなぁ、実際 WP7 を触ってると、twitter 公式クライアントの墓標化の出来の悪さに、毎度泣きそうになったりはする。
- VS2010 SP1: T4 Improvements Summary
- VS 2010 で地味に T4 が改善されてるという話。
- 参照アセンブリをロックしなくなって、リフレクションを使いやすくなったとか。
- Silverlight Toolkit に「Silverlight for Windows Phone Toolkit」なる文字が
- Microsoft Mathematics 4.0
- MS Methematics、無償公開になったのね。
- OpenNIの.NET用ラッパーライブラリ「XELF.OpenNI」更新 & サンプル公開
- XELF さんがやってくれました。
- ExpressWeb に Orchard を載せてみるのが最近のはやりか
- お知らせ: mono meeting 2011/01/26 やります
- 最近、新宿方面にはすっかり出ずらく、27日も新宿行きが決まってる身としては2日連続はつらく。
第63回codeseek&第5回日本 C# ユーザー会 勉強会
今月は以下のテーマで勉強会を開きます。
- 第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の活動のためにしか使いません。
いただいた情報を会場にお知らせすることがあります。
CSV 化
何とは言わないけども、こうだと思うんだ:
コンマ区切り – 圧縮 (zip 形式) フォルダー サイズ- 4.3 KB (Order の取り方の部分をちょっと更新)
1ファイル化したもの - CS ファイル サイズ- 2.9 KB
CES での発表等々
CES
CES でちらほら情報出ているものの、最近あまり余裕がなく、メモ書き程度に。
- CES2011:auから出る!? Windows Phone 7 日本語対応が正式発表
- Microsoft plans major overseas Windows Phone push for second half
- Windows 8 でのデスクトップアプリケーション
- More on Microsoft ‘Jupiter’ and what it means for Windows 8
- [CES2011]Microsoft、次期版WindowsでARMアーキテクチャーをサポートへ
- The New Microsoft Surface
- Microsoft confirmed Kinect support for PC
WP7 日本語版に関して
基調講演では特に話題出なかった(と思う)けど、一応、別途、事前リーク通り、今年後半に日本語含む IME 文化圏に対応予定とか。
SoC
Windowsテレビくるー? あと、タブレット型端末への対応が狙いですかね。
Jupiter
Windows 8 では、Silverlight ベースの UI 層が標準になりそうとか? 単に今の Silverlight が OS 標準になるって意味じゃなく、ネイティブアプリでも UI 層は XAML みたいなの使う用になるのかな?
個人的な希望としては、フルバージョンの .NET が、Silverlight のアセンブリ キャッシュみたいな形で「必要に応じて取得、キャッシュ」になってくれないかなぁとか思っていたり。