メイン

.NET アーカイブ

2004年07月10日

INETA Japan リ ーダーズミーティング

INETA Japan リ ーダーズミーティング に出席。

小田急サザンタワーのマイクロソフト 本社 (新宿オフィス) へ。

内容は,

  • 活動報告
  • Tech・Ed 2004』のイベントについて
  • .NET 本について

等。

初参加で初対面の人だらけ.取り敢えず名刺交換。

2004年08月19日

Tech・Ed 2004 Yokohama

Tech・Ed 2004 Yokohama に参加予定 (9/7~10).

目的は,

  • .NET 2.0 の知識
  • Visual Studio 2005 のアジャイル関連の新機能の知識
  • エンタープライズ アプリケーション パターンの知識
  • INETA Japan 主宰のコミュニティ イベントへの参加

2004年09月07日

Tech Ed 2004 Yokohama 一日目

  • INETA Japan Events!「アジャイル開発ライブ」 打ち合わせ
  • MVP/INETA Japan Party + Hard Rock Cafe で二次会

2004年09月08日

Tech Ed 2004 Yokohama 二日目

  • セッション
  • INETA Japan Events!「アジャイル開発ライブ」 打ち合わせ
  • Tech・Ed & MSDN 10th Anniversary Party

2004年09月09日

Tech Ed 2004 Yokohama 三日目

  • セッション
  • INETA Japan Events!「アジャイル開発ライブ」
  • INETA Japan リーダーズ ミーティング
  • INETA Japan 打ち上げ+二次会

2004年09月10日

Tech Ed 2004 Yokohama 四日目

四日間に渡った "Tech Ed 2004 Yokohama" から、新幹線と北陸本線で夜中に帰って来た。ひんやりとした夜風に吹かれながら帰り道を歩いた。虫の声しか聞こえない。こっちはなんて静かなんだろうと思った。

今回は、なんと言っても「アジャイル開発ライブ!」に参加したのが、一番の体験だった。

INETA Japan の人達やその他多くの技術者の人と毎晩のように飲んだり、昔の同僚とばったり会って久々に昼食を共にしたり、NIFTY のフォーラムで以前よくお話をした ひどり さん と初対面したり、同じくNIFTY のフォーラムや XP祭り2002 でお話した επιστημη さんに STL.NET のお話を伺ったり、コミュニケーションが沢山とれた。

# いずれレポートを書きたい。

2004年09月29日

Tech・Ed 2004 参加レポート

2004-09-29-1.jpg

今更ながら、Tech・Ed 2004 Yokohama の参加レポートを書いてみた。

Tech・Ed 2004 Yokohama 参加レポート

参加直後は、なんだか慌ただしくてレポートを書く気にならなかったが、昨日漸く社内報告会をおこなったので、そのついでに書いた。

# ちなみに現在社内では C# + ASP.NET の研修を実施中である。
# 今日は、研修用に以下の本を買った。

ASP.NET+SQL Server ゼロからはじめるWebアプリケーション

2004年10月01日

こんな.NETはいやだ

【.NET】こんな.NETはいやだ

「『こんな .NET はいやだ』と思うものを自由にあげていくテスト。」

2004年10月15日

VB.NET JAPAN TOUR & INETA Japan リーダーズミーティング

VB.NET JAPAN TOUR と INETA Japan リーダーズ ミーティングに参加。
http://www.ineta.jp/activity/calender/

会場は、マイクロソフト株式会社 笹塚 NA オフィス。
vbtr1.jpg

VB.NET JAPAN TOUR では、実際に VB の開発をしているジョーさんとアマンダさんから最新の VB の情報を二時間半に渡ってお話頂いた。

○ 内容

・VB 2003
・Visual Basic Power Pack
・Visual Basic .NET Resource Kit
・Tablet PC
・Vusial Studio Tools for Office
・.NET Compact Framework
・VB 2005
ClickOnce、My クラス、Edit&Continue 等
・Q&A

○ お土産

・Net Compact Framework Guide (Pocket Reference (O'Reilly))
・Visual Basic .NET Resource Kit CD
・Microsoft Mobile DevCon 2004 Conference DVD
・VB.NET World Tour Tシャツ

ジョーさんもアマンダさんも笑顔が魅力的な方だった。
通常の講演と異なり、気軽に随時質問も O.K. とのこと。講演者との距離が近い感じで、リラックスして聴けた。

私は VB でなく C# を主に使っているが、今の仕事で役に立つ知識が結構得られた。来週にでも調査してみたいことが幾つか。
vbtr2.jpg

※ 通訳付き、軽食と飲み物付きだった。

その後、INETA Japan リーダーズ ミーティングは一時間程度。
主に、INETAJ の今後について話し合われた。

終了後は、新宿で飲み会 (一次会・二次会)。
INETA 参加者の方達と五名で。
楽しいお話が沢山聞けて、とてもおいしいお酒だった。
少し焼酎を飲みすぎ。

2004年11月03日

Microsoft Tech・Ed 2004 Yokohama 「Post Conference DVD」

Microsoft Tech・Ed 2004 Yokohama の 「Post Conference DVD」が送られてきた。

内容は、

  • 「Post Conference DVD」 4枚
    Learning Day や 基調講演、テクニカル セッション等の 映像 (Windows Media) や資料 (Power Point)
  • 「Visual Studio 2005 Beta 1 Refresh with Visual Studio 2005 Team System (英語版)」
  • 「SQL Server 2005 Beta 2」と「SQL Server 2005 Beta 2 ハンズ オン ラボ DVD」

Visual Studio 2005 Team System は楽しみにしていたもの。
早速個人的にも仕事上も評価して行きたい。

また、参加できなかったセッションについてもこれで内容を把握することができる。

続きを読む "Microsoft Tech・Ed 2004 Yokohama 「Post Conference DVD」" »

2004年11月04日

.NET/C# 研修

今日から、.NET/C# の社内研修を始めた。

ASP.NET 研修は、ずっと前から続行中だが、今度のは、Windows フォーム中心。
C++/C# での Windows 上での CAD の作り方の研修も数回実施。

自分の学習の方が全然進まない。
読みたい本もあるが、それより、もっとプログラミングを試したい気分。

今度、.NET Windows フォーム用のフレームワークと、その上にのる CAD のフレームワークのモデリング&実装をしてみたい。これはいずれにしても一度試す必要がある。
他にも .NET 上で実装を試したいものが幾つかある。開発用のツールとある種の ASP.NET アプリケーション。

2004年11月17日

Microsoft patterns & practices

mvc.gif

近年マイクロソフトが力を入れているらしいパターン関連の頁は、今後益々要チェックのようだ。

日本語の書籍も今月頭に発売になっている。

最近 ASP.NET の社内研修をやっているのだが、見ていると、或る程度 ASP.NET が判ってきて実用的なプログラムを書こうとしたときに、よく戸惑うのが、次のような点らしい。度々質問を受けた。

  • 「ページのクラスとデータに関連の強い部分のクラスが入り乱れてしまうのだけど、それぞれどのように作っていったらいいの?」
  • 「ページが沢山になったときに共通の処理をどこかに纏めたいのだけど、どうするのが普通?」
  • 「ページ遷移が複雑になったときに、ソースが汚くなるのだけれど、何か良い方法はないかしら?」

ASP.NET でアプリケーションを書き進めていくと、上のようなことが解決できず、直ぐにソースがぐちゃぐちゃになってしまう、と言うのだ。

そういう人には、先の Microsoft patterns & practices から、先ず以下を試してみるように言ってみる。

かなり手取り足取り説明してあるので、パターンに不案内な人にも分かりやすい。
また、テストのしやすさについても言及されているのが良いと思う (*1)。

後は追加で「『3 層分散』周辺は読んどいてね」とか、Singleton パターンくらいなら知っているという人には「『C# でのシングルトンの実装』が面白いよ」とか。
とにかく、効果が実感しやすそうなところから紹介していく。

この辺に少しずつ慣れていって、それから少しずつ、ドメイン モデルを作るべきかどうかや、ユーザー インタフェイスのテスト方法などについても考えていったら良いと思う。
そして、色々とパターンを試していく中で、プログラムの複雑さをどこにどんな風に吸収させていけば良いのか、そのコツを帰納的に体得していくのが良い。
パターンは教育ツールとしても強力なのだ。


(*1) これからは、デザイン パターンやアーキテクチャ パターンの記述のテンプレートに「テストのしやすさ」という項も追加するのが良いのではないだろうか。
パターンを適用することでどう設計が良くなるのかを言うのに、「テストがやりやすくなる」というのは判りやすい指標になると思う。

2004年12月05日

2004 Japan Community Open Day

2004 Japan Community Open Day に参加予定。

2004 Japan Community Open Day
日時 2004/12/18(土) 14:30-21:30
場所 マイクロソフト 新宿オフィス17階会議室
概要 コミュニティ活動や Visual Studio 2005 Team System などに関するワークショップ

沢山のワークショップが行われる。
Visual Studio 2005 Team System 関連のワークショップへの参加を希望した。

# 翌日は、INETA Japan のリーダーズ ミーティングに出席予定。

2004年12月20日

『2004 Japan Community Open Day』 & 『INETA Japan リーダーズ ミーティング』

INETA Japan の関連で上記二つのイベントに参加してきた。

sjkttntw.jpg
・両方の会場となった小田急サザンタワー

■ 12/18(土)

この日は、『2004 Japan Community Open Day』に参加。

2004 Japan Community Open Day
時間 14:30-21:30
場所 マイクロソフト 新宿オフィス17階会議室
概要 コミュニティ活動や Visual Studio 2005 Team System などに関するワークショップ

cmntyod.jpg
・Community Open Day の様子

  1. Visual Studio 2005 Team System を用いたアジャイル開発と手法
  2. Visual Studio 2005 Team System Genera

の二つのワークショップに参加した。
Team System について、無責任に言いたいことを沢山言ってしまった。やれ導入しづらいだの、やれ高すぎるだの。
MS の人は熱心に聴いてくださったが、果たしてフィードバックになっただろうか。

その後、中華レストランで懇親会。
INETA の皆さんや MVP の方々、MS の方々など、色々な人とお話をさせて頂いた。
# 途中「○×ゲーム」があったが、商品ゲットならず。

そして二次会。
小井土 さん、福井 さん、中西 さんとご一緒させていただいた。
レゴの話などで盛り上がった。

コミュニティ関連の飲み会でいつも感じることだが、こういう素敵な方達と自分が一緒にいる状況というのは、五年前の自分には想像することもできなかった。
コミュニティならではの体験だと思う。


その後、12時過ぎにホテルにチェックイン。
ジャグリングの練習をした (謎)。


■ 12/19(日)

翌日は、『INETA Japan リーダーズ ミーティング』に出席。

第8回 INETA Japan リーダーズミーティング
時間 10:30-14:00
場所 マイクロソフト 新宿オフィス17階会議室

帰りはPAPA'n VB の杉下 さんとたまたま飛行機が同じだったため、新宿~福井県丸岡町まで、話をしながら帰ってきた。
バスで帰る予定のところ、車で送っていただいた。
杉下 さんに感謝。

今回やっと羽田空港第二ターミナルを初利用。
haneda2t.jpg
・羽田空港第二ターミナル

続きを読む "『2004 Japan Community Open Day』 & 『INETA Japan リーダーズ ミーティング』" »

2005年01月13日

.NETで始めるデザインパターン

stateptn.jpg
楽しみにしていた 中西 さん の記事が @IT に載った。

私の偏見かも知れないが、.NET 開発者は、Java の人たちと比較して、オブジェクト指向だのデザインパターンだのに慣れていないような気がする。

だから、今回のような .NET 開発者向けの記事は、これからとても重要だ。

これから .NET 開発者の前には、テスティング フレームワークだとかリファクタリングだとかエンタープライズ パターンだとか DI (DependencyInjection) コンテナだとかアスペクト指向だとか、Java の人たちが取り組んできた様々な技術の可能性が待っている。
そしてこれらは、オブジェクト指向やパターン技術に関する知識を前提としているのだ。


ところで、中西さんは、ドットネッターでアジャイラーで TDD Player (謎) だ。
なので、デザインパターンの有用性を .NET 開発者に教えるのにもなんだかとてもアジャイルな感じだ。

これまでのデザインパターンの解説に、次のような言葉が使ってあるものがあっただろうか。

  • 「モチベーション指数」
  • 「ホワイト・ボードにクラス図」
  • 「NUnit用テスト・コードを記述してみよう」

例題も、HowMuchGreenbarLover メソッドだとか、HowHappy メソッドだとか。
福井 さん も書いてたが、とても中西さんらしい。

※ この記事は、Ichikawa さん のところでも紹介されている。


さて、今回の記事では、次のような問いに答えている。

問い: 「デザインパターン? 何それ? 何が良いの? .NET な我々にメリットあるの?」

でこれに関する有り勝ちな答え:

  1. 「デザインパターンというのは、こうこうこういうものだ」
  2. 「例えば、State パターンというのがあって、それはこういうもので・・・」
  3. 「使い方は、こんな感じ」
  4. 「VB.NET や C# でサンプル コードを書いてみると、こんな感じだよ」
  5. 「ねぇ、わかった? 良さそうでしょ。使ってみてよ」

これは、演繹的な説明だが、なんだかウォーターフォールな感じだ。
「うーん、どういうものかはなんとなく判ったけど… まあいいや、また今度改めて勉強するよ」
とか言われてしまいそうだ。
# 私経験有りますから!! 残念!!! 切腹!

で、中西 さん の答えは一味違う。少し真似してみるとこんな感じだろうか。

中西さん風の答え:

  1. 「例えば、VB.NET や C# でこんなコードがあるとするやん」
  2. 「ありがちなコードやけど、これってどうなんかなー 自分どう思う?」
  3. 「こんな風にしてみたらどうかなー」
  4. 「な? 自分知ってるやろ? ポリモーフィズム。どう、これ」
  5. 「これが State パターンや。で、今やったのがリファクタリング」
  6. 「な? 今度から State パターンやらいうたら、こういうのを指すんやで」
※ フィクションです。実在の中西さんとは関係ありません。


「デザインパターン23個覚えたぞ。さあ何かに役立てよう」でなくて、リファクタリングの結果として、使うべきところに使う分だけのデザインパターン。
こういきたいものだ。

さあ、今後の連載にも期待だ。

続きを読む ".NETで始めるデザインパターン" »

2005年01月19日

Developers Summit 2005 (デブサミ2005) ― VB.NET vs C# 『.NET 言語合戦』


デブサミ2005

デブサミで INETA Japan として以下をやります。
# 私は C# 側。
是非ふるってご参加ください。

Developers Summit 2005 (デブサミ2005 ― VB.NET vs C# 『.NET 言語合戦』)
日時 2005/02/03(木) 17:30~19:00
会場 青山ダイヤモンドホール B1F 会場 C
主催 株式会社 翔泳社
詳細 イベント告知サイト (Developers Summit 2005) にて


関連リンク:

2005年02月09日

デベロッパーズ サミット2005

上記に参加してきたので、レポートしてみたい。

■ 詳細

Developers Summit 2005
日時 2005/02/03(木)~04(金)
会場 青山ダイヤモンドホール
主催 株式会社 翔泳社
詳細 Developers Summit 2005


■ はじめに

デベロッパーズ サミットの開催期間には丁度、寒気団が日本上空に来ていた。
北陸地方は、今年一番の大雪で、出発前日の午前中には羽田行きが飛ばなかったこともあり、無事会場に行けるかどうかが先ず心配だった。

当日の朝は、五時半に自宅を出発した。道には新雪が積もり、ちょっと油断するとすぐスタックしてしまう。
高速道路もすっかり凍っている。凸凹の路をゆっくりと走った。

それでも小松空港には随分早くついた。INETAJ のイベントに一緒に出る杉下さんも、たまたま飛行機が同じで、同じ頃に空港にいらした。
心配した飛行機は定刻通りに出発し、定刻通りに羽田に到着。予定通りに会場につくことができた。ほっと一安心。


dvsm0502.jpg dvsm0508.jpg dvsm0503.jpg dvsm0501.jpg

さて会場に入ると、すごい人の行列。
二日間会場の青山ダイヤモンドホールは大変な人で、歩くのに苦労した。

デベロッパーズ サミットには、最初の年から毎年参加しているが、参加するたびに良くなっている。
特に今回は、楽しみなセッションが盛り沢山で、選ぶのに迷うほどだった。


ただ、昨年も感じたことだが、あの Web からの申し込みのユーザー インタフェイスはちょっと「いけてない」気がする。
あれは本当にユーザーの方を向いた UI と言えるのだろうか。
ユーザー側の関心事に対してではなく、主催者側の関心事に対して UI が設計されているように感じた。

  • 主催者側の関心事 : 各セッションに何人の人が参加しようとしているのか。どういう人が参加しようとしているのか。
  • ユーザー側の関心事: 自分がどのセッションを何時受けるか。申し込み/変更/キャンセルの方法。

今回の参加者、即ちデベロッパーにとっては、ユーザーの視点・ユーザーの関心事に合わせるのがデフォルトだから、多分違和感有りまくり。


でもまあ、その他の面では大満足。とっても良いイベントだった。
デベロッパーが中心というのが実に良い感じ。

このイベントのサブタイトルに「デベロッパーの復権」というのがある。
この趣旨には大賛成。
日本のデベロッパーも、もっと楽しく自信に満ちて物作りをして良い。


■ 参加内容

○ XP事例カタログ
大熊 知栄 氏、猪狩 錦光 氏、関 将俊 氏、小倉 唯克 氏

四年の歴史を誇る XPJUG (日本 XP ユーザグループ) で紹介されてきた XP プロジェクトの中から三つの例が紹介された。

すごい人で立ち見がでている。

大熊 さんの司会に始まり、三人の発表者が順に XP 事例の紹介を行った。

関 さん の発表は、XP 祭り 2004 で 関 さん が発表された内容「三年目の報告」(サブタイトル「XPが良いか悪いかなんて話は もうしないよ。」) だが、マイナー バージョンアップしていて「その後」が少し語られた。題して「3.5年目の報告」。「忍者式テスト」など、独自に XP をカスタマイズされている。
二人目の方はゲーム業界での XP。単純作業などのときに使う「ペアプロ解除」というプラクティスが興味深かった。

お二人とも開発者として、XP をやっていく中で現実的な解をいくつも見つけている。
また、回顧をよくやっていて、次にフィードバックしている。

今回特に良かったのは、顧客側からの XP プロジェクトの発表があったことだ。
以前見たことのあるバーンダウン チャートが顧客側視点で語られた。
これは結構目から鱗で、視点が変わると随分違って見えるものだと思った。


○ 失敗から学ぶプロジェクトマネジメント
伊藤 健太郎 氏

dvsm0504.jpg
XP だけでなく、プロジェクト マネジメントについても学ぶ必要があるだろう、ということでこのセッションを聴きにいった。

  • プロジェクトの失敗原因は? → プロジェクト マネジメントの進化のさせ方

という内容のセッション。
プロジェクトの失敗原因で、

  • プロジェクトを KKD (勘と経験と度胸) で実施

というのが印象的だった。

ソフトウェア開発の場合、QCD (Quality: 品質・Cost: コスト・Delivery: 納期) のマネジメントだけでは、中々プロジェクトの成功に結び付かない、とよく言われているようだが、プロジェクト マネジメントも進化しているようだ。

講演中、プロジェクト マネジメントによるプロジェクト成功のための様々なキーワードが使われたが、「いけてる」と思ったものを私の独断であげてみる。

  • いけてるキーワード:
    • コミュニケーション
    • モチベーション
    • キャリアパス
    • ナレッジ マネジメント
    • メンタリング

ところで、はじめの方で「是非このセッションが思い出に残るように」とのことで、「プロジェクトの失敗について隣の人と話してみよう」という時間があった。
アイス ブレーキングなんだろうが、これはちょっといけてない。余りにも唐突で中途半端な感じ。


○ .NETでアジャイル ペアプロ ライブ! ~VB.NETはテスト ファーストで行こう!
中西 庸文 氏、福井 厚 氏

dvsm0505.jpg

「ドットネッターでアジャイラーで TDDer (謎)」になるための方法について。

最近は、Java の開発者に比べてアジャイルに馴染みが薄い .NET の開発者の人たちにもアジャイルな開発を知ってもらいたいという趣旨の講演や記事が(ようや)く増えてきたようだ。
嬉しい限りだ。

さてこのセッションだが、なんと終始関西弁。
ペア プレゼンになっていて、会話形式で説明が進められていく。

圧巻は途中二回の「ペアプロ笑劇場」と題したペアプロ ライブ。
若手アジャイラーとアジャイル未経験なベテラン先輩開発者という設定で、テスト ファーストなペアプロを行う。
で、このペアプロが TDD で且つ TDD (謎) なのだ。

前者の TDD は、勿論テスト駆動開発 (Test Driven Development) のこと。アジャイルではお馴染みの手法だ。
後者の TDD (謎) は、ツッコミ駆動開発 (Tsukkomi Driven Development)。
テンポの良いボケとツッコミによって、開発が進められていった。このテンポは関西弁ならではかも。

※ ちなみにツッコミ駆動開発にもペアプロは必須。
※ 一人でぶつぶつとボケとツッコミをしながらプログラミングされるのはかなり嫌だ。

面白いのは、ペアプロなので、ドライバー役 (キーボードでプログラムを書く方: リアルタイム コード レビューア) とパートナー役 (ドライバーのコーディングを見ていてリアルタイムにフィードバックを行う) があるのだが、パートナーがボケてドライバーがツッコんでいたりする。


二回目の「ペアプロ笑劇場」では、Mock (擬似オブジェクト) によるテストも紹介され、技術的にも興味深かった。


このセッションを聴き終わって考えたこと:
これは私の経験則だが、アジャイルな人というのはアジャイルな講演をする。
見ていて感動が有る。
プレゼンテーションが濃いのだ。

薄いセッション → 濃いセッション → もっと濃いセッション
パワーポイントに文章を書いておいて、それを読みながら解説 → 実際にやってみせる → 参加者に体験してもらう
言葉で説明する → 図や写真で説明する → 寸劇で表現・動かして説明
抽象的な新しいアイディアを述べる → 具体的な例を交えて新しいアイディアを述べる → 新しいアイディアを試してもらう

コミュニケーションの帯域が違うのだ。時間当たりに伝わる情報量が違う。
これは、沢山話して言葉数を増やす、ということではない。沢山のパワーポイントを用意する、ということでもない。

発信側でなく受信側の情報量を増やすのだ。
新しいアイディアというものは、いくら言葉数を増やしたって伝わらないものは伝わらない。
見せる工夫、伝える工夫をしなければ。

私はこれを Broadband Communication と呼びたい。

brdbndcm.gif

仕事でも多分同じだ。

例えば、

  • 「プロジェクトの失敗の主な要因はコミュニケーション エラー」

という問題提起があるとする。先のプロジェクト マネジメントのセッションでもこれはあげられていた。

でそれに対する解。プロジェクト マネジメントのセッションでは、

  • 「コミュニケーションは『お仕事』なんだからしっかりやらなくちゃ」

ということだった。

でも「プロジェクトの失敗の主な要因はコミュニケーション エラー」という問題提起に対して、しっかりやるべきなのは自明であって、それだけでは不十分なのだ。
そこには「見える化」など実践するための工夫がなければならない。アジャイルな人たちはそこが上手だと思う。


○ INETA Japan Presents VB.NET vs C# 『.NET 言語合戦』
河端 善博 氏、東海林 秀晃 氏、小野 修司 氏、石野 光仁 氏、菊池 和彦 氏、小島 富治雄 氏、福王寺 聡明 氏、杉下 朋年 氏、中西 庸文 氏、片岡 真二 氏、樋口 忠洋 氏、Hollytown 氏

Visual Studio .NET 2003 になってからは、VB.NET と C# はそれほど使い勝手に違いがなくなりつつある。2005 では更に優劣がなくなる。
その中で、VB.NET と C# のそれぞれの長所をあげて、双方の使いどころについて考えてみよう、という趣旨のイベント。
別にどっちを使っている方が偉いかを競う訳ではない。

INETA Japanは、.NET のコミュニティのコミュニティだ。
私は、パネラーの一人として参加。C# 側。

ライブで VB.NET と C# のそれぞれで七並べの戦略部分をプログラミングし、その場で対決した。
お客さんは勝つと思う方に投票し、勝負の結果により、アマゾン ギフト券や PSP などが当たる。全員に参加賞もあたる。

パネル ディスカッションは、どうやら C# 側が劣勢な(まま)終わってしまった。折角 C# 側のパネル リーダーの小野 さん が頑張ってくれてたのに。残念。
C# を応援してくれてた参加者の方はさぞやきもきしたことだろう。
というか、VB.NET 側のパネル リーダーの杉下 さん のプレゼンが良過ぎた。

反対にプログラミング ライブの結果の七並べの対戦では、C# 側が終始優勢だった。

商品の効果かも知れないが、全体としては結構ほんわかと盛り上がっていたようで、コミュニティ色が出ていて良かったのではないだろうか。


○ My Framework作成の勧め:アプリケーションを30個作る時に何を用意するか
arton 氏

或る業務に関して、沢山アプリケーションを書くのであれば、その業務に特化した良いマイ フレームワークを自分で書いた方が良い、というお話とその作り方のお話。

arton さん のお話は、理論的で且つとても判り易い。

  • フレームワークって何のことだったのか。
  • 作ると何がうれしいのか。
  • 良いフレームワークってどういうものか。
  • そして .NET 上で作る方法は。

arton さん の独特の語り口は、とても説得力がある。

フレームワークの作り方の話は特に技術的に興味深かった。

パラメータ、プッシュ モデル (Tell) /プル モデル (Ask)、依存性注入 (Dependency Injection) などの実際の実装方法を、C# のソースをデバッグ実行しながらデモで見せてくれた。

リフレクションで仮引数名で検索してみせたり、実行時にコンパイラを呼び出してパラメータを評価させたり、自作の DI コンテナを使って依存性注入を実際にやってみせたり、ととても楽しめた。

※ ちなみに、このソース コードは公開されている。


○ フレームワークの効能と、.NET導入事例紹介
三部 雅法 氏

.NET Framework 上でのフレームワークの紹介とその導入事例の紹介。
自社製フレームワークの説明という感じ。


○ セッション参加者のパーティー (懇親会)

dvsm0507.jpg dvsm0506.jpg

一日目の夜は会場でパーティーがあった。
デベロッパーズ サミットの場合は、他のイベントと比較して広い分野から参加者が集まっている。
で、層としては技術者が中心。
なんか縦割りでなく横割な感じで新鮮だった。

例えば、ドットネッターとアジャイラーは日頃それ程イベントでかぶらない。
今回はあちこちでドットネッターとアジャイラーが名刺交換する風景が見られた。

私も、多彩な人とお話ができて実に楽しかった。


○ 二次会

懇親会を途中で抜け出して、ドットネットな方々 (INETAJ・MVP) と原宿辺りで二次会。


○ その他

二日目の午前中は、INETAJ のリーダーズ ミーティングに参加した。
マイクロソフト 新宿オフィス。
その後 INETAJ の方々と食事会。


■ 人とのつながり

今回も多くの方々と話すことができた。
イベント参加の一番の収穫。

  • 今回デブサミで初めて直接ご挨拶できた方々 (50音順):
    小野 さん、菊池 さん、国広 さん、関 さん、田中 さん、原 さん、樋口 さん…
  • デブサミで再会できた方々 (50音順):
    arton さん、天野 さん、石野 さん、市川 さん、岩切さん、牛尾 さん、大熊 さん、太田 さん、小野 さん、沖田 さん、角谷 さん、懸田 さん、片岡 さん、河端 さん、倉貫 さん、小井土 さん、児玉 さん、佐藤 さん、渋木 さん、東海林 さん、杉下 さん、中西 さん、平澤 さん、平鍋 さん、福井 さん、福王寺 さん、松本 さん、水越 さん、堀田 さん、安井 さん、吉原 さん、和田 さん…
  • 同じデブサミ会場にいらしたのに再会できなかった方々 (50音順):
    北野 さん、本間 さん、森屋 さん、和田 さん…

※ お会いしたのにお名前のもれてる方、すみません。ご指摘頂けると幸いです。


■ 関連リンク:

2005年02月10日

C# vs. VB.NET

2/3 に行われた Developers Summit 2005 ― INETA Japan Presents VB.NET vs C# 『.NET 言語合戦』 のために集めたネタ (とイベント中で使われたネタ)。

2005年02月15日

C# Tips: interface を 抽象クラス (abstract class) とどう使い分けるか

# 久々に技術ネタを書いてみる。 # と言っても、某掲示板で使ったネタの使い回し。

csharp.gif

C++ にはなかった新しいキーワードとして、C# では interface というものが出てくる。 interface は、Java ではおなじみのキーワードだ。
例.

interface ICloneable
{
    object Clone();
}
interface では公開されているメソッドとプロパティの外見 (名前、パラメータ、戻り値) だけが宣言されていて、実装部分が定義されていない。実装部分は、その interface を実装するクラスによって定義される。
例.

class Employee : ICloneable
{
    private string name;

    public string Name
    {

        get { return name; }
        set { name = value; }
    }

    public Employee(string name)
    { Name = name; }

    public object Clone()
    {
        return new Employee(Name);
    }
}
interface は 抽象クラス (abstract class) と機能的には似ている。 抽象クラスも、中身のないメソッド (abstract method) の宣言を持つことができ、そこから派生したクラスで、そのメソッドの実装を定義する。
例.

abstract class Person
{
    private string name;

    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    public Person(string name)
    { Name = name; }

	public abstract void DoSomething();
}

class Employee : Person
{
    public Employee(string name) : base(name)
    {}

	public override void DoSomething()
    { /* Do good job. */ }
}
機能上の大きな違いとしては、
    • 抽象クラスは、実装を持つこともできる。上記の例でいうと、name や Name や Person(string name)。
    • interface は、実装が持てない。
    • 抽象クラスは、二つ以上継承できない。つまり、多重継承できない。
    • interface は、二つ以上でも継承できる。
というものがある。 しかし、機能上の違いでなく、使い分けるときの一般的な指針はないだろうか。 デザインパターンの一つである、State/Strategy パターンの場合で考えてみよう。 先ずは、抽象クラスを使った場合と、interface を使った場合の両方について書いてみる。
・抽象クラスを使った場合の例: statebyac.png

class Context
{
    State state = null;

    public State State
    {
        set { state = value; }
    }

    public void DoSomething()
    {
        if (state != null)
            state.DoSomething();
    }
}

abstract class State
{
    public abstract void DoSomething();
}

class ConcreteState1 : State
{
    public override void DoSomething()
    { /* 省略 */ }
}

class ConcreteState2 : State
{
    public override void DoSomething()
    { /* 省略 */ }
}
・interface を使った場合の例: statebyit.png

class Context
{
    State state = null;

    public State State
    {
        set { state = value; }
    }

    public void DoSomething()
    {
        if (state != null)
            state.DoSomething();
    }
}

interface State
{
    void DoSomething();
}

class ConcreteState1 : State
{
    public void DoSomething()
    { /* 省略 */ }
}

class ConcreteState2 : State
{
    public void DoSomething()
    { /* 省略 */ }
}
さて、State/Strategy パターンを使う場合、はたしてどちらが標準的なのだろうか。 「State/Strategy パターンを構成している部分だけ」を見ると、或る振る舞いに関する制約が付けられれば十分なので、interface が適しているような気がする。 但し、実際の設計では、
「State/Strategy パターン」を使おう → じゃ interface を使おう
とはならない。 それは、通常 State/Strategy パターンが適用される場合というのは、先ず (リファクタリングなりの結果としての) クラス設計があって、そこにおける抽象化すべきものがクラスなのか、振る舞いに関する制約なのかの判断があり、結果として「State/Strategy パターン」の形になるだけであるからだ。 つまり、抽象化したいのがクラスであれば抽象クラス、単なる振る舞いに関する制約であれば interface、という感じで使い分けることになる。 それから、もう一つ。 実装上の問題として、State/Strategy パターンなどが対象としている関心事が、既存のクラス階層と直交する関心事であった場合は、抽象クラスでなく interface を使う。多重継承ができないからだ。 例えば、始めの方の例でいうと、
umlpe.png
等の継承によって形成される継承ツリー或るいはその他の継承ツリーが対象としている関心事と、ICloneable が対象としている関心事は直交している。 従って、ICloneable の方の関心事の実装には interface を使う。 これは、「アスペクトの実装を便宜上 (言語の都合上) interface で行う」というイディオムといえるかと思う。 尚、余談になるが、Strategy パターンの場合は、抽象クラスも interface も使わずに delegate を使う、というイディオムも有ると思う。
例.

class Context
{
    public delegate void DoSomethingMethod();

    DoSomethingMethod doSomething = null;

    public DoSomethingMethod OnDoSomething
    {
        set { doSomething = value; }
    }

    public void DoSomething()
    {
        if (doSomething != null)
            doSomething();
    }
}

続きは「[C#] Tips: interface と partial class で横断的関心事を分離」。

用語解説:
  • インタフェイス (interface):
    広義では、境界。或る纏(まと)まりと別の或る纏まりが接する点のこと。ソフトウェア開発では、或るモジュールが別のモジュールに公開している機能の利用方法を記述したもののセット。オブジェクト指向においては、特に、それを実装するクラスに必要なメソッドやプロパティ、イベントのセットを定義したもの。
  • ソフトウェア パターン (software patterns)
    ソフトウェア開発のためのパターン。ソフトウェアを設計する際に繰り返し現れる経験的な要素を抽出したもので、効率の良いプログラミングをするためのテンプレート。「デザイン パターン」、「アーキテクチャパターン」、「アナリシス パターン」、「アンチ パターン」、「イディオム」等の種類がある。
  • デザイン パターン (design patterns)
    ソフトウェア パターンの一種で、OOD (オブジェクト指向設計) において、過去のソフトウェア設計者が発見し、編み出した設計ノウハウを蓄積し、名前をつけ、再利用しやすいように特定の規約に従ってカタログ化したもの。
  • イディオム (idiom)
    プログラミング言語やプラットフォームなど、実装レベルの問題に対するソフトウェア パターン。
  • 関心事 (concerns)
    ソフトウェアを構成する様々な要素のうち個別に着目することができひとまとめに扱うことのできる何か。
  • 横断的関心事 (Crosscutting Concerns)
    分割されたモジュールをまたがる関心事。例えば、「オブジェクト指向のパラダイムによって関心事の分離がなされたモジュール」間にまたがる関心事。
  • 関心事の分離 (SOC:Separation of Concerns)
    関心事を分離すること。関心事によってプログラムをモジュール分割すること。
  • アスペクト (aspect)
    様々な視点からみた際に、関心事 (特に横断的関心事) として分離されるべきソフトウェアの持つ側面。

C# Tips: 継承

inheri.gif

今まで新人向けのオブジェクト指向の研修で、「継承」というのは、


    class Sub : Super
    {
    }

こういうのだ、とか説明してきたんだけど…

ごめん。この説明はちょっとごまかしなんだ。
説明が面倒だったから…

本当は、これは C# 言語の「派生」なんだ。オブジェクト指向でいう継承と同義じゃない。
これは、「『派生』という機能を使って継承を実装する」っていう C# のイディオムに過ぎないんだ。


他にも、オブジェクト指向の用語を C# にマッピングして説明するときに結構ごまかしてるんだ。


    Super  s = new Super();

オブジェクト指向っぽくこれを表現してみると、
「Super というクラスに new というメッセージを送ると s というインスタンスが作られた」
という感じかな。


    s.Foo();

これも、「s という名前のインスタンスに Foo というメッセージを送ると s はそれに応じた振る舞いを行う」という感じに表現できる。


でも、実は C# 的には、s はインスタンスじゃない。参照変数に過ぎない。インスタンスを参照してるだけ。インスタンスは別に在る。

これも、「クラスのインスタンスを参照変数で表現」っていう C# でオブジェクト指向をやる場合のイディオムを前提に説明しちゃってる。

用語の曖昧さを使って誤魔化していたんだ。説明すると長くなっちゃうからね。
本当は、どのレイヤの話をしているのか、明示すべきなんだ。

ごめんよ。

2005年03月08日

.NET Tips: VC++ から来た人向け

tips.gif
■ VC++ から来た人向けの資料

VC++ でウィンドウズ アプリケーションを書いていた人が、.NET 開発を始めるときに重宝するドキュメント。
※ 特に C + Win32API で書いてた人向け

2005年03月09日

.NET Tips: C#で XML コメントからヘルプを作成

tips.gif
■ Visual Studio の HTML ヘルプ作成機能

C# では XML コメントを書くことで、HTML ヘルプをコードから自動生成することが出来る。
※ 尚、VB.NET では次期バージョン (2005) から、この機能に対応する。

Visual Studio では、メニューから「Web ページのビルド コメント」を選ぶことで、コードの XML コメントからHTML ヘルプ作られる。

但し、この機能で作られた HTML ヘルプは、Windows XP SP2では見ることができない。

参考:


■ NDoc の紹介

"NDoc" というツールを使うことで、MSDN のような HTMLヘルプ形式 (.chm ファイル) を含む様々なヘルプ形式を出力できる。
※ プロジェクトのプロパティで「XML ドキュメント ファイル」を指定しておく必要がある。

NDoc の使い方はこちらを参考に。

2005年03月10日

.NET Tips: 名前付けのガイドライン

tips.gif
■ .NET 開発における名前付けのガイドライン

.NET 開発でクラス名や変数名などのシンボル名を付けるときのガイドライン。

参考:

  • C#コーディング標準 (by 河端 善博 氏)
  • VB.NET コーディング標準 (by 中西 庸文 氏)
オブジェクト倶楽部 ― コーディング規約の会 にあります。

2005年03月14日

.NET Tips: .NET 開発用のツール

tips.gif
■ .NET 開発用ツール

.NET 開発用の様々なツールが存在している。
※ 森屋 英治 氏 により N* (エヌアスタ) と命名されている。

  • NWiki
    中西 庸文 氏 により、.NET 開発のためのツールが紹介されている
  • SharpToolbox (英語)
    .NET 開発のためのツールがとても沢山紹介されている
  • Open Source Software in C# (英語)
    こちらは開発用ツールも含む、C# で書かれたオープン ソースのソフトウェアが沢山紹介されている

2005年03月15日

.NET Tips: ASP.NET Web アプリケーションの設計パターン

tips.gif
■ ASP.NET Web アプリケーションの設計パターン

ASP.NET でアプリケーションを作っていく場合、よく入門書などにあるように、Visual Studio 上、でコントロールやデータ クラスをドラッグ&ドロップで作っていくと、

  • 「ページ = クラス」
  • データに関する処理は、各クラスに分散
  • 頁遷移に関する処理も各クラス (= 各ページ) に分散
  • UI に関する処理とデータに関する処理とロジックが混在

となり、或る程度以上の規模のアプリケーションでは、複雑なコードとなることが多い。

そのような場合にどのように設計を行うのが良いか。その代表的な設計のパターンを幾つか紹介する。


参考:

参考書籍:

2005年03月16日

.NET Tips: セキュリティ ― ASP.NET での 危険な HTML の入力を防ぐ

tips.gif
■ Web アプリケーションにおける 危険な HTML の入力

先ず Web アプリケーション一般における、危険な HTML の入力とはどのようなものか、以下を参照のこと。

■ ASP.NET での対策

今の (.NET Framework 1.1 以降の) ASP.NET では、デフォルトでは、タグ入りの入力などは、自動でチェックされ、危険なリクエストを受けると例外がスローされる。
これにより、アプリケーションがサニタイズを怠った場合でも、最低限のセキュリティ対策はとられることになる。

これをオフにするにし、アプリケーション側でサニタイズを行う場合には、

Web.config で、

のようにする。

※ 参照:

アプリケーション側で HTML サニタイズを行うには、以下のメソッドが便利。

データバインド時に使う場合はこんな感じ:

<%# HttpUtility.HtmlEncode(DataBinder.Eval(Container, "XXXXX").ToString()) %>

※ 関連サイト:

2005年03月17日

.NET Tips: セキュリティ ― Web アプリケーションにおける SQL インジェクション対策

tips.gif
■ Web アプリケーション一般における、 SQL インジェクションの脅威

先ず Web アプリケーション一般における、 SQL インジェクションの脅威とはどのようなものか、以下を参照のこと。

■ .NET の Web アプリケーションにおける対策

対策としては以下を参照:

2005年03月22日

C#がJISに制定

csharp.gif
C#言語がJIS (Japanese Industrial Standard: 日本工業規格) に制定された。JIS X 3015。

C# 好きの私としては喜ばしい限り。

2005年04月15日

Visual Studio 2005 Beta2 リリース間近?

昨年の夏前に Beta を見てその強力な機能強化に魅入られて以来、待ち遠しい Visual Studio 2005 だが、果たして何時頃出るのだろうか。

先ずは近々出る予定の Beta2 に期待が掛かる。
下の記事を見る限り、4/25 (3/56) 辺りに Beta2 が出るようだ。
ゴールデン ウィーク前後には試せそうか。

続きを読む "Visual Studio 2005 Beta2 リリース間近?" »

2005年04月18日

INETA Japan 総会

05-04-17-17.jpg
4/17(日)は、新宿で INETA Japan の総会に出席。

小井土 さん と私がジャグリングのボールを持ってきていて、休憩時間にジャグリングの啓蒙活動を行った。
# N* (エヌアスタ) の一つに NJuggler というのも追加されることになった (嘘)。

終了後は、飲み会へ。
沖縄そばの『ヤンバル』など、三軒ばかり梯子。
# 日曜だというのに、新宿には居酒屋の客引きが沢山居て ぺがらぼ さん と一緒に吃驚。

INETA の方々と .NET 系のお話ばかり延々とできて、嬉しかった。

いやしかし。皆さん、本当によく勉強されてる。
セミナーに参加したり、本を読んだり、英語勉強したり。
もうお会いするたびにどんどん知識が増えていってるし。
素晴らしいことだ。

改めてすごい人たちとご一緒させて頂いてるんだな、ということを実感した。

2005年04月27日

NAgileで行こう!

NAgile を推進されている afukui さん が新しいサイトをオープンされた。

NAgile (エヌ・アジャイル) というのは、.NET でアジャイル開発を行うこと。
NUnit をはじめとした .NET 用のアジャイル開発ツール (N*: エヌ・アスタと呼ばれている) を使う。

.NET 開発者にも、是非アジャイル手法が広まっていってほしいと願っている。
※ ちなみに、.NET でアジャイル開発を行う人のことは、NAgiler と呼んでいる。


その他の NAgile のサイト:

導入記事はこちら:

Visual Studio 2005 Team Suite Beta 2 日本語版

待ちに待った Visual Studio 2005 のBeta 2 日本語版が出た。

先程インストール完了。

これから色々試してみるつもり。
わくわくする。

2005年04月28日

C#がJISに制定

csharp.gif
以前書いた内容への補足。

C# の JIS 規格は、以下で閲覧できるようだ。

上記ページの「データベース検索」―「JIS検索」―「JIS規格番号からJISを検索」で「X3015」を検索すると、PDF形式で見られる。

# 但し閲覧のみ。

ちなみに C++ の規格は「X3014」で閲覧できる。

2005年05月23日

『MD3 (エムディーキューブ)』

以下のイベントに参加予定。
大変に濃いイベントとのこと。去年は仕事の都合で参加出来なかった。
興味の有る講演が目白押し。楽しみだ。

『MD3 (エムディーキューブ)』
マイクロソフト社のエバンジェリストやアーキテクトが技術者を対象に広範囲で奥の深い技術情報をお届けするイベント
昨年「Microsoft Developer Deep Dive(MD3)」として開催されたもの
参考: aspxの日記(ASP++ブログ) - MD3(エムディーキューブ)が気になる。
主催 マイクロソフト社
開催日時 Day1 2005年6月16日(木) 13:00-17:45 (受付開始 12:30-)
※終了後にパーティを開催予定
Day2 2005年6月17日(金) 11:00-17:45 (受付開始 10:30-)
開催場所 野村コンファレンスプラザ
参加費 無料
お申込方法 クローズドなイベントで一般向けには参加者を募集していないのですけれど、INETA Japan 参加コミュニティのメンバー向けに参加募集しても良いそうなので、ここを見ている方でご希望の方は、5月30日までにメールをください

2005年05月30日

『NAgileのご紹介』のご紹介

NAgile ネタ。

日本XPユーザグループ (XPJUG)第13回ユーザー会で、NAgiler の福井さんが『NAgileのご紹介』というネタ (『ネタ』という表現でいいのだろうか) を発表されたそうだ。

資料 (PDF) が、ここで公開されている。とても楽しい内容だ。
http://plone.xpjug.org/event/20050526meeting/NAgile_intro.pdf/file_view

2005年06月08日

Visual Studio 2005 の正式リリース日

・MSDN ― Launch 2005 での発表 (英語)
<http://msdn.microsoft.com/launch2005/> より

Welcome to the Visual Studio 2005, SQL Server 2005, and BizTalk Server 2006 launch portal. On this site you'll find links to technical content designed to help you learn about the new products. In addition, this site serves as the home for our online launch day activities. Launch is the week of November 7, 2005...and on launch day we’ll have:

・米MSがSQL Server、Visual Studio、BizTalk Serverの出荷日を正式発表
MYCOM PC WEB <http://pcweb.mycom.co.jp/news/2005/06/08/100.html> より

米Microsoftは6月7日(現地時間)、現在米フロリダ州オーランドで開催されている同社主催の開発者会議「Tech・Ed 2005」において、データベースの「SQL Server 2005」、開発ツールスイートの「Visual Studio 2005」、Webサービス構築や異なるアプリケーション間の連携を行う「BizTalk Server 2006」の3製品の出荷日が、11月7日になると正式に発表した。また同日、SQL Server 2005向けの開発者プレビュー版(June CTP)が提供されたことも発表した。同CTP版はMicrosoftの SQL Serverサイト <http://www.microsoft.com/sql/downloads/>からダウンロード可能だ。

・米Microsoft,「SQL Server 2005」「Visual Studio 2005」「BizTalk Server 2006」は11月第2週リリース
IT Pro <http://itpro.nikkeibp.co.jp/free/ITPro/USNEWS/20050608/162309/> より

米Microsoftは,データベース・ソフトウエア「SQL Server 2005」,アプリケーション開発環境「Visual Studio 2005」,電子商取引向けサーバー・ソフトウエア「BizTalk Server 2006」の最終版を11月の第2週にリリースする。Microsoft社が米国時間6月7日に明らかにしたもの。

・SQL Server新版、11月に正式リリース
IT Media エンタープライズ <http://www.itmedia.co.jp/enterprise/articles/0506/08/news008.html> より

米Microsoftはフロリダ州で開催のTech・Ed 2005で6月7日、「SQL Server 2005」「Visual Studio 2005」「BizTalk Server 2006」を11月7日の週に正式リリースすると発表した。


英語版の話です。
日本語版は未定です。
※ 英語版より早いことはないでしょう。多分。

2005年06月11日

Microsoft Tech・Ed 2005 Yokohama

以下に参加予定。

Microsoft Tech・Ed 2005 Yokohama
日時 2005年8月2日(火)~5日(金)
場所 パシフィコ横浜

INETA Japan の方で以下の参加費用が無料になる招待枠があるそうです。

参加費用: 一般通常参加費用 4日間の場合で ¥125,000円 (7月8日までの早期申込ので4日間の場合 ¥87,000円)

この無料招待を希望される方は、6月13日(月)までにメールください。

2005年06月20日

MD3

MD3 (エムディーキューブ: Microsoft Developers Deep Dive) に参加してきた。

『MD3 (エムディーキューブ)』
マイクロソフト社のエバンジェリストやアーキテクトが技術者を対象に Deep な技術情報を話すクローズド イベント
主催 マイクロソフト社
開催日時 2005/06/16・17 ※一日目終了後にパーティ
開催場所 野村コンファレンスプラザ
参加費 無料

会場は新宿野村ビルの上から三つ目の階。






md3-02.jpg md3-05.jpg

会場の雰囲気は下のような感じ。







md3-03.jpg md3-04.jpg md3-06.jpg

流石に深い内容のセッションが多かった。
これを聴けただけでも来た甲斐があった、と思えるセッションも一つあった。
また、Tech・Ed などでは聴けないようなセッションもあって楽しめた。

一日目終了後のパーティでは、福井さん、萩原さん、一色さん、市川さんや、他にも多くの方たちと色々な話をさせて頂いた。
二次会では、小井土さん、福井さん、市川さん、小野さん、森屋さんと。
そして、三次会では、小井戸さんと MD3 のスピーカーの MS のエバンジェリストの方たちと。

なんとも感動的なメンバーだ。
こういう素晴らしい方たちとお酒を飲みながら、技術の話を延々と、というのは、技術者として本当に幸せを感じるひと時である。
本当になんて楽しそうに技術について語る人たちなんだろう!

md3-07.jpg

二日目終了後、小井土さんがジャグリングのリング (!) を持っていらしてたので、トイレ脇の目立たないところでちょっと触らせてもらった。
私は偶然 (謎) ジャグリングのボールを持っていたので、小井土さんと福井さんと私とでジャグリングとアジャグラーという言葉を MS のエバンジェリストの方々に少しだけ披露。萩原さんはじめ MS の方々にも結構面白がってもらえたようだ (多分)。

# その後は INETA の方々と河豚会へ。

続きを読む "MD3" »

INETA リーダーズミーティング

6/18 (土) は、INETA リーダーズミーティングに参加。
inetamt.jpg


# これにて三日連続の新宿滞在も終了。

2005年07月05日

『C#で学ぶオブジェクト指向プログラミング 』ブックレビュー

C#で学ぶオブジェクト指向プログラミング』という本のブックレビューを書きました。

Tech・Ed 2005 Yokohama ― Welcome to INETA Japan Event 2005!

Tech・Ed Yokohama において、INETA Japan は、昨年 (*1) に引き続き今年も セッションをやります。

(*1) 昨年のイベント:

Micosoft MVP

Micosoft MVP (Most Valuable Professional) Visual Developer - Visual C# のアワードを受けることになりました。
C# 大好きな私としては、大変光栄でありがたいことだと感じています。

関係者の皆様ありがとうございます。そして、今後とも宜しくお願い致します。


※ 同時に受賞した INETA Japan のリーダーの方々。

2005年07月25日

Tech・Ed 2005 Yokohama INETAイベント『デスマーチからの脱出 ~徹夜からの帰還~』

Tech・Ed 2005 Yokohama ― Welcome to INETA Japan Event 2005! の続き

Tech・Ed 2005 Yokohama で、INETA Japanイベント『デスマーチからの脱出 ~徹夜からの帰還~』 (8/4 18:30~20:00) をやります。

INETA Japan ― Tech・Ed 2005 Yokohama スペシャルプログラム「Welcome to INETA Japan Event 2005!」の特設頁

豪華賞品が当たる抽選会 (*) がありますので、是非奮ってご参加ください。
(*) INETA関係者 (リーダー、代理者、INETAJ枠参加者) とTechEd 運営側の方は対象外

  • 抽選会の抽選券はINETAコミュニティメンバーの名刺と引き換え
  • 名刺は会場内でINETAウィンドブレーカーを来たメンバーと名刺交換するかスタディホールで担当している人と名刺交換で入手
  • メンバーは20人近くいるので、全員分集めれば当選確率もアップ
  • 賞品は一人一つまで
    賞品リスト
    • マイクロソフト賞
      • NETエンタープライズWebアプリケーション開発技術大全 全巻
      • Microsoft Optical Desktop Elite×2
    • cbook24賞
      • 書籍「コンピュータの名著・古典 100冊」
      • 書籍「C言語による最新アルゴリズム事典」
      • 書籍「プログラミングの心理学 25周年記念版」
      • ソフト「大人のための右脳キッズ 記憶力編」
      • ソフト「声に出して覚える音読英会話 入門編」
    • INETA Japan賞
      • Amazoneギフト券3万円分
私も、このイベントでウィンドブレーカーを着て会場をうろついたり、スタディホールやセッションに出たりしておりますので、宜しくお願いします。

2005年08月09日

Tech・Ed 2005 Yokohama で考えたこと ― ソフトウェア開発の問題点の解決とエンジニアの幸せについて

Tech・Ed 2005 Yokohama で考えたこと ― ソフトウェア開発の問題点の解決とエンジニアの幸せについて。

.NET や Visual Studio、Team System など、ツールの進化は素晴らしい。かなり良くなって来ている。
効率的に開発が行えるようになってきた。
また、.NET の世界でも AOP や DI コンテナ、Generics などが新しいパラダイムとともに、使われていくようになりつつあるようだ。
一方で、.NET にアジャイル開発を積極的に取り入れようという動きもある。

そんなふうに技術が変化していく中、エンジニアとしてどのように幸せになっていったら良いのか、考えた。

※ 下記マインドマップは、Jude Professional 2.3 で作成。クリックすると大きいマインドマップがポップアップ。


工学的に解決を図ろうとするのとアジャイルに解決しようとするのは、態度の違い。
どちらの態度も必要。

「或る現場で工学的手法がうまくいかなかった → 工学の所為」とは言えない。単にその現場のやり方が「実は工学的にまずかった」だけかも。
また、たとえ或る問題が現状の工学で解決できないからといって、工学的解決をあきらめるべきではない。
但し、工学の守備範囲外の人間系の問題が現場でボトルネックとなっている場合も多い筈。そうした現場では、工学的に解決は図れない。
反面、再利用性など工学的手法が必要な面もある。


どうも、一人で考えても拙い結論にしか到らないようだ。
ツッコミ募集中。

2005年08月22日

Tech・Ed 2005 Yokohama 参加レポート

※ 「Tech・Ed 2005 Yokohama で考えたこと ― ソフトウェア開発の問題点の解決とエンジニアの幸せについて」の続き。

忘れないうちに、Tech・Ed 2005 Yokohama に関することをメモ。


往路

2005/08/02(火) 出発
6:30 自宅発
えちぜん鉄道 → JR北陸本線 → JR新幹線 → JR横浜線 → みなとみらい線


宿泊場所

横浜平和プラザホテル


参加内容

Microsoft Tech・Ed 2005 Yokohama
期間 2005/08/02(火) - 05(金)
場所 パシフィコ横浜
(横浜市西区みなとみらい)

8月2日(火)
時刻 Room Session ID Title Speaker
13:20 - 14:35
MVPラウンジ
  MVP Roundtable 「MVPプログラムについて」  
14:55 - 16:10
D
L10-1
Customer Voice : Enterprise Library の解説 Part I
マイクロソフト株式会社 荒井 省三、INETA Japan 市川 龍太
 
16:30 - 17:45
D
L10-2
Customer Voice : Enterprise Library の解説 Part II
マイクロソフト株式会社 荒井 省三、INETA Japan 市川 龍太
18:30 - 20:00
 横浜 グランド インターコンチネンタル ホテル 3 階 インターコンチネンタルボールルーム
 
コミュニティパーティ 2005
 
串焼・焼鳥 たる平
 
NAgile 打ち合わせ
 
 
 
二次会
 


8月3日(水)
時刻 Room Session ID Title Speaker
10:50 - 12:05
A
T1-302
.NET におけるアプリケーション アーキテクチャ構築
マイクロソフト株式会社 近藤 和彦
13:20 - 14:35
B
T3-326
Microsoft Visual C# 2005 詳細
NRI ラーニング ネットワーク株式会社 矢嶋 聡
14:35 - 14:55
スタディーホール
 
INETA スタディーホール
 
14:55 - 16:10
B
T3-335
スマート クライアント アプリケーションの開発
マイクロソフト株式会社 中原 幹雄
16:10 - 16:30
スタディーホール
 
INETA ビッグセッション ― リーダーを探せ ― ウィンドブレーカー着用
 
16:30 - 17:45
A
T3-337
Visual Studio 2005 で改善された Windows フォーム
マイクロソフト株式会社 高橋 忍
18:30 - 20:30
展示ホール B
 
Attendee Party
 
21:00 - 
手作り居酒屋 甘太郎 みなとみらい店
 
NAgile Open Source Project Group 宴会
 
 
 
二次会
 


8月4日(木)
時刻 Room Session ID Title Speaker
09:00 - 10:15
E
T3-325
Microsoft Visual C++ 2005 の新機能と既存コードの改善/活用
NRI ラーニング ネットワーク 株式会社 矢嶋 聡
10:35 - 11:50
D
T1-402
マイクロソフトのモデル駆動開発における DSL ツール
マイクロソフト株式会社 荒井 省三
12:00 - 13:00
MVPラウンジ
 
INETA ビッグセッション 人間系 打ち合わせ
 
13:20 - 14:35
MVPラウンジ
 
MVP Roundtable 「C# 2.0 & .NET Framework 2.0 Insider」
マイクロソフト コーポレーション 波村 大悟
14:35 - 14:55
スタディーホール
 
INETA スタディーホール
 
14:55 - 16:10
B
T3-406
Visual Studio 2005 Team System によるプロセス統合 (仮)
株式会社 豆蔵 岡村 敦彦
16:00 - 18:25
会議センター3F @317
 
INETA ビッグセッション準備
 
18:30 - 20:00
会議センター5F Room-F 小ホール
 
Welcome to INETA Japan Event 2005! 『デスマーチからの脱出 ~徹夜からの帰還~』
INETA Japan
20:30 - 21:30
Tech・Ed会場周辺のお店
 
INETA Japan ミーティング ― Tech・Edイベント反省会,その他
 
 
 
二次会
 


8月5日(金)
時刻 Room Session ID Title Speaker
09:00 - 10:15
E
T1-403
Software Factories によるシステム構築
マイクロソフト株式会社 萩原 正義
10:35 - 11:50
A
T2-315
Visual Studio 2005 と ASP.NET 2.0 を利用した Web サービスの開発
マイクロソフト株式会社 中原 幹雄
11:50 - 13:20
ヨコハマ グランド インターコンチネンタル ホテル 3F
 
Peer Talk Lunch
 
14:55 - 16:10
B
T3-407
Visual Studio 2005 Team Foundation Server 詳細
マイクロソフト株式会社 近藤 和彦
16:30 - 17:45
B
T1-303
システム要求開発からアーキテクチャ設計、実装までのプロセスを効率化するアプローチ
マイクロソフト株式会社 安藤 浩二、有限会社アークウェイ 森屋 英治

写真


・会場となったパシフィコ横浜
・セッションの様子
・セッションからセッションへ移動する人々
・Study Hall のマイクロソフト コミュニティ ブース ― INETA Japan の展示の様子
 
・Attendee Party の様子
・Sponsers Area と Microsoft Tech・Ed Store の辺り
・Sponsers Area にて ― Intel と Microsoft のロゴが入った「インテル センス」。
・MVPラウンジ
・MVPラウンジにて ― マイクロソフトの社員証を付けたキティちゃん。話し掛けると相手になってくれる。

復路

2005/08/05(金) 帰宅
みなとみらい線 → JR横浜線 → JR新幹線 → JR北陸本線 → えちぜん鉄道

23:30 自宅着


所感

今年もアツイ四日間だった。沢山の刺激を受けた。
朝から晩まで、のんびり息をついている間もない程だった。セッションの合間も夜も含めて技術漬けの毎日だ。

  • セッション
    • 初日は、Enterprise Library のセッションがメイン。Enterprise Library ハンズオン ラボの実例を元に、判り易く解説。もっともっと Enterprise Library を使ってみたいと思わせる内容だった。
    • Visual Studio 2005 のセッションでは、如何にツールが進化したかをデモンストレーションするセッションが多く、どれも楽しめた。確かに素晴らしく良くなっている部分が多いことを再確認。
    • その他で今回楽しみだったのは、DSL (Domain Specific Language: ドメイン特化言語) や Software Factories の話。幾つものセッションで聞くことができた。特に、8/5 の萩原さんのセッションは良かった。Software Factories の今までにない判りやすい説明を聴くことができた。実コードによる説明には納得。
  • INETA Japan コミュニティ リーダーとしての参加
    • 8/3 と 8/4 にスタディーホールに INETA Japan コミュニティ リーダーとして参加。「INETA Japan Event 2005!」の抽選券と交換できる名刺を配ったりした。
    • また、8/4 の「Welcome to INETA Japan Event 2005! 『デスマーチからの脱出 ~徹夜からの帰還~』」に「人間系」チームで参加。350名位の方々に聴きにきて頂き、満員御礼だった。このセッションの準備では、色々な問題があったが、セッション自体は各人の能力によって成功だったと思う。反省点は多いが。
  • その他
    • 今年も、毎晩飲みに行ったわけだが、毎晩のように素晴らしい技術者の方とご一緒させて頂いた。様々なことを考えさせられた。余りに、色々なことを考えすぎて熱が出たくらいだ。

エンジニアとしての自らの現状を見つめ直す機会になった。
ツールの進化は素晴らしい。
でもツールだけ進化しても幸せにはなれない。
エンジニアとして、次のパラダイムに自らをシフトさせていかねば。
日々学んでいくのがエンジニアだ。
さあ変化を受け入れよう。

ここで一句詠んでみる。

「行く末の道の途中に吾亦紅(ワレモコウ)
― Fujiwo

吾亦紅(ワレモコウ)の花言葉は「変化」。
wrmk.jpg

2005年09月28日

Microsoft MVP Global Summit 2005

今日からシアトルへ。

Microsoft MVP Global Summit 2005
期間 2005/09/28~10/01 (10/04 帰宅)
場所 ワシントン州レドモンド マイクロソフト コーポレーション

荷造り完了。
sbggg.jpg

今回、英会話の本やジャケット等、色々と散財。

電子辞書と無線LANアダプタも新たに購入。
ediclan.jpg
電子辞書は、SHARP の PW-M800。
¥10,800 (メーカー希望小売価格:¥35,000) だった。
電子辞書の中でも特に小さく軽く (電池を入れて 113g と平均的なものの半分位) 値段も手頃で、収録辞書は22。

2005年09月30日

Microsoft MVP Global Summit 2005 出発~成田

シアトルに向け朝6:40に自宅を出発。
車で小松空港へ。

乗るのは、一日一便しかない 8:00 発 ANA 成田行き。

普通の 767 だとばかり思っていたら、なんとも小さい飛行機で吃驚。
mvpsmt01.jpg

成田へ移動中。
mvpsmt02.jpg

成田空港到着。まだまだ時間があるので、タイのグリーン カレーを食べたり、ぼんやりと飛行機を眺めたりした。
mvpsmt03.jpg

MVP が集合して、いざ出発の乾杯。
mvpsmt04.jpg

Microsoft MVP Global Summit 2005 一日目

ノースウェスト航空の直行便でシアトル空港に到着。
時差ぼけ防止のため、前夜は一時間の睡眠に抑え、飛行機の中で睡眠をとった。
mvpsmt05.jpg mvpsmt06.jpg mvpsmt07.jpg

"COMP USA" というコンピュータ専門店へ。ここではプレゼン用のツールを購入。
mvpsmt08.jpg mvpsmt09.jpg

ボーイング社の敷地内にある航空博物館へ。SR-71偵察機の本物が展示してあって感激。
mvpsmt10.jpg mvpsmt11.jpg

コンコルドの中も見た。
mvpsmt12.jpg mvpsmt13.jpg

昼食はシアトルの東の町べレビューで中華。
mvpsmt14.jpg mvpsmt15.jpg

その後、"Microsoft MVP Global Summit" にレジストレーション。
mvpsmt16.jpg

Microsoft のカンパニー ショップへ。最新のマウスだとか Windows Vista のシャツとか色々と購入。
mvpsmt17.jpg

そしてコロンビア ワイナリーへ。5種類くらいのワインを試飲させてもらった。とても美味しい。一本購入。
mvpsmt18.jpg mvpsmt19.jpg mvpsmt20.jpg

"Doubletree Hotel Bellevue" にチェックイン。部屋がとても広い。
mvpsmt21.jpg

日本の MVP でディナーへ。
mvpsmt22.jpg

その後ホテルのバーで暫く話をした。途中はあまりの眠さに、しょっちゅう意識を失う。
そして就寝。長い一日だった。

2005年10月04日

Microsoft MVP Global Summit 2005 二~四日目

セミナーの内容は NDA (Non-Disclosure Agreement: 秘密保持契約) の関係で詳しく書けないので、差し障りのない範囲で。

マイクロソフト キャンパスは三万人もの社員がいるそうで、とても広い。木々が茂る中に沢山の建物が建っている。そしてバスが巡回している。
とても良い環境だ。
一人一部屋ずつあるという仕事場のある建物にも入った。

三日間は、英語漬けの日々。
英語でセミナーが続く。

途中で、Don Box 氏と写真を撮った。それから Gregor Hohpe さん を紹介していただいた。

途中の夕食会では、マイクロソフト コーポレーションの社員や外国の MVP に積極的に英語で話し掛けるようにしてみた。
十~二十人位の人と話したと思う。矢張り余り通じない。
以降、一度話した人と再会したときには、目を合わせて "Hi." と笑いかけるようにしてみた。これは必ず答えてもらえるので良い。

MVP Party というのもあった。場所は、シアトル EMP (Experience Music Project)
mvpsmt51.jpg

ここでも、なるべく外国の人と話すようにしてみた。

こんなに英語を使ったのは初めてだ。
特にヒアリングが大切だと思った。

MVP Summit 中はとにかく「時差ぼけ」がひどかった。
セミナー中に何の前触れもなく突然意識がなくなることがしょっちゅうだった。

Microsoft MVP Global Summit 2005 後

Microsoft MVP Global Summit 2005 が終わって再び少しだけのシアトル観光へ。

先ずは、"Bellevue Square" へ。
mvpsmt53.jpg mvpsmt54.jpg
mvpsmt55.jpg

次は、シアトルのダウンタウンにも少しだけ。
mvpsmt56.jpg mvpsmt57.jpg mvpsmt58.jpg mvpsmt59.jpg mvpsmt60.jpg

最後は、シーフードのレストランで打ち上げ。
mvpsmt62.jpg mvpsmt61.jpg mvpsmt63.jpg

寝不足が続いていたので、この晩は大人しく就寝。

Microsoft MVP Global Summit 2005 より帰国

シアトル最終日。

まずは、"Doubletree Hotel Bellevue" をチェックアウト。

飛行機まで若干時間があるので、アメリカのテレビ ドラマ "Twin Peaks" で有名だというシアトル近くのスノコルミーの滝 (Snoqualmie Falls) へ。

スノコルミーは、とても美しい滝だ。
mvpsmt102.jpg mvpsmt103.jpg

シアトルとその近郊は、都会と自然が調和した美しいところだ。
美しい山と木々と湖がある。

もうすっかり秋で、紅葉も綺麗だ。
東京辺りと比べても随分気温が低い。

mvpsmt105.jpg mvpsmt106.jpg mvpsmt107.jpg mvpsmt108.jpg

そしてシアトル空港へ。
mvpsmt109.jpg

シアトル最後の食事は Burger King のステーキ バーガーだった。
mvpsmt110.jpg

ノースウェスト航空で成田へ。
入国手続きを済ませて、成田エキスプレスに乗った。

今は品川プリンスホテル。

明日は福井へ帰る。そのまま仕事の予定。
早く妻子の顔を見たい。

2005年10月16日

VSUG ミーティング

10/15(土) は、VSUG (Visual Studio Users Group) のミーティングに参加すべく、新宿小田急サザンタワーへ。
scghndsy.jpg scghndsy.jpg scghndsy.jpg

一次会、二次会と多くの素晴らしい方達と技術やコミュニティの話ができて楽しかった。
調子に乗って焼酎を飲みすぎた。
大崎に一泊して翌朝帰宅。

VSUG の関連記事:

2005年10月28日

11月17日

event.gif
今年の 11月17日 に、あのソフトウェアが発表になる。

そう。

…いや違った。まあ、『ポケモン不思議のダンジョン 青の救助隊』も 11月17日 に発表になるんだけれども。

待ちに待った 『Visual Studio 2005』や『SQL Server 2005』が発表になるのだ。

そして、この日はイベントが開催される。

そう!

…でなくて。まあ、『産官学連携フェスティバル2005』も 11月17日 に開催されるけども。

この日は、

が開催される。
マイクロソフト株式会社社長のダレン ヒューストン氏やマイクロソフト コーポレーション CEO のスティーブ バルマー氏が話す。

私も参加予定。

the Microsoft Conference 2005』 (東京会場)
開催日時 11月17日(木) 9:30~18:30 (受付開始 8:30)
※ スペシャルプログラムは 11:00~18:30
開催会場 名称 東京プリンスホテルパークタワー
住所 東京都港区芝公園 4-8-1

そして、この日は記念すべき日でもあるのだ。
そう。それは、

でなくて。 確かに、この日 TOKIO の城島は 35歳になるけども。
この日は実は、

  • 「蓮根の日」

でもなくて。 確かに、この日は第十二回「蓮根の日」には違いないけど。

なんと、この日 Visual Studio User Group (VSUG) も発足予定なのだ。
まあ、めでたい日だ。

# またこの二日後に、 『NAgile合宿2005秋』というのも予定されている。
# というわけで、11/17~18は東京に滞在予定。

2005年11月02日

マイクロソフト株式会社「スタート・マイ・ドメイン」キャンペーン

http.jpg
マイクロソフト株式会社「スタート・マイ・ドメイン」キャンペーンを開始
~新規ドメイン取得無料、月額換算利用料1,000円以下などの特典を提供~

例えば、KAGOYA の DOSABA は 1GB で一年目6,300円(月額525円)、二年目以降10,080円(月額840円)。
うーん、中々魅力的な価格。Windows のホスティング サービスは今まで様子見してたけど、そろそろ手を出しても良いかな。

今はロリポップで 200MB で月あたり300円だけど、Apache で Perl と PHP で、MySQL、MovableTypeXOOPS という環境。
DOSABA なら IIS で ASP.NET で、SQL Server、DotNetNukeCommunityServer という環境。

取り敢えずロリポップの方とは別に、DOSABA か cervi.jp 辺りを利用してみようかな。

ニュース:

Enterprise Watch の記事に比較表が載っている。

2005年11月17日

Visual Studio ユーザーグループ (VSUG) オープン

event.gif
# 11月17日の続き。

Visual Studio ユーザーグループ (VSUG) が、本日オープンしました。

私は、小井土さんと一緒に、この中の「開発プロセス」フォーラムのボードリーダーを務めます。

いよいよ本日、待望の Visual Studio 2005 が発表になり、

も開催されます。
# 私もこれから東京に向かいます。

Visual Studio 2005 は、素晴らしく開発効率をあげるツールに仕上がってきています。
無料の Visual Studio 2005 Express Edition も出ますし、Team System にも期待が高まります。

Visual Studio に関心の有る方は、是非お気軽に Visual Studio ユーザーグループ (VSUG) にご参加ください。

2005年11月18日

the Microsoft Conference 2005

昨日は、the Microsoft Conference 2005 へ。

the Microsoft Conference 2005 (東京会場)
開催日時 11月17日(木) 9:30~18:30
開催会場 名称 東京プリンスホテルパークタワー
住所 東京都港区芝公園 4-8-1

msc1.jpg
msc2.jpg
msc3.jpg
msc4.jpg

Visual Studio 2005 と SQL Server 2005、 BizTalk Server 2006 のローンチ記念イベント。

夜は、「Visual Studio / SQL Server 2005 ローンチ記念コミュニティーパーティー」へ。
場所は、キハチ・銀座店。

マイクロソフトや MVP、INETA Japan、VSUG (Visual Studio User Group) の方々と再会して色々な話をした。
ジム グレイ (Jim Gray) 氏とインスタンス カメラで写真を撮って、それにサインをもらったりして、楽しかった。
その後軽く二次会へ。

# 今日も東京泊。

2005年11月30日

寄せ書き

を書きました。
どちらの製品もとてもお薦めです。

2005年12月03日

VSUG設立記念セミナー

seminar.gif
これからVSUG (Visual Studio User Group) 設立記念セミナーに出発。

イベント名 VSUG設立記念セミナー
日時 2005年12月3日(土) 13:00開始 18:30終了
主催 VSUG (Visual Studio User Group)

2005年12月05日

VSUG設立記念セミナー

以下のイベントに参加した。

イベント名 VSUG設立記念セミナー
日時 2005年12月3日(土) 13:00開始 18:30終了
主催 VSUG (Visual Studio User Group)

■ 内容


  • 挨拶
    VSUG発起人
    vsugsmn1.jpg

  • VSUG設立についてお祝いの言葉
    マイクロソフト株式会社 北川 裕康氏

  • 70分でズバリ!!Visual Studio 2005ココがお勧め!! ~"使える"新機能、差分機能をTips満載でご紹介~
    VSUGフォーラムリーダー 荻原 裕之氏
    vsugsmn2.jpg

  • ソフトウェア開発における諸問題を最新技術はどう捉えているか
    マイクロソフト株式会社 萩原 正義氏

  • VSラウンチイベント in US
    VSUG発起人 奥津 和真氏

  • Lightning Talk
    VSUGフォーラムリーダー

  • 懇親会
    vsugsmn3.jpg

  • 二次会

  • 三次会

■ 感想など

○ 講演について

荻原 さん と 萩原 さん の講演があった。

荻原 さん の講演は、Visual Studio 2005 の新機能部分に関する Tips。
楽しい Tips が多かった。
「Ctrl キーで DataTip が透ける!」など、知らなかった Tips が結構あった。
早速今日会社で披露。

萩原 さん の講演は、ソフトウェア工学の視点からソフトウェア開発の諸問題をみる、というもの。
とても良かった。
マインドマップでメモをとりながら聴いていたのだが、ものすごい勢いで、マインドマップの枝が伸びていった。
自分の発想がどんどん広がっていくのが分かる。

問題をどう捉えればよいのか、問題に対してどういう見方ができるのか。
それについて、萩原 さん の講演ではいつも、「かくあるべき」という視点を突きつけられる。
それと対比することで、自分のものの見方について再考させられたり、新たな視点が芽生えたりするのだ。

それは、とても貴重な体験だ。

○ Lightning Talk について

私は、VSUGフォーラムリーダーとして Lightning Talk をやった。
内容は、アンケート。参加者の皆さんに、手で大きな○か×を作って答えていただいた。100人程度の参加者だったので、1/100 アンケートもやってみた。

Lightning Talk はコミュニティ イベントらしさを出すのに最適なツールの一つだと思った。一般参加者の方にもやってもらえれば更に良いと思う。

○ 懇親会などについて

コミュニティ のオフライン イベントは一方通行で終わってはつまらない。
それでは、本当につまらない。
コミュニケーションは双方向でないと。そして、フェイス トゥ フェイスが重要だ。

今回、多くの人とコミュニケーションがとれた。
イベント後の飲み会では、大きな感動を味わいさえした。
こういう体験が、私にとってとても大切だ、ということを再認識した次第だ。

続きを読む "VSUG設立記念セミナー" »

2006年01月12日

Visual Studio 2005 Team System 学習用 Web サイト

● MSDN ― Visual Studio Team System ホーム ● MSDN ― Visual Studio Team System ホワイト ペーパー ● MSDN ― Visual Studio Team System 技術情報 ● MSDN ― Visual Studio 2005 Team Foundation Server スタートアップガイド ~ソフトウェア構築の未来へ~ ● MSDN ― Visual Studio 2005 Team System 導入事例 ● Microsoft.com Japan ― Visual Studio 2005 Team Foundation Server Beta 3 インストール ガイド (2005/12/16) ● @IT ― Visual Studio 2005 Team System 概要 ● @IT ― Visual Studio Team Systemで開発プロジェクトはこう変わる ● @IT ― VSTSの単体テスト機能は本当に使えるのか? ● Enterprise Watch ― 「Visual Studio 2005 Team System」、その本質に迫るThink IT (無料会員制) ― 『Visual Studio 2005を活用した、テスト駆動開発とソフトウェア品質向上アプローチ』Think IT (無料会員制) ― 『開発ライフサイクルとVisual Studio 2005という選択肢』Think IT (無料会員制) ― 『チーム開発ここまできた、個人からチームの生産性向上へ』CodeZine ― 『Visual Studio 2005 Team Systemの全体像を知る』

■ トレーニング

● MSDN ― Visual Studio Team System トレーニング ● MSDN ― イベント & セミナー 特別企画「Tech・Ed 2005 セレクション」ストリーミング公開 (無料登録制) ● MSDN ― MSDN eyeiStudy Quick Learning ― 『SQL Server 2005 Quick Learning』『Visual Studio 2005 Quick Learning』 (無料登録制)
  • Visual Studio 2005 Team System 品質向上の為の役割とスキルを学ぶ編
  • Visual Studio 2005 Team System アーキテクトの役割とスキルを学ぶ編
● MSDN ― Visual Studio 2005 Team System: Demo Videos (英語) ● MSDN ― ステップ 7 シリーズ ―Visual Studio 2005 Team System によるアプリケーション品質の向上
  • 第1回 Visual Studio Team System によるチーム開発 (2007/10/03)
  • 第2回 品質の高いコード作成 (1) (2007/10/10)
  • 第3回 品質の高いコード作成 (2) (2007/10/17)
  • 第4回 さらなる品質の向上 (2007/10/24)
  • 第5回 チーム開発を支える機能 (2007/10/31)

続きを読む "Visual Studio 2005 Team System 学習用 Web サイト" »

2006年02月03日

Microsoft Developers Conference 2006

下記に参加。

名称 Microsoft Developers Conference 2006
会期 2006年2月2日(木) - 3日(金)
会場 パシフィコ横浜 会議センター 1F-3F
主催 マイクロソフト株式会社
参加費 一般価格: ¥49,800、特別価格: ¥40,000 (事前登録制)

参加内容は以下の通り。

2/2 9:00-10:40   基調講演 マイクロソフト コーポレーション デベロッパー & プラットフォーム エバンジェリズム グループ コーポレート バイス プレジデント サンジェイ パラササラシー、マイクロソフト コーポレーション Windows クライアント プラットフォーム & ドキュメント ゼネラル マネージャ マイケルウォーレント、マイクロソフ トコーポレーション インフォーメーション ワーカー ビジネス グループ ゼネラル マネージャ 沼本 健
2/2 10:55-11:55   ゼネラル セッション マイクロソフト コーポレーション Developer Division のテクニカル フェロー アンダース ヘルスバーグ
2/2 13:15-14:25 T3-206 Windows Communication Foundation ("Indigo") 概要 マイクロソフト株式会社 伊藤 英豪
2/2 14:40-15:50 T2-324 次世代開発基盤技術 "Software Factories" Part 1 ~ その概念の中心 マイクロソフト株式会社 成本 正史
2/2 16:05-17:30 MVP Private Roundtable Sharing info & Discussion about Windows Presentation Foundation (Avalon) マイクロソフト コーポレーション Windows クライアント プラットフォーム & ドキュメント ゼネラル マネージャ マイケルウォーレント
2/2 17:30-18:40 T1-306 Windows Presentation Foundation ("Avalon") マイクロソフト株式会社 高橋 忍
2/2 19:00-21:30   コミュニティ スペシャル セッション with Anders Hejlsberg in Microsoft Developers Conference 2006 マイクロソフト コーポレーション Developer Division のテクニカル フェロー アンダース ヘルスバーグ
2/3 9:00-10:30   基調講演 マイクロソフト コーポレーション デベロッパー & プラットフォーム エバンジェリズム グループ コーポレート バイス プレジデント サンジェイ パラササラシー
2/3 10:50~11:55 T1-301 Windows Presentation Foundation ("Avalon") による新しいアプリケーション ユーザー インターフェースの実現 マイクロソフト株式会社 高橋 忍
2/3 13:15-14:25 T2-501 次世代開発基盤技術 "Software Factories" Part 2 ~ 開発手順の実践 マイクロソフト株式会社 萩原 正義
2/3 14:40~15:50 T2-314 リレーショナル データのための LINQ マイクロソフト株式会社 荒井 省三
2/3 16:05~17:15 T1-307 Windows Presentation Foundation ("Avalon") : 先進的なドキュメント ワークフロー コンテンツのセキュリティ、ビュー、印刷 マイクロソフト プロダクト ディベロップメント リミテッド 佐藤 大樹
2/3 17:20-18:00 Hands-On Lab Windows Vista: Windows Presentation Foundation Hands-On Lab  

2006年02月05日

Special Session with Anders Hejlsberg in Microsoft Developers Conference 2006

2/2 夜は、Turbo Pascal と Delphi、そして C# の父である Anders Hejlsberg を囲んだスペシャル セッションに参加。

anders.jpg
参加者からの沢山の C# 関連の質問に答えていただいた。
とてもフレンドリーな方で、どんな質問にも笑顔で真剣に答えてくださった。

サイン入りの C# 本まで頂いてしまった。
Turbo Pascal と C# のファンである私としては、かなり嬉しくて舞い上がってしまった。
84103886_102.jpg 84103886_153.jpg

※ この様子はいずれレポートしたい。

2006年02月11日

Visual Studio 2005 ACE

vs2005ace1.jpg vs2005ace2.jpg vs2005ace3.jpg

マイクロソフトから、Visual Studio 2005 ACE の置物 (謎) が届いた。

2006年03月02日

レポート:コミュニティスペシャルセッション with Anders Hejlsberg in Microsoft Developers Conference 2006

csah01.jpg csah14.jpg
※ 「Special Session with Anders Hejlsberg in Microsoft Developers Conference 2006」の続き。

MSDN に、

レポート:コミュニティスペシャルセッション with Anders Hejlsberg in Microsoft Developers Conference 2006

を書いた。


一色さんの記事
と合わせてお読みいただけると幸いだ。

2006年03月07日

.NET Tips: NDoc の紹介

document.gif
■ NDoc の紹介

Visual Studio 2005 と "NDoc" というツールを使うことで、MSDN のような HTMLヘルプ形式 (.chm ファイル) を含む様々なヘルプ形式を出力できる。

NDoc は以下で入手できる。

■ NDoc 日本語版の導入方法

NDoc 日本語版を使うには、以下のような設定を行うと良い。

  • Visual Studio 2005 側の設定
    • プロジェクトのプロパティの「ビルド」で「XML ドキュメント ファイル」を指定しておく。
  • NDoc 側の設定
    • NDoc の日本語版の最新版をインストール (現時点 2006/03/07 では v1.3.1-rev2-beta4 または v1.3.1-rev1)。
    • NDoc は現時点 (2006/03/07) では、そのままでは .NET Framework 1.0 と 1.1 にしか対応していないため、下の内容で "NDocGui exe.config" というテキスト ファイルを作成し、NDoc をインストールしたフォルダの下の bin というフォルダに入れておく。
    • 日本語のヘルプ出力のためには、NDoc を起動して、設定の "SdkDocLanguage" を「日本語」に変更。

※ "NDocGui exe.config" の内容
<?xml version="1.0" ?>
<configuration>
<startup>
<supportedRuntime version="v2.0.50727" />
<supportedRuntime version="v1.1.4322" />
<requiredRuntime version="v1.1.4322" />
</startup>
</configuration>

参考:

2006年03月27日

Visual System Team System Tips: チーム プロジェクトの削除方法

team.gif

Visual System Team System Tips: チーム プロジェクトの削除方法

■ Q.

Visual Studio Team System を試している。チーム プロジェクトを試しに作ってみたのだが、消し方が分からない。不要なチーム プロジェクトが増えて困っている。

Visual Studio 2005 Team System の「チーム エクスプローラ」から「削除」を選ぶと、「チーム エクスプローラ」の一覧から消えるだけで、本当に消えてはいないようだ。 再度「Team Foundation Server に接続」しようとすると、一覧に残っている。

不要なチーム プロジェクトを本当に 消してしまうことはできないのか?

■ A.

もちろん、できる。

Team Foundation Server をインストールした PC に、"TFSDeleteTeamProject.exe" というコマンド ラインから使用するツールがある。これを使って不要なチーム プロジェクトを削除することができる。

このツールは、Team Foundation Server をインストールしたフォルダを、例えば、

C:\Program Files\Microsoft Visual Studio 8\

とすると、

C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies

にあるはずだ。



この "TFSDeleteTeamProject.exe" を試しにコマンドラインから実行してみると、以下のように、このツールの使い方が表示される:

C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies>TFSDeleteTeamProject
使い方: DeleteTeamProject [/q] [/force] </TeamFoundationServer:<サーバー名>> <チーム プロジェクト名>

Team Foundation からチーム プロジェクトを削除します。このコマンドを使用するには、Team Foundation Server 管理者グループのメンバであるか、または削除するプロジェクトのプロジェクト管理者グループのメンバでなければなりません。チーム プロジェクトを削除した後、復元することはできないため、注意してこのコマンドを使用してください。

   [/q] - 確認用のメッセージを表示しません。
   </TeamFoundationServer:<サーバー名>> - Team Foundation Server の名前です。
   [/force] - 削除できないデータがある場合でも続行します。
   <チーム プロジェクト名> - プロジェクトの名前です。名前に空白が含まれる場合は引用符を使用します。

C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies>

次に、実際に  "tfsserver" というサーバーの "HelloProject" というチーム プロジェクトを削除してみた例を以下に示す:

C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies>TFSDeleteTeamProject /TeamFoundationServer:tfsserver /force HelloProject
警告: チーム プロジェクトの削除操作は元に戻すことができません。チーム プロジェクトを削除しますか (Y/N)?y

Build から削除しています
完了
作業項目トラッキング から削除しています
完了
バージョン管理 から削除しています
完了
レポート サーバー ファイルを削除しています
完了
SharePoint サイトを削除しています
完了
Team Foundation コア から削除しています
完了

C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies>

これで、チーム プロジェクトを削除することができた。

ちなみに、同じことをもう一度やってみると以下のようになる:

C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies>TFSDeleteTeamProject /TeamFoundationServer:tfsserver /force HelloProject
警告: チーム プロジェクトの削除操作は元に戻すことができません。チーム プロジェクトを削除しますか (Y/N)?y

プロジェクト 'HelloProject' は、TF Server で見つかりませんでした。

C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies>

このツールを使用する場合の注意点は以下の通り:

  • チーム プロジェクトを削除するときのユーザーが、Team Foundation Server 管理者グループのメンバであるか、または、削除するプロジェクトのプロジェクト管理者グループのメンバでなければならない。
  • バックアップがない場合に、チーム プロジェクトを削除すると、復活はできない。
  • 不完全に削除すると、削除した同じ名前でチーム プロジェクトを作成しようとした場合に、失敗することがあるので注意。
  • "/force" オプションを使わずに、削除が途中で失敗に終わった場合は、不完全な削除となっていることがある。この場合は、再度 "/force" オプション付きで再度削除を行うことで、削除工程を最後まで行わせることができる。

続きを読む "Visual System Team System Tips: チーム プロジェクトの削除方法" »

2006年04月24日

Japan MVP Summit 2006

jmvps01.jpg jmvps02.jpg
以下に参加した。

Japan MVP Summit 2006
日時 2006/04/22(土) 10:00~18:30
場所 マイクロソフト新宿本社

始発の飛行機に乗っていったのだが、会場へは10分遅れで到着。

参加内容は、

  • プログラム アップデート
  • ランチ セッション
    • 新MVPを囲む会
  • MVP によるプレゼンテーション
    • Web テスト
    • Virtual Server と愉快なインスタンス達
    • Community Server はもう古い? Windows SharePoint Sercive V3 を使った「コミュニティーサイト」の構築と運営
    • Windows Mobile 5 搭載 WILLCOM W-ZERO3 は何故流行っているのか?
  • ブレイクアウト セッション
    • 新たなユーザー エクスペリエンスへの挑戦 Microsoft Expression
    • 次期 ASP.NET とその実行環境

とても沢山の MVP の方々が参加されていた。聞いたところでは、8割を超える参加率だとか。

その後、MVP 主催の懇親会にも参加。こちらも、80名近い人が参加されていた。場所は、新宿ワシントンホテル2F「三十三間堂」。
その後、二次会まで参加。

知人の方々と久しぶりに直にお話ができたり、何人かの新たな知人ができた。
また、オンラインでお話したことがある何人かの方と、初めて対面できたこともとても嬉しかった。

しかし、この週は月曜日からずっと体調が悪かったので、この後また体調不良に。
もう復活したつもりで参加していたのだが、まだ体調が戻っていなかったらしく、自宅へ着いてから今朝まで寝込む羽目に。反省するとともに色々と凹んでいる。

# 今日は朝から病院へ行った。

2006年05月09日

VSUG DAY 2006 Summer 開催決定!

vsugday_120x60.gif VSUG DAY 2006 Summer
主催 VSUG (Visual Studio® User Group)
日時 2006年6月13日(火)10:00~17:00 (受付 9:30)
場所 秋葉原コンベンションホール (東京 秋葉原ダイビル 2F)
定員 400名
参加料 無料
申し込み方法 Visual Studio User Group > イベント > VSUG Day 2006 Summer より
(VSUGへの会員登録が必要)

2006年06月12日

マイクロソフトのカンファレンス

下記に参加予定。

Microsoft Office Developers Conference & MD3 2006
会期 2006年6月26日(月) ~ 27日(火)
会場 名称 住友スカイルーム (新宿住友ビル 47F)
住所 東京都 新宿区 西新宿 2-6-1 新宿住友ビル


Tech・Ed Yokohama 2006
会期 2006年8月29日(火) ~ 9月1日(金)
会場 パシフィコ横浜

.NET 3.0

IT Media News より ― 『Microsoftの「Web2.0」と「.NET 3.0」

上記より引用:

Microsoftは、これまでWinFXと呼んでいたデベロッパーブランドを.NET Frameworkに一本化させ、.NET Framework 3.0と改名した。また、開発者向けコミュニティーとして「MSDN Wiki」のβを開始した。

Visual Studio 2005 Team Foundation Server 評価版

『Visual Studio 2005 Team Foundation Server 評価版』をインストールしてみた。
vststry1.jpg
vststry2.jpg
vststry3.jpg

詳細はこれから確認だが、"β3 Refresh" では、エラーになって表示されなかったチーム ポータルのレポートがきちんと表示されているようだ。また、英語だった MSF のドキュメントが日本語化されている。その他、「セキュリティ」の権限の種類も変更されていたり、色々と変わったようだ。

関連情報:

2006年07月04日

Micosoft MVP

この七月に、Micosoft MVP (Most Valuable Professional) Visual Developer - Visual C# のアワードを再受賞することができました。

ありがたいことです。

思えばこの数年、色々な方に多くの機会を与えていただきました。技術者を中心として多くの人に出会い、様々なお話を伺うことが出来ました。講演を聴かせて頂いたり、飲み会でご一緒させて頂いたり。

素晴らしい技術者の方々に接し、「この人達には、とても適わない」と感じながらも、何とか生き方・考え方を見習おう、少しでも近づこうと考えつつ送ってきた日々。そうしてきた過程こそが、私にとってかけがえのない Engineering Life であったような気がします。

皆様に感謝です。そして、今後とも宜しくお願い致します。

2006年07月21日

MVP バッグ

mvpbag.JPG
MVP バッグが届いた。

ベースは、"Victorinox Louvre Computer Briefcase" っぽい。

2006年08月04日

Microsoft On - 出張ワークショップ

Microsoft On - 出張ワークショップ

8/2 Microsoft On - 出張ワークショップ を会社で開催。

  • .NET Framework 2.0 アーキテクチャ
  • Visual Studio 2005 によるスマートクライアント開発

栄えある第一回とのこと。
社内からは、予定を大幅に超える 50 人の技術者が参加して、社内の研修室は超満員。大成功だった。

わざわざ福井まで来ていただいて、きっちりとセミナーを二コマやっていただいた。ありがたいことだ。

関連記事:

2006年09月14日

第2回 VSUG アカデミー

『第2回 VSUG アカデミー』が開催されます。

日時: 2006年9月27日(水) 19:00~21:10 (※18:30受付)
場所: ニューオータニガーデンコート 17階 セミナールーム1
定員: 80名
参加料: 500円

申し込み: Visual Studio ユーザーグループ (VSUG) ― 第2回 VSUG アカデミー

2006年09月21日

Microsoft On - 出張ワークショップ - 最新技術を学ぶ in 福井

bannar_fitea_110x25.gif福井情報技術者協会(FITEA) からのお知らせ。

10月20日(金) に福井で「Microsoft On」が開催される。
これはマイクロソフトが福井に来て出張ワークショップをやってくれるというイベントだ。

マイクロソフトの最新の開発環境や次世代の Windows である Vista における開発のセミナーで参加は無料。

詳細情報と申込み先:

関連情報:

2006年10月22日

Microsoft On - 出張ワークショップ - 最新技術を学ぶ in 福井

Microsoft On - 出張ワークショップ - 最新技術を学ぶ in 福井
日時 2006年10月20日(金) 13:00~17:15
場所 ふくい産業支援センター 会議室A・B
主催 マイクロソフト株式会社 (共催: 福井情報技術者協会bannar_fitea_110x25.gif 後援: (株)福井コンピュータ、(株)トゥーアーティ、アル・デザインワークス)
内容 福井で「Microsoft On」による無料セミナーを開催。
  • 第一部「Visutal Studio によるアプリケーション開発実際」
  • 第二部「Windows Vista とWindows開発環境の進化」
講師 マイクロソフト株式会社 デベロッパー エバンジェリスト 松崎 剛 氏

microsoftonfitea1.jpg
microsoftonfitea2.jpg

無事終了。

  • 参加者数: 35名
  • 懇親会参加数: 11名

当初の予定以上に人が集まり、会場はいっぱいになった。
講師の松崎さんの話がとてもよかった。

開始前に「単なる Visual Studio 2005 の使い方の話より、.NET Framework の話を聴きたくて来られてる方が多いでしょう」とのご提案があり、前半のメニューでは、CLR や IL、アセンブリなどについての「中々 Web サイトや書籍では目に出来ないテクニカルな情報」について話していただいた。

後半は、Vista に関してデモを中心に話していただいた。

単に技術を紹介するにとどまらず、そのテクノロジーがどうして出てきて、今後どのような展望があるのかについて、松崎さん自身の考え方を聴けたのが良かった。「Web サイトや書籍で目に出来ない」生の声を聴くことができた。

コマンドライン上でのツールを使って基本的なことを説明した後で、Visual Studio 上で同じことをやってみせるやり方は分かりやすくて良かった。C# や、ASP.NET、XAML の説明のときにもメモ帳でソースを書くところから説明をしていた。共感できる。単なるドラッグ&ドロップの連続での説明だと見た目は派手だが内容に欠けるのだ。

聴衆を飽きさせずに、常に興味を引き付ける話ぶりは流石だ。参加者の方はその名調子に引き込まれていたようだ。

chikura さんと一緒に松崎さんを福井駅に送る車中で、三人でこれからの新人技術者についてなどの様々な話をした。

その後も懇親会でみっちりと話し合った。久しぶりに少し飲みすぎたが、とても楽しい一日だった。

2006年10月24日

VSUG DAY 2006 Winter

VSUG DAY 2006 Winter
日時 2006年11月25日(土)
11:00~20:00 (懇親会: 18:20~)
会場 ベルサール神田
主催 VSUG (Visual Studio User Group)
受講料 無料 (懇親会のみ 1,000円)
詳細/申し込み http://vsug.jp/tabid/135/Default.aspx

2006年10月31日

第1回 VSUG アカデミー for Students

第1回 VSUG アカデミー for Students
日時 2006年11月10日(金)
19:00~21:10 (18:30受付)
会場 株式会社翔泳社1Fスペース
主催 VSUG (Visual Studio User Group)
受講料 無料
詳細/申し込み http://vsug.jp/tabid/134/Default.aspx

2006年11月09日

今月のイベント

11月は以下の二つのイベントに参加予定。

the Microsoft Conference 2006 東京会場
日時 2006年11月15日(水) 10:15~17:20、16日(木) 10:00~18:10
会場 東京国際フォーラム
主催 マイクロソフト株式会社
参加費 無料
詳細/申し込み http://www.event-registration.jp/events/msc06/
VSUG DAY 2006 Winter
日時 2006年11月25日(土)
11:00~20:00 (懇親会: 18:20~)
会場 ベルサール神田
主催 VSUG (Visual Studio User Group)
受講料 無料 (懇親会のみ 1,000円)
詳細/申し込み http://vsug.jp/tabid/135/Default.aspx

2006年11月21日

the Microsoft Conference 2006

先週、以下に参加した。

the Microsoft Conference 2006』 東京会場
日時 2006年11月15日(水) 10:15~17:20、16日(木) 10:00~18:10
会場 東京国際フォーラム
主催 マイクロソフト株式会社
参加費 無料
詳細 http://www.event-registration.jp/events/msc06/

以下のセッションと「コミュニティ オープン ステージ」や「Windows Vista & 2007 Office system タッチ & トライ」、「パートナー ソリューション ショーケース」などに参加。

■ 所感
会場は「東京国際フォーラム」で、広過ぎてセッションからセッションへの移動が大変だった。

今回は特に SharePointServer 2007、 周りの情報収集を行った。SharePointServer と Exchange Server、InfoPath、と Office のクライアント製品の連携の部分だ。マイクロソフト松崎さんの Visual Studio を使った SharePointServer 2007 のカスタマイズの話は面白かった。

2007 への移行にあたって当面重要な鍵となりそうな、旧バージョンとの連携の話、特に SharePointService2.0 を使ったシステム (Team Foundation Server) などとの連携の話は余り聞けなかった。

一番楽しめたのは「コミュニティ オープン ステージ」だった。

以下は、会場の様子。
dc111731.jpg
dc111704.jpg
dc111726.jpg
dc111757.jpg
dc111756.jpg

続きを読む "the Microsoft Conference 2006" »

2006年11月22日

Windows Vista

昨日 MSDN サブスクリプション ダウンロード サイトで、Windows Vista (x86用日本語版) の提供が開始された。

早速昨日から今日にかけて、ノートPCにインストールしてみた。
※ PC のスペックは以下の通り。






















ノートPC DELL XPS M1210
CPU インテル Core Duo 2GHz
Memory DDR2-SDRAM 2GB
HDD SATA HDD 100GB
グラフィック NVIDIA GeForce Go 7400 256MB DDR TurboCache (最大192MBをメインメモリより使用)
ディスプレイ 液晶 12.1インチ 1280x800
先ずはアップグレード インストールを試してみたのだが、ダウンロードから Vista のインストーラの最後までで、四時間くらい掛かった。

ざっと触ってみた感じでは、アプリケーションはほぼ全部問題なく動くようだ。互換性に問題がありそうなアプリケーションは起動時に警告が出る。また、動作速度にも特に問題は無さそうだ。

これから、Office 2007 や Visual Studio 2005 の動作やクリーン インストールの場合など、色々と試してみるつもり。

2006年12月01日

こみゅぷらす

141861813_94.jpg
本日、コミュプラス (COMU+) というコミュニティがスタート。

こみゅぷらす (COMU+) サイトより:


こみゅぷらす (COMU+) とは、INETA の加盟コミュニティのリーダーや Microsoft MVP などこれまでもアクティブに情報を発信してきたメンバーが集まって結成した団体です。

Windows 技術を中心に、さまざまな情報をオンライン、オフライン勉強会を通じて配信していきます。

メンバーのブログより:

VSUG DAY 2006 Winter

先週土曜日は以下のイベントに参加。


































VSUG DAY 2006 Winter
日時 2006年11月25日(土)
11:00~20:00 (懇親会: 18:20~)
会場
ベルサール神田
主催 VSUG (Visual Studio User Group)
受講料 無料 (懇親会のみ 1,000円)
詳細/申し込み http://vsug.jp/tabid/135/Default.aspx

dc112610.jpg
dc112620.jpg
期待していた以上に高度なセッションが多く、聴きごたえがあった。他のカンファレンスでは聴けない内容のものが多いのも、コミュニティのイベントならでは。

ライトニング トークスも素晴らしく、直ぐにでも役立つ知識が目白押しだった。それを5分で容赦なく切ってしまうのだから、とても贅沢だ。

昼は、何人かで「まんてん」のカレーを食べに行った。
dc112617.jpg

夜は、懇親会に参加。その後スタッフの皆さんと飲みにいった。
有意義な一日だった。

2007年03月01日

3月のイベント

前回に続き MVP Global Summit に参加予定。

2007 Microsoft Most Valuable Professional (MVP) Global Summit
期間 2007/03/12~15 (03/17 帰宅)
場所 ワシントン州レドモンド マイクロソフト コーポレーション

今日届いたジャケット。
dc030102.jpg

今日届いたノイズキャンセリング ヘッドホン。
dc030105.jpg dc030107.jpg

2007年03月12日

MVP Global Summit 2007

※ 「3月のイベント」の続き。

これから MVP Global Summit に向けて出発。

2007 Microsoft Most Valuable Professional (MVP) Global Summit
期間 2007/03/12~15 (03/17 帰宅)
場所 ワシントン州レドモンド マイクロソフト コーポレーション
荷造り完了。 DSCF8020.JPG 先ずは小松空港から成田空港へ移動。

2007年03月19日

MVP Global Summit 2007

MVP Global Summit 2007 を写真で振り返ってみる。

■ 一日目 (3/12)


小松空港を出発して成田へ


飛行機の窓から富士山が


Northwest航空で成田を出発


Seattle-Tacoma国際空港 (Sea-Tac) に到着


Seattle-Tacoma空港に集う日本のMVP達


Safeco Fieldへ


Safeco Field 記者会見が行われる部屋


Safeco Field グランドへの通路


Safeco Field グラウンドより


Bellevue SquareのWorld Wrappsでランチ


Bellevue SquareのCOACHで妻のバッグを購入


MVP Global Summit のレジストレーション時に受け取ったシャツ


SeattleダウンタウンのCrowne Plaza Hotelに到着


Seattleダウンタウンで見掛けた建物


Seattleダウンタウンの町並みを見ながら、日本のMVPだけのパーティの会場へ向かう


夜、翌日の会場となるSeattleダウンタウンの Washington State Convention and Trade Center の前を通る


初日の夜にビールやスナックを買った店

■ 二日目 (3/13)


Bill Gates氏のキーノート


Don Box 氏のセッション


夕方一時間だけ時間が空いたので、独りでPike Place Marketまで散歩


Pike Place Marketにて


Pike Place MarketにあるStarbucks Coffee一号店


マグカップを購入 (この後ボーイング社の航空博物館でMVPパーティ)

■ 三日目 (3/14)


三日目からの会場となるRedmondのマイクロソフトのキャンパスへ行き、先ずは朝食


昼食では、隣のテーブルに (Turbo PascalとDelphiとC#の父である) Anders Hejlsberg氏が


会場にはスナックやフルーツが沢山おいてあって自由に食べることができる


会場のスナックはどれもカロリーが高そう


飲み物は、コーヒーや紅茶の他、冷蔵庫には ROOT BEER などが用意されている


Vistaドリンクは、無糖の炭酸飲料


キャンパスでは桜が身頃だった


この日の夕方に買ったマイクロソフトのデバイス


セッションでもらったC#シャツと夜のプロダクト グループ毎のパーティでもらったTシャツとVisual Studio Team Systemのポロシャツ

■ 四日目 (3/15)


全てのセッションが終わり、昼からは最後のランチ


その日の夜、日本のMVPがシーフードレストランSalty'sに集まって行われた最後のパーティで出たSeattle名物のクラム・チャウダー


同じく蟹


Salty'sは海沿いにあって夜景が美しい


■ 四日目 (3/15)


最終日にSeattle近郊のSnoqualmie Fallsへ


NikeやEddie Bauerなどがある巨大なショッピング モールへ


Seattle-Tacoma国際空港にてBurger Kingで昼食


成田まで九時間近くと成田から一時間余りのフライトの上、無事小松空港に帰還

2007年04月15日

MVP Road Show 2007 金沢

昨日の夕方は、『MVP Road Show 2007 金沢』に参加。
マイクロソフトと北陸三県 (福井、石川、富山) から一名ずつ計四名が参加。

全員シアトルでの MVP Global Summit 2007 に参加していた。

色々と北陸の話ができたし、新しい情報も手に入った。
# LifeCam も貰った。

以下は、久々の金沢駅前の写真 (一番下は会場となった金沢都ホテル)。
dc041505.jpg
dc041506.jpg
dc041503.jpg
dc041511.jpg

2007年04月26日

こみゅぷらす (COMU+) & eパウダー Vista & 2007 Office Community Launch

こみゅぷらすで、来月半ばに以下のイベントを開催します。
雰囲気の良い素敵な店で、食事や酒等を楽しみながら参加いただけるという画期的な技術系イベントです。
どうぞ奮ってご参加ください。

こみゅぷらす (COMU+) & eパウダー Vista & 2007 Office Community Launchこみゅぷらす (COMU+) & eパウダー Vista & 2007 Office Community Launch
日時  2007年5月19日(土) 16:30 ~
場所 ピンクカウ (渋谷・表参道から徒歩7分)
主催/共催 こみゅぷらす (COMU+)eパウダ~
会費 ¥3,500 (おつまみ ¥1,000 + ビュッフェ ¥2,500)
詳細/申し込み 特設ページ
紹介サイト

2007年05月08日

VSUG DAY 2007 Summer

130x120_vsugday.gif
主催 VSUG (Visual Studio User Group)
日付 2007年6月1日(金)
会場 コクヨホール (東京都港区)
会費 無料 (VSUG 会員登録が必要)
テーマ 「次期VSがやってくる」
詳細 http://vsug.jp/tabid/151/Default.aspx

2007年05月17日

「第16回 codeseek 勉強会」と「こみゅぷらす (COMU+) & eパウダー Vista & 2007 Office Community Launch」

今週の土曜日は以下の二つのイベントに参加予定。
# どちらも少ししゃべる予定。

まだ申し込みを受け付けているので、興味のある方はお早めに。

第16回 codeseek 勉強会
日時 2007年5月19日(土)13:00~15:00
    こみゅぷらす Community Launch イベント直前
場所 渋谷貸し会議室を予定
主催 codeseek
協力 tk-engineeringこみゅぷらす (COMU+)
テーマ オブジェクト指向初心者脱出次の一手
内容 プログラミングのためのより現実的な視点でのオブジェクト指向についてサンプルコード を交えての解説と座談会形式での勉強会
参加費用 ¥1,000 飲み物込
申込期限 2007年5月18日(金) 18:00
詳細/申込先 こちら
comuplusclt.png > こみゅぷらす (COMU+) & eパウダー Vista & 2007 Office Community Launch
日時  2007年5月19日(土) 16:30 ~
場所 ピンクカウ (渋谷・表参道から徒歩7分)
主催/共催 こみゅぷらす (COMU+)eパウダ~
会費 ¥3,500 (おつまみ ¥1,000 + ビュッフェ ¥2,500)
プログラム
  • 16:30 ~ 19:00 スライドセッション
    • イベントのご説明、ご挨拶
    • 駆け足で語る Vista & Office 概要 (尾崎 義尚 - om(takanao))
    • C 言語から見た Windows Vista & JIS 2004 概要 (亀川 和史 - めさいあ)
    • Visual Studio 2005 Tools for the 2007 Microsoft Office System 概要 (永幡 直子 - なおこ(・∀・))
    • Windows SharePoint Services 3.0 概要 (NAL-6295)
  • 19:00 ~ 21:00 テーブルセッション
    • VB6 と Vista の怪しい関係 (衣川 朋宏)
    • Windows Workflow Foundation概要 (衣川 朋宏)
    • Office 2007 で今作る!豪華粗品の抽選プログラム (原敬一)
    • MacにVistaを入れました (原敬一)
    • DWM/Aero Overview (吉原 優一 - Elfaria)
    • リボンのリテン (尾崎 義尚 - om(takanao))
    • Groove 2007 (尾崎 義尚 - om(takanao))
    • Vista 時代のモバイル開発環境構築 (岡本 貴浩 - こた)
    • Windows の歴史 (ウィンドウズ以前~Vista) (小島 富治雄 Fujiwo)
    • サイドバー ガジェット (高須 淳一 - Moo)
    • 高橋メソッド.pptx (高須 淳一 - Moo)
    • TBD (村岡淳子)
    • IME2007チューンナップ (杉山 洋一 - かるあ)
    • Windows Communication Foundation 概要 (NAL-6295)
    • JIS 2004 詳細 (亀川 和史 - めさいあ)
  • 21:00頃 豪華粗品抽選会
  • 自由解散
詳細/申し込み 特設ページ

2007年07月02日

Micosoft MVP

この七月に、Micosoft MVP (Most Valuable Professional) Visual Developer - Visual C# のアワードを再受賞することができました。三年目になります。

お世話になっている多くの皆さんに感謝です。IT業界で知り合いうことのできた多くの皆さんとの会話が、私にとっての糧です。

今後とも宜しくお願い致します。

# よりよいIT業界を目指しましょう。

2007年07月03日

Tech・Ed 2007 Yokohama

bnr_teched_2007_120-90.gif
今年も Tech・Ed Yokohama に参加予定です。


Tech・Ed 2007 Yokohama
開催日2007/08/21(火)~24(金)
場所パシフィコ横浜

私は、以下の二つに登壇予定です。
コミュニティらしい和気藹藹としたセッションにしたいと思います。どうぞ奮ってご参加ください。

Birds of a Feather in Yokohama

Usergroup Street Live!

尚、こみゅぷらすの運営スタッフが登壇するその他のセッションは以下の通りです。

Usergroup Street Live!


2007年08月12日

Microsoft Tech・Ed 2007 in Yokohama

以下の通り Tech・Ed に参加予定。
Microsoft Tech・Ed 2007 in Yokohama
期間8月21日(火)~8月24日(金)
会場名称パシフィコ横浜
住所〒220-0012 横浜市西区みなとみらい1-1-1
電話045-221-2155
8月21日(火)
TIMEROOMセッション IDセッション タイトル
10:30 - 12:10A
オープニング & キーノート
「Dynamic IT for the People-Ready Business」マイクロソフト株式会社 ダレン ヒューストン
マイクロソフト コーポレーション イアン マクドナルド
13:50 - 15:05A
T3-302
Visual Studio 2008 概要近藤 和彦
15:05 - 15:25会議センター 3F
Street Live!
VB6 on Vista + Vista 時代のモバイル開発環境構築codeseek
衣川 朋宏 (tkinugaw) / 岡本 貴浩 (こた) / 原 敬一
15:25 - 16:40会議センター 3F
BOF09
今改めて語り合いたい。オブジェクト指向プログラミングをマスタするコツこみゅぷらす
小島 富治雄 / 尾崎 義尚 / 原 敬一
16:40 - 17:00会議センター 3F
Street Live!
わかっていますか? 女性のキモチ。~ 事例に見る “こんな時どうする” ~eパウダ~
村岡 淳子 / 山田 真由美 / 藤城 さつき
17:00 - 18:15会議センター 3F
BOF06
ソフトウェア開発の問題解決のための開発者コミュニティの活用方法についてINETA Japan
小井土 亨 / 小野 修司 / 奥津 和真
18:15 - 18:35会議センター 3F
Street Live!
マイクロソフト テクノロジの歴史を知ろうこみゅぷらす
尾崎 義尚 (om (takanao)) / 小島 富治雄 (Fujiwo)
8月22日(水)
TIMEROOMセッション IDセッション タイトル
9:30 - 10:45C
T1-403
Windows Communication Foundation のアーキテクチャと基本的な拡張手法アバナード株式会社
福井 厚
アバナード株式会社
木下 秀義
10:45 - 11:05会議センター 3F
Street Live!
CTP ってなに? どう使うとうれしいの? CTP の魅力について語ろうcodeseek
大橋 宏章 (NAL-6295) / 浜津 信弘 (deep) / 原 敬一
11:05 - 12:20B
T3-405
AJAX に対応した ASP.NET アプリケーション開発NRIラーニングネットワーク株式会社 矢嶋 聡
12:20 - 12:40会議センター 3F
Street Live!
CTP ってなに? どう使うとうれしいの? CTP の魅力について語ろうこみゅぷらす
杉山 洋一 (かるあ) / 亀川 和史 (めさいあ (kkmaegawa))
15:05 - 15:25会議センター 3F
Street Live!
Visual Basic 変数名 100 連発Tips of VB.NET
吉原 優一 (Elfaria) / 杉山 洋一 (かるあ)
15:25 - 16:40会議センター 3F
BOF04
DI と AOP による業務アプリケーション開発 - Seasar.NET杉本 和也 / 青木 淳夫 / 福井 厚
17:00 - 18:15会議センター 3F
BOF02
ソフトウェア ファクトリ BOF ~ソフトウェア開発の明日はどっちだ!?酒井 達明 / 森屋 英治 / 福井 厚 / マイクロソフト株式会社 DPE/エバンジェリスト 野村 一行
18:35 - 20:15パシフィコ横浜 展示ホール BCommunity & Networking Tech・Ed 2007 Attendee Party
INETA Japan ブース
8月23日(木)
TIMEROOMセッション IDセッション タイトル
11:00 - 12:00
INETA Japan リーダー・ミーティング
12:20 - 12:40会議センター 3F
Street Live!
C++、C++ / CLI、C# 適材適所の BOF の紹介えムナウのプログラミングのペー
児玉 宏之 (えムナウ) / 高萩 俊行 (とっちゃん) / 福田 文紀 (επιστημη)
12:20 - 13:50ヨコハマ グランド インターコンチネンタルホテル 3F ボールルーム / パシフィック / ベイビューCommunity & NetworkingPeerTalk Lunch
13:30 - 13:50会議センター 3F
Street Live!
ダイナミック言語のおもしろさわんくま同盟
中 博俊 / 大沼 安正 (usay) / 松下 和貴 (恣意の)
15:25 - 16:40会議センター 3F
BOF14
.NET Framework 3.0 をこう使いたいわんくま同盟
中 博俊 / 露木 敏博 / 森 博之
17:00 - 18:15会議センター 3F
BOF07
C++、C++ / CLI、C# 適材適所えムナウのプログラミングのペー
児玉 宏之 / 高萩 俊行 / 福田 文紀
20:00 - 20:30
INETA Japan リーダー・ミーティング
 - 
INETA Japan 懇親会
8月24日(金)
TIMEROOMセッション IDセッション タイトル
9:30 - 10:45会議センター 3F
BOF17
VSUG オフライン フォーラムVSUG
藤城 さつき / 社本 明弘 / 小野 雄太郎
10:45 - 11:05会議センター 3F
Street Live!
コミュニティへの参加とそのベネフィットCulminis
デイブ サンダース / サンジェイ シェティ
11:05 - 12:20A
T3-301
.NET における動的言語への取り組み荒井 省三
13:30 - 13:50会議センター 3F
Street Live!
ガジェットで VSUG しよう! ~ <VSUG Watcher>ガジェットのご紹介 ~VSUG : Visual Studio ユーザーグループ
井上 章
15:05 - 15:25会議センター 3F
Street Live!
ソフトウェア開発の自働化について日本 XP ユーザ会 (XPJUG)
小井土 亨 / 福井 厚
15:25 - 16:40D
T3-403
ジニアス平井の Visual Studio Team System のススメジニアス平井 (平井 昌人)
16:40 - 17:00会議センター 3F
Street Live!
Windows Vista の隠れた (?) 目玉、IIS 7.0 を使おうASP++
高須 淳一 (Moo) / 長田 直樹 (ナオキ)
19:30 - 
第三回平井さんを囲む会

2007年08月20日

Tech・Ed 2007 in Yokohama

bnr_teched_2007_120-90.gif
明日からいよいよ Tech・Ed Yokohama に参加予定です。

Tech・Ed 2007 Yokohama
開催日: 2007/08/21(火)~24(金)
場所: パシフィコ横浜

私は、主に以下の二つに登壇予定です。どうぞ奮ってご参加ください。

Birds of a Feather in Yokohama

・8/21(火) 15:25-16:40
BOF09: 『今改めて語り合いたい。オブジェクト指向プログラミングをマスタするコツ』

Usergroup Street Live!

こみゅぷらす
・8/21(火) 18:15-18:35
『マイクロソフト テクノロジの歴史を知ろう』

尚、こみゅぷらすの運営スタッフが登壇するその他のセッションは以下の通りです。

こみゅぷらす
・8/22(水) 12:20-12:40
『CTP ってなに? どう使うとうれしいの? CTP の魅力について語ろう』

codeseek
・8/21(火) 15:05-15:25
『VB6 on Vista + Vista 時代のモバイル開発環境構築』
・8/22(水) 10:45-11:05
『「読みやすいコード」とは?』

ASP++
・8/24(金) 16:40-17:00
『Windows Vista の隠れた (?) 目玉、IIS 7.0 を使おう』

Tips of VB.NET
・8/22(水) 15:05-15:25
『Visual Basic 変数名 100 連発』

また、その他関連コミュニティの BoF は以下の通りです。こちらにも顔を出したいと考えております。

アイネタ ジャパン
・8/21(火) 17:00-18:15
BOF06: 『ソフトウェア開発の問題解決のための開発者コミュニティの活用方法について』

VSUG (Visual Studio User Group)
・8/24(金) 09:30-10:45
BOF17: 『VSUG オフライン フォーラム』

2007年08月28日

Tech・Ed 2007 in Yokohama

※ 「Microsoft Tech・Ed 2007 in Yokohama」 の続き。

以下の通り Tech・Ed に参加した。

Microsoft Tech・Ed 2007 in Yokohama
期間8月21日(火)~8月24日(金)
会場名称パシフィコ横浜
住所横浜市西区みなとみらい1-1-1
DAY TIME ROOM セッション ID セッション タイトル スピーカー
8月21日(火) - 15:25 控え室
こみゅぷらす BoF 準備
15:25 - 16:40会議センター 3F BOF09今改めて語り合いたい。オブジェクト指向プログラミングをマスタするコツこみゅぷらす
小島 富治雄 / 尾崎 義尚 / 原 敬一
16:40 - 17:00会議センター 3F Street Live!わかっていますか? 女性のキモチ。~ 事例に見る “こんな時どうする” ~eパウダ~
村岡 淳子 / 山田 真由美 / 藤城 さつき
17:00 - 18:15 控え室  こみゅぷらす Street Live! 準備
18:15 - 18:35会議センター 3F Street Live!マイクロソフト テクノロジの歴史を知ろうこみゅぷらす
尾崎 義尚 (om (takanao)) / 小島 富治雄 (Fujiwo)
18:15 - 20:00 控え室   Community Happy Hour
8月22日(水) 9:30 - 10:45C T1-403Windows Communication Foundation のアーキテクチャと基本的な拡張手法アバナード株式会社
福井 厚 / 木下 秀義
10:45 - 11:05会議センター 3F Street Live! 「読みやすいコード」とは? codeseek
大橋 宏章 (NAL-6295) / 浜津 信弘 (deep) / 原 敬一
11:05 - 12:20B T3-405AJAX に対応した ASP.NET アプリケーション開発NRIラーニングネットワーク株式会社 矢嶋 聡
12:20 - 12:40会議センター 3F Street Live! CTP ってなに? どう使うとうれしいの? CTP の魅力について語ろうこみゅぷらす
杉山 洋一 (かるあ) / 亀川 和史 (めさいあ (kkmaegawa))
12:30 - 13:40   スペシャル セッションマイクロソフトの SOA と .NET Framework 3.X の適用についてMicrosoft Corporation Vittorio Bertocci
14:00 - 15:00 控え室  VSUG BoF 打ち合わせ
15:05 - 15:25会議センター 3F Street Live!Visual Basic 変数名 100 連発Tips of VB.NET
吉原 優一 (Elfaria) / 杉山 洋一 (かるあ)
15:25 - 16:40会議センター 3F BOF04DI と AOP による業務アプリケーション開発 - Seasar.NET杉本 和也 / 青木 淳夫 / 福井 厚
17:00 - 18:15会議センター 3F BOF02ソフトウェア ファクトリ BOF ~ソフトウェア開発の明日はどっちだ!?酒井 達明 / 森屋 英治 / 福井 厚 / マイクロソフトト 野村 一行
18:35 - 20:15パシフィコ横浜 展示ホール B Community & Networking Tech・Ed 2007 Attendee Party
Ask The Communiry Experts!
8月23日(木) 9:30 - 10:45 B オープニング & キーノートアプリケーション アーキテクトを目指すあなたに贈るスペシャル セッション
「LINQ to the Future ~ LINQ が創る次世代型データ処理技術 ~」
マイクロソフト株式会社 赤間 信幸
11:00 - 12:00    INETA Japan リーダー・ミーティング
12:20 - 13:50 ヨコハマ グランド インターコンチネンタルホテル 3F Community & Networking PeerTalk Lunch
13:30 - 13:50会議センター 3F Street Live! ダイナミック言語のおもしろさわんくま同盟
中 博俊 / 大沼 安正 (usay) / 松下 和貴 (恣意の)
13:50 - 15:05 Hands-on2 H-311 ASP.NET AJAX による Web アプリケーション開発概要 NRIラーニングネットワーク株式会社 矢嶋 聡
15:25 - 16:40   スペシャル セッション  Microsoft Corporation 波村 大悟
17:00 - 18:15会議センター 3F BOF07 C++、C++ / CLI、C# 適材適所えムナウのプログラミングのペー
児玉 宏之 / 高萩 俊行 / 福田 文紀
18:35 - 19:50E T4-405 Microsoft SharePoint Products and Technologies 2007 におけるワークフロー : 開発者向け詳説 マイクロソフト株式会社 松崎 剛
20:00 - 21:00     INETA Japan リーダー・ミーティング
21:00 -     INETA Japan 懇親会
8月24日(金) 9:30 - 10:45会議センター 3F BOF17VSUG オフライン フォーラムVSUG : Visual Studio ユーザーグループ
藤城 さつき / 社本 明弘 / 小野 雄太郎
10:45 - 11:05会議センター 3F Street Live!コミュニティへの参加とそのベネフィットCulminis
佐藤 千佳
11:05 - 12:20A T3-301.NET における動的言語への取り組み マイクロソフト株式会社 荒井 省三
13:30 - 13:50会議センター 3F Street Live!ガジェットで VSUG しよう! ~ <VSUG Watcher>ガジェットのご紹介 ~VSUG : Visual Studio ユーザーグループ
井上 章
13:50 - 15:05Hands-on1 H-208私もできた! Microsoft Office SharePoint Server 2007 の標準機能の活用  
15:05 - 15:25会議センター 3F Street Live!ソフトウェア開発の自働化について日本 XP ユーザ会 (XPJUG)
小井土 亨
15:25 - 16:40D T3-403ジニアス平井の Visual Studio Team System のススメ マイクロソフト株式会社 ジニアス平井 (平井 昌人)
16:40 - 17:00会議センター 3F Street Live!Windows Vista の隠れた (?) 目玉、IIS 7.0 を使おうASP++
高須 淳一 (Moo) / 長田 直樹 (ナオキ)
17:00 - 18:15Hands-on2 H-309LINQ を活用したデータ アクセス プログラミング NRIラーニングネットワーク株式会社 矢嶋 聡
19:30 - 横浜中華街  第三回平井さんを囲む会

2007年08月29日

私が日本の MVP ~コミュニティの達人~

マイクロソフトの「私が日本の MVP ~コミュニティの達人~」というサイトに載りました。

2007年09月12日

コミュニティ勉強会に参加しよう~第 1 回・東京編 (アイネタ ジャパン & マイクロソフト共催)

以下のイベントに参加する。三つ目のセッションを担当予定。

コミュニティ勉強会に参加しよう~第 1 回・東京編 (アイネタ ジャパン & マイクロソフト共催)
日時 9月29日(土) 13:00 -18:00
場所 マイクロソフト株式会社 新宿本社 小田急サザンタワー 5F セミナールーム
主催 アイネタ ジャパンマイクロソフト株式会社
参加費 無料 (事前登録制)
セッション内容及び申込み こちら

2007年09月14日

NET 関連情報 Web サイト

.NET 関連情報 Web サイト

2007年09月18日

LINQ to SQL

Chica's Blog - ScottGuさんのブログ翻訳 より 「LINQ to SQL」

2007年09月19日

REMIX07 TOKYO

今日は、以下に参加する。

REMIX07 TOKYO
日時 9/19(水) 10:00~18:15 (REMIX Night: 参加者パーティー 18:15~20:00)
場所 東京国際フォーラム
主催 マイクロソフト株式会社
参加費 カンファレンス ¥5,000、展示 無料
セッション内容 こちら

2007年10月01日

コミュニティ勉強会 (アイネタ ジャパン & マイクロソフト共催)

以下に参加した。

コミュニティ勉強会に参加しよう~第1回・東京編 (アイネタ ジャパン & マイクロソフト共催)』 (2007/09/29)
DSCF2200.jpg DSCF2198.jpg
雨の中、約70名の方が参加された。こうしたイベントには初めて参加される方も多かったようだ。

セッションは以下の三つ: また、セッション後には同じ会場での懇親会も行われた。
多くの参加者の方がその儘参加され、和気藹々と交流が行われた。

コミュニティ イベントとして、とても良いイベントだったように思う。

関連ブログ:

2007年10月10日

Sandcastle - September 2007 Community Technology Preview (CTP)

"Sandcastle" は、、ソースコードの XMLコメントから、ドキュメントを自動生成してくれるツールで、同様のツールであり .NET 2.0 への対応をやめてしまった NDoc の後継だ。

MSDN のような HTML Help (*.chm) を作ることができ、.NET 2.0に対応している。

コマンドライン ツールであるが、"Sandcastle Help File Builder" のような GUI もある。

"Sandcastle" の最新版である "September 2007 Community Technology Preview (CTP)" が 10/1 に、出、10/4 に "Sandcastle Help File Builder" の最新版である "1.6.0.0" が出た。

早速使ってみた。

  1. "Sandcastle" と "Sandcastle Help File Builder" の最新版をダウンロード。
  2. "Sandcastle - September 2007 Community Technology Preview (CTP)" をインストール。(*1)
  3. デフォルトのパス (*2) に "Sandcastle Help File Builder (1.6.0.0)" をインストール。
  4. 「スタートメニュー」-「すべてのプログラム」-「Sandcastle Help File Builder」-「Build Reflection Data (first use)」を実行。 (*3)
  5. 「ビルドに成功しました。」と表示されるまで、かなり時間が掛かるが待つ。
    sandcastlectp1.jpg
  6. Visual Studio のプロジェクトのプロパティで「ビルド」-「出力」-「XML ドキュメント ファイル」をオンにする。
    sandcastlectp2.jpg
  7. Visual Studio からプロジェクトをビルド。
  8. 「スタートメニュー」-「すべてのプログラム」-「Sandcastle Help File Builder」-「Sandcastle Help File Builder GUI」を実行。
    sandcastlectp3.jpg
  9. Sandcastle Help File Builder の "Project Properties" の "Paths" の "OutputPath" を確認 (デフォルトでは ".\Help\")。
  10. Sandcastle Help File Builder の "Project Properties" の "Help File" の "HtmlHelpName" を確認 (デフォルトでは "Documentation")。(*4)
  11. Sandcastle Help File Builder の "Assemblies to Document" の "Add" でドキュメントを出力したいアセンブリを追加。
  12. Sandcastle Help File Builder のメニューから "Documentation" の "Build Project" を実行。
  13. ビルドが成功したことを確認。(*5)
    sandcastlectp4.jpg
  14. MSDN 形式のヘルプファイルが作成されていることを確認 (デフォルトでは ".\Help\Documentation.chm")。(*6)
    sandcastlectp5.jpg

(*1) 古いバージョンの Sandcastle がインストールされていた場合は、先にアンインストールする必要がある。
(*2) デフォルトのパスにインストールしないと 4 の手順に失敗する。
(*3) Vista の場合、権限が足りなくて実行に失敗することがある。その場合は、"Sandcastle Help File Builder" をインストールしたフォルダ内の "BuildReflectionData.bat" を「管理者として実行」する。
(*4) 新バージョンでは、"Project Properties" の "Help File" の "Language" の選択肢に「日本語(日本)」が出て来ない。
(*5) この時 public なクラスがなかったり XML コメントがないと、ビルドエラーになる。
(*6) 日本語に十分対応していないため、左側のペインのフォントの設定が不適切で文字化けを起こすことがある。

続きを読む "Sandcastle - September 2007 Community Technology Preview (CTP)" »

2007年10月17日

Microsoft On

DSCF2603.JPG
本日社内で開催。

Microsoft On - 出張ワークショップ
『開発者テストからはじめるチーム開発の実践 Visual Studio Team System の活用エッセンス』

講師: マイクロソフト デベロッパーエバンジェリスト 長沢 智治氏
開催日時: 2007年10月17日 13時00分~16時00分
受講者数: 31名

まとまっていて、とても分かり易いお話だった。感謝。

印象に残った点や思ったことを以下に箇条書き。

  • プレゼンで使用していた拡大ツールがとても良さげだったので教えていただいた
  • Visual Studio 2008 で単体テストが随分軽くなり、リズムカルな開発が可能になった
  • Visual Studio 2008 は機能アップもさることながら、使い勝手が軽快になったことが嬉しい
  • Team Foudation Server 2008 へのマイグレーションについて
  • 変更セットってのは開発におけるトランザクション
  • 改善活動では、原因療法をやらず対症療法をやってる人ほど「うちではその方法は使えない」と言う
  • Team Foundation Server のガイドが翻訳される件について

2007年11月13日

VSUG DAY 2007 Winter

VSUG Day 2007 Winter
東京会場 日付 2007年12月8日(土)
会場 ベルサール西新宿 1Fホール
大阪会場 日付 2008年1月19日(土)
会場 新梅田研修センター
会費 無料(VSUG 会員登録が必要となります)

2007年11月14日

マイクロソフト デベロッパー フォーラム

先週の金曜日、以下のイベントに参加してきた。

『マイクロソフト デベロッパー フォーラム -Microsoft's 2020 vision of technology-』
日時 2007年11月9日(金) 11時15分~13時30分
会場 ホテル ニューオータニ 東京

会場には、マイクロソフトの人たちや、Microsoft MVP 等の開発者、学生、プレスの方など何十人かの人たちが集まっていた。

やがて、明るい照明のもと、本日の主役であるマイクロソフト最高経営責任者 (CEO) スティーブ バルマー氏が登場した。

DSCF2786.jpg

そして彼のプレゼンテーションが始まった。"Microsoft's 2020 vision of technology" ということで、「Software + Services」をメイン テーマに、今後十年位のマイクロソフトのビジョンが語られた。

その後は、質問タイムとなった。予め寄せられた質問やその場での質問にバルマー氏が答えてくれるのだ。

DSCF2785.jpg

私も、その場で思い付いた質問をしてみた。「IT技術者はこれから、多くの多能工が必要とされていくのか、それとも分業化が益々進むのか、どちらだと考えているか?」というような質問をした (勿論日本語で)。バルマー氏が答えてくれた。「分業化が進むだろう…」(勿論英語で)。

答えてくれている数分間、彼とはずっと目が合った儘だった。バルマー氏の話を聴くのはこれが三回目だろうか。でもこんなに間近で見つめ合ったのは初めてだ。目力 (めぢから) を感じたというか、なんとも迫力があった。とてもエネルギッシュに話す人だ。

というわけで、生バルマーを堪能した。ただ、一ドル札に氏のサイン (謎) をもらえなかったのがちょっと残念だった。

その後、インタビューを受けたり、懇親会でマイクロソフトの人や他の MVP の人と話をしたりした。

尚、このイベントの模様は、近日以下の場所でWebキャストにて公開されるそうだ。ちょっと楽しみだ。

2007年11月28日

MSDN オフラインセミナー「.NET Framework における次世代データアクセステクノロジー概要」[北陸編]

以下に参加してきた。

dc112805.JPG

MSDN オフラインセミナー
「.NET Framework における次世代データアクセステクノロジー概要」[北陸編]
日時 2007年11月28日
13:30~16:30
場所 住所 石川県金沢市 金沢パークビル 11F
会場 マイクロソフト株式会社 北陸支店 セミナールーム
講師 マイクロソフト株式会社 デベロッパーエバンジェリスト 小高太郎氏

dc112809.JPG dc112818.JPG

■ 内容と気になった言葉

  • ADO.NET 概要
    • データ プロバイダ
    • 二つの接続形態
      • 接続型
      • 非接続型
        • DataSet
        • 型付き DataSet
        • データバインド
        • TableAdapterManager
  • ADO.NET の進化
    • LINQ関連
      • LINQ to SQL等
    • Entity Data Model (EDM)
  • LINQ to SQL
    • 「LINQ はデータベースを扱うものではなく、オブジェクトを扱うもの」
    • 遅延評価
    • DataContext
    • DML (SQL) のサポート
    • デザイナー
      • "LINQ to SQL Classes" の追加
      • Table の Drag & Drop
    • 「Select の本質は『射影』だよ」
    • LEFT OUTER JOIN のデモ
    • LinqDataSource
  • LINQ to Object
    • IEnumerable<T>
    • 「Where、OrderBy、Select の部分はパイプ処理だよ」
    • 『埋め込みクエリ方式』と『拡張メソッド方式』
    • LINQ to Object と LINQ to SQL の JOIN
    • LINQ to DataSet
  • Entity Data Model (EDM)
    • 論理データモデル (DOA のモデルと OO のモデル) と概念データモデル (EDM)
    • スキーマ記述言語
      • CSDL (概念スキーマ定義言語 )、MSL (マッピングスキーマ言語 )、SSDL (ストアスキーマ定義言語)
    • "Entity Designer"
    • "ADO.NET Entity Framework Beta2" と "ADO.NET Entity Framework Tools CTP"
    • デザイナー
      • "ADO.NET Entity Data Model" (edmx ファイル) の追加
      • DSL (モデル駆動開発のための)
  • ADO.NET Entity Framework
    • EDM に対するクエリ
    • EntityClient
      • Entity SQL (Transact SQL に似て非なるもの)
        • DML クエリは未だない
    • Object Services
      • Entity SQL
      • QueryBuilder
      • LINQ to Entity
  • ガイダンスとまとめ
    • 三つの方式
      • 接続型/非接続型
        • Agile
      • LINQ to SQL
        • 中間型
        • Visual Studio 2008 でサポート
      • Entity Framework
        • Enterprise
        • Visual Studio 2008 への追加機能
          • 2008年前半位に?
    • LINQ
      • 「様々なデータソースへの統括的なアクセス方法」
    • 概念レベルのDBアプリケーション
    • "Easy of Development"

■ 所感

久々に訪れた金沢。新しくできたマイクロソフト株式会社 北陸支店を初めて訪れた。

素晴らしいセミナーだった。

小高氏の話は、技術の背景から技術の要点、そして適用範囲まで、とても纏まっていて、技術の本質を見ることのできる分かりやすいものだった。また、沢山のデモがあって、かなり具体的に知ることができた。

Tech・Ed でも同内容を扱ったセッションは結構あったが、今回はそれをより深いところまで学ぶことができたようだ。

新しい ADO.NET について包括的に理解することができたように思う。

特に概念データモデルに関して、

  • 概念データモデルを作る
  • 概念データモデルとデータベースの論理モデルのマッピングを行う
  • 概念データモデルに対するクエリを LINQ (to Entity) で書く

とすることで、随分すっきりと「意図したことだけが書ける」ものだと感嘆したし、この一連のデモが目の前でいとも簡単に動いたときには深い感動を覚えた。

概念データモデルの考え方は、私が初めてデータベース プログラミングを学んだときに感じた、「ロジック部分の設計モデルとデータベースの設計モデルとの間を埋めるものが経験から来る暗黙知のようなものでしかないことからくる違和感」を解消してくれた気がした。

そしてまた、この概念モデルを書くための DSL (ドメイン特化言語) が追加され、それをまたサポートするツールが追加されたことが面白いと感じた。 用途に応じて DSL を使い分ける、ということの意図が段々と判ってきたような気がした。

余談だが、これらのDSL は右脳人間向きかも知れない、とか思った。

モデルを、より包括的に且つよりグラフィカルに表現するのは、左脳人間より右脳人間の方が得意とするところかも知れない。とすると、これまでのプログラミング言語は論理の組み立ての得意な左脳人間が操るものだったのが、今後の幾つかの新たなパラダイムから来ている言語に関しては、寧ろ右脳人間が得意とするようになるのかも知れない。

帰りに、「Power To The PRO」と書かれたカップヌードルRefillを頂いた (二個目)。

dc112829.JPG

dc112826.JPG

2007年12月01日

こみゅぷらす いちねん

1stAnniversary.PNG

こみゅぷらすスタートから今日で一年。新しい年度がスタートした。

運営スタッフは、大分増えて、現在 14名。

やったこと (オフライン):

今年度も色々とゆるい感じでやることになりそう。

2007年12月03日

マイクロソフト デベロッパー フォーラムの模様公開

※ 「マイクロソフト デベロッパー フォーラム」続き。 11月9日にスティーブ バルマー氏が来日して行われたマイクロソフト デベロッパー フォーラムの模様がビデオ等で公開された。 私は、以下の二箇所に:

2007年12月13日

マグカップ

なんか届いた。
DSCF3269.JPG

2007年12月14日

Visual Studio 2008 日本語版

早速ダウンロード。

慌てて、『VS 2008 最終リリースのインストール前にVS 2008ベータ2をアンインストールする方法』をやって、インストール。

また、"Microsoft Silverlight Tools Alpha for Visual Studio 2008 Beta 2" をアンインストールして、"Microsoft Silverlight 1.1 Tools Alpha for Visual Studio 2008" をダウンロード。

参考:


2007年12月25日

第23回 codeseek勉強会 & こみゅぷらすと codeseek の忘年会 2007

第23回 codeseek勉強会 & こみゅぷらすと codeseek の忘年会 2007」への参加を、ざわざわニュースで伝えてみるテスト。

2008年01月21日

VSUG DAY 2007 Winter 大阪

日帰りで、「VSUG DAY 2007 Winter 大阪」に行ってきた。
dc012004.JPG dc012018.JPG dc012006.JPG

飛び入りで Silverlight のライトニングト-クスまでやらせてもらった。

懇親会と二次会にも出て、幸せな時を過ごせた。参加して良かった。


# 行きは高速バス、帰りは「急行ゆきぐに」で帰ってきたのだが、乗り過ごしたりして、往復に東京との往復に通常掛かる時間の4倍位掛かってしまった。距離でいうと半分位の筈なのだが。

2008年01月30日

Source Code Outliner PowerToy for Visual Studio 2008

「Source Code Outliner PowerToy for Visual Studio 2008」が公開されたので試した。

下記からダウンロードしてインストールすることで、Visual Studio の拡張機能として使うことができる。

開いているソースコードの概要 (クラスやメソッド、プロパティ等) がツリー状に表示される。
Source Code Outliner PowerToy for Visual Studio 2008

  • Visual Studio 2008 用
  • C#/Visual Basic 用 (C++ネイティブやC++/CLI は非対応)
  • ソースコードのカーソル位置にあたる部分がハイライトし、現在位置を示す
  • Source Code Outliner 側でクラスやメソッド等を選択すると、ソースコードのその箇所にジャンプすることができる

ソースコードの全体での現在位置を把握しながら、あちこちにジャンプしながら閲覧したり編集したりするのには、便利だと感じた。

2008年01月31日

.NET Framework ライブラリのソースコードが利用可能に

.NET Framework ライブラリのソース コードが部分的に利用可能になったのでやってみた。

これは、Visual Studio 2008 からデバッグ時に .NET Framework ライブラリのソース コードが参照できるようになったものだ。

詳しい手順は、以下に載っている (英語)。

上記の手順によれば、先ず、Visual Studio 2008 QFE という Hotfix をインストールすることになっている。

だが、これは「このソフトウェア更新の対象製品はこのコンピュータにインストールされていません。」というエラーが出てできなかったのでやらなかった。
Source Code Outliner PowerToy for Visual Studio 2008

以降、手順通りでうまく行った。

  1. メニュー -「ツール」-「オプション」でオプションのダイアログを開き、「デバッグ」-「全般」で、
    1. 「'マイ コードのみ'設定を有効にする」をオフ
      Source Code Outliner PowerToy for Visual Studio 2008
    2. 「ソース サーバー サポートを有効にする」をオン
      Source Code Outliner PowerToy for Visual Studio 2008
  2. オプションのダイアログの「デバッグ」-「シンボル」
    Source Code Outliner PowerToy for Visual Studio 2008
    1. 「シンボル ファイル (.pdb) の場所」に新規で "https://referencesource.microsoft.com/symbols" を追加
    2. 「シンボル サーバーからシンボルをキャッシュするディレクトリ」として適当な (存在する) ディレクトリを指定
    3. 「シンボルが手動で読み込まれるときのみ上記の場所を探す」は、ここではオンにしておく
      Source Code Outliner PowerToy for Visual Studio 2008
  3. デバッグを開始する。
    Source Code Outliner PowerToy for Visual Studio 2008
  4. 適当なところで、
    1. メニュー-「デバッグ」-「ウィンドウ」-「呼び出し履歴」から「呼び出し履歴」ウィンドウを表示する (Ctrl+Alt+C でも可)
    2. 「呼び出し履歴」の中の .NET Framework 部分に当たる適当な行で右クリックし、ポップアップ メニューから「シンボルの読み込み」をクリック
      Source Code Outliner PowerToy for Visual Studio 2008
    3. ライセンスに関する規約に同意するかどうか聞かれるので、"Yes" と答える
      Source Code Outliner PowerToy for Visual Studio 2008
    4. 読み込みに成功すると、「呼び出し履歴」のその行をダブル クリックすることで、.NET Framework のソースコードにジャンプできるようになる
  5. 次に Ctrl+Alt+U で「モジュール」ウィンドウを開く
    • 「モジュール」の中の適当な行を右クリックし、ポップアップ メニューから「シンボルの読み込み」をクリック
      Source Code Outliner PowerToy for Visual Studio 2008
      Source Code Outliner PowerToy for Visual Studio 2008
  6. ソースコードの .NET Framework の呼び出しのところで、ステップ イン (F11) をすると、シンボルが読み込み済みのモジュールであればそのソースにステップ インできる
    Source Code Outliner PowerToy for Visual Studio 2008
  7. 毎度手動でシンボルを読み込む場合は、上記の通りであるが、オプションのダイアログの「デバッグ」-「シンボル」-「シンボルが手動で読み込まれるときのみ上記の場所を探す」をオフにしておけば、キャッシュ用のディレクトリにシンボルが自動で読み込まれ、必要なときはそこを参照するようになるため、毎度手動でシンボルを読み込む手間が省ける。
    Source Code Outliner PowerToy for Visual Studio 2008

2008年02月01日

亞剌比亞數字の大字への變換

大字への變換の Sample Code を書いてみた。

例.

  • "0" → ""
  • "12,345" → "壹萬貳阡參佰肆拾伍"
  • "987,654,321" → "玖億捌阡柒佰陸拾伍萬肆阡參佰廿壹"
  • "122,090,654,002,030" → "壹佰廿貳兆玖佰陸億伍阡肆佰萬貳阡卅"
  • "34,500,000,000,128,034" → "參京肆阡伍佰兆壹拾貳萬捌阡卅肆"
  • "10,000,000,000,000,000,000" → "壹阡京"
// Source Code by C#
static string 大字への變換(string 亞剌比亞數字)
{
    亞剌比亞數字           = 亞剌比亞數字.Replace(",", "");
    ulong 數;
    if (!ulong.TryParse(亞剌比亞數字, out 數))
        throw new ArgumentException();
    var   數表現           = new[] { "", "壹", "貳", "參", "肆", "伍", "陸", "柒", "捌", "玖" };
    var   小位表現         = new[] { "", "拾", "佰", "阡" };
    var   大位表現         = new[] { "", "萬", "億", "兆", "京" };
    var   大位表現使用濟み = new[] { false, false, false, false, false };
    var   大字             = string.Empty;
    for (var 位 = 0; 數 != 0ul; 數 /= 10ul, 位++) {
        var 或る位の數 = (int)(數 % 10ul);
        if (或る位の數 != 0) {
            var 大位 = 位 / 4;
            if (大位 >= 大位表現.Length)
                throw new OverflowException();
            if (!大位表現使用濟み[大位]) {
                大字                   = 大位表現[大位] + 大字;
                大位表現使用濟み[大位] = true;
            }
            大字 = 數表現[或る位の數] + 小位表現[位 % 4] + 大字;
        }
    }
    return 大字.Replace("貳拾", "廿").Replace("參拾", "卅");
}

2008年03月03日

『C#2.0&3.0勉強会』in 福井

以下の無料勉強会を福井でやります。奮ってご参加ください。

C#2.0&3.0勉強会
開催日 2008年3月12日(水)
開催時間 13:30~17:30 (受付開始 13:00)
会場 ふくい産業支援センター ふくい産業支援センター パソコン実習室B
参加費 無料
主催 福井情報技術者協会 (FITEA)
内容 C#2.0 や 3.0 で追加された最新言語仕様を用いて、品質が高く保守しやすいきれいなコードを書くための技術を学びます (例: yield、ラムダ式、クロージャ、LINQ等)。備え付けのPCを使った実習も予定しています。
詳細/申込先 http://fitea.org/?p=74

コミュニティ勉強会に参加しよう~第4回・福井編

以下の無料勉強会が福井で開催されます。奮ってご参加ください。

InetaStudyLogo4.jpgコミュニティ勉強会に参加しよう~第4回・福井編
開催日 2008年3月29日(土)
開催時間 13:00~18:00 (受付開始 12:30)
会場 福井県中小企業産業大学校 特別教室 (福井県福井市下六条町16-15)
参加費 無料
主催/共催 アイネタ ジャパンマイクロソフト/福井情報技術者協会 (FITEA)
内容 コミュニティ支援団体であるNPO法人アイネタ ジャパンとマイクロソフトが共催で勉強会を開催します。2007 年東京、福岡、2008 年は岡山に引き続き 4 回目の開催となります。講師には各コミュニティで活躍されている方とマイクロソフトのエバンジェリストが登場し、最新製品・テクノロジに関する情報やいま話題のトピックなど、通常のマイクソロフト イベントとは違った視点から解説します。
詳細/申込先 http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032371939&Culture=ja-JP

2008年03月21日

コミュニティ勉強会に参加しよう ~第4回・福井編

28646999_80.jpg

福井で、.NET の無料セミナーを開催します。奮ってご参加ください。

  • 福井県内外からマイクロソフトのエバンジェリストや Microsoft MVP が多数スピーカーとして参加します。
  • 参加費無料です。
  • 懇親会で軽食の提供があります (無料)。
  • 抽選で、NetAdvantage for WPFNetAdvantage for .NET (正規版) が当たります (登録のため当日名刺が必要)。
コミュニティ勉強会に参加しよう ~第4回・福井編
主催/共催 アイネタ ジャパンマイクロソフト福井情報技術者協会 (FITEA)
内容 コミュニティ支援団体であるNPO法人アイネタ ジャパンとマイクロソフトが共催で勉強会を開催します。2007年東京、福岡、2008年岡山に引き続き4回目の開催となります。講師には各コミュニティで活躍されている方とマイクロソフトのエバンジェリストが登場し、最新製品・テクノロジに関する情報やいま話題のトピックなど、通常のマイクソロフト イベントとは違った視点から解説します。
詳細/申込先 http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032371939&Culture=ja-JP

※ ライトニング トークス参加者募集!

FITEA の担当セッションで、5分間のトークス (.NET 関係ならなんでも O.K.) をして頂ける方を募集します。
ご協力頂ける方・興味のある方は、info@fitea.org までご連絡ください。

2008年04月12日

2008 Microsoft MVP Summit (其零)

dc041202.JPG
明日より 2008 Microsoft MVP Summit に参加すべくシアトル及びレドモンドのマイクロソフト本社へ。

# ちなみにチベット仏教最高指導者ダライ・ラマ14世も今シアトルに滞在中の筈。

2008年04月24日

2008 MVP Global Summit 参加レポート

VSUG にコラムとして書きました。

2008 MVP Global Summit 参加レポート

以前 VSUG にコラムとして書いたものをここで公開します。

はじめに

皆様こんにちは。春暖の候如何お過ごしでしょうか。

新人の方が入ってこられ、活気があふれている職場も多いかと想像しています。

さて今回は、私が先週参加してまいりました "2008 MVP Global Summit" についてご紹介したいと思います。

2008 MVP Global Summit
参加者 Microsoft MVP
※ Microsoft MVP についてご存じない方は、こちらをご参照ください。
開催期間 2008年4月14日(月)~17日(木)
場所 米国ワシントン州
   

2008 MVP Global Summit というのは、年に一度位の頻度でマイクロソフト本社とその近くで開かれるイベントです。

今回は、日本から75名のMVP 、全世界では 1700 名を超えるMVPが参加し、マイクロソフトの製品グループや他のMVPとの直接の交流を行いました。

また、数百の技術セッションが行われNDA(Non-Disclosure Agreement=秘密保持契約)の元、様々な技術情報が提供されました。

NDAの関係でセッションの内容はお知らせできませんけれど、シアトルの様子などをレポートしてみたいと思います。

2008 MVP Global Summit

■ 会場など

私が参加したセッションの会場は三箇所です。

○ Washington State Convention & Trade Center

先ずは、Washington State Convention & Trade Center


・ Washington State Convention & Trade Center の外観。


・ Summit 会場入り口。


・ Summit 会場入り口の立て看板。


・ 多くの MVP が会場前に集っていました。


・ キーノート会場。


・ キーノートの様子。

今年のキーノートは、マイクロソフトのCEOのスティーブ・バルマー氏とチーフ ソフトウェア アーキテクトのレイ ・オジー氏でした。

スティーブ・バルマー氏の話はとても熱く、迫力満点で圧倒されるものでした。

○ マイクロソフト キャンパス

二つ目の会場は、レドモンドのマイクロソフト キャンパスです。

技術系のセッションは主にここで行われました。





・ 会場には、様々な高カロリーそうなものやコーヒーなどが置いてあって、セッションの合間に楽しむことができます。


・ セッションの様子。

セッションは基本的に英語のみです。

しかもセッションは、日本の多くの場合と異なり、スピーカーの話を大人しく座って聴いている、という形式ではありません。

参加者が MVP ばかり、ということもあるでしょうけれど、聴衆から頻繁に質問の手が挙がります。そして、スピーカーとの活発なやり取りがはじまります。

筆者は今回三回目の参加となるのですが、今回はディスカッション形式のセッションがとても多く、聴き取るのが難しいものだらけでした。

一応 iKnow などを利用して、少しだけアリングを鍛えてきたつもりでした。しかし、ディスカッションが始まると、資料も図解も何もないところで英語のネイティブなスピーカーが中心となって早口で話し、論点も次々と変化していきます。そのため、全然話に付いていくことができませんでした。無念でした。

○ シェラトン シアトル

三つ目の会場は、会期中私が宿泊したホテルシェラトン シアトルです。

朝食の一部はここで提供されました。


・ シェラトン シアトルでの朝食風景。

■ パーティ

夜毎にはパーティが開催されました。

二日目夜のプロダクト グループ毎のディナーでは、他国の C# のMVP の方と話をすることができました。

三日目のアテンディー パーティは、Experience Music Project という場所で行われました。

世界中の MVP の方がいて、様々な交流がありました。

また、最後の夜には、日本から参加している MVP だけのディナーがあり、日本の MVP とも交流しました。

シアトルってどんなところ?

次に、シアトルの紹介をしてみたいと思います。

シアトルは米国ワシントン州最大の都市です。ワシントン州はアメリカ西海岸最北部の州で、カナダとの国境があります。

シアトルは、ワシントン湖やレーニエ山など、美しい自然に囲まれた街です。治安も良いようで、とても良い場所であるように感じました (但し消費税率が約9%でした)。

ちなみに、日本との時差は16時間でした。前回ほどではありませんでしたが、時差ぼけになり、セッション中に気を失うように眠りに落ちてしまうこともありました。日本の家族と会話をするために、Skype のテレビ電話機能を使っていたのですが、家族の夕食時に掛けるためには、午前2時から5時の間に電話する必要がありました。

■ 気候

シアトルは一年を通じて穏やかな気候だということでした。4月の気温は摂氏6度から14度くらい。夏以外には雨の降る日が多いことで知られているそうです。

Summit 中も毎日のように雨が降っていました。また、日本よりもかなり肌寒く感じました。

但し、シアトルの雨は小雨が多く、傘を使うことはありませんでした。日本での服装に、撥水性のウィンドウ ブレーカーを羽織ると丁度良い感じでした。

■ 企業

シアトルとその近郊には、マイクロソフトをはじめとして、ボーイングスターバックスAmazon.comなどがあります。

マイクロソフトの本拠地があるのは、シアトル郊外 (東側) のレドモンドという町です。ここには、とても広い敷地内に沢山の建物があって、「マイクロソフト キャンパス」と呼ばれています。

■ 観光など

○ 観光名所

合間に少しシアトル観光もしてきました。写真でレポートしてみます。


・ まずは、Northwest航空でSeattle-Tacoma空港 (通称SEA-TAC空港)に到着したところから。


・ メジャーリーグのシアトル マリナーズには、現在イチロー選手や城島選手が在籍しています。この写真は、イチローが打席にいるところ。


・ シアトルの市場パイク・プレイス・マーケットは代表的な観光スポット。新鮮な魚介類を中心に様々なものが売られています。


・ パイク・プレイス・マーケットのシンボル。「レイチェル」という豚のブロンズ像。


・ パイク・プレイス・マーケットの果物店。


・ パイク・プレイス・マーケットには魚屋が沢山あります。


・ スターバックス一号店もパイク・プレイス・マーケットにあります。看板の色は緑ではなく茶色。


・ シアトル ダウンタウンのウエスト レイク センターというショッピング センター。


・ ウエスト レイク センターの地下にはダイソーがありました。品揃えは日本と余り変わりませんでした。


・ シアトルはスターバックスコーヒー発祥の地。街の到るところにスターバックスをはじめとしたシアトル コーヒーの店があります。


・ 丁度ダライ・ラマ14世がシアトルに滞在中でした。

○ 飲食物

ワシントン州はワインの産地としても知られていて、とても美味しいワインを楽しむことができました。

レッドフックブルワリーをはじめとしたシアトルの地ビールもとても美味しく連日堪能しました。

おわりに

英語漬けの毎日でしたが、とても貴重な体験でした。

次のようなことを学べたような気がしています。

  • 直接話すことの重要性
  • ディスカッションをするときの態度
  • Q&A 中心のセッション
  • プレゼンテーションはどうあるべきか
  • 主張するときは、結論から
  • 英語の重要性

やはり、英語力不足のためにコミュニケーションが不十分になってしまうのは、とても歯痒くつらい経験でした。

直接のコミュニケーションはもちろん、オンラインでの海外との情報のやりとりも英語が必要です。

エンジニアとして、英語を使う機会をもっと増やしていこう、と決意を新たにした次第です。

2008年05月15日

INETA Day 2008

今週末は、以下のイベントに参加。

私は、VSUG (Visual Studio User Group) 担当のセッション 1-1 「Visual Studio 2008による開発環境・プログラミングの進化」で、LINQ周りのプログラミングの話をする。

噂によると、数百名の参加登録があるそうだ。セッション後には、懇親会 (無料) も予定されているし、とても楽しみだ。

『INETA Day 2008~コミュニティパワーをリアルに体験しよう』
日時 2008年5月17日(土)
時間 13:00-19:00 (受付開始 12:30)
場所 会場 日本科学未来館
住所 東京都江東区青海2-41
参加費 無料 (事前登録制)
詳細 サイト
参加申込み Microsoft Events ― INETA Day 2008~コミュニティパワーをリアルに体験しよう

2008年05月20日

INETA Day 2008 に参加

INETA Day 2008 (5/17) 終了。

懇親会での参加者の方々の楽しげな顔は忘れられない。
コミュニティならではの素敵なイベントだった。

私は、「Visual Studio 2008による 開発環境・プログラミングの進化」と
題して、プログラミング スタイルにどのような新たな選択肢が追加された
のか、という話をした。

C# によるデモが中心で、

"手続き型なべあつ" → "マルチパラダイムなべあつ" → "音声なべあつ" → "LINQなべあつ" → "コンポーネントなべあつ"

と進化させてみた。なべあつがマルチパラダイムで「三が付く数字と、三の倍数の時だけ、アホになり、五の倍数のときは、犬っぽく」なる。音声出力にも挑戦してみた。

# 時間の関係で、説明をとても端折ることになったのが残念だった。
# どこかでもう一度ちゃんとやりたい。


INETA のサイトで資料とデモ用サンプルソースが公開された。
http://www.ineta.jp/tabid/173/Default.aspx

  • セッション 1-1 「Visual Studio 2008による 開発環境・プログラミングの進化」スピーカー: 小島 富治雄
  • デモ用サンプルソース ("手続き型なべあつ" → "マルチパラダイムなべあつ" → "音声なべあつ" → "LINQなべあつ" → "コンポーネントなべあつ")

2008年06月07日

[こみゅぷらす] Community Launch 2008

Community Launch イベントを開催します。
# 私も「Visual Studio 2008による開発環境・プログラミングの進化」で登壇予定です。

CLT2008.PNG
日時 2008年6月14日(土) 12:00~16:00
場所 英国風パブ HUB 新宿駅近く
主催/共催 こみゅぷらすeパウダ~codeseek
参加費 ¥1,000
今回 Culminis 様や、アイネタジャパン様、株式会社東京紙工様よりご支援をいただき、低い参加費を実現しました!
定員 50名限定
おしゃれなお店をお借りして、お酒を飲みながら実施いたしますので、お気軽にご参加ください。詳細/申し込みは、特設ページをご覧ください。

2008年06月15日

[こみゅぷらす] Community Launch 2008

CLT2008.PNG
昨日新宿で、「こみゅぷらす Community Launch 2008」が開催されました。

ご参加いただいた皆様、ご後援いただいた皆様、スタッフの皆さん、ありがとうございました!
お陰様でとても楽しいイベントになりました。

昨年は渋谷のピンクカウで「パブで飲みながら技術セッション」をやりました。そして、今年も開催することができました。

7998739_1587496162.jpg
7998739_3880356612.jpg
7998739_2389132330.jpg
7998739_3104531324.jpg
7998739_1011540939.jpg

# 私は、HUB のフィッシュ&チップスなどを楽しみながら、12時から12時まで12時間ビールとなりました。

2008年06月29日

VSUG Leaders Summit 2008 in 宮崎


伊丹空港から一風変わった飛行機で宮崎へ。


宮崎空港に到着。


会場のあるホテルへ。


VSUG Leaders Summit 2008。ライトニングトークスをやった。


宮崎料理の店。


宮崎のポピュラーな芋焼酎。


鶏炭火焼。柚子胡椒と一緒に食べる。びっくりするほど柔らかくて美味。


カワハギの刺身の真を実力を知った。肝も新鮮でぷりぷり。


大量の冷汁。


夜の街。


宿泊したホテルを朝出発。


昼間の飲み屋街。


有名な宮崎県庁。


みやざき物産館で昼地ビール。


昼の街並み。


昼食のチキン南蛮。


次に目指した釜揚げうどんの店「戸隠」は残念ながら定休日だった。


釜揚げうどんの店「重乃井


釜揚げうどん。やわらかくてもちもちして美味い。最後にお湯に付け汁を入れて飲む。


中が異様にカラフルな電車で宮崎空港へ。


宮崎空港にあった東国原人形。


空港で揚げたての「おび天」を食べた。


宮崎空港の中央部。南国ムード。


宮崎空港で食べられるマンゴーのソフトクリーム。


宮崎のデパートで買ってきた家への土産。花畑牧場 (北海道十勝の田中義剛の牧場)の生キャラメル。宮崎と何の関係もないがとても美味。

2008年07月02日

Micosoft MVP

Micosoft MVP (Most Valuable Professional) for Development Tools - Visual C# のアワードを再受賞することができました。四年目になります (Jul. 2005 - Jun. 2009)。

思えば、随分多くの方のお世話になってきました。

NIFTY-Serve のプログラマ系フォーラムでのオフラインでのコミュニケーション。そして、2002年頃からのオンラインでのコミュニケーション。

IT業界で多くの皆さんとお話をさせていただいたことが、私にとっての宝です。

いつもありがとうございます。

今後とも宜しくお願い致します。

2008年07月15日

Visual Studio Team System ホワイトペーパー

Visual Studio Team System ホワイトペーパー

  • Team Foundation Server を利用したアプリケーション開発概観 ― マイクロソフトのコンサルタントの執筆による、アプリケーション開発の際に利用されるTeam Foundation Server の主要な機能の使い方とその機能を利用する際の推奨事項 (PDF)
  • Web アプリケーションのパフォーマンス テスト ガイダンス ― Web アプリケーションにおけるパフォーマンス テストの実践についてベストプラクティスやポイントを解説 (PDF)
  • アジリティ (俊敏性) 向上のためのツール ― アジャイル開発等で著名なケント・ベックによる、ツールとアジャイル開発に関するホワイトペーパー(PDF)
  • Visual Studio Team System 2008 を使用したコミュニケーションとコラボレーション (PDF)
  • Visual Studio Team System 2008 を使用した予測可能性の向上 (PDF)
  • Visual Studio Team System 2008 を使用した早期かつ頻繁な品質確認 (PDF)
  • Visual Studio Team System 2008 を使用した頻繁な作業の統合 (PDF)
  • Visual Studio Team System 2008 を使用したリアルタイムの意思決定 (PDF)
  • Visual Studio Team System 2008を使用したチーム ワークフローの管理 (PDF)
  • Visual Studio Team System 2008 での馴染みのあるツールの使用 (PDF)
  • 分岐のガイダンス ― Team Foundation Server における分岐のベストプラクティス (PDF)
  • 要求管理と Team System (PDF)

2008年08月05日

こみゅぷらす Tech・Ed BoF

今年のTech・Ed Yokohama でも こみゅぷらすで BoF に出ます。

2008年08月30日

Tech・Ed 2008 Yokohama

四日間+αの長い夏祭りが終わりました。

Microsoft Tech・Ed 2008 Yokohama
2008/08/26~29

色々な体験がありました。

・沢山のセッション
BoF12 の準備と本番
・各種飲み会

お付き合いいただいた方、お話をさせていただいた方、BoF12 にご参加いただいた方 (聴衆とスタッフとスピーカーの皆様)、本当にありがとうございました。

■ 会場のパシフィコ横浜
20251262_3222786486.jpg 20251262_3038266433.jpg

■ 今年の宿泊先は横浜桜木町ワシントンホテル
20251262_659822036.jpg

■ 沢山のセッションやハンズオン等にも参加
20251262_1501235040.jpg 20251262_1501235040.jpg 20251262_3211852185.jpg 20251262_3728042009.jpg 20251262_207862212.jpg 20251262_1036764034.jpg 20251262_3456375616.jpg

■ 巨大なトークスタイマー
20251262_1151214832.jpg

■ 飲み会関連
20251262_3671258968.jpg 20251262_1458193690.jpg 20251262_1455125579.jpg

2008年09月15日

Micosoft 最新技術最強セミナー in 福井~Tech・Ed 2008 記念~

dc033007.JPG

Tech・Ed 2008 Yokohama のスピーカーを多数に招いてのセミナーを福井で実現しました。この機会をお見逃しなく!
お席に限りがございますので、皆様お早目のお申し込みをお願いいたします。

『Micosoft 最新技術最強セミナー in 福井~Tech・Ed 2008 記念~』
日時 2008年10月3日(金) 13:00~18:00 (受付は12:30より開始)
 ※終了後に有志で懇親会を開催します。こちらもお気軽にどうぞ。
 ※懇親会に参加される方はセミナー終了後福井駅前に移動して行います。
場所 福井県中小企業産業大学校 特別教室
定員 60名
内容
  1. 『ASP.NETの仕組み』
     講師:小野 修司氏
     あおい情報システム株式会社
     Microsoft MVP for ASP/ASP.NET (April 2007 - March 2009)
     Visual C# (April 2003 - March 2007)

  2. 『Silverlight 2.0』
     大西 彰氏
     マイクロソフト株式会社 デベロッパー&プラットフォーム統括本部

  3. 『Hyper-Vハンズオン』
     杉下 朋年氏
     D&UNITE株式会社 代表
     Microsoft MVP for Development Tools - Visual Basic
     Jul. 2004 - Jun. 2009

  4. 『Software+Services入門』
     福井 厚氏
     アバナード株式会社 ソリューション・アーキテクト
     MCA (Microsoft Certified Architect) Solutions Certifications
       Microsoft MVP for ASP/ASP.NET

  5. 『ライトニングトークス』
     5分間の短いプレゼンを交代で行います。
    • 平鍋 健児氏 株式会社チェンジビジョン 代表取締役社長
    • 橋本 賢一氏 管理工学研究所 北陸分室
    • 中西 孝之氏 (株)アイジュピタ
    • 小島 富治雄氏 福井コンピュータ(株) Microsoft MVP for Development Tools - C#
※内容、順番は変更されることがあります。
参加費 無料
 ※懇親会に参加される方は別途。
 ※今回のイベントはINETA Japanの支援を受けて開催する予定です。
対象者
  • Tech Edに行けなくてくやしかった方。
  • マイクロソフト系の技術を仕事で使われている、又は興味のある方。
  • 最新トレンドについて広く浅く頭に入れておきたい人。
  • 最近の流れになかなかついていけてないプログラマー。
  • その他、コミュニティイベントに興味のある方どなたでも。
■難易度:★★★☆☆(3)or ★★★★☆(4)
お申し込み締切 2008年9月30日(火)迄
 →詳細はこちら:http://fitea.org/?p=84
 →お申し込みはこちら:http://fitea.org/enterevents.html
 ※お席に余裕がありませんので、お早めにお申し込み下さい。
主催  
  FITEA (福井情報技術者協会)
 後援 
  アイネタ・ジャパン
留意事項 ※会場へのアクセスはこちらをご覧下さい。産業会館の隣です。
 約400台収容可能な無料駐車場があります。
 http://www.fukui-iic.or.jp/fiib/access.html
※無料のフレンドリーバスが通っています。「生活学習館前」です。
 福井駅前を12:00に出れば間に合います。帰りは18:04、19:04のバスが使えると思います。
 http://www.library.pref.fukui.jp/guide/bus.html
イベント終了後の懇親会について 福井駅近く「庄内家」にて18:40開始の予定です。ご予算はお一人5000~6000円程度の予定です。
 http://gourmet.gyao.jp/0003003173/
スピーカーの方も参加されますので、この機会に交流を深めましょう。

2008年11月09日

Open Day 2008 Tokyo

昨日は、九段で Open Day 2008 Tokyo に参加。

日本の Microsoft MVP の半数位に当たる 100名が一堂に会した。マイクロソフトの方も多くいらしていた。
私は、Windows 7 や Visual Studio 2010 などのセッションや懇親会に参加。
dc1109032.JPG dc110903.JPG dc110928.JPG
※ 最後の写真は、とある MVP の方に頂いた PDC のお土産。ジャグリング用。

2008年12月05日

Silverlight 2 SDK 日本語ドキュメント

Silverlight 2 SDK 日本語ドキュメント認知度アップキャンペーン。

Silverlight 2 アプリケーション開発に必要なドキュメントが日本語になっているので紹介。

2009年01月15日

CES2009 Keynote

CES2009 (International Consumer Electronics Show 2009) でのマイクロソフト CEO スティーブ バルマー氏の基調講演です。

途中でシャルロット・ジョーンズ氏による Windows 7 ベータと Windows Mobile と Windows Liveのデモがあります。
# 他に、ロビー バック氏による Zune と Xbox のデモ、ジャネット ガロアによる Microsoft Research の未来のコンピュータのデモもあります。

※ 動画を観るには Silverlight が必要です。

※ 口述筆記したものはこちら

2009年05月29日

こみゅぷらす Community Launch 2009 ~Windows 7 コミュニティ勉強会 with Tech Fielders 東京編~

今年もやります。

7CLTLogo.png
『こみゅぷらす Community Launch 2009
~Windows 7 コミュニティ勉強会 with Tech Fielders 東京編~』

■ 会場: マイクロソフト株式会社 新宿本社
■ 日時: 2009年6月27日 13:00 ~ 18:30
■ 主催: こみゅぷらす、アイネタ ジャパン、codeseek
  後援: マイクロソフト

※ 詳しくは、http://comuplus.net/clt2009/ へ。

2009年06月19日

INETA Day 2009 募集開始

INETA Day 2009 の参加者募集が開始された。

マイクロソフト 萩原正義氏とアークウェイ 森屋英治氏がクラウドのアーキテクチャの話をされる。
クラウドに関するお二人の話を続けて聴ける、というのは、中々にすごいことだと思う。

  • 萩原氏 「クラウドでのアーキテクチャの原則と考慮点」
  • 森屋氏 「Windows Azure アーキテクチャと開発」

私はスタッフとして参加する他、最新技術トラックで Visual Studio 2010 と .NET Framework 4.0 をご紹介する予定。

『INETA Day 2009 ~コミュニティパワーをリアルに体験しよう』
日時 2009年7月11日(土) 13:00-17:30 (受付開始 12:15)
会場 日本科学未来館
  • みらいCANホール (7F) 受付
  • 会議室1 (7F)
  • 会議室2 (7F)
申込 http://www.ineta.jp/tabid/232/Default.aspx
定員 300名
参加費 無料 (事前登録制・要 INETA への登録)
セッション詳細 【最新技術トラック】
  • 13:00-14:15 (75)
    Microsoft ソフトウェアアーキテクト 萩原 正義 氏
    「クラウドでのアーキテクチャの原則と考慮点」
  • 14:30-15:45 (75)
    株式会社アークウェイ 代表取締役 森屋 英治 氏
    「Windows Azure アーキテクチャと開発」
  • 16:00-17:15 (75)
    こみゅぷらす/VSUG 小島 富治雄
    「C#4.0 と Visual Studio 2010/.NET Framework 4.0~ここが Cool! いけてる機能10連発!~」
【コミュニティトラック】
  • 13:00-13:40 (40)
    VSUG
    「タイトル未定」
  • 13:45-14:25 (40)
    インフラジスティックス・ジャパン(株) デベロッパー エバンジェリスト 池原 大然 氏 (アイネタビューロ登録スピーカー)
    「Prism ではじめる Silverlight LOB アプリケーション開発」
  • 14:30-15:10 (40)
    WisdomSoft 赤坂 玲音 氏
    「Silverlight カスタムコントロール開発」
  • 15:15-15:55 (40)
    .Netユーザーエクスペリエンス研究所 児玉 宏之 氏
    「WPFの新しいコントロール」
  •  16:00-17:15 (75)
    パネルディスカッション
    「レガシー資産をどうされていますか?」
【チュートリアルトラック】
  • 13:00-15:45 (165)
    XPJUG 小井土 亨 氏
    「オブジェクト指向設計入門」

2009年07月01日

こみゅぷらす Community Launch 2009 ~Windows 7 コミュニティ勉強会 with Tech Fielders 東京編~ レポート

7CLTLogo.png
イベントレポートをあげました。

ご参加いただいた皆様、本当にありがとうございました。
おかげさまで充実したときを過ごすことができました。

2009年07月03日

Microsoft Tech·Ed Japan 2009

ことしも横浜で開催予定。楽しみだ。

2,000 人の IT エンジニアが集う 3 日限りの真夏の祭典 | Microsoft Tech·Ed Japan 2009
開催日程 2009年8月26日(水)~28日(金)
開催場所 パシフィコ横浜
参加料 有償 (早期割引 7月17日まで)

2009年07月13日

INETA DAY 2009 無事終了

INETA DAY 2009 に参加してきました。
ご参加いただいた皆様、ありがとうございました。

DSCF2099.JPG DSCF2084.JPG DSCF2094.JPG

終了後は、懇親会 → ガンダム → 新橋で飲み、という流れになりました。
エンジニアとして尊敬する方たちとの、本当に素敵なひと時でした。貴重な機会に感謝。

関連記事:

2009年07月17日

ReMIX Tokyo 09

下記に参加してきた。

ReMIX Tokyo 09
日時 2009/07/16(木)
場所 東京ミッドタウン・ホール
主催 マイクロソフト

キーノートでは、米 Microsoft のスコット・ガスリー氏 (Scott Guthrie, デベロッパープラットフォームコーポレートバイスプレジデント) が登場。

dc071727.jpg

話題の中心は、Silverlight 3。
ちなみにこの日、「Microsoft Visual Studio 2008 Service Pack 1用 Silverlight 3 Tools 日本語版」や「Silverlight 3 ソフトウェア開発キット 日本語版」の提供が開始された。

他には、Microsoft Expression 3 のデモも興味深いものだった。

昼には、『スコットガスリーMVPスペシャルセッション』にも参加。

dc071776.jpg

午後からは、3トラックに分かれて、セッションが行われた。

dc0717124.jpg

多くのブースが出展していて、Silverlight 3 や Experssion 3、Windows Surface などのデモを見ることができた。

dc071787.jpg

会場で、Silverlight 3 の本をゲット。

dc0717126.jpg

セッション後の参加者交流パーティでは、マイクロソフトの方をはじめとした多くの技術者と話をすることができた。

dc0717128.jpg

■ 関連記事:

2009年07月19日

Windows 7 コミュニティ勉強会 with Tech Fielders 北陸編

下記に参加してきました。

Windows 7 コミュニティ勉強会 with Tech Fielders 北陸編
日付 2009/07/18(土)
会場 HOTEL KANAZAWA
主催 北陸エンジニア交流支援 Redmine
dc071937.jpg dc071901.jpg dc071915.jpg

私は、Visual Studio 2010 のデモを中心としたセッションをやってきました。

スピーカーの多くが Mac ユーザー、開発環境に関しても Eclipse の話題が多く、マイクロソフト技術の勉強会なのにアウェー感の中でのセッションとなりました。

聴いていただいた皆様、スタッフの皆様、ありがとうございました。

■ 関連記事:

2009年08月24日

Tech·Ed の BoF で「美しいソース コードのための考え方」というのをやります

Tech·Ed Japan 2009Birds of a Feather で、

BOF-08 ~マルチパラダイム時代のプログラムの書き方~
日時: 8月27日(木) 15:15-16:25

というのをやります。宜しければご参加ください。

2009年08月31日

Microsoft Tech·Ed Japan 2009 の写真

Microsoft Tech·Ed Japan 2009
開催日程 2009年8月26日(水)~8月28日(金)
開催場所 パシフィコ横浜

一日目

二日目

三日目

2009年11月22日

Visual Studio 2010 Beta 2 インストール前にアンインストールするもの

現在 Micirosoft Visual Studio 2010 Beta 2 日本語版 がダウンロード可能だが、インストール前に Visual Studio 2010 Beta 1 や Silverlight 3.0 SDK などをアンインストールしておく必要がある。

詳しくは以下を参照:

Visual Studio 2010 Beta 1 に比較してかなり安定しており軽快になったようだ。

2010年01月29日

Microsoft Tech·Days 2010

イベント名 Microsoft Tech·Days 2010
日時 平成22年2月23日(火)-24日(水)
会場 ホテル グランパシフィック LE DAIBA (東京都港区台場 2-6-1)
主催 マイクロソフト
参加費 有料
詳細/申し込み http://www.microsoft.com/japan/events/techdays/2010/

マイクロソフトの次世代プラットフォームを紹介するイベント PDC (Professional Developers Conference) の日本版です。

私はコミュニティ トラックの「Visual Studio 2010 でプチ・パラダイムシフトせよ!」 <2/23(火) 15:50-17:00 ROOM F> で登壇します。

2010年02月21日

Microsoft 2010 MVP Global Summit

Microsoft 2010 MVP Global Summit
日時 2010/02/16(火)-21(日)
場所 米国ワシントン州 ベルビュー (ベルビュー会場:Hyatt Regency Bellevue、レドモンド会場:マイクロソフト本社 オフィス)
主催 マイクロソフト

※ 一日目のつぶやき。

  • MVP Global Sunmit へ出発。先ずはバスで小松へ。
  • 成田空港に到着。 http://twitpic.com/13i0pp
  • 長旅に備えて成田空港のラウンジで色々充電中。コーヒー・ビールとともにテレビでオリンピック。
  • 成田空港での昼食は森さんとタイカレー。うまい。
  • 出国した。これから搭乗。

※ 二日目のつぶやき。

※ 三日目のつぶやき。

  • MVP Global Summit 二日目の朝7:30。今日は技術系のセッションを色々受ける。
  • マイクロソフトキャンパスでセッションを受講中。
  • 英語に耳が慣れてきた。
  • VB/C#のディナー中。Visual Studio グッズをもらった。
  • 今日はパキスタンの人とギリシャの人、ルーマニアの人、韓国の人、米国の人、ロシアの人等と話した。

※ 四日目のつぶやき。

  • MVP Global Summit 三日目の朝。昨夜は知り合った韓国の5人のMVPと部屋飲みした。
  • 今日の最初のセッションはパラレルプログラミング。

※ 五日目のつぶやき。

  • MVP Global Summit 最終日。キーノート セッション中。
  • MVP Global Summit 最終日。午後のセッション中。
  • MVP Global Summit 最終日終了。明日帰国。
  • MVP Global Summit finished today. I'm going to flight back to Japan tomorrow morning. #MVP10
  • Thanks for the great summit! #mvp10

※ 六日目のつぶやき。

  • Good morning! I'm going to flight back from MVP Global Summit today. #mvp10
  • SEA-TAC 空港に到着。
  • 無事帰国。
  • これから成田空港から小松空港に移動。
  • 成田空港で他人のパスポートを拾った。届けた。
  • 成田から小松空港に到着。飛行機で隣合わせたベルリン出身の女子学生と一時間話した。

2010年02月24日

Microsoft Tech·Days 2010

Microsoft Tech·Days 2010
■ 日時: 2010/02/23(火)、24(水)
■ 場所: ホテル グランパシフィック LE DAIBA (東京都港区台場)
■ 主催: マイクロソフト株式会社

○ 02/23(火)
・キーノート「3 スクリーン + クラウドの世界を切り拓くマイクロソフトの最新テクノロジ ~ Let's dream and then Let's build ~」大場 章弘氏、スティーブ マークス 氏
・「Visual Studio 2010 でプチ・パラダイムシフトせよ!」 小島 富治雄氏、原 敬一氏
・「クラウド時代のアーキテクチャ + Azure + Data」 森屋 英治氏

○ 02/24(水)
・「並列プログラミングのパターンと Visual Studio 2010 を使ったその適用」 川西 裕幸氏
・「.NET Framework 4 時代の言語」 荒井 省三氏
・「インテルの並列化プログラミングへの取り組みとインテル Parallel Universe Portal のご紹介」 菅原 清文氏
・「ISV 向け Windows Azure による SaaS アプリケーション開発」 平井 昌人氏
・「クラウド コンピューティングのデータ、アプリケーション、開発手法のメタアプローチ」 萩原 正義氏


※ 一日目のつぶやき。

  • これから Tech•Days へ。小松空港へバスで移動中。 http://twitpic.com/14s97z
  • 羽田を出てバスで台場へ移動中。
  • キーノート会場に到着。 #techdaysj
  • 富士通って nifty のクラウドは使わないんだろうか。
  • 技術者ってテクノロジーが好きだから、何ができるか、の前に、どうやってやってるか、をしゃべっちゃうんだよなー。気持ちはわかるけど。黙ってデモった方が説得力がある気がする。
  • マイノリティレポートのデモ。
  • Windows Phone のデモはいけてるなー。 #techdaysj
  • と思ったら瞬時に終わってしまった #techdaysj
  • 近藤さんによる Visual Studio 2010 の紹介中。インテリトレースという新機能のデモ。 #techdaysj
  • 森屋さんの「クラウド時代のアーキテクチャ+Azure+Data」が始まった。 #techdaysj

※ 二日目のつぶやき。

  • TechDays 二日目。最初のセッションは川西さんの「並列プログラミングのパターンと Visual Studio 2010 を使ったその適用」。

  • Tech Days。荒井さんの「.NET Framework 4 時代の言語」中。キーワードは、動的、宣言型、コンカレンシー。
  • Tech Days ランチ セッション中。
  • Tech Days。午後一のセッションは平井さんの「ISV 向け Windows Azure による SaaS アプリケーション開発」。
  • 萩原さんの「クラウド コンピューティングのデータ、アプリケーション、開発手法のメタアプローチ」中。 #techdaysj
  • データ設計はデータの意味によって行われ、正規化はその後に起こる。 #techdaysj
  • 「データ設計ではデータの分割が重要。分割しなければスケールしない。」 #techdaysj
  • 「データ間の多重度の変更 (1:多 → 多:多) が起こることがある。データ設計では多重度の変更に関する安定性が課題。」 #techdaysj
  • 「なぜ JOIN が必要なのか? データには『もの』以外に『こと』が発生するから。そして『もの』は目的じゃない。『こと』が目的で『もの』は『こと』のためにある。」 #techdaysj
  • 「高階述語モデル。例. 教わる(学生、科目、教官) = 教わる(選択する(学生、科目)、担当する(科目、教官))。RDBは一階述語モデル」 #techdaysj
  • 「現実世界は高階述語モデルなのに、それを一階述語モデルであるRDBに落とし込もうとすることから却って複雑さが生まれる」 #techdaysj
  • 「述語モデルのコツ。『もの』と『もの』には『こと』を介在させる。『こと』は『もの』と『もの』とを組み合わせるコンテキスト」 #techdaysj
  • 「高階述語モデルにおいて、述語の変更は述語を伝播するが、スケールアウトのためには述語の変更頻度に合わせて配置する必要がある」 #techdaysj
  • 「『事実が起こった』ことと『事実が観測される』ことは別のこと。これまでは同じとして設計していたが、クラウドでは別のものとして設計する」 #techdaysj
  • 「人にとって『事実の記憶』と『知識の構築』は別のプロセス。前者は起きているとき、後者は眠っているときに発生する。クラウドでもこれらは別のプロセス」 #techdaysj
  • 「クラウドの物理的法則。操作とその結果の観測は同時にはできない」 #techdaysj
  • 「『複雑さに対する人間の理解力の限界』が、問題に対する『論理レベルの制約』になる」 #techdaysj
  • Tech Days 終了。帰ります。お会いできた皆様、ありがとうございました。
  • 羽田空港到着。ラウンジでコーヒー中。
  • 帰ってきた。There is no place like home!

DSCF8713.JPG

DSCF8653.JPG

DSCF8658.JPG

DSCF8659.JPG

DSCF8662.JPG

DSCF8708.JPG

2010年04月04日

2010 Community Open Day with INETA Japan - Osaka ~ Microsoft Visual Studio 2010 編

『2010 Community Open Day with INETA Japan - Osaka ~ Microsoft Visual Studio 2010 編』
■ 日時: 2010/04/03(土) 13:00-19:00
■ 場所: マイクロソフト株式会社 関西支店 セミナールーム
■ 主催: マイクロソフト株式会社アイネタジャパン

■ セッション:

  1. 『VS 2010 で快適マルチパラダイム プログラミング』 小島 富治雄 氏
  2. 『VS 2010、進化した WPF および Siliverlight デザイナー』 森 博之 氏
  3. 『VS 2010 による Extensibility プログラミング』 松江 祐輔 氏
  4. 『自動テストのススメ by VS 2010』 小井土 亨 氏

IMG_0832.JPG
雷鳥で福井から大阪へ。

dc040407.JPG
マイクロソフト大阪支店に到着。

dc040413.jpg
小井土氏の司会でイベント開始。

dc040419.jpg
森氏の『VS 2010 による Extensibility プログラミング』。

dc040422.JPG
小井土氏「自動テストのススメ by VS 2010」。

dc040434.JPG
四つのセッションが終わってハッピーアワ ーが始まった。

dc040450_stitch.jpg dc040462.JPG
全て終わって新大阪から電車で帰宅。

2010年04月13日

VSUG Day 2010

VSUG Day 2010 Summer Tokyo
VSUG Day 2010 Summer Osaka

2010年06月29日

『こみゅぷらす Community Launch 2010』 7/10(土)

『こみゅぷらす Community Launch 2010』
こみゅぷらす恒例、酒あり食べ物あり、参加者が入り乱れた楽しいラウンチイベントです。
料金もかなりリーズナブル!
豪華な景品や粗品が当たる抽選会も計画中です!

今回は Visual Studio 2010 のラウンチ イベントです。

・主催  : こみゅぷらす、codeseek
・開催日:  2010年7月10日(土)
・会場  :  新宿の居酒屋(詳細な店舗名はお申し込みした方にメールで) (東京都)
・定員  :  50名
・参加費 : 3,000円 (※ この会費は、利益を出すものではありません。店の食事代になります)
・詳細/お申込み:  http://comuplus.net/clt2010/


予定セッション
■ 「Expression Blend 4とVisual Studio 2010によるSilverlight 4アプリケー
ション開発」
マイクロソフト 大西 彰 氏
■ 「IronPython、IronRuby on Silverlight」
マイクロソフト 荒井 省三 氏
■ 「Visual Studio デバッギング (仮)」
亀川 和史 (めさいあ) 氏
■ 「Visual Studio 2010 で C# ・WPF アプリケーション」
宇宙仮面 氏
■ 「C# VS. F# on Visual Studio 2010」
小島 富治雄 氏 (Fujiwo)
■ その他
素晴らしいスピーカー陣を予定しています。

奮ってご参加ください。

『Hokuriku.NET Vol.4』7/17(土)

ユーザーインタフェースからクラウドまで、幅広いマイクロソフト技術をまとめて学べる贅沢なセミナーが福井で開催されます。

マイクロソフトは近年、Visual Studio 2010やWPF、Silverlight、LINQ、Windows Azureなど、さまざまな分野のテクノロジーを続々と発表しています。これらの技術について、一度に学べるセミナーは福井ではめったにありません。日本海側最大級!!

マイクロソフトエバンジェリストやマイクロソフトMVPが多数講師として参加しますので、この機会をお見逃し無く!

お席に限りがございますので、皆様お早目のお申し込みをお願いいたします。

■ セミナー名: 『Hokuriku.NET Vol.4』
■ 主旨: マイクロソフト系の技術を広く語り合う定期開催勉強会
■ 開催日: 2010年7月17日(土) 13:00 - 17:30 (12:40受付開始)
■ 場所: アオッサ6F 研修室603 (http://www.aossa.jp/access.html) JR福井駅から徒歩1分
■ 参加費: 500円程度のカンパをお願いしています
■ 主催: FITEA (http://fitea.org)/北陸エンジニアグループ (http://groups.google.co.jp/group/hokuriku_engineer)
■ 定員: 40名
■ 内容
タイムテーブル:

○12:40 受付開始

○13:00 開会挨拶 FITEA/北陸エンジニアグループ

○13:10 基調講演 『Visual Studio 2010の世界観』
 マイクロソフト株式会社 デベロッパー&プラットフォーム統括本部 エバンジェリスト 長沢智治氏

○14:00 技術セッション 『Silverlight での開発 (仮)』
 北陸エンジニアグループ 西村誠氏

○14:30 休憩

○14:40 Team WF による特別講演 第一部 『最適なテクノロジーの選択とアーキテクチャ』
 Team WF (株式会社アークウェイ 代表取締役、Microsoft MVP 森屋英治氏、
アバナード株式会社 ソリューション・アーキテクト、Microsoft MVP、MCA 福井厚氏)、
福井コンピュータ株式会社 シニアエキスパート、Microsoft MVP 小島 富治雄氏

 「マイクロソフトは、UI層、サービス層、データアクセス層のそれぞれにおいて様々なテクノロジーを提供しています。UI層であれば WinForm、WPF、ASP.NET、WebForm、ASP.NET MVC、Silverlightなど、サービス層であればASMX、WCFなど、データアクセス層であれば、レガシーADO.NET、Entity Framework、LINQ to SQLなど。さらにWindows Azureを加えるとテクノロジーの選択肢は広がります。これら多数のテクノロジーの特長を理解し、要求の応じた最適なテクノロジーを選択するためにはどうすればよいかを、ホワイトボードを使いながら、ディスカッション形式で解説します」

○15:30 休憩

○15:40 Team WF による特別講演 第二部 『Entity Framework Deep Dive』
 Team WF (株式会社アークウェイ 代表取締役、Microsoft MVP 森屋英治氏、
アバナード株式会社 ソリューション・アーキテクト、Microsoft MVP、MCA 福井厚氏)

 「マイクロソフトのORマッピング実装であるEntity Frameworkを深く掘り下げて解説します。エンティティ継承とテーブル マッピング、レイジーロード、テスト容易性、状態管理とシリアライゼーション、N層アプリケーションへの対応などを扱います」

○16:50 ライトニングトークス 中西 孝之氏 ((株)アイジュピタ)、小島 富治雄氏 (福井コンピュータ(株)、Microsoft MVP) 他

○17:25 締めのあいさつ・アンケート

■懇親会:
終了後福井駅近くで懇親会を予定しています。
場所は決まり次第お知らせいたします。

■お申し込み:
こちらからどなたでもお気軽にどうぞ
http://fitea.org/enterevents.html

ライトニング トークスの参加者を募集しています。
ライトニング トークスをしていただける方は、参加お申し込み時にお願いします。

■ 参考:
・Hokuriku.NET の Webサイト: http://sites.google.com/site/hokurikunet/

・Hokuriku.NET Vol.3 は石川県野々市町で先週土曜日に開催されました。
http://atnd.org/events/4182
http://blog.livedoor.jp/coelacanth_blog/archives/55384003.html

2010年07月11日

『こみゅぷらす Community Launch 2010』 7/10(土)

7/10(土) に開催した『こみゅぷらす Community Launch 2010』の様子を写真で紹介。

  • 「Expression Blend 4とVisual Studio 2010によるSilverlight 4アプリケーション開発」 マイクロソフト 大西 彰 氏
  • 「IronPython、IronRuby on Silverlight」 マイクロソフト 荒井 省三 氏
  • 「Visual Studio デバッギング (仮)」 亀川 和史 (めさいあ) 氏
  • 「Visual Studio 2010 で C# ・WPF アプリケーション」 宇宙仮面 氏
  • 「C# VS. F# on Visual Studio 2010」 小島 富治雄 氏 (Fujiwo)

2010年08月17日

Microsoft Tech·Ed で BoF やります

今年も Microsoft Tech·Ed で BoF やります。

「BOF-05 最速導入 Visual Studio 2010」(Day 2: 8/26 13:45-14:55、会議センター 3F)。
宜しければご参加ください。

http://www.microsoft.com/japan/teched/2010/session/session.aspx?SessionID=BOF-05

2010年08月29日

Microsoft Tech·Ed Japan 2010 の写真

Microsoft Tech·Ed Japan 2010 に行ったときの写真。

  • 開催日程: 2010年8月25日(水)~8月27日(金)
  • 開催場所: パシフィコ横浜 (横浜市西区みなとみらい)
■ 宿泊先の横浜桜木町ワシントンホテルから会場のパシフィコ横浜
■ 会場のパシフィコ横浜
■ 基調講演
■ 会場内の様子
■ セッションの様子
■ Hand-on Lab の様子
■ Birds of a Feather の様子
■ Attendee Party (8/25 18:05-19:30) の様子
■ MVPs & Tech·Ed Speakers Lunch (8/26 12:15-13:30) の様子
■ Windows Azure Community 発足パーティ (8/26 18:30-19:15) の様子
■ PeerTalk Lunch (8/27 12:05-13:45) の様子

2010年09月15日

[C#/.NET Tips] struct を使うときの注意点

using System;
using System.Collections.Generic;
 
class TestProgram
{
    struct StructCounter
    {
        public int Number       { getset; }
        public void Increment() { Number++; } // struct に内部の状態を変えるようなメソッドを持たすときは要注意。
    }
 
    class ClassCounter
    {
        public int Number       { getset; }
        public void Increment() { Number++; }
    }
 
    // struct では、readonly なときとそうでないときで、内部の状態を変えるようなメソッドを呼んだときの挙動が異なるので要注意。
    // 勘違いから思わぬバグの元になることも。
    class ReadOnlyStructTest
    {
        // class を使った例。
        ClassCounter           classCounter         = new ClassCounter();
        readonly ClassCounter  readOnlyClassCounter = new ClassCounter();
 
        // struct を使った例。
        StructCounter          structCounter;
        readonly StructCounter readOnlyStructCounter;
 
        public void Run()
        {
            // クラスの場合はどっちも結果は同じなので、違いを特に意識しなくても大丈夫。
            classCounter.Increment();
            Console.WriteLine(classCounter.Number         ); // 結果は 1。
            readOnlyClassCounter.Increment();
            Console.WriteLine(readOnlyClassCounter.Number ); // 結果は 1。
 
            // struct の場合は、readonly なときとそうでないときで、要素の内部の状態を変えるようなメソッドを呼んだときの挙動が異なる。
            structCounter.Increment();
            Console.WriteLine(structCounter.Number        );  // 結果は 1。structCounter そのものにアクセスしている。
            readOnlyStructCounter.Increment();
            Console.WriteLine(readOnlyStructCounter.Number);  // 結果は 0。readOnlyStructCounter そのものではなく、コピーにアクセスしている。
        }
    }
 
    // struct の配列とリストでは、要素の内部の状態を変えるようなメソッドを呼んだときの挙動が異なるので要注意。
    // 勘違いから思わぬバグの元になることも。
    static void StructArrayTest()
    {
        // class の場合はどっちも結果は同じなので、違いを特に意識しなくても大丈夫。
        var classArray = new ClassCounter[] { new ClassCounter() };
        classArray[0].Increment();
        Console.WriteLine(classArray[0].Number); // 結果は 1。
 
        var classList = new List<ClassCounter>() { new ClassCounter() };
        classList[0].Increment();
        Console.WriteLine(classList[0].Number); // 結果は 1。
 
        // struct の場合は、配列とリストでインデクサ経由で要素の内部の状態を変えるようなメソッドを呼んだときの挙動が異なる。
        var structArray = new StructCounter[] { new StructCounter() };
        structArray[0].Increment();
        Console.WriteLine(structArray[0].Number); // 結果は 1。structArray のインデクサを通じて、内部のアイテムに直にアクセスできる。

        var structList = new List<StructCounter>() { new StructCounter() };
        structList[0].Increment();
        Console.WriteLine(structList[0].Number); // 結果は 0。structList のインデクサは、内部のアイテムのコピーを返す。
    }
 
    static void Main()
    {
        new ReadOnlyStructTest().Run();
        StructArrayTest();
    }
}

2010年12月28日

【Tips: ADO.NET】 IDENTITY 列を持ったテーブルに行を挿入した時の IDENTITY 列の値の取得

SQL Server の IDENTITY 列は、テーブルに新しい行が挿入されるときに自動的にその値がインクリメントされます。主キーとしてたいへん便利です。

行の挿入後に IDENTITY 列の値を取得したいことがあります。ADO.NET における、そのやり方を見て行きましょう。

※ 動作環境
  • ここで使用する Visual Studio は Visual Studio 2010 です。
  • 想定している .NET Framework のバージョンは .NET Framework 4.0 です。

■ 1. SQL Server 側のテーブルの準備

先ず、IDENTITY 列を持ったテーブルを SQL Server 側に準備しましょう。

  1. Visual Studio の「サーバーエクスプローラ」 (Visual Studio Express Edition の場合は「データベース・エクスプローラ」) を開きます。
  2. 「データ接続」を右クリックし、ポップアップ メニューから「接続の追加」または「新しい SQL Server データベースの作成」をします。
  3. その接続の「テーブル」 - 「新しいテーブルの追加」でデータベースにテーブルを追加します。

  1. ここでは、試しに以下のような "Item" というテーブルを追加することにします。
Item
列名 主キー データ型 Null を許容 IDENTITY の設定
Id int × はい
Name × nvarchar(100) × いいえ
  1. Id 列を主キーとし、IDENTITY の設定を「はい」にしておきます。

  1. または、SQL Server Management Studio などから以下の SQL を実行することでも上記 Item テーブルを作成することができます。
CREATE TABLE [dbo].[Item](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Name] [nvarchar](100) NOT NULL,
 CONSTRAINT [PK_Item] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

データベース側の準備ができましたので、これから ADO.NET の各種手法において、新規行の IDENTITY 列の値の取得方法を見ていきましょう。


■ 2. SqlCommand の場合

SQL Server で使用する Transact-SQL では、"SCOPE_IDENTITY" という関数を使って、INSERT 後に、自動採番された値を取得することができます。

※ 参考: MSDN - SCOPE_IDENTITY (Transact-SQL)

それでは、実際のプログラムで試してみましょう。

  1. Visual Studio を起動し、メニューの「ファイル」 - 「新規作成」 - 「プロジェクト」から「新しいプロジェクト」ダイアログ ボックスを開きます。
  2. 「Visual C#」 - 「コンソール アプリケーション」で新しいプロジェクトを作成します。
  3. ここでは、以下のようなサンプルで試してみることにします。
    (connectionString の値は、適切なものに変更してください。下の例では、ローカルの SQL Server Express に作成した "Test" という名前のデータベースに接続しています。)
using System.Data.SqlClient;
 
namespace TypedDataSetUpdateWithIdentityColumn
{
    class Program
    {
        static void Main()
        {
            const string connectionString = @"Data Source=localhost\SQLEXPRESS;Initial Catalog=Test;Integrated Security=True";
            using (var connection = new SqlConnection(connectionString)) {
                connection.Open();
                // 新規 Item の INSERT
                using (var command = new SqlCommand("INSERT INTO Item (Name) VALUES (@Name);SELECT CAST(SCOPE_IDENTITY() AS int)", connection)) {
                    command.Parameters.Add(new SqlParameter("@Name""Hoge"));
                    var newId = (int)command.ExecuteScalar();
                }
            }
        }
    }
}
  1. 実行結果をデバッグ実行で確認してみましょう。

  1. command を ExecuteScalar することで、新たな行が挿入され、その行の Id 列の値が返ってきています。その直後の "newId" の値が、新たな Id 値である "1" になっているのが確認できます。

■ 3. 型付き DataSet の場合

型付き DataSet の場合はどうでしょう。試してみましょう。

  1. Visual Studio で、新しい「コンソール アプリケーション」を作成し、「ソリューション エクスプローラー」でプロジェクト名を右クリックします。
  2. ポップアップ メニューから、「追加」 - 「新しい項目」を選択します。

  1. 「新しい項目の追加」ダイアログ ボックスが開きます。「Visual C# アイテム」 - 「データセット」を選択します。
  2. ここでは「名前」を "ItemDataSet.xsd" と、し「追加」ボタンを押します。

  1. 暫く待つと、"ItemDataSet.xsd" というファイルが開きます。
  2. 「サーバーエクスプローラ」 (Visual Studio Express Edition の場合は「データベース・エクスプローラ」) から、「データ接続」 内の接続 - 「テーブル」 - Item を "ItemDataSet.xsd" 内にドラッグ アンド ドロップします。

  1. "ItemDataSet.xsd" 内に以下のようなアイテムが追加されます。

  1. このアイテムを右クリックして出てきたポップアップ メニューから「構成」を選択します。

  1. 「TableAdapter 構成ウィザード」が開きます。

  1. 「詳細オプション」ボタンを押します。
  2. 「詳細設定」ダイアログ ボックスが開きます。以下のように設定して「OK」ボタンを押してみましょう。「データ テーブルの更新」のチェックを外しておきます。

  1. いくつかのソースコードが自動生成されます。
  2. 自動生成された "ItemDataSet.Designer.cs" というファイルの中を覗いて、どのような INSERT 文が生成されたか見てみることにしましょう。
  3. "INSERT" でファイルの中を検索してみると、以下のような記述が見つかります。
this._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[Item] ([Name]) VALUES (@Name)";
  1. INSERT 文が生成されているのが分かります。INSERT 後に、自動採番された値を取得するような記述は見当たりません。
  2. 以下のようなサンプル コードで試してみます。
using TypedDataSetUpdateWithIdentityColumn.ItemDataSetTableAdapters;
 
namespace TypedDataSetUpdateWithIdentityColumn
{
    class Program
    {
        static void Main()
        {
            using (var itemTableAdapter = new ItemTableAdapter()) {
                // Item テーブルの SELECT
                var itemTable = new ItemDataSet.ItemDataTable();
                itemTableAdapter.Fill(itemTable);
 
                // 新規 Item の INSERT
                var newItemRow = itemTable.NewItemRow();
                newItemRow.Name = "Hoge";
                itemTable.Rows.Add(newItemRow);
                itemTableAdapter.Update(itemTable);
            }
        }
    }
}
  1. デバッグ実行して、結果を確認してみましょう。

  1. 予想通り、新たな Id の値は取得できていません。
  2. ちなみに、このときの実際のデータベースのテーブルの値は以下のようになっています。

  1. では、設定を変えて試してみましょう。
  2.  先ほどと同じように、"ItemDataSet.xsd" ファイルを開き、中のアイテムを右クリック、ポップアップ メニューから「構成」を選び、「TableAdapter 構成ウィザード」上の「詳細オプション」ボタンを押して「詳細設定」ダイアログ ボックスを開きます。
  3. 今度は、以下のように「データ テーブルの更新」にチェックを入れて「OK」ボタンを押します。

  1. 先ほどと同様に、"ItemDataSet.Designer.cs" 中を覗いて、どのような INSERT 文が生成されたか見てみることにしましょう。
this._adapter.InsertCommand.CommandText = "INSERT INTO [dbo].[Item] ([Name]) VALUES (@Name);\r\nSELECT Id, Name FROM Item WHERE (Id = SCOPE_IDENTITY())";
  1. 今度は、INSERT の後に "SCOPE_IDENTITY()" と一致する Id を持った行を SELECT しているのが分かります。
  2. デバッグ実行して結果を確認してみます。

  1. 今度は、自動生成された Id の値が取得できています。

■ 4. LINQ to SQL の場合

LINQ to SQL の場合はどうでしょう。試してみましょう。

  1. Visual Studio で、新しい「コンソール アプリケーション」を作成し、「ソリューション エクスプローラー」でプロジェクト名を右クリックします。
  2. ポップアップ メニューから、「追加」 - 「新しい項目」を選択します。
  3. 「新しい項目の追加」ダイアログ ボックスが開きます。「Visual C# アイテム」 - 「LINQ to SQL クラス」を選択します。
  4. ここでは「名前」を "ItemDataClasses.dbml" と、し「追加」ボタンを押します。

  1. 暫く待つと、"ItemDataClasses.dbml" というファイルが開きます。

  1. 「サーバーエクスプローラ」 (Visual Studio Express Edition の場合は「データベース・エクスプローラ」) から、「データ接続」 内の接続 - 「テーブル」 - Item を "ItemDataClasses.dbml" 内にドラッグ アンド ドロップします。
  2. "ItemDataClasses.dbml" 内に以下のようなアイテムが追加されます。

  1. 自動生成された "ItemDataClasses.designer.cs" を開いて、中の "Item" クラスの "Id" プロパティを見てみましょう。
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.Item")]
public partial class Item : INotifyPropertyChanging, INotifyPropertyChanged
{		
	// ……途中省略……

	[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
	public int Id
	{
		get
		{
			return this._Id;
		}
		set
		{
			if ((this._Id != value))
			{
				this.OnIdChanging(value);
				this.SendPropertyChanging();
				this._Id = value;
				this.SendPropertyChanged("Id");
				this.OnIdChanged();
			}
		}
	}
  1. この中の、
AutoSync=AutoSync.OnInsert

という指定によって、行の挿入時に自動で Id 列の値を取得する SELECT 文が発行されます。

  1. 以下のサンプル コードで試してみましょう。
using System;
 
namespace TypedDataSetUpdateWithIdentityColumn
{
    class Program
    {
        static void Main()
        {
            using (var itemData = new ItemDataClassesDataContext()) {
                // 生成される SQL を標準出力ストリームに出力
                itemData.Log = Console.Out;
 
                // 新規 Item の INSERT
                var newItem = new Item { Name = "Hoge" };
                itemData.Item.InsertOnSubmit(newItem);
                itemData.SubmitChanges();
            }
        }
  1. 実行結果は、以下のようになります。

  1. 挿入直後の、"newItem" の Id に新たな値が入っているのが確認できます。
  2. コンソールには、以下のように出力されます。

  1. Linq to SQL によって、生成された SQL は以下のようなものです。
INSERT INTO [dbo].[Item]([Name])
VALUES (@p0)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
-- @p0: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [Hoge]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1
  1. 新たな Id 列の値を取得する SELECT 文が生成されているのが分かります。

■ 5. Entity Framework の場合

最後に、Entity Framework の場合を見てみましょう。

  1. Visual Studio で、新しい「コンソール アプリケーション」を作成し、「ソリューション エクスプローラー」でプロジェクト名を右クリックします。
  2. ポップアップ メニューから、「追加」 - 「新しい項目」を選択します。
  3. 「新しい項目の追加」ダイアログ ボックスが開きます。「Visual C# アイテム」 - 「ADO.NET Entity Data Model」を選択します。
  4. ここでは「名前」を "ItemModel.edmx" と、し「追加」ボタンを押します。

  1. 「Entity Data Model ウィザード」が開きます。
  2. ここでは、「データベースから生成」を選択し、「次へ」ボタンを押します。

  1. 次の画面では、既存のデータ接続を選択し、「エンティティ接続設定に名前を付けて App.Config に保存」では "ItemEntities" と入力して「次へ」ボタンを押します。

  1. 次の「データベース オブジェクトの選択」の画面では、「テーブル」の中の "Item" をチェックします。
  2. 「生成されたオブジェクトの名前を複数化または単数化する」にもチェックを入れ、「モデル名前空間」をここでは "ItemModel" として、「完了」ボタンを押します。

  1. 暫く待つと、"ItemModel.edmx" というファイルが開きます。中に以下のようなアイテムが追加されているのが分かります。

  1. 今度は、以下のサンプル コードで試してみましょう。
namespace TypedDataSetUpdateWithIdentityColumn
{
    class Program
    {
        static void Main()
        {
            using (var itemData = new ItemEntities()) {
                // 新規 Item の INSERT
                var newItem = new Item { Name = "Hoge" };
                itemData.AddToItems(newItem);
                itemData.SaveChanges();
            }
        }
    }
}
  1. 実行結果は、以下のようになります。

  1. 挿入直後の、"newItem" の Id に新たな値が入っているのが確認できます。

2011年03月10日

2011 MVP Global Summit 参加レポート

2011/2/27(日) ~ 3/6(日) に米国のシアトルとその周辺に行き、Microsoft 主催の 2011 MVP Global Summit に参加してきた。

世界中から千数百人の Microsoft MVP が集まり、沢山のセッションやパーティが開かれた。

とても貴重で、思い出に残る体験だった。

2011/02/27: 出発 (10:30頃) ~ 関西国際空港 ~ Delta

えちぜん鉄道 → JR サンダーバード → Delta (関西国際空港シアトル・タコマ国際空港)

  • 呟き (2011/02/27 10am): さてそろそろベルビューに向けて出発する準備完了。
  • 呟き (2011/02/27 11am): サンダーバードで大阪へ移動中。
  • 呟き (2011/02/27 1pm): はるかに乗り換え。 @ JR新大阪駅

  • 呟き (2011/02/27 3pm): チェックイン カウンターに並び中。
  • 呟き (2011/02/27 3pm): そじ坊で蕎麦。 @ 関西国際空港 (Kansai International Airport)
  • 呟き (2011/02/27 4pm): 出国した。
  • 呟き (2011/02/27 4pm): 関西空港のラウンジで色々充電しながらビール中。
  • 呟き (2011/02/27 5pm): 間もなく搭乗。 @ 関西国際空港 (Kansai International Airport)


機内食。

無事シアトル・タコマ国際空港に到着。そして入国。昨年までは必要だった I-94W と呼ばれる入国カードが不要になっていた。

空港内には S.T.S. (Satellite Transit System) と呼ばれる無人の地下鉄があって、これでターミナルから移動する。

シアトル・タコマ国際空港からは Shuttle ExpressHyatt Regency Bellevue へ移動。 Shuttle Express は片道 $19 位。タクシー ($30-40) より大分安い。バスよりは高いが、空港からホテルまでドア・ツー・ドアなのが魅力。

2011/02/27: ベルビュー 一日目

ベルビューでの宿泊先 Hyatt Regency Bellevue


ホテルの隣にある Bellevue Place

ホテル近くのベルビューの街並み。

  • 呟き (2011/02/27 1pm): Sea-Tac 空港から Shuttle Express で Hyatt。チェックイン完了。 @ Hyatt Regency Bellevue
  • 呟き (2011/02/27 2pm): ベルビュー。 @ Microsoft - Lincoln Square
  • 呟き (2011/02/27 4pm): シアトル名物の BEECHER'S のチーズと RED HOOK のビール。 @ Hyatt Regency Bellevue

Global Summit の Registration

ホテルの直ぐ近くにあるショッピング モール The Bellevue Collection (Bellevue Square, Bellevue Place, Lincoln Square) マイクロソフト ショップもある

"JAPAN DINNER"

日本・韓国の MVP との部屋飲みパーティ

昨年部屋飲みした韓国の MVP の人たちと、今年もご一緒した。

2011/02/28: ベルビュー 二日目

Microsoft Redmond campus へ移動

ホテルから Microsoft Redmond campus へはバスで移動。

Microsoft Redmond campus での Breakout Sessions

  • 呟き (2011/02/28 11am): MVP Global Summit 三つ目のセッション中。昨夜ちゃんと寝たので初日から眠くない。
  • 呟き (2011/02/28 1pm): 鶏肉メインの昼食終了。何かのセッション中。 #mvp11
  • 呟き (2011/02/28 1pm): 今年は渡米の前日とフライト中にこっちの朝に起きるようにしたので時差ボケがあまりないようだ。
  • 呟き (2011/02/28 1pm): デモのときの Visual Studio のソースコード エディターの文字は17ポイント以上が良いと思うよ。
  • 呟き (2011/02/28 5pm): ベルビューのQFCというスーパーで「安い栓抜きはないか」と店員に訊いたら「知らないけどビール売り場にあるかも」とか「あの辺」とか「これより安いのはない」と言いつつも店員によってその値段が全然違ってしかも実際にはそのどれも一番安くないやつだったり、アバウトな対応が面白かった。

Welcome Reception at Hyatt Regency Bellevue Hotel

Insiders Party at MVP Summit 2011

Bellevue Square の前を通って移動。

Insiders Party at MVP Summit 2011

2011/03/01: ベルビュー 三日目

キーノート

ホテルで朝食

バスでキーノート会場 (Meydenbauer Center) へ

間もなくキーノートが始まる。

キーノートが始まった。

Microsoft の現 CEO の Steven Ballmer 登場。

Seattle Mariners のマスコットのMariner Moose 登場。

キーノート後の昼食 (Meydenbauer Center)

Microsoft Redmond campus で午後のセッション

Commons での Evening Event の後、日本・韓国・米国の MVP との部屋飲みパーティ

2011/03/02: ベルビュー 四日目

  • 呟き (2011/03/02 7am): 昨晩は、韓国の人達のご招待で部屋飲み。韓国人、日本人、アメリカ人で10人以上。

ホテルで朝食の後 Microsoft Redmond campus へ

セッション


右端は Turbo PascalDelphi そして C# の父である Anders Hejlsberg

Attendee Party (Safeco Field in Seattle)


会場を Mariner Moose がうろついていた。

グラウンではロックバンドの他にバッティングやベースランニングが楽しめる。

その他、イチローが記者会見をしているプレス用の部屋やロッカールーム等、球場内の様様な施設を見学できた。

2011/03/03: ベルビュー 五日目~シアトル 一日目

ホテルで Post Summit Session

タクシーで Holiday Inn Seattle-SeaTac Intl Airport へ移動

  • 呟き (2011/03/03 0pm): MVP Global Summit 終了。タクシーでホテルから移動。
  • 呟き (2011/03/03 1pm): 今晩泊まるホテルに到着。 @ Holiday Inn Sea-Tac

シアトル一日観光

今回初めて Light Rail に乗った。一日券を買うと経済的。ホテル近くの駅からシアトルのダウンタウンへ。

Light Rail には、Seattle-SeaTac Airport から、シアトルのダウンタウンに中心にある終点の Westlake まで乗る。片道 $2.5 だが、$5 の一日券を買うと経済的。

シアトルのダウンタウンに到着。

ダウンタウンの中心に位置するショッピングモール "WESTLAKE CENTER" にやってきた。ここにはダイソーもある。

Starbucks を始めとしたシアトル コーヒーの店が至るところに。

徒歩で Pike Place Market へ。ここはシアトル名物の魚介類や野菜や果物、土産物等、様様なものが売られている市場。

徒歩で Beecher's Handmade Cheese へ。

Beecher's の名物メニュー "MAC & CHEESE"。

すぐ近くには Starbucks の一号店がある。ここはいつ来ても数人のパフォーマーが音楽を演奏している。

Pike Place Market は海沿いにある。

Pike Place Market では様様なものが売られている。

Pike Place Market を出て海沿いの道へ向かうと、レストランや土産物屋が多く並んでいる。この頃雨が強めに降り出した。シアトルは雨が多い街だ。

Seattle Aquarium (シアトル水族館) が有った。

雨が激しくなってきたので、土産物屋やゲームセンターで雨宿り。

漸く雨が上がった。

再び Light Rail に乗って、宇和島屋に向かう。中華街の近く。

宇和島屋は、シアトル最大の日本食スーパー。日本のスーパーマーケットのように日本の食品が売られている。日本で買うより大分高め。

宇和島屋店内には紀伊國屋書店があった。

また Light Rail に乗ってダウンタウンに戻ってきた。

今度は PACIFIC PLACE へ。ここもショッピング モール。

PACIFIC PLACE 内の COACH で財布等を購入。COACH は米国ニューヨークのブランド。

夜のシアトルを歩いて、再び海沿いのレストラン街へ。

シアトル名物のクラムチャウダーで有名なシーフード レストラン Ivar's にやってきた。

シアトルの地ビールは最高。

生牡蠣を注文。三種類の牡蠣を楽しんだ。その他のシーフードもとても美味しかった。しかもリーズナブル。

四度 Light Rail に乗って、シアトル・タコマ空港近くの Holiday Inn Seattle-SeaTac Intl Airport へ戻った。

  • 呟き (2011/03/04 0am): シアトル観光に行ってきた。夕食は Ivars で地ビールや生牡蠣、クラムチャウダーなどを堪能。SEA-TAC空港近くのホテルにチェックインした。

2011/03/04: シアトル 二日目

  • 呟き (2011/03/04 5am): さてそろそろ帰国しないと。

ホテルのシャトルバスでシアトル・タコマ国際空港

  • 呟き (2011/03/04 7am): ホテルの朝食後、SEA-TAC空港に。セキュリティ チェックを通過した。
  • 呟き (2011/03/04 8pm): 休憩中。 @ Seattle-Tacoma International Airport (SEA)
  • 呟き (2011/03/04 8pm): MVP Global Summit 中はいつもネット環境に不自由してたけど、終わってからは今までシアトルで全然苦労してない。
  • 呟き (2011/03/04 9pm): 今日も Ivar's。スモークサーモン クラムチャウダー。 @ Ivar's Seafood Bar - SeaTac Airport

関西国際空港行きの Delta

隣席の米国人夫妻と話す。なんでも関西にいる妹のところに行って観光するとのこと。

そして、離陸から4時間程経ったときだった。機内に機長からの声が流れた。
「電気系統の故障が見つかったので、Uターンしてシアトルに戻りつつある」という内容だった。

なんと中間地点まで飛んだのにこれから引き返すというのだ。
米国人の奥さんはショックで泣き出してしまった。

そしてシアトル・タコマ国際空港に戻ってきた

乗客はホテルと別の便の手続きをするために長い列を作った。

この手続には夜9時から1時間位掛かったが、ホテルのクーポンをくれただけで、帰りの飛行機は手配してくれる訳ではない。
帰りの飛行機を勝手に電話を掛けて確保してくれとのことだった。
多くの日本人が帰りの飛行機を確保出来ずに困っていた。

  • 呟き (2011/03/04 9pm): I'm still in Seattle. 飛行機が帰路なかばでシアトルに戻ってしまった。計器の故障とのことだが、詳しい原因は不明。次の飛行機がどうなるか待ち中。
  • 呟き (2011/03/04 10pm): まだSEA-TAC にいる。電話で交渉してなんとか明日の成田便を押さえられた。最後の1席だった。関空行きは月曜夕方着が最速。

Delta に電話をかけ、なんとか帰りの飛行機を予約した。何も伝わっていないので、事情を説明するところからしなければならない。
結局翌日の関西空港行きは既にいっぱいで取れず、同日の成田空港行きを取った。成田から自宅までの交通費分余計に掛かるが仕方がない。
その後、用意された Doubletree Hotel Seattle Airport にシャトルバスで向かう。

  • 呟き (2011/03/04 11pm): Delta が用意してくれた Doubletree Seattle Airport にチェックイン完了。それにしても半分飛んでシアトルに戻るとは 思わなかった。
  • 呟き (2011/03/05 0am): Delta に電話して帰りの便を頼んだら、明日LAに飛んでホノルルに飛んでそこで一泊して、明朝の便で、とか訳のわからないことを言う。それか翌々日まで待てと。ちょっと何言ってるか分からないので、関空は諦めて成田に飛ぶことにした。JR の切符が無駄になり、成田からの足はこれから。
  • 呟き (2011/03/05 0am): 成田からの足確保完了。これで帰りの飛行機がまた壊れたりしなければ、日曜日の夜10時過ぎに帰宅予定。

2011/03/05: シアトル 三日目

Doubletree Hotel Seattle Airport からシャトルバスでシアトル・タコマ国際空港 (四回目) に

  • 呟き (2011/03/05 7am): はやおきして時間があるのでゆっくりとホテルで朝食中。 @ Doubletree Hotel Seattle Airport

Doubletree Hotel Seattle Airport を出発。

Delta (シアトル・タコマ国際空港成田国際空港) → ANA (成田国際空港小松空港) → 空港連絡バス → 帰宅 (3/6 22時過ぎ)

  • 呟き (2011/03/05 9am): 今日もセキュリティ チェックを通過。 @ Seattle-Tacoma International Airport (SEA)

  • 呟き (2011/03/05 9am): Ivar's (三日目) @ Seattle-Tacoma International Airport (SEA)
  • 呟き (2011/03/05 9am): Taco Breakfast @ Anthony's Airport Grill - SeaTac Airport

昨日の飛行機で隣り合わせた米国人夫妻と空港でばったり。関西空港行きの飛行機が取れたとのこと。少し話して、お互いの幸運を願って別れた。


これから搭乗する Delta 機。今度のは、成田行きなので、各座席には映画などが観られるモニターが付いている。

  • 呟き (2011/03/05 11am): 今日乗るやつは壊れないかな。 @ Seattle-Tacoma International Airport (SEA)
  • 呟き (2011/03/05 11am): さて搭乗。

無事成田空港に到着した Delta 機。

  • 呟き (2011/03/06 4pm): 今回は無事成田に到着。隣の席が偶然マレーシアのMVP で雑談しながら帰ってきた。楽しかった。
  • 呟き (2011/03/06 5pm): 取り敢えずそじ坊でざる蕎麦。 @ 成田国際空港 (Narita International Airport)
  • 呟き (2011/03/06 6pm): 【今日の機内で聞きたくない一言】「お客様の中にパイロットはいらっしゃいますか?」

成田空港小松空港行きの ANA の小型機に乗り換え。

  • 呟き (2011/03/06 9pm): 小松空港に到着。
  • 呟き (2011/03/06 10pm): 7日半ぶりに帰宅した。

買ってきたもの

シアトルに行く前から欲しかったものを少し買って帰った。

シアトル名物 Beecher's のチーズとクラッカーと RED HOOK のビール。それぞれ米国でも食べたり飲んだりした。

前回の 2010 MVP Global Summit の Atendee Party で米国の人に勧められたバーボン「KNOB CREEK

Microsoft 製のマウスや Web カメラ。

その他、COACH の財布、シアトル チョコレート、子供向けの土産等。

2011年03月31日

Visual Studio のテスト機能に関する記事

Visual Studio のテスト機能に関する記事

2011年05月20日

Sleep Sort の C#/.NET4 版

※ 参考: Sleep sortの各言語での実装まとめ

// Sleep Sort C#/.NET4 版

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading;

public static class SleepSort
{
    public static IEnumerable<T> Sort<T>(this IEnumerable<T> collection, Func<T, int> convert)
    {
        var queue = new ConcurrentQueue<T>();
        collection.AsParallel().ForAll(
            value => {
                Thread.Sleep(convert(value));
                queue.Enqueue(value);
            }
        );
        return queue;
    }
}  

static class Program
{
    static void Main()
    {
        var sortedCollection = new[] { 30, 200, 70, 400, 800, 35 }.Sort(x => x);
        foreach (var item in sortedCollection)
            Console.WriteLine(item);
    }
}

2011年06月14日

[Event] VSUG Day 2011 Summer

__120%C3%97120.gif
▼日付: 2011年06月19日(日)受付9:30~
▼会場: マイクロソフト品川オフィス 31F ・MAP
▼参加費用: 無料 (VSUG 会員登録が必要となります)
▼詳細・申込み: こちら

2011年08月01日

[Event] Hokuriku.NET Vol.7 in 福井 (2011.07.30)

Hokuriku.NET Vol.7 in 福井」というイベントを開催した。

レポートはこちらに書いた。

2011年08月21日

[Event] こみゅぷらす 『Tech・Aid 2011 夏』

以下のイベントを開催した。

2007年から毎年夏にやっている恒例のこみゅぷらすイベントで、今年は、震災の影響で開催が延期されてしまった Microsoft Tech・Ed Japan の代わりのイベントである「Tech Party 2011」の一環で開催した。

例によって、飲み放題付き。

こみゅぷらす 『Tech・Aid 2011 夏』
開催日時 2011年8月20日(土) 10:00~17:00
開催場所 新宿
主催 こみゅぷらすcodeseek日本C#ユーザー会
関連サイト Tech Party 2011
会場
  • セッション 1: 『最新 ASP.NET Web 開発オーバービュー』
    日本マイクロソフト株式会社 井上 章氏
  • セッション 2: 『Windows Phone アプリケーション開発実践 ~XNA 編~』
    日本マイクロソフト株式会社 田中 達彦 氏
  • ライトニングトークス
    • 『Kinect プログラミング始めました』
      田中孝佳(@tanaka_733)氏
    • 『linq.js - Linq to Objects for JavaScript』
      neuecc氏
    • 『5 分でわかった気になる ASP.NET MVC のローカライズ』
      しばやん氏
    • 『ある意味データの視覚化』 池原 大然氏
  • セパレート セッション
    • 『1スクリーン独占 仕込み一切なし! ぶっつけ本番! ライブコーディング』
      岩永 信之氏
    • 『@IT のチューニング話追補』』
      亀川 和史氏
    • 『オフショアネタ』
      衣川 朋宏氏
    • 『HTML5 on ASP.NET』
      小島 富治雄氏
    • 『Visual Studio LightSwitch 2011』
      宇宙仮面氏
    セパレート セッションの様子
  • 抽選会
    抽選会の景品
  • 懇親会
    懇親会の様子

2011年09月08日

[Event] Tech Party 2011 in 北陸

Tech Party 2011 in 北陸
日時 8月27日(土) 10:00~17:00
会場 石川工業高等専門学校 (石川県河北郡津幡町北中条タ1)
参加費 無料
Webサイト http://atnd.org/events/18440
関連イベント Tech Party 2011
会場の様子
  • 挨拶 ― @kabakiyo さん
  • 『Windows Phoneのアプリケーションライフサイクルについて』 ― @kabakiyo さん
  • 『デスクトップエージェント「小雪ちゃん」の紹介』 ― 石川高専4年生 林 真利奈 さん
  • 『これまでに作った作品の紹介』 ― 石川高専・専攻科1年 越田 和基さん
  • 『群集シミュレーションの開発』 ― 石川高専・専攻科2年 奥成 貴大さん
  • 『フィジカルコンピューティングのすゝめ』 ― 坪倉 輝明さん
  • 『Lync を使って、ここまでできる! (リアルタイム コミュニケーション開発)』 ― 日本マイクロソフト松崎 剛さん
  • 『Windows 7 活用術 ~おさらい編~』 ― @ramu_mystery さん
  • 『ASP.NET + HTML5』 ― @Fujiwo さん
  • 抽選会 日本マイクロソフトさんから多数のノベルティをいただいた
  • 懇親会

2011年09月12日

C# を作ってみた

最近我が家で、滑石(ろうせき)(やすり)紙鑢(サンドペーパー)で削り、勾玉(まがたま)等の様様な形を作るのが流行っている。

滑石は加工し易い石で、これを棒鑢や荒い (80番程度の) 紙鑢 で大雑把に形を決めた後、細部は精密鑢で削っていく。最後は細かい (1500番程度の) 耐水性紙鑢に水を付けて擦り、新聞紙で磨いて艶を出す。

子供達とやっていると、結構楽しい。

C# を作ってみた (ちゃんと ♯ じゃなくて #)。

DSCF7713.JPG

2011年09月14日

[Tool] WebMatrix

Web アプリケーションを簡単編集できる無償ツール WebMatrix ダウンロードはこちら

WebMatrix は Microsoft 製の Windows 上に Web サイトを構築するための無料ツール。 簡単に ASP.NET ベースや PHP ベースの Web サイトを準備できる。 必要なデータベースを同時にインストールしたり、後から編集したりすることもできる。

ASP.NET の新しい構文である Razor にも対応。

※ ちなみに、以前リリースされた ASP.NET Web Matrix とは別物。

WebMatrix 自体も Microsoft Web Platform Installer によって簡単にインストールできる。 必要なコンポーネント (適切なバージョンの .NET Framework、SQL Server 関連コンポーネント、IIS Express 等) も自動でインストールされる。 ASP.NET ベースや PHP ベースの Web アプリケーション (CMS 等) のインストールも行うことができる。

使い始めるには先ず「Microsoft WebMatrix おすすめ学習コンテンツ」で紹介されているコンテンツがお勧め。現時点では以下のようなものが紹介されている。

他には以下の記事が参考になる:

2011年09月15日

[Event] Microsoft BUILD 2011 (9.13-16) Day1-2 関連記事・コンテンツのまとめ

Microsoft BUILD 2011 (9.13-16, Anaheim, California US) Day1-2 関連記事・コンテンツのまとめ

Microsoft の開発者向けカンファレンス「BUILD」が開催されている。

Windows 8 を初めとして非常に多くの新たなテクノロジーが発表され、Preview 版等が使用できるようになっている。

以下で 関連記事・コンテンツを紹介したい。

■ Day 1 (9.13):

■ Day 2 (9.14):

■ アップデート:

2011年09月21日

F# も作ってみた

# 「C# を作ってみた」の続き。

C# に続いて F# も作ってみた。

DSCF7807.JPG

2011年10月10日

Visual Studio のロゴっぽい何かを作ってみた

以前 C#F# を作ってみた。

C# と F#。

今度は Visual Studio のロゴっぽいものに挑戦。 

  1. 削る前の石。
  2. 鉛筆で下書きし、金鋸と大きめの鉄工 (やすり)、ドリルで大まかな形を作る。石とは云っても其れ程固くないので割りと簡単に削れる。
  3. 小さい鑢で更に形を作っていく。余り細くすると折れるのでこの辺り迄とした。
  4. 100番程度の粗いものから 200番、400番と徐々に細かい紙鑢 (かみやすり)で削っていく。
  5. 1500番程度の耐水性紙鑢で磨き、最後は新聞紙で擦って艶を出す。
  6. 裏はこんな感じ。
Windows のロゴっぽい何かにも挑戦。
こちらは @ (アットマーク)

2012年03月29日

[Event] Windows Phone Hackathon 2012 in Fukui 開催予定 (2012-04-14, 21)

福井で Windows Phoneハッカソンが開催される。

14日はアイデアソンで、Windows Phone 開発の概要説明やアイディアの出し合いなどが行われる。21日は、開発し、実際にマーケットに登録。

Windows Phone Hackathon 2012 in Fukui
日時 2012年4月14日(土) 10:00~夕方、 4月21日 10:00~18:00
会場 福井県産業情報センター システム設計室 (福井県坂井市丸岡町熊堂第3号7番地1-16)
参加費用 4月14日: 500円、4月21日: 500円 (会場費)
主催 Hokuriku.NET
詳細/申し込み http://atnd.org/events/26574

2012年03月31日

2012 MVP Global Summit

mvp2012_0053.JPG

2012 MVP Global Summit (2012/02/28-03/02) に参加してきた。


参加レポート: 2012 MVP Global Summit 参加レポート - slideshare


2012年04月04日

[Event] Windows Developer Days

開発者の皆様へ ~ Windows 8 のアプリケーション開発を始めませんか。 | Windows Developer Days
Windows Developer Days
日時 2012年4月24日(火)~25日(水) 10:00-18:00
会場 ザ・プリンスパークタワー東京
参加費 ¥84,000 (早期割引 4月18日 16:59 迄 税込¥63,000)
詳細/参加登録 Windows Developer Days

2012年04月10日

モンティ・ホール問題

モンティ・ホール問題 というのがある。 アメリカのゲームショー番組の中で行われた以下のようなゲームに関する問題である。

  1. 三つのドアのどれか一つの後ろに当たりの商品が隠されている。残りの二つはハズレだ。
  2. プレイヤーである番組参加者は、一つのドアを選ぶ。
  3. 番組司会者のモンティは、残り二つのドアのうちからハズレのドアを一つ開けて見せる。
  4. モンティはプレイヤーに「ドアを選びなおしても良い」と言う。
  5. プレイヤーはドアを選びなおすべきだろうか?
montyhallproblem0.png
当たりはどれか一つ。

この問題の正解は、「選びなおした方が良い。何故なら当たる確率が倍になるから」というものだ。

しかし、これを正解とするということに納得しない人が多いらしい。直感と異なるからだ。

教授レベルの数学者を含む多くの人が反論したらしい。

大きな論争となったこの問題は、結局コンピューター上でのシミュレーションで決着がついたそうだ。

とても興味深い題材なので、私も C# でシミュレーションをやってみた。

// モンティ・ホール問題 - Wikipedia
// http://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%BB%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C

using System;
using System.Linq;

namespace モンティ・ホール問題
{
    static class プログラム
    {
        static void Main(string[] コマンドライン引数)
        { シミュレーター.シミュレート(コマンドライン引数から繰り返し回数を得る(コマンドライン引数)); }

        static int コマンドライン引数から繰り返し回数を得る(string[] コマンドライン引数)
        {
            if (コマンドライン引数.Length < 0)
            {
                int 繰り返し回数;
                if (int.TryParse(コマンドライン引数[0], out 繰り返し回数))
                    return 繰り返し回数;
            }
            const int デフォルトの繰り返し回数 = 1000000;
            return デフォルトの繰り返し回数;
        }
    }

    static class シミュレーター
    {
        public static void シミュレート(int 試す回数)
        { 結果.表示(選びなおす場合に当たる確率: シミュレート(試す回数, 選びなおす: true),
            選びなおさない場合に当たる確率: シミュレート(試す回数, 選びなおす: false)); }

        static double シミュレート(int 試す回数, bool 選びなおす)
        {
            var 当たりの回数 = Enumerable.Range(1, 試す回数).Count(_ =< ゲーム.プレイする(選びなおす));
            var 当たる確率 = (double)当たりの回数 / 試す回数;
            結果.表示(選びなおす, 試す回数, 当たりの回数, 当たる確率);
            return 当たる確率;
        }

        static class 結果
        {
            public static void 表示(double 選びなおす場合に当たる確率, double 選びなおさない場合に当たる確率)
            { 表示(選びなおす場合と選びなおさない場合の当たる確率の比:
                選びなおす場合に当たる確率 / 選びなおさない場合に当たる確率); }

            public static void 表示(double 選びなおす場合と選びなおさない場合の当たる確率の比)
            { Console.WriteLine("・結論: 選びなおす場合は、選びなおさない場合に比べて、{0} 倍当たりやすい。",
                選びなおす場合と選びなおさない場合の当たる確率の比); }

            public static void 表示(bool 選びなおした, int 試した回数, int 当たった回数, double 当たる確率)
            { Console.WriteLine("・{0}場合は、当たりの回数は: {1} 回中 {2} 回で、当たる確率は {3}。",
                選びなおした ? "選びなおした" : "選びなおさなかった", 試した回数, 当たった回数, 当たる確率); }
        }
    }

    static class ゲーム
    {
        const int 全ドアの数 = 3;

        public static bool プレイする(bool 選びなおす)
        {
            var 当たりのドア = ランダムなドア();
            var プレイヤーが選択したドア = ランダムなドア();
            var モンティの開けたドア = 残りのドアから一つ(当たりのドア, プレイヤーが選択したドア);

            if (選びなおす)
                プレイヤーが選択したドア
                    = 残りのドアから一つ(プレイヤーが選択したドア, モンティの開けたドア);

            return プレイヤーが選択したドア == 当たりのドア;
        }

        static int 残りのドアから一つ(int 当たりのドア, int プレイヤーが選択したドア)
        {
            return 当たりのドア == プレイヤーが選択したドア
                   ? 残りのドアからランダムに一つ(除外するドア: 当たりのドア)
                   : 残りのドアからどれでも一つ(一つ目の除外するドア: 当たりのドア,
                                    二つ目の除外するドア: プレイヤーが選択したドア);
        }

        static int 残りのドアからランダムに一つ(int 除外するドア)
        { return 或るドアから数えてX番目のドア(除外するドア,
                    そのドアから数えてX番目: ランダム.一から或る数までの乱数(全ドアの数 - 1)); }

        static int 或るドアから数えてX番目のドア(int 或るドア, int そのドアから数えてX番目)
        { return (或るドア + そのドアから数えてX番目) % 全ドアの数; }

        static int 残りのドアからどれでも一つ(int 一つ目の除外するドア, int 二つ目の除外するドア)
        { return Enumerable.Range(0, 全ドアの数)
                    .First(ドア =< ドア != 一つ目の除外するドア && ドア != 二つ目の除外するドア); }

        static int ランダムなドア()
        { return ランダム.零から或る数までの乱数(全ドアの数); }
    }

    static class ランダム
    {
        static readonly Random 乱数 = new Random();

        public static int 零から或る数までの乱数(int 或る数)
        { return 乱数.Next(或る数); }

        public static int 一から或る数までの乱数(int 或る数)
        { return 乱数.Next(或る数) + 1; }
    }
}

以下のように正解の通りの結果となった。

  • 選びなおした場合は、当たりの回数は: 1000000 回中 666662 回で、当たる確率は 0.666662。
  • 選びなおさなかった場合は、当たりの回数は: 1000000 回中 333802 回で、当たる確率は 0.333802。
  • 結論: 選びなおす場合は、選びなおさない場合に比べて、1.99717796777731 倍当たりやすい。

実は、プログラムを書いていく過程で、問題が整理されていったため、途中から実行する迄もなく結果は明白なように感じていた。

以下のように考えたのだ。

  1. 最初にプレイヤーがドアを選んだ時点で、そのドアが当たりである確率は、1/3 だ。
  2. そのとき、プレイヤーが選ばなかった残りの二つのドアが当たりである確率も、それぞれ 1/3 だ。
  3. 即ち、残りの二つのドアのどちらかが当たりである確率は 2/3。
  4. つまり、「残りの二つのドアのどちらかが当たりである確率」は「プレイヤーが最初に選んだドアが当たりである確率」の倍。
  5. ところが、モンティは、「残り二つのドアのどちらがハズレか」を必ず教えてくれる。
  6. 残りの二つのドアのどちらかが当たりである確率は 2/3 だが、残りの二つのドアのうちモンティが開けて見せた方が当たりである確率は 0 で、残りの二つのドアのうちモンティが開けなかった方が当たりである確率は 2/3。
  7. 残りの二つのドアのうちモンティが開けなかった方を選びなおした方が、当たる確率が倍、ということだ。
montyhallproblem.png

続きを読む "モンティ・ホール問題" »

2012年05月18日

[Event] VSUG Day 2012 Summer

vsugday2012summer80665.png

▼日付: 2012年06月16日(土)受付9:55~予定
▼会場: マイクロソフト品川オフィス 31F
▼参加費用: 無料(VSUG 会員登録が必要となります)

詳細/申し込み: http://vsug.jp/tabid/228/EventID/21/Default.aspx

2012年11月14日

[Event] VSUG Day 2012 Winter

2012.12.15(Sat) マイクロソフト品川ビル31F

▼日付: 2012年12月15日(土) 受付9:30~予定
▼会場: マイクロソフト品川オフィス 31F
▼参加費用: 無料 (VSUG 会員登録が必要となります)

詳細/申し込み: http://vsug.jp/tabid/228/EventID/22/Default.aspx

2012年11月20日

[Windows 8][Windows Store アプリ][XAML] Windows Store アプリと Windows Phone アプリ、Silverlight アプリ、WPF アプリでソースコードを共通化する方法に関する記事

Windows Store アプリと Windows Phone アプリ、Silverlight アプリ、WPF アプリは、どれも XAML を使って開発することができ、共通する部分も多い。

そこで、これらでソースコードを共通化する方法に関する記事を紹介する。

先ずは @IT の岩永 信之氏の記事から。"Portable Class Library" と呼ばれるマルチ プラットフォーム クラス ライブラリによるソースコードの共通化、MVVMパターンによるビューとモデルの分離方法について、判りやすく書かれている。

  • XAMLファミリ共通開発のすゝめ - @IT

続いて Windows Store アプリ開発に関する記事を多く書かれている山本 康彦氏のスライドから。

こちらでは、スライドの30ページ目から Portable Class Library について書かれている。

このスライドでは以下の記事が引用されている:

この記事では、MVVM パターンを用いている。各プラットフォーム用に View を分け、Model と ViewModel を Portable Class Library で共通化することを推奨している。

Portable Class Library に関して幾つか他の記事を紹介する:

プラットフォーム間での XAML の違いについては、以下の記事も参考になる:

2012年11月28日

[C#][ラムダ式][LINQ][式木] 匿名メソッドとラムダ式の違い

Expression

この記事では、匿名メソッドとラムダ式の意味の違いについて考えてみたい。

■ 同じように使える匿名メソッドとラムダ式

匿名メソッドとラムダ式は、同じように使うことができる場面が多い。

例えば、以下のようなデリゲートを引数にとるメソッドがあったとして、

using System;
using System.Collections.Generic;

static class Enumerable
{
    // 述語に基づいて値のシーケンスをフィルター処理
    public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
    {
        foreach (var item in source) {
            if (predicate(item))
                yield return item;
        }
    }
}

この predicate には、通常のメソッドも匿名メソッドもラムダ式も渡すことができ、いずれも同じ結果となる。

using System;

class Program
{
    static bool IsEven(int number)
    {
        return number % 2 == 0;
    }

    static void Main()
    {
        var numbers = new[] { 3, 7, 1, 6, 4, 5 };

        // 普通のメソッドをデリゲートに入れて渡す例 
        var evenNumbers1_1 = numbers.Where(new Func<int, bool>(IsEven));
        // 上に同じ
        var evenNumbers1_2 = numbers.Where(IsEven);
        // 匿名メソッドを使った例
        var evenNumbers2 = numbers.Where(delegate(int number) { return number % 2 == 0; });
        // ラムダ式を使った例
        var evenNumbers3 = numbers.Where(number => number % 2 == 0);
    }
}

いずれの場合も、同じ型のデリゲートとして渡されることになるのだ。

以下の例でも同じ型のデリゲートとして受けられることが判る。

     Func<int, bool> delegate1_1 = new Func<int, bool>(IsEven);
    Func<int, bool> delegate1_2 = IsEven; // 上と同じ
    Func<int, bool> delegate2 = delegate(int number) { return number % 2 == 0; };
    Func<int, bool> delegate3 = number => number % 2 == 0;

上の例では、一行目 delegate1_1 の例と二行目 delegate1_2 の例は全く同じ意味だ。書き方が違うだけの、単なる糖衣構文 (syntax sugar) に過ぎない。

では、三行目の匿名メソッドを使った delegate2 の例 と四行目のラムダ式を使った delegate3 の例も、単なる糖衣構文 (syntax sugar) なのだろうか?

確かに、ラムダ式を使った方が、型推論の恩恵を存分に受けられ、書き方がぐっとシンプルになる。だが、書き方だけの違いなのだろうか?

■ 匿名メソッドとラムダ式で挙動が異なる例

今度は、両者で違いが出る例を見てみよう。

LINQ to SQL を使った例だ。

予め SQL Server に Employee というシンプルなテーブルを用意した。

Employee テーブル

次に、Visual Studio でプロジェクトを作り、EmployeeDataClasses.dbml という名前で「LINQ to SQL クラス」を追加した。

「LINQ to SQL クラス」を追加
・LINQ to SQL - ラムダ式で書いた場合

では、ラムダ式を使ってデータ アクセスを行う例から見てみよう。

// LINQ to SQL の例 - ラムダ式で書いた場合
using LambdaExpressionSample; // EmployeeDataClassesDataContext の名前空間
using System;
using System.Linq;

class Program
{
    static void Main()
    {
        var dataContext = new EmployeeDataClassesDataContext();
        dataContext.Log = Console.Out; // 発行された SQL をモニターする為に、コンソールに出力

        var data1 = dataContext.Employee.Where(employee => employee.Name.Contains("山"));
        var data2 = data1.OrderBy(employee => employee.Name);
        var data3 = data2.Select(employee => employee.Name);

        data3.ToList().ForEach(Console.WriteLine);
    }
}

この例で発行された SQL は、以下の通り。

SELECT [t0].[Name]
FROM [dbo].[Employee] AS [t0]
WHERE [t0].[Name] LIKE @p0
ORDER BY [t0].[Name]
-- @p0: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [%山%]

三行に分けて書いているのに、SQL の発行は data3.ToList() のときの一回だけだ。data1、data2、data3 と三回も戻り値を受けているのに、ToList() されるまで評価が遅延されている訳だ。

SQL の発行は一回だけだが、where は WHERE、OrderBy は ORDER BY、Select で Name だけなのは SELECT で Name だけと、ちゃんと狙い通りのものが発行されているのが判る。

LINQ to SQL (や Entity Framework) の凄いところだ。

因みに、上ではメソッド構文を使って書いているが、クエリ構文を使って書くこともできる。

以下の二つは意味的には同じで、糖衣構文 (syntax sugar) だ。

// メソッド構文
var data3 = dataContext.Employee
            .Where(employee => employee.Name.Contains("山"))
            .OrderBy(employee => employee.Name)
            .Select(employee => employee.Name);
// クエリ構文
var data3 = from employee in dataContext.Employee
            where employee.Name.Contains("山")
            orderby employee.Name
            select employee.Name;
・LINQ to SQL - 匿名メソッドで書いた場合

次に、この例を匿名メソッドに置き換えてやってみよう。ラムダ式が匿名メソッドの単なる糖衣構文 (syntax sugar) なら同じ結果になる筈だ。

// LINQ to SQL の例 - 匿名メソッドで書いた場合
using LambdaExpressionSample;
using System;
using System.Linq;

class Program
{
    static void Main()
    {
        var dataContext = new EmployeeDataClassesDataContext();
        dataContext.Log = Console.Out; // 発行された SQL をモニターする為に、コンソールに出力

        var data1 = dataContext.Employee.Where(delegate(Employee employee) { return employee.Name.Contains("山"); });
        var data2 = data1.OrderBy(delegate(Employee employee) { return employee.Name; });
        var data3 = data2.Select(delegate(Employee employee) { return employee.Name; });

        data3.ToList().ForEach(Console.WriteLine);
    }
}

結果はこうなった。

SELECT [t0].[Id], [t0].[Name]
FROM [dbo].[Employee] AS [t0]

ラムダ式の場合と大きく異なる。

WHERE による行の絞り込みも SELECT による列の絞り込みも ORDER BY による並べ替えも全然反映されていない。

つまり、この例では、LINQ to SQL で単純に Employee テーブルの全列、全行を取ってきて、後は LINQ to Object でオンメモリで処理している訳だ。

これでは全く非効率だ。ラムダ式を使うべき、と云うことになろう。

・LINQ to SQL - ラムダ式と匿名メソッドを混在させた場合

序でに、両者を混在させた例も見ておこう。

// LINQ to SQL の例 - ラムダ式と匿名メソッドを混在させた場合
using LambdaExpressionSample; // EmployeeDataClassesDataContext の名前空間
using System;
using System.Linq;

class Program
{
    static void Main()
    {
        var dataContext = new EmployeeDataClassesDataContext();
        dataContext.Log = Console.Out; // 発行された SQL をモニターする為に、コンソールに出力

        var data1 = dataContext.Employee.Where(employee => employee.Name.Contains("山"));
        var data2 = data1.OrderBy(delegate(Employee employee) { return employee.Name; });
        var data3 = data2.Select(employee => employee.Name);

        data3.ToList().ForEach(Console.WriteLine);
    }
}

結果はこうなった。

SELECT [t0].[Id], [t0].[Name]
FROM [dbo].[Employee] AS [t0]
WHERE [t0].[Name] LIKE @p0
-- @p0: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [%山%]

SQL に反映されているのは、ラムダ式を使った Where までで、匿名メソッドより後ろは LINQ to Object で処理されているのが判る。

この例で、ラムダ式は匿名メソッドと意味的に同じものではない、ということが判った。

■ 匿名メソッドとラムダ式の違い

では、両者はどう意味が違うのだろうか。

上の LINQ to SQL の例の Where の部分を比べてみよう。

    // ラムダ式を使った例
    var data1 = dataContext.Employee.Where(employee => employee.Name.Contains("山"));
    // 匿名メソッドを使った例
    var data1 = dataContext.Employee.Where(delegate(Employee employee) { return employee.Name.Contains("山"); });

Visual Studio を使って、両者の Where の部分を右クリックし、「定義へ移動」してみよう。

一見同じ Where メソッドを呼んでいるようだが、異なった Where メソッドを呼んでいることが判るだろう。

// ラムダ式を使った例から呼ばれる Where メソッド
namespace System.Linq
{
    public static class Queryable
    {
        public static IQueryable<TSource> Where<TSource>(this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate);
    }
}
// 匿名メソッドを使った例から呼ばれる Where メソッド
namespace System.Linq
{
    public static class Enumerable
    {
        public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
    }
}

匿名メソッドの方は Func<TSource, bool>、即ちデリゲートだが、ラムダ式の方は Expression と云う違うもので受けている。

参考までに、Func と Expression の定義は以下のようになっている。

// Func はデリゲート
namespace System
{
    public delegate TResult Func<in T, out TResult>(T arg);
}
// Expression はデリゲートではない
namespace System.Linq.Expressions
{
    public sealed class Expression<TDelegate> : LambdaExpression;
}

ラムダ式は、あくまでも「式」として渡されているのだ。

対して、匿名メソッドは Expression として扱うことができない。

試してみよう。

using LambdaExpressionSample; // EmployeeDataClassesDataContext の名前空間
using System;
using System.Linq.Expressions;

class Program
{
    static void Main()
    {
        // デリゲートとして使う分には、どちらでも OK
        Func<Employee, bool> delegate1 = employee => employee.Name.Contains("山");
        Func<Employee, bool> delegate2 = delegate(Employee employee) { return employee.Name.Contains("山"); };

        // だが、Expression として使えるのはラムダ式の方だけ
        Expression<Func<Employee, bool>> expression1 = employee => employee.Name.Contains("山");
        //Expression<Func<Employee, bool>> expression2 = delegate(Employee employee) { return employee.Name.Contains("山"); }; // コンパイル エラーになる
    }
}

匿名メソッドの方は、「匿名メソッド式を式のツリーに変換することはできません」と云うコンパイル エラーとなる。

「匿名メソッド式を式のツリーに変換することはできません」と云うコンパイル エラー

即ち、ラムダ式を Expression として扱っている場合は、匿名メソッドは代わりにはならない、ということになる。

ラムダ式は匿名メソッドの糖衣構文 (syntax sugar) などではないのだ。

一般的には、ラムダ式を使うことで書き方もシンプルになることだし、匿名メソッドは使わずにラムダ式で書くようにした方が良いだろう。

■ 今回のまとめ

今回は、匿名メソッドとラムダ式の意味の違いについて考察した。

ラムダ式はデリゲートのみならず、式としても扱うことができる、と云うことだ。

LINQ to SQL のような LINQ プロバイダーでは、ときにラムダ式を式として扱うことが大切だろう、と想像できる。

だが、それ以外のプログラミングでラムダ式を式として扱って便利なことってあるんだろうか?

と云う訳で、次回は、ラムダ式を Expression として扱うと便利な例について書く予定だ。

2012年11月29日

[C#][ラムダ式][式木] Expression として扱えるラムダ式と扱えないラムダ式

Expression

前回、「匿名メソッドとラムダ式の違い」と云う記事で、匿名メソッドとラムダ式の意味の違いについて考えた。

それについて、少し補足しておきたい。

「ラムダ式を Expression として扱っている場合は、匿名メソッドは代わりにはならない」と述べたが、ラムダ式であれば何でも Expression として扱える訳ではないのだ。

■ Expression として扱えるラムダ式

ラムダ式として足し算を行うだけの (x, y) => x + y と云うシンプルなものを用意し、これを Expression で受けてみる。

using System;
using System.Linq.Expressions;

class Program
{
    static void Main()
    {
        Expression<Func<int, int, int>> expression = (x, y) => x + y;
    }
}

これは特に問題ない。

■ Expression として扱えないラムダ式

ラムダ式の => より右の部分には式だけでなくステートメントのブロックも置くことができる。

このラムダ式の => より右の部分を、式ではなく、ステートメントのブロックに変えてみよう。
例えば、(x, y) => { return x + y; } とし、これを Expression で受けてみる。どうなるだろうか?

using System;
using System.Linq.Expressions;

class Program
{
    static void Main()
    {
        Expression<Func<int, int, int>> expression = (x, y) => { return x + y; };
    }
}

すると今度は、「ステートメント本体を含むラムダ式は、式のツリーに変換できません」というコンパイル エラーになる。

「ステートメント本体を含むラムダ式は、式のツリーに変換できません」というコンパイル エラー

つまり、ラムダ式の => の右の部分が式である場合は Expression として扱えるが、ステートメントのブロックである場合は Expression として扱えないのだ。

■ 考察

「式でないものは式として扱えない」と云う、云わば当たり前の結果だ。

ところで、F# や Scala、Haskell などの関数型プログラミングをより得意とする言語では、if 等多くのものが式として扱える。

それらと比較すると、C# ではまだまだ式として書ける範囲は少ない。
例えば、if は文だ (勿論 C# でも三項演算子で書けるものは式で表現できる)。
だが、C# でもっと多くのものが、F# や Scala、Haskell などの言語のように文でなく式で表せるようになれば、益益 Expression で扱える範囲が増える、と云うことになるだろう。

■ 今回のまとめ

今回は、前回の記事の補足を軽く行った。

今後、ラムダ式を Expression として利用する例を何回かに分けて、紹介していく予定だ。

次回は、先ず Expression そのものへの理解を深めるために Expression の構造を調べてみたいと思う。

2012年11月30日

[C#][ラムダ式][式木] Expression の構造を調べてみる

Expression

匿名メソッドとラムダ式の違い」と云う記事で、匿名メソッドとラムダ式の意味の違いについて考えた。

「ラムダ式を Expression として扱っている場合は、匿名メソッドは代わりにはならない」と述べたが、ラムダ式を Expression として扱う例について、これから数回に分けて書いていきたい。

ラムダ式を Expression として扱う例を挙げる前に、今回は、先ずは Expression 自体について理解を深めたいと思う。

Expression はどのような構造をしているのだろうか? 中がどうなっているのかを見てみることにしよう。

■ Expression をデバッガーで観察してみよう

手始めに、Visual Studio のデバッガーを用いて Expression の中を覗いてみる。

ラムダ式として足し算を行うだけの (x, y) => x + y と云うシンプルなものを用意し、これを Expression で受ける。

using System;
using System.Linq.Expressions;

class Program
{
    static void Main()
    {
        Expression<Func<int, int, int>> expression = (x, y) => x + y;
    }
}

これをデバッグ実行して、デバッガーで expression の中を覗いてみる。

デバッガーで expression の中を覗いてみる 1

Body、Name、NodeType、Parameters、Type 等の各プロパティとその値が見えているのが判るだろう。

Name はなく、NodeType は Lambda だ。名前がないと云うことと、式の種類がラムダ式であることを表している。
Type は Func`3、つまり TResult Func<in T1, in T2, out TResult> になっている。

Body の中を見てみよう。

デバッガーで expression の中を覗いてみる - Body

ラムダ式の中の => より後ろの x + y の部分であることが判る。引数の x が見えている。NodeType は Add で足し算の式であることを表している。
Type は Int32、つまり int だ。
Left は x、Right は y となっていて、二項演算である足し算の左オペランドが x、右オペランドが y であることを表している。

更に Left の中を見てみる。

デバッガーで expression の中を覗いてみる - Body - Left

Name は x、Type は Int32 つまり int。
NodeType は Parameter で式の種類が引数であることを表している。

続いて Parameters。

デバッガーで expression の中を覗いてみる - Parameters

Parameters は要素数 2 のコレクションになっているようだ。ラムダ式の中の => より前の部分の引数を表していることが判る。

Parameters の一つ目の要素を見てみよう。

デバッガーで expression の中を覗いてみる - Parameters の一つ目の要素

引数の x が見えている。NodeType は Parameter つまり式の種類は引数、Type は Int32 つまり int だ。

■ Expression はツリー構造

上の例では、expression のNodeType は Lambda であり、この式の種類がラムダ式であることを表していた。

その他にも、幾つかの式が出てきている。

例えば、Body の部分。ラムダ式の中の => より後ろの x + y の部分だが、ここも式であり、式の種類は二項演算の足し算の式であった。

デバッガーでよく見てみると、これらの式も Expression であることが判る。

Expression はその中に再帰的に Expression を持つことでツリー構造になっているようだ。

■ Expression の種類

Expression には幾つかの種類があることも判る。

ラムダ式、二項演算の式、などだ。

実は、Expression クラスには沢山の派生クラスがあり、それぞれが様様な式の種類を表している。

以下を参照してほしい:

その一部を示すと、こんな感じだ。

Expression クラスの派生クラス 種類 NodeType プロパティの値
NodeType NodeType の説明
LambdaExpression ラムダ式 Lambda ラムダ式
BinaryExpression 二項演算式 Add 足し算
AddChecked オーバーフロー チェックを行う足し算
Subtract 引き算
SubtractChecked オーバーフロー チェックを行う引き算
Multiply 掛け算
MultiplyChecked オーバーフロー チェックを行う掛け算
Divide 割り算
Modulo 剰余演算
Power 累乗
UnaryExpression 単項演算式 Negate 単項マイナス演算
NegateChecked オーバーフロー チェックを行う単項マイナス演算
UnaryPlus 単項プラス演算
Not ビット補数演算または論理否定演算
Convert キャスト演算
ConvertChecked チェック付きキャスト演算
TypeAs as による型変換
ArrayLength 配列の長さを取得する演算
Quote 定数式

■ Expression のツリー構造を見てみよう

それでは、Expression のツリー構造を実際に見てみよう。

ツリー構造になった Expression を再帰的に辿りながら表示していくクラスを作ってみた。

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq.Expressions;

static class EnumerableExtensions
{
    // コレクションの各要素に対して、指定された処理をインデックス付きで実行
    public static void ForEach<TItem>(this IEnumerable<TItem> collection, Action<TItem, int> action)
    {
        int index = 0;
        foreach (var item in collection)
            action(item, index++);
    }
}

// Expression の中身をダンプ (ラムダ式、二項演算式、単項演算式以外は簡易表示)
static class ExpressionViewer
{
    // Expression の中を (再帰的に) 表示
    public static void Show(this Expression expression, int level = 0)
    {
        if (expression as LambdaExpression != null)
            // ラムダ式のときは詳細に表示
            ShowLambdaExpression((LambdaExpression)expression, level);
        else if (expression as BinaryExpression != null)
            // 二項演算のときは詳細に表示
            ShowBinaryExpression((BinaryExpression)expression, level);
        else if (expression as UnaryExpression != null)
            // 単項演算のときは詳細に表示
            ShowUnaryExpression((UnaryExpression)expression, level);
        else if (expression != null)
            // それ以外も沢山あるが、今回は省略してベース部分だけ表示
            ShowExpressionBase(expression, level);
    }

    // Expression のベース部分を表示
    static void ShowExpressionBase(Expression expression, int level)
    {
        ShowText(string.Format("☆Expression: {0}", expression), level);
        ShowText(string.Format("ノードタイプ: {0}", expression.NodeType), level + 1);
    }

    // LambdaExpression (ラムダ式) の中を (再帰的に) 表示
    static void ShowLambdaExpression(LambdaExpression expression, int level)
    {
        ShowExpressionBase(expression, level);
        ShowText(string.Format("名前: {0}", expression.Name), level + 1);
        ShowText(string.Format("戻り値の型: {0}", expression.ReturnType), level + 1);
        ShowParameterExpressions(expression.Parameters, level + 1); // 引数のコレクション
        ShowText(string.Format("本体: {0}", expression.Body), level + 1);
        expression.Body.Show(level + 2); // 本体を再帰的に表示
    }

    // BinaryExpression (二項演算式) の中を (再帰的に) 表示
    static void ShowBinaryExpression(BinaryExpression expression, int level)
    {
        ShowExpressionBase(expression, level);
        ShowText(string.Format("型: {0}", expression.Type), level + 1);
        ShowText(string.Format("左オペランド: {0}", expression.Left), level + 1);
        expression.Left.Show(level + 2); // 左オペランドを再帰的に表示
        ShowText(string.Format("右オペランド: {0}", expression.Right), level + 1);
        expression.Right.Show(level + 2); // 右オペランドを再帰的に表示
    }

    // UnaryExpression (単項演算式) の中を (再帰的に) 表示
    static void ShowUnaryExpression(UnaryExpression expression, int level)
    {
        ShowExpressionBase(expression, level);
        ShowText(string.Format("型: {0}", expression.Type), level + 1);
        ShowText(string.Format("オペランド: {0}", expression.Operand), level + 1);
        expression.Operand.Show(level + 2); // オペランドを再帰的に表示
    }

    // 引数の式のコレクションを表示
    static void ShowParameterExpressions(ReadOnlyCollection<ParameterExpression> parameterExpressions, int level)
    {
        ShowText("引数群", level);
        if (parameterExpressions == null || parameterExpressions.Count == 0)
            ShowText("引数なし", level);
        else
            parameterExpressions.ForEach((parameterExpression, index) => ShowParameterExpression(parameterExpression, index, level + 1));
    }

    // 引数の式の中を表示
    static void ShowParameterExpression(ParameterExpression parameterExpression, int index, int level)
    {
        ShowText(string.Format("引数{0}", index + 1), level + 1);
        ShowExpressionBase(parameterExpression, level + 1);
        ShowText(string.Format("引数の型: {1}, 引数の名前: {2}", parameterExpression.NodeType, parameterExpression.Type, parameterExpression.Name), level + 2);
    }

    // 文字列をレベルに応じてインデント付で表示
    static void ShowText(string itemText, int level)
    {
        Console.WriteLine("{0}{1}", Indent(level), itemText);
    }

    // インデントの為の文字列を生成
    static string Indent(int level)
    {
        return level == 0 ? "" : new string(' ', (level - 1) * 4 + 1) + "|-- ";
    }
}

この ExpressionViewer クラスを使って、先程の expression の中を見てみよう。

class Program
{
    public static void Main()
    {
        Expression<Func<int, int, int>> expression = (x, y) => x + y;
        ((Expression)expression).Show();
    }
}

実行してみると、こうなる。

☆Expression: (x, y) => (x + y)
 |-- ノードタイプ: Lambda
 |-- 名前:
 |-- 戻り値の型: System.Int32
 |-- 引数群
         |-- 引数1
         |-- ☆Expression: x
             |-- ノードタイプ: Parameter
             |-- 引数の型: System.Int32, 引数の名前: x
         |-- 引数2
         |-- ☆Expression: y
             |-- ノードタイプ: Parameter
             |-- 引数の型: System.Int32, 引数の名前: y
 |-- 本体: (x + y)
     |-- ☆Expression: (x + y)
         |-- ノードタイプ: Add
         |-- 型: System.Int32
         |-- 左オペランド: x
             |-- ☆Expression: x
                 |-- ノードタイプ: Parameter
         |-- 右オペランド: y
             |-- ☆Expression: y
                 |-- ノードタイプ: Parameter

「☆Expression」とあるところが式 (Expression) だ。ツリー構造になっている。

「引数群」のところでは、x と y がそれぞれ引数という種類の式としてネストしている。

「本体」は x + y の部分で、足し算を表す式としてネストしている。
その足し算の左オペランドである x と右オペランドである y が、それぞれ引数タイプの式として更にネストしている。

次に、ちょっとだけラムダ式を複雑にしてみよう。(x, y) => x + y を (x, y, z) => x + y + z に変えてみる。

こうだ。

class Program
{
    public static void Main()
    {
        Expression<Func<int, int, int, int>> expression = (x, y, z) => x + y + z;
        ((Expression)expression).Show();
    }
}

さて、結果はどう変化するだろうか。

☆Expression: (x, y, z) => ((x + y) + z)
 |-- ノードタイプ: Lambda
 |-- 名前:
 |-- 戻り値の型: System.Int32
 |-- 引数群
         |-- 引数1
         |-- ☆Expression: x
             |-- ノードタイプ: Parameter
             |-- 引数の型: System.Int32, 引数の名前: x
         |-- 引数2
         |-- ☆Expression: y
             |-- ノードタイプ: Parameter
             |-- 引数の型: System.Int32, 引数の名前: y
         |-- 引数3
         |-- ☆Expression: z
             |-- ノードタイプ: Parameter
             |-- 引数の型: System.Int32, 引数の名前: z
 |-- 本体: ((x + y) + z)
     |-- ☆Expression: ((x + y) + z)
         |-- ノードタイプ: Add
         |-- 型: System.Int32
         |-- 左オペランド: (x + y)
             |-- ☆Expression: (x + y)
                 |-- ノードタイプ: Add
                 |-- 型: System.Int32
                 |-- 左オペランド: x
                     |-- ☆Expression: x
                         |-- ノードタイプ: Parameter
                 |-- 右オペランド: y
                     |-- ☆Expression: y
                         |-- ノードタイプ: Parameter
         |-- 右オペランド: z
             |-- ☆Expression: z
                 |-- ノードタイプ: Parameter

一段ネストが深くなったのがお判りだろうか。

x + y + z のところが (x + y) + z、即ち「『x + y という足し算の式』を左オペランドとし、z を右オペランドとする足し算の式」になっている。

では、更にネストを深くする為に、もっと複雑なラムダ式を使ってみよう。

「デリゲートを入力としデリゲートを出力とするラムダ式」でやってみる。

例えばこんなやつ。

    Func<Func<double, double, double>, Func<int, int, int>> convertFunc = func => ((x, y) => (int)func((double)x, (double)y));

余談だが、一応このラムダ式について説明してみる。

このラムダ式は、「int 二つを引数とし int を返すメソッド」を「double 二つを引数とし double を返すメソッド」に変換する。
double を対象とした足し算を int を対象とした足し算に変換したり、double を対象とした引き算を int を対象とした引き算に変換したりできることになる。

余り意味のない例だが、こんな感じだ。

using System;

static class Program
{
    static double Add(double x, double y)
    {
        return x + y;
    }

    static double Subtract(double x, double y)
    {
        return x - y;
    }

    public static void Main()
    {
        Func<Func<double, double, double>, Func<int, int, int>> convertFunc = func => ((x, y) => (int)func((double)x, (double)y));
        int answer1 = convertFunc(Add )(1, 2);
        int answer2 = convertFunc(Subtract)(4, 3);
    }
}

このラムダ式を ExpressionViewer クラスを使ってダンプしてみよう。

class Program
{
    public static void Main()
    {
        Expression<Func<Func<double, double, double>, Func<int, int, int>>> expression = func => ((x, y) => (int)func((double)x, (double)y));
        ((Expression)expression).Show();
    }
}

結果は下のようになる。

☆Expression: func => (x, y) => Convert(Invoke(func, Convert(x), Convert(y)))
 |-- ノードタイプ: Lambda
 |-- 名前:
 |-- 戻り値の型: System.Func`3[System.Int32,System.Int32,System.Int32]
 |-- 引数群
         |-- 引数1
         |-- ☆Expression: func
             |-- ノードタイプ: Parameter
             |-- 引数の型: System.Func`3[System.Double,System.Double,System.Double], 引数の名前: func
 |-- 本体: (x, y) => Convert(Invoke(func, Convert(x), Convert(y)))
     |-- ☆Expression: (x, y) => Convert(Invoke(func, Convert(x), Convert(y)))
         |-- ノードタイプ: Lambda
         |-- 名前:
         |-- 戻り値の型: System.Int32
         |-- 引数群
                 |-- 引数1
                 |-- ☆Expression: x
                     |-- ノードタイプ: Parameter
                     |-- 引数の型: System.Int32, 引数の名前: x
                 |-- 引数2
                 |-- ☆Expression: y
                     |-- ノードタイプ: Parameter
                     |-- 引数の型: System.Int32, 引数の名前: y
         |-- 本体: Convert(Invoke(func, Convert(x), Convert(y)))
             |-- ☆Expression: Convert(Invoke(func, Convert(x), Convert(y)))
                 |-- ノードタイプ: Convert
                 |-- 型: System.Int32
                 |-- オペランド: Invoke(func, Convert(x), Convert(y))
                     |-- ☆Expression: Invoke(func, Convert(x), Convert(y))
                         |-- ノードタイプ: Invoke

「引数群」のところは、単に一つのデリゲートになっている。

「本体」のところは、ラムダ式がネストしている。
そして、ネストしたラムダ式は、通常のラムダ式と同じようにツリー構造に展開されている。

■ 今回のまとめ

と云う訳で、今回は Expression の構造を見てみた。

次回以降で、愈愈ラムダ式を Expression として利用する例を紹介したい。

2012年12月01日

[C#][ラムダ式][匿名メソッド] ラムダ式は常に匿名メソッドよりシンプルに書ける?

Expression

匿名メソッドとラムダ式の違い」と云う記事で、匿名メソッドとラムダ式の意味の違いについて考えた。

それについて、些細な補足をする。

上の記事中で、「ラムダ式を使った方が、型推論の恩恵を存分に受けられ、書き方がぐっとシンプルになる。」、「一般的には、ラムダ式を使うことで書き方もシンプルになることだし、匿名メソッドは使わずにラムダ式で書くようにした方が良いだろう。」と述べた。

一般的にはこれは真実だ。しかし、ごく稀にだが、ラムダ式よりも匿名メソッドの方がシンプルになることがある。

■ ラムダ式が匿名メソッドよりシンプルな書き方になる例

上の記事で述べたように、通常は、ラムダ式の方が型推論が強力なので、シンプルに書ける。

かなり極端な例だが、

using System;

class Subject
{
    public event Action<Subject, object, object, object, object, object> Update;
}

class Program
{
    static void DoSomething(Subject subject)
    {}

    static void Main()
    {
        var subject = new Subject();

        // 匿名メソッドで書いた場合
        subject.Update += delegate(Subject sender, object a, object b, object c, object d, object e) { DoSomething(sender); };

        // ラムダ式で書いた場合
        subject.Update += (sender, a, b, c, d, e) => DoSomething(sender);
    }
}

ラムダ式の方では、型名の記述その他が省略できてシンプルな記述になっている。

■ ラムダ式より匿名メソッドの方がよりシンプルな書き方になる例

ところが、内部で引数を使わないような下の例ではどうだろう。

using System;

class Subject
{
    public event Action<Subject, object, object, object, object, object> Update;
}

class Program
{
    static void DoSomething()
    {}

    static void Main()
    {
        var subject = new Subject();

        // 匿名メソッドで書いた場合
        subject.Update += delegate { DoSomething(); };

        // ラムダ式で書いた場合
        subject.Update += (_, a, b, c, d, e) => DoSomething();
    }
}

匿名メソッドの方が、ちょっとだけシンプルになっている気がしないだろうか。

■ 本日のまとめ

とは云え、これは上で述べているように極端で、そして余り意味のない例だ。

こんなに引数が多いデリゲートなど殆ど必要ないだろう。

矢張り、「一般的には、ラムダ式を使うことで書き方もシンプルになることだし、匿名メソッドは使わずにラムダ式で書くようにした方が良いだろう。」と云って問題ないと思う。

2012年12月03日

[C#][ラムダ式][式木] Expression を使ってラムダ式のメンバー名を取得する

Expression

前回「Expression の構造を調べてみる」と云う記事で、Expression の内部のツリー構造を調べた。

その中で、ラムダ式を Expression として扱うことで、式の中の名前が取れることが判った。

今回は これを利用してラムダ式のメンバー名を取得する例を挙げてみたい。

■ ラムダ式のメンバー名を取得する例

先ずシンプルなクラスを一つ用意する。

class Item
{
    public int Id { get; set; }
}

そして、item => item.Id というラムダ式を渡してプロパティ名を取得するメソッドを作ってみよう。

前回の知識が役に立つ。

前回の調査で、ラムダ式の => の右側の式は Body で取れることが解かっている。

次に、Visual Studio のデバッガーなどを駆使して、Body の式の種類を調べよう。Body は MemberExpression であることが判る筈だ。

MemberExpression であれば、プロパティの内の Member の Name で名前が取得できる。

実際にメソッドを作ってみるとこんな感じだ:

using System;
using System.Linq.Expressions;

public static class ObjectExtensions
{
    // Expression からメンバー名を取得
    public static string GetMemberName<ObjectType, MemberType>(this ObjectType @this, Expression<Func<ObjectType, MemberType>> expression)
    {
        return ((MemberExpression)expression.Body).Member.Name;
    }
}

早速使ってみよう。

using System;

class Item
{
    public int Id { get; set; }
}

class Program
{
    static void Test()
    {
        var memberName = new Item().GetMemberName(item => item.Id);
        Console.WriteLine(memberName);
    }

    public static void Main()
    {
        Test();
    }
}

実行結果は下の通りで、ラムダ式からプロパティ名が取得できた。

Id

次に、Item クラスの内部からもやってみよう。

今度のラムダ式は () => Id だ。

ObjectExtensions クラスに先程作ったメソッドから第一引数を無くしたメソッドを追加して、

using System;
using System.Linq.Expressions;

public static class ObjectExtensions
{
    // Expression からメンバー名を取得
    public static string GetMemberName<ObjectType, MemberType>(this ObjectType @this, Expression<Func<ObjectType, MemberType>> expression)
    {
        return ((MemberExpression)expression.Body).Member.Name;
    }

    // Expression からメンバー名を取得
    public static string GetMemberName<MemberType>(Expression<Func<MemberType>> expression)
    {
        return ((MemberExpression)expression.Body).Member.Name;
    }
}

Item クラス内部に Test 用のメソッドを追加し、そこから呼んでみる。

using System;

class Item
{
    public int Id { get; set; }

    public void Test()
    {
        var memberName = ObjectExtensions.GetMemberName(() => Id);
        Console.WriteLine(memberName);
    }
}

class Program
{
    static void Test()
    {
        var memberName = new Item().GetMemberName(item => item.Id);
        Console.WriteLine(memberName);
    }

    public static void Main()
    {
        Test();
        new Item().Test();
    }
}

実行結果は下の通り。クラス内部からもラムダ式からプロパティ名が取得できた。

Id
Id

■ 今回のまとめ

Expression を利用してラムダ式のメンバー名を取得してみた。

しかし、こんなことが何の役に立つのだろうか?

次回から、これを利用した応用例について書こうと思う。

2012年12月05日

[C#][dynamic] DynamicObject を使ってみよう

Dynamic

C# 4 から dynamic が使えるようになった。

動的言語のように、動的にプロパティを参照したり、メソッドを呼んだり出来るようになった訳だ。

そして、.NET Framework では 4 から System.Dynamic と云う名前空間ができた。

今回は、この名前空間の中の DynamicObject を使ってみたい。

■ DynamicObject を使った例

・DynamicObject

DynamicObject は、メソッド呼び出し、プロパティへのアクセス、インデックスによるアクセス等のそれぞれに対応する virtual メソッドを持つ。

例.

virtual メソッド名 説明
TrySetMember オーバーライドして、プロパティに値が設定されるときの動作を定義できる
TryGetMember オーバーライドして、プロパティから値が取得されるときの動作を定義できる
TrySetIndex オーバーライドして、インデックスを用いて値が設定されるときの動作を定義できる
TryGetIndex オーバーライドして、インデックスを用いて値が取得されるときの動作を定義できる
TryInvokeMember オーバーライドして、メソッドが呼び出されるときの動作を定義できる

DynamicObject から派生したクラスを作り、これらの virtual メソッド をオーバーライドすることで、動的な動作を定義することができる。

・DynamicObjectを使った例 1

実際に試してみよう。

今回は、TrySetMember と TryGetMember をオーバーライドしてプロパティにアクセスしてみる。

using System;
using System.Dynamic;

class Dynamic : DynamicObject
{
    // プロパティに値を設定しようとしたときに呼ばれる
    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        return base.TrySetMember(binder, value);
    }

    // プロパティから値を取得しようとしたときに呼ばれる
    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        return base.TryGetMember(binder, out result);
    }
}

class Program
{
    static void Main()
    {
        dynamic item = new Dynamic();
        item.Id = 100; // 実行時エラー (Id の定義がない)
        Console.WriteLine(item.Id); // 実行時エラー (Id の定義がない)
        item.Name = "田中一郎"; // 実行時エラー (Name の定義がない)
        Console.WriteLine(item.Name); // 実行時エラー (Name の定義がない)
    }
}

Visual Studio を使って、オーバーライドした TrySetMember と TryGetMember にブレークポイントを置いてデバッグ実行してみると、それぞれプロパティの設定時と取得時にちゃんと呼ばれていることが判る。

DynamicObjectを使った例 1 - ブレークポイントで止めたところ
DynamicObjectを使った例 1 - ブレークポイントで止めたところ

base.TrySetMember(binder, value) と base.TryGetMember(binder, out result) は false を返している。

TrySetMember が false を返すとプロパティの設定に失敗し、TryGetMember が false を返すとプロパティの取得に失敗する。

従って、このプログラムを実行してみると、以下のような実行時エラーになる。

DynamicObjectを使った例 1 - 実行時エラー
DynamicObjectを使った例 1 - 実行時エラー
・DynamicObjectを使った例 2

TrySetMember と TryGetMember の中をもう少しちゃんと実装して、動くようにしてみよう。

TrySetMember の中で、Dictionary を使って設定した値を覚えるようにしてみる。

そして、同じプロパティが再設定されるときは、型が同じか派生クラスのときだけ許すようにしてみる
(この実装はやや妥当ではないが、今回はこうしてみる)。

そして、TryGetMember の中では、Dictionary から値を取り出して返すようにしてみよう。

こんな感じだ。

using System;
using System.Collections.Generic;
using System.Dynamic;

class Dynamic : DynamicObject
{
    // observableTarget の該当するプロパティ名毎に型と値を格納
    Dictionary<string, Tuple<Type, object>> values = new Dictionary<string, Tuple<Type, object>>();

    // プロパティに値を設定しようとしたときに呼ばれる
    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        Tuple<Type, object> tuple;
        // 該当するプロパティの型と値を values から取得
        if (values.TryGetValue(binder.Name, out tuple)) {
            var valueType = value.GetType();
            // もしプロパティに設定しようとしている値の型が、そのプロパティの型もしくはそのサブクラスでなかったら
            if (!valueType.Equals(tuple.Item1) && !valueType.IsSubclassOf(tuple.Item1))
                return false;
            // 元の型の儘で値を再設定
            values[binder.Name] = new Tuple<Type, object>(tuple.Item1, value);
            return true;
        }
        // 型と値を新規に格納
        values[binder.Name] = new Tuple<Type, object>(value.GetType(), value);
        return true;
    }

    // プロパティから値を取得しようとしたときに呼ばれる
    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        Tuple<Type, object> tuple;
        // 該当するプロパティの型と値を values から取得
        if (values.TryGetValue(binder.Name, out tuple)) {
            result = tuple.Item2;
            return true;
        }
        result = null;
        return false;
    }
}

class Program
{
    static void Main()
    {
        dynamic item = new Dynamic();
        item.Id = 100; // OK
        Console.WriteLine(item.Id); // OK
        //item.Id = "田中一郎"; // 実行時エラー (異なった型の値を設定しようとしている)
        item.Name = "田中一郎"; // OK
        Console.WriteLine(item.Name); // OK
        //Console.WriteLine(item.Address); // 実行時エラー (設定していないプロパティの値を取得しようとしている)
    }
}

今度の実行結果は次の通り。

100
田中一郎

item.Id に異なった型の値を設定しようとしたり、設定していないプロパティの値を取得しようとしたりしている箇所は、実行時エラーになる。
それ以外は正常に動く。

プロパティの再設定時に、再設定する値の型が派生クラスなら設定できるが派生クラスでなければ設定できないことも、確認しておこう。

class Super {}

class Sub : Super {}

class Program
{
    static void Main()
    {
        dynamic item = new Dynamic();

        item.Property1 = new Super(); // OK
        item.Property1 = new Sub(); // OK

        item.Property2 = new Sub(); // OK
        item.Property2 = new Super(); // 実行時エラー (型が違うし、派生クラスでもない)
    }
}

最後の、型が同じでも派生クラスでもなかったときだけ実行時エラーとなる。

■ ExpandoObject を使った例

次に、同じ名前空間 System.Dynamic の中の ExpandoObject も試してみよう。

DynamicObject は派生して使うが、ExpandoObject は派生せずにその儘使う。

こんな感じだ。

using System;
using System.Dynamic;

class Program
{
    static void Main()
    {
        dynamic item = new ExpandoObject();

        item.Id = 100; // OK
        Console.WriteLine(item.Id); // OK
        item.Id = "田中一郎"; // OK
        Console.WriteLine(item.Id); // OK
        item.Name = "田中一郎"; // OK
        Console.WriteLine(item.Name); // OK
        //Console.WriteLine(item.Address); // 実行時エラー(設定していないプロパティの値を取得しようとしている)
    }
}

実行結果は次の通り。

100
田中一郎
田中一郎

ExpandoObject はその儘で、動的にプロパティを設定したり、取得したりできる。

こちらは、最後の設定してないプロパティを取得しようとしたとき以外は、実行時エラーにならない。

■ 今回のまとめ

今回は、DynamicObject を使ってみた。

近く、これの応用例として、DynamicObject をオブザーバー パターンの実装に利用してみる予定だ。

お楽しみに。

2012年12月06日

[C#][dynamic] DynamicObject を使ってみよう その 2

Dynamic

前回の「DynamicObject を使ってみよう」の続き。

前回は、DynamicObject と ExpandoObject を使ってみた。

DynamicObject の派生クラスや ExpandoObject は連想配列のように機能した。
但し、通常の連想配列とはインタフェイスが異なる。

今回も、引き続き DynamicObject と ExpandoObject を使ってみよう。

■ DynamicObject を使った例

DynamicObject の派生クラスがインタフェイスの異なる連想配列のように使える、と云うことを利用してちょっとしたラッパー クラスを作ってみよう。

例えば、ASP.NET や ASP.NET MVC では、セッション変数を利用する際、以下のように連想配列のように使う。

    Session["Id"] = 100;
    int? id = Session["Id"] as int?;

DynamicObject を利用したラッパー クラスを作ってみよう。

例えば、こんな感じだ。

using System.Dynamic;
using System.Web;

public class SessionObject : DynamicObject
{
    readonly HttpSessionStateBase session;

    public SessionObject(HttpSessionStateBase session)
    {
        this.session = session;
    }

    // プロパティに値を設定しようとしたときに呼ばれる
    public override bool TrySetMember(SetMemberBinder binder, object value)
    {
        session[binder.Name] = value;
        return true;
    }

    // プロパティから値を取得しようとしたときに呼ばれる
    public override bool TryGetMember(GetMemberBinder binder, out object result)
    {
        result = session[binder.Name];
        return true;
    }
}

すると、従来のこんな書き方が、

// ASP.NET MVC の場合の一例 (従来の書き方)
using System.Web;
using System.Web.Mvc;
using System.Web.UI;

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var id = Session["Id"]; // まだ Session["Id"] は無いので、id は null
        Session["Id"] = 100; // Session["Id"] に 100 を設定
        id = Session["Id"]; // id には 100 が返ってくる

        var item = Session["Item"]; // まだ Session["Item"] は無いので、item は null
        Session["Item"] = new { Id = 200, Name = "田中一郎" }; // Session["Item"] に匿名型のオブジェクトを設定
        id = DataBinder.Eval(Session["Item"], "Id"); // id には 200 が返ってくる

        return View();
    }
}

SessionObject クラスを使うことによって、こんな書き方になる。

// ASP.NET MVC の場合の一例 (SessionObject クラスを使った場合)
using System.Web;
using System.Web.Mvc;

public class HomeController : Controller
{
    dynamic session = null;

    public ActionResult Index()
    {
        session = new SessionObject(Session);

        var id = session.Id; // まだ session.Id は無いので、id は null
        session.Id = 100; // session.Id に 100 を設定
        id = session.Id; // id には 100 が返ってくる

        var item = session.Item; // まだ session.Item は無いので、item は null
        session.Item = new { Id = 200 }; // session.Item に匿名型のオブジェクトを設定
        id = session.Item.Id; // id には 200 が返ってくる

        return View();
    }
}

dynamic に書けることで、コードがややシンプルになった。

一応、Visual Studio でデバッグ実行し、デバッガーを使って値をチェックしてみると、次のようになった。

DynamicObjectを使った例 - デバッガーでの値のチェック - 「まだ session.Id は無いので、id は null」
1. 「まだ session.Id は無いので、id は null」
DynamicObjectを使った例 - デバッガーでの値のチェック - 「id には 100 が返ってくる」
2. 「id には 100 が返ってくる」
DynamicObjectを使った例 - デバッガーでの値のチェック - 「まだ session.Item は無いので、item は null」
3. 「まだ session.Item は無いので、item は null」
DynamicObjectを使った例 - デバッガーでの値のチェック - 「id には 200 が返ってくる」
4. 「id には 200 が返ってくる」

まあ、実用的な意味合いは余りないが、連想配列的な部分には、使える可能性がある、と云う一例だ。

■ ExpandoObject を使った例

次は、ExpandoObject だ。

・ExpandoObject にプロパティっぽいものを追加

前回は、ExpandoObject を使って動的なプロパティっぽいものを実現した。

再度やってみよう。

using System;
using System.Dynamic;

class Program
{
    static void Main()
    {
        dynamic item = new ExpandoObject();

        // プロパティっぽいものを追加 その1
        item.Id = 10;
        Console.WriteLine(item.Id);
    }
}

実行結果は次の通り。

10

もうちょっと複雑な例。

using System;
using System.Dynamic;

class Program
{
    static void Main()
    {
        dynamic item = new ExpandoObject();

        // プロパティっぽいものを追加 その2
        item.SubItem = new { Id = 100, Name = "田中一郎" };
        Console.WriteLine(item.SubItem);
        Console.WriteLine(item.SubItem.Id);
        Console.WriteLine(item.SubItem.Name);
    }
}

実行結果は次の通り。

{ Id = 100, Name = 田中一郎 }
100
田中一郎
・ExpandoObject に static メソッドっぽいものを追加

オブジェクトが何でも追加できるのであれば、デリゲートだって追加できる筈だ。

デリゲートが追加できるのであれば、メソッドっぽいものも実現できるのではないか。

試しに、static メソッドっぽいものの追加を試してみよう。

こんな感じ。

using System;
using System.Dynamic;

class Program
{
    static void Main()
    {
        dynamic item = new ExpandoObject();

        // static メソッドっぽいものを追加
        item.SetId = new Action<dynamic, int>((o, value) => { o.Id = value; });
        item.GetId = new Func<dynamic, int>(o => o.Id);

        // 呼んでみる
        item.SetId(item, 30);
        Console.WriteLine(item.GetId(item));
    }
}

実行結果は次の通り。

30
・ExpandoObject に イベントっぽいものを追加

デリゲートが追加できるのであれば、もうちょっとイベントっぽくしてみよう。

こんな感じだ。

using System;
using System.Dynamic;

class Program
{
    static void Main()
    {
        dynamic item = new ExpandoObject();

        // イベントっぽいものを追加

        // 1. 先ず、Update と云う名のイベントっぽいものを用意
        item.Update = null;

        // 2. 次に、Update にイベントハンドラーっぽいものを追加
        item.Update += new Action<dynamic, EventArgs>((sender, _) => Console.WriteLine(sender.Name));

        // 3. そして、SetName と云うメソッドっぽいものを用意して、中で Update と云うイベントっぽいものを起こす
        item.SetName = new Action<dynamic, string>(
            (o, value) => {
                o.Name = value;
                if (o.Update != null)
                    o.Update(o, EventArgs.Empty);
            }
        );

        // 4. では、試してみよう:
        // SetName を呼ぶと Update が起きて Console.WriteLine(sender.Name) されるかな?
        item.SetName(item, "田中次郎");
    }
}

実行結果は次の通り。

田中次郎

イベントっぽい。

・ExpandoObject のメンバーの一覧

ここまでを纏めてみる。最後にメンバーの一覧を取ってみよう。

using System;
using System.Dynamic;

class Program
{
    static void Main()
    {
        dynamic item = new ExpandoObject();

        // プロパティっぽいものを追加 その1
        item.Id = 10;
        Console.WriteLine(item.Id);

        // プロパティっぽいものを追加 その2
        item.SubItem = new { Id = 20, Name = "田中一郎" };
        Console.WriteLine(item.SubItem);
        Console.WriteLine(item.SubItem.Id);
        Console.WriteLine(item.SubItem.Name);

        // static メソッドっぽいものを追加
        item.SetId = new Action<dynamic, int>((o, value) => { o.Id = value; });
        item.GetId = new Func<dynamic, int>(o => o.Id);

        // 呼んでみる
        item.SetId(item, 30);
        Console.WriteLine(item.GetId(item));

        // イベントっぽいものを追加

        // 1. 先ず、Update と云う名のイベントっぽいものを用意
        item.Update = null;

        // 2. 次に、Update にイベントハンドラーっぽいものを追加
        item.Update += new Action<dynamic, EventArgs>((sender, _) => Console.WriteLine(sender.Name));

        // 3. そして、SetName と云うメソッドっぽいものを用意して、中で Update と云うイベントっぽいものを起こす
        item.SetName = new Action<dynamic, string>(
            (o, value) => {
                o.Name = value;
                if (o.Update != null)
                    o.Update(o, EventArgs.Empty);
            }
        );

        // 4. では、試してみよう:
        // SetName を呼ぶと Update が起きて、イベントハンドラーの中で Console.WriteLine(sender.Name) されるかな?
        item.SetName(item, "田中次郎");

        // メンバーの一覧の取得
        Console.WriteLine("\nメンバーの一覧:\n");
        foreach (var member in item)
            Console.WriteLine(member);
    }
}

実行結果は次のようになった。

10
{ Id = 20, Name = 田中一郎 }
20
田中一郎
30
田中次郎

メンバーの一覧:

[Id, 30]
[SubItem, { Id = 20, Name = 田中一郎 }]
[SetId, System.Action`2[System.Object,System.Int32]]
[GetId, System.Func`2[System.Object,System.Int32]]
[Update, System.Action`2[System.Object,System.EventArgs]]
[SetName, System.Action`2[System.Object,System.String]]
[Name, 田中次郎]

追加したプロパティっぽいものや、メソッドっぽいもの、イベントっぽいものが、型が違うだけのオブジェクトとして追加されているのが判る。

因みに、ExpandoObject は、IDictionary<string, Object> を実装しているので、こんな風に一覧を取ることができるし、要素数を取得したり、要素を削除したりすることもできる。

■ 今回のまとめ

今回も、DynamicObject と ExpandoObject を使ってみた。

dynamic な動作は、実行時にオーバーヘッドが大きいので、そこは要注意だが、応用例を考えてみると面白いのではないだろうか。

2012年12月07日

[C#][dynamic] プラグイン処理

Dynamic

動的処理の一例として、今回はプラグイン処理を行ってみる。

プラグイン処理によって、アプリケーションに対して動的に機能を追加できるようにすることができる。

■ プラグイン処理の例

今回のプラグインは、以下のような規約ベースで動くものとする。

  • 実行中のプログラムがあるフォルダーの下の Plugin と云う名前のフォルダーにある dll ファイルをプラグインのアセンブリと看做す。
  • プラグインのアセンブリの中にある最初の public なクラスをプラグインと見做す。
  • プラグインは、必ず Name と云う名称を表す public なプロパティを持っている。
  • プラグインは、必ず void Run() と云う public なメソッドによって動作する。
・プラグイン処理の実装の例

では、実装してみよう。

・プラグイン側の実装の例

先ずプラグイン側だ。

プラグインは、クラスライブラリとして作成する。

public なクラスを持ち、その中には、public な Name プロパティと public な Run() メソッドを持てば良い。

using System;

public class Plugin
{
    public string Name
    {
        get { return "Sample Plugin"; }
    }

    public void Run()
    {
        Console.WriteLine("This is sample plugin!");
    }
}
・プラグインが組み込まれる本体側の実装の例

次はプラグインが組み込まれる本体側だ。

using System;
using System.IO;
using System.Linq;
using System.Reflection;

class Program
{
    // プラグインのフォルダー名
    const string pluginFolderName = "Plugin";
    // 拡張子が dll のものをプラグインと看做す
    const string pluginFileName = "*.dll";
    
    static void Main()
    {
        // プラグインのフォルダーへのフルパス名を取得し、
        var pluginFolderName = GetPluginFolderName();
        // もしプラグインのフォルダーが在ったら、
        if (Directory.Exists(pluginFolderName))
            // プラグインのフォルダーの各のプラグインのパス名を使って、プラグインを実行
            Directory.GetFiles(pluginFolderName, pluginFileName).ToList().ForEach(Run);
    }

    // プラグインのフォルダーへのフルパス名を取得
    static string GetPluginFolderName()
    {
        // 実行中のこのプログラム自体のアセンブリのパスのフォルダーの下の Plugin フォルダーへのフルパスを取得
        return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + Path.DirectorySeparatorChar + pluginFolderName;
    }

    // プラグインを実行
    static void Run(string pluginPath)
    {
        // アセンブリを読み込み、その中から public な最初のクラスを取り出す
        var pluginType = Assembly.LoadFrom(pluginPath).GetExportedTypes().FirstOrDefault(type => type.IsClass);
        if (pluginType != null)
            // インスタンスを生成し、それをプラグインとして実行
            Run(Activator.CreateInstance(pluginType));
    }

    // プラグインを実行
    static void Run(dynamic plugin)
    {
        Console.WriteLine(plugin.Name); // プラグインの Name を表示し、
        plugin.Run(); // プラグインを Run
    }
}

規約ベースなので、特にプラグイン側は interface 等は持っていないし、本体側も interface で探したりしていない。

規約通りのものを実行する。

双方が特定の interface に依存しているのでなく、規約に依存している。

こういう場合は、dynamic による処理が合っている。

・プラグイン処理の実行例

実行してみよう。

先ずは、Plugin フォルダーを準備しない儘で実行してみる。


何も表示されない。

次に、プログラムを実行しているフォルダーの下に Plugin と云う名前のフォルダーを作成して実行してみる。


矢張り、何も表示されない。

次に、クラスライブラリであるプラグインをビルドし、出来上がった dll ファイルを Plugin フォルダーの直下にコピーし、実行してみる。

Sample Plugin
This is sample plugin!

プラグインが実行された。

Plugin フォルダーの dll を二つにしてみると、

Sample Plugin
This is sample plugin!
Sample Plugin
This is sample plugin!

両方のプラグインが実行される。

・interface を用いたプラグイン処理の実装の例

因みに、interface を用いた場合の例だと次のようになる。

・interface を用いたプラグイン処理の実装の例 - interface

先ず interface をクラス ライブラリとして準備する。

public interface IPlugin
{
    string Name { get; }
    void Run();
}
・interface を用いたプラグイン処理の実装の例 - プラグイン側

プラグイン側で interface のライブラリを参照し、クラスで IPlugin を実装する。

public class Plugin : IPlugin
{
    public string Name
    {
        get { return "Sample Plugin"; }
    }

    public void Run()
    {
        Console.WriteLine("This is sample plugin!");
    }
}
・interface を用いたプラグイン処理の実装の例 - プラグインが組み込まれる本体側

本体側でも interface のライブラリを参照する。

プラグイン側と本体側が同じ interface に依存することになる。

interface を持ったクラスを探して、interface によって Name や Run() にアクセスする。

先の例と違って、dynamic は使わない。

using System;
using System.IO;
using System.Linq;
using System.Reflection;

class Program
{
    // プラグインのフォルダー名
    const string pluginFolderName = "Plugin";
    // 拡張子が dll のものをプラグインと看做す
    const string pluginFileName = "*.dll";
    
    static void Main()
    {
        // プラグインのフォルダーへのフルパス名を取得し、
        var pluginFolderName = GetPluginFolderName();
        // もしプラグインのフォルダーが在ったら、
        if (Directory.Exists(pluginFolderName))
            // プラグインのフォルダーの各のプラグインのパス名を使って、プラグインを実行
            Directory.GetFiles(pluginFolderName, pluginFileName).ToList().ForEach(Run);
    }

    // プラグインのフォルダーへのフルパス名を取得
    static string GetPluginFolderName()
    {
        // 実行中のこのプログラム自体のアセンブリのパスのフォルダーの下の Plugin フォルダーへのフルパスを取得
        return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + Path.DirectorySeparatorChar + pluginFolderName;
    }

    // プラグインを実行
    static void Run(string pluginPath)
    {
        // アセンブリを読み込み、その中から public で IPlugin インタフェイスを持った最初のクラスを取り出す
        var pluginType = Assembly.LoadFrom(pluginPath).GetExportedTypes().FirstOrDefault(type => type.IsClass && typeof(IPlugin).IsAssignableFrom(type));
        if (pluginType != null)
            // インスタンスを生成し、それをプラグインとして実行
            Run((IPlugin)Activator.CreateInstance(pluginType));
    }

    // プラグインを実行
    static void Run(IPlugin plugin)
    {
        Console.WriteLine(plugin.Name); // プラグインの Name を表示し、
        plugin.Run(); // プラグインを Run
    }
}

■ 今回のまとめ

今回は、プラグイン処理をやってみた。

interface を使ってやることもできるが、規約ベースで dynamic を使ってやる方法の方が依存関係がシンプルになる。

dynamic な動作は、実行時にオーバーヘッドが大きいので、そこは要注意だが、応用例を考えてみると面白いのではないだろうか。

2012年12月08日

[C#][Design Pattern] C# による Observer パターンの実装 その1 - 古典的な実装

Observer

Expression を使ってラムダ式のメンバー名を取得する」と云う記事で、ラムダ式の中のメンバーの名前を取得した。

これから数回に渡って、Observer パターンの C# による実装を何種類か例に挙げ、その中で上記を活用していきたい。

今回は、その第一回として、Expression どころか C# の event すら使わない、Observer パターンの最も古典的な実装を見てみよう。

■ Observer パターンとは

先ず Observer パターンの簡単な説明から。

Observer パターンは、GoF による 23 種のデザインパターンの中の一つで、特にポピュラーなものの一つだ。

・参考資料:

■ C# での Observer パターンの実装 1 - 古典的な実装

早速 C# で Observer パターンを実装していこう。

今回は、手始めに上の参考資料で紹介されているような由緒ある方法で実装してみる。

・クラス図

クラス図はこんな感じ。

「C# での Observer パターン 1 - 古典的な実装」のクラス図
「C# での Observer パターン 1 - 古典的な実装」のクラス図
・フレームワーク部 (抽象部)

上半分の青い部分がフレームワーク部分だ。

IObserver が Observable を監視している。

Observable の Add で IObserver を実装したオブジェクト (= オブザーバー) を追加する。

Observable は更新されると、以下の手順で全オブザーバーに更新があったことを通知してオブザーバーの表示が更新されるようにする。

  1. Update() を呼ぶ。
  2. Update() では NotifyObservers() が呼ばれる。
  3. NotifyObservers() は、全オブザーバーの Update() を呼ぶ。
  4. オブザーバーは、Update() の中で表示を更新する。
・アプリケーション部 (具象部)

下半分の赤い部分がアプリケーション部分だ。

Employee は Observable だ。
Model として Number と Name と云う二つのプロパティを持っている。

EmployeeView がオブザーバーだ。
EmployeeView は Employee を表示するための View で、DataSource として Employee が渡されると、Employee のオブザーバーとして自分自身を追加する。

EmployeeView は、表示部として TextControl を二つ持っていて、それぞれに DataSource の Number と Name を表示する。

・実装

それでは、実装していこう。

一部エラー処理を省略する。

・フレームワーク部の実装

先に、フレームワーク部の IObserver と Observable から実装しよう。

こんな感じだ。

// C# による Oberver パターンの実装 その1
using System;
using System.Collections.Generic;

// フレームワーク部

interface IObserver // 更新を監視する側
{
    void Update(Observable observable);
}

abstract class Observable // 更新を監視される側
{
    List<IObserver> observers = new List<IObserver>();

    public void Add(IObserver observer) // オブサーバーの追加
    {
        observers.Add(observer);
    }

    protected void Update() // 更新イベント
    {
        NorifyObservers();
    }

    void NorifyObservers() // 全オブザーバーに更新を通知
    {
        observers.ForEach(observer => observer.Update(this));
    }
}
・アプリケーション部の実装

続いて、アプリケーション部。ここには、Employee と EmployeeView、TextControl、そして Main を含んだクラス Program がある。

// C# による Oberver パターンの実装 その1
using System;

// アプリケーション部

// Model
class Employee : Observable
{
    int number = 0;
    string name = string.Empty;

    public int Number
    {
        get { return number; }
        set
        {
            if (value != number) {
                number = value;
                Update();
            }
        }
    }

    public string Name
    {
        get { return name; }
        set
        {
            if (value != name) {
                name = value;
                Update();
            }
        }
    }
}

class TextControl // テキスト表示用のUI部品 (ダミー)
{
    public string Text
    {
        set { Console.WriteLine("TextControl is updated: {0}", value); }
    }
}

class EmployeeView : IObserver // Employee 用の View
{
    TextControl numberTextControl = new TextControl(); // Number 表示用
    TextControl nameTextControl = new TextControl(); // Name 表示用

    public Employee DataSource
    {
        set { value.Add(this); }
    }

    public void Update(Observable observable) // データソースのどのプロパティが更新されてもここに来る
    {
        var employee = observable as Employee;
        if (employee != null) {
            numberTextControl.Text = employee.Number.ToString();
            nameTextControl.Text = employee.Name;
        }
    }
}

class Program
{
    static void Main()
    {
        var employee = new Employee(); // Model, Observable
        var employeeView = new EmployeeView(); // View, Observer

        employeeView.DataSource = employee; // データバインド
        employee.Number = 100; // Number を変更。employeeView に反映されたかな?
        employee.Name = "福井太郎"; // Name を変更。employeeView に反映されたかな?
    }
}
・実行結果

実行してみると、次のようになる。

TextControl is updated: 100
TextControl is updated:
TextControl is updated: 100
TextControl is updated: 福井太郎

Employee の Number や Name が更新される度に、EmployeeView の Update が呼ばれ、二つの TextControl の表示が更新される。

Number の更新でも Name の更新でも同じ Update が呼ばれている。
ここは、出来ればそれぞれ処理したいところだ。

■ 今回のまとめと次回の予告

さて、Observer パターンの C# による実装の第一回として、古典的な実装を行ってみた。

interface と抽象クラスを用いてフレームワーク部を書いている。

次回は、もう少し C# らしい、event を用いた実装をやってみよう。

2012年12月09日

[C#][Design Pattern] C# による Observer パターンの実装 その2 - event による実装

Observer

前回「C# による Observer パターンの実装 その1 - 古典的な実装」と云う記事で、Observer パターンの C# による実装の第一回として、古典的な実装を行ってみた。

interface と抽象クラスを用いた実装だった訳だが、こうした場合、C# では event を用いるのが普通だろう。

今回は、「C# による Observer パターンの実装 その2」として、event による実装を行ってみる。

■ C# での Observer パターンの実装 2 - event による実装 1

・クラス図 1

クラス図はこんな感じ。

「C# での Observer パターンの実装 2 - event による実装 1」のクラス図
「C# での Observer パターンの実装 2 - event による実装 1」のクラス図

前回 と比べるとフレームワーク部 (抽象部) が無くなっているのが判る。

C# が持っている event が強力なので、それだけで更新によって呼ばれるべき処理が呼べてしまうのだ。

Employee は Model として Number と Name と云う二つのプロパティを持っている。

また、Employee は Update というイベントを持っている。
Employee は更新されると Update イベントを起こす。

Update イベントが起きたときに、もしそのイベント ハンドラーがあれば、それが呼ばれる。

EmployeeView は Employee を表示するための View で、DataSource として Employee が渡されると、Employee の Update イベントにイベント ハンドラーとして Update メソッドを設定する。

EmployeeView は、表示部として TextControl を二つ持っていて、それぞれに DataSource の Number と Name を表示する。

・実装 1

それでは、実装していこう (一部エラー処理を省略)。

// C# による Oberver パターンの実装 - event による実装 1
using System;
using System.Collections.Generic;

// アプリケーション部

// Model: 更新を監視される側
class Employee
{
    public event Action<Employee> Update; // 更新イベント

    int number = 0;
    string name = string.Empty;

    public int Number
    {
        get { return number; }
        set {
            if (value != number) {
                number = value;
                if (Update != null)
                    Update(this);
            }
        }
    }

    public string Name
    {
        get { return name; }
        set {
            if (value != name) {
                name = value;
                if (Update != null)
                    Update(this);
            }
        }
    }
}

class TextControl // テキスト表示用のUI部品 (ダミー)
{
    public string Text {
        set { Console.WriteLine("TextControl is updated: {0}", value); }
    }
}

class EmployeeView // Employee 用の View: 更新を監視する側
{
    TextControl numberTextControl = new TextControl(); // Number 表示用
    TextControl nameTextControl = new TextControl(); // Name 表示用

    public Employee DataSource
    {
        set {
            value.Update += Update; // データソースの更新イベントにハンドラを設定
        }
    }

    void Update(Employee employee) // データソースのどのプロパティが更新されてもここに来る
    {
        numberTextControl.Text = employee.Number.ToString();
        nameTextControl.Text = employee.Name;
    }
}

class Program
{
    static void Main()
    {
        var employee = new Employee(); // Model, Observable
        var employeeView = new EmployeeView(); // View, Observer

        employeeView.DataSource = employee; // データバインド
        employee.Number = 100; // Number を変更。employeeView に反映されたかな?
        employee.Name = "福井太郎"; // Name を変更。employeeView に反映されたかな?
    }
}
・実行結果

実行してみると、次のようになる。

前回と同じ結果だ。

TextControl is updated: 100
TextControl is updated:
TextControl is updated: 100
TextControl is updated: 福井太郎

今回も矢張り、Employee の Number や Name が更新される度に、EmployeeView の Update が呼ばれ、二つの TextControl の表示が更新される。

■ C# での Observer パターンの実装 2 - event による実装 2

上では、Number と Name のどちらが更新されても両方の TextControl が更新されている。

これは、Number と Name のどちらが更新されても同じイベントが起きるようになっている為だ。

更新イベントを分けて、それぞれの TextControl が更新されるように改良してみよう 。

・クラス図 2

クラス図はこうなる。

「C# での Observer パターンの実装 2 - event による実装 2」のクラス図
「C# での Observer パターンの実装 2 - event による実装 2」のクラス図

一つだった Employee 側の Update イベントが、UpdateNumber と UpdateName に分かれている。

・実装 2

それでは、実装してみよう (一部エラー処理を省略)。

// C# による Oberver パターンの実装 - event による実装 2
using System;
using System.Collections.Generic;

// アプリケーション部

// Model: 更新を監視される側
class Employee
{
    public event Action<Employee> UpdateNumber; // Number 更新イベント
    public event Action<Employee> UpdateName; // Name 更新イベント 

    int number = 0;
    string name = string.Empty;

    public int Number
    {
        get { return number; }
        set {
            if (value != number) {
                number = value;
                if (UpdateNumber != null)
                    UpdateNumber(this);
            }
        }
    }

    public string Name
    {
        get { return name; }
        set {
            if (value != name) {
                name = value;
                if (UpdateName != null)
                    UpdateName(this);
            }
        }
    }
}

class TextControl // テキスト表示用のUI部品 (ダミー)
{
    public string Text {
        set { Console.WriteLine("TextControl is updated: {0}", value); }
    }
}

class EmployeeView // Employee 用の View: 更新を監視する側
{
    TextControl numberTextControl = new TextControl(); // Number 表示用
    TextControl nameTextControl = new TextControl(); // Name 表示用

    public Employee DataSource
    {
        set {
            // それぞれの更新イベントでそれぞれ TextControl を更新
            value.UpdateNumber += employee => numberTextControl.Text = employee.Number.ToString();
            value.UpdateName += employee => nameTextControl.Text = employee.Name;
        }
    }
}

class Program
{
    static void Main()
    {
        var employee = new Employee(); // Model, Observable
        var employeeView = new EmployeeView(); // View, Observer
    
        employeeView.DataSource = employee; // データバインド
        employee.Number = 100; // Number を変更。employeeView に反映されたかな?
        employee.Name = "福井太郎"; // Name を変更。employeeView に反映されたかな?
    }
}
・実行結果

実行してみると、次のようになる。

Number と Name それぞれの更新で、それぞれの TextControl が更新されている。

TextControl is updated: 100
TextControl is updated: 福井太郎

それぞれで更新されるようになったのは良いが、Employee 側でプロパティ毎にイベントを用意しなければいけない。

これではプロパティの数が増えてくると、コードが複雑になりそうだ。

■ 今回のまとめと次回の予告

さて、Observer パターンの C# による実装の第二回として、C# の event を用いた実装を行ってみた。

前回のようなフレームワーク部がない。

次回は、フレームワーク部を復活させてみる。

2012年12月17日

[C#][Design Pattern] C# による Observer パターンの実装 その3 - 複数のプロパティの更新イベントをフレームワーク側で振り分け

Observer

前回「C# による Observer パターンの実装 その2 - event による実装」と云う記事で、Observer パターンの C# による実装の第二回として、C# の event を用いた実装を行ってみた。

event を用いることで、より C# らしい実装となった。

C# での Observer パターンの実装 1 - 古典的な実装」のフレームワーク部にあたる部分を C# の event 機構で行ってしまっている訳だ。

すっきりとした実装となったが、監視される側 (Observer 側) でプロパティ毎にイベントを用意しなければいけない、という面があった。

「プロパティの数が増えてくると、コードが複雑になりそう」と云う点が気になった。

そこで、今回は、「C# による Observer パターンの実装 その3 - 複数のプロパティの更新イベントをフレームワーク側で振り分け」として、その2で無くなったフレームワーク部を復活させ、そちらに複数のイベント処理を任せてみる。

■ C# での Observer パターンの実装 3

・クラス図 1

今回のクラス