inohilog

/var/log/inohiro

Visual Studio 2010 Ready Day に行ってきた

行ってきたのは4月13日(火)。だらだら書いてたら1週間かかってしまいました。公式サイト: http://www.microsoft.com/japan/msdn/vstudio/2010/readyday/
VS2010世代(.NET4)の知識がほとんどないので、少しでも勉強しなくてはと思い、平日だけど行ってきました。MSのイベントはReMIX Tokyo 09 以来かな。会場はReMIXと同じ東京ミッドタウン
普通に私服で行ったんですが、スーツの人が7,8割くらい。たぶん他に学生はいなかっただろうなあ。dynamic型とかF#の話とかあるかな、と思いきや、やっぱり業務アプリ向け?の話題が中心でした。
ASP.NETの地味な進化(MVCの方じゃなくて)と並列プログラミングが面白かったです。早速遊んでみよう。

以降、まとめ。

キーノート: 未来はコードで創られていく

午前中の授業を優先して行かなかった。

セッション: "4"の時代の次世代Web開発

主にASP.NET MVC 2.0の話かと思いきや、jQueryの標準搭載とかIntelliSenseのJavaScript対応(対応は前からしてたかな?改善/改良?)とか。

ASP.NET 全般
  • HTML標準への対応(HTML 4.01, XHTML 1.0/1.1, IE6)
  • CSS標準への対応(CSS 1.0/2.0/2.1, IE6)
  • jQueryのサポート(標準搭載)
    • IntelliSense, CodeSnippet(JavaScript, HTMLでも使える)
  • ASP.NET でのasp:hogeが変換されてでてくるHTMLをXHTML 1.0 Strictとして生成
    • Web.configで指定
<system.web>
  <pages controlRenderingCompatibilityVersion="4.0" />
<system.web>
ASP.NET(Webフォーム)における追加・改善点
  • ClientIDModeプロパティの追加
    • クライアントID(asp:hogeで指定したIdが、生成されたHTMLでどうなってるか、の指定ができるようになった)
    • AutoID, Predictable, Static, Inherit
  • ViewStateModeプロパティの追加
    • ViewState が肥大化する問題を解決
    • コントロール, ページ単位で指定する事ができる
  • RenderOuterTableプロパティの追加
    • ちょっとよくわからないが、レイアウトにTableタグやインラインのスタイル属性指定を使ったHTMLを出力しないようにするプロパティ
    • FormView, Login, PasswordRecovery, ChangePassword コントロールで利用可能
ASP.NET MVC 2.0
  • ASP.NET MVS 2 からVisual Studio 2010(.NET Framework 4)から標準搭載
    • HTMLベースのUI開発が間単に
    • UIと処理ロジックを疎結合に保つ(命名ルールによってモジュールごとを結びつける, コードや設定ファイルが必要ない)
    • 単体テストを簡単に。テスト駆動開発を簡単に
    • URLルーティングができるようになった
  • Htmlヘルパー(HTML生成を助ける関数群)
  • DataAnnotations validations(モデル中心のHTML生成と入力検証ルール)
  • Areas
    • 単一MVCプロジェクト内でアプリケーションを分割(AreaRegistration.RegisterAllAreas())
  • TemplateHelpers
    • Auto-Scaffold UI Helper
  • RenderAction
  • AsyncController
    • 非同期アクションメソッド呼び出しのサポート
  • デフォルト値(これはC# 4.0の機能かな?)
  • 新しいHTTP Method 属性
    • HttpPost, HttpGet, HttpPut, HttpDelete
jQuery
Webアプリケーションの配置
  • Web.config ファイルをDebug, Releaseなどのビルド設定ごとに変換ルールを定義可能になった
  • アプリケーションの圧縮ファイル作成(Zipファイル形式)
  • ワンクリック発行
その他
  • 新しい HTML Encoding 構文
  • 新しいサーバーコントロール
    • Chart, QueryExtender

セッション: "7"時代の次世代Windows開発

チャートコントロール(Chart)
WPF アプリケーション
  • これまでのWindows Formsアプリケーション開発とそん色ないレベルまできた
    • デザイナからダブルクリックでイベントハンドラを記述
    • Calendar, DatePicker コントロールが新たに追加された
  • WPFデータグリッド
    • カラムの自動生成(テキストボックス, チェックボックス, コンボボックス, ハイパーリンク
    • 各種機能(行ヘッダ, 列ヘッダ, 行高・列幅の変更, 列の並び替え, ソート・フィルタ)
  • WindowsFormsとの連携
データアクセス
  • Entity Framework
    • 新たなデータモデルの採用(Entity Data Model(XMLベース))
  • ObjectContent 経由の容易なデータアクセス
  • 新しいクエリ言語の採用(Entity SQL, LINQ to Entity)
アプリケーションの配置
  • インストーラプロジェクトが新しくなった
  • ノータッチデプロイメントの廃止
  • WPFブラウザアプリケーション(XBAP)での「完全信頼モード」の追加
  • ClickOnceの強化
  • クライアントプロファイル
    • アプリケーション配布時のラインタイムサイズの削減
  • セキュリティモデルの変更
    • Security Transparency Level2(レベル2透過性モデル)の採用(Silverlightと合わせるため?)
.NET Framework 4 での機能
Windows アプリケーション開発
  • 新しいタスクバー, リボンインタフェースをOSが提供, センサー・ロケーションAPIの提供, などなど。。
  • マルチタッチのサポート
  • WPFなら簡単に開発できますよ

セッション: Silverlight4 データ駆動アプリケーション開発

普通に開発できる基盤を目指した(Visual Studio 2010)
  • Windows Forms 同様、デザイナからのダブルクリックでイベントハンドラを記述(WPFと一緒)
  • ドラッグ&ドロップによるデータバインド, WPFとバージョン番号を揃えたためアセンブリ互換(何がうれしいのかよくわからない)
Silverlight アプリケーション開発
  • Silverlight におけるデータアクセスは、Web上のリソースを利用する(RDBに直接接続ということは考えられない)
    • WCF(ASMX, SOAPベース)もしくはWCF Data Services(Restful)による通信
    • サービスはすべて非同期
WCF Data Services
  • ADO.NET Data Services
  • RESTベース(OData形式)のサービスとして、リソースを公開する
    • RESTful(HTTPメソッドによるCRUD処理, Resource Oriented Architecture)
    • AtomPubの拡張セット
    • OData形式をさまざまな製品で横断的に利用する予定らしい
      • HTTP/REST(デバイス, RDB, OS, Cloud, UI)
サービスの選択
  • WCF Data Services(CRUD処理)
    • メリット: サービスのエンドポイントが少ない, クライアントの変更管理が可能(?
    • デメリット: 複雑な処理をURI(URL)で表現するため実装が冗長
  • WCF, ASMX(OLTP処理)
    • メリット: 複雑な処理が実装可能
    • デメリット: サービス参照のエンドポイントが多くなる可能性がある, クライアントの変更管理を実装する必要がある(?
データバインディング
  • System.Windows.FrameworkElement
  • DependencyObject
  • IDataEfforInfo Interface, INortifyDataErrorInfo Interface の追加
  • バインディングプロパティの追加: StringFormat, TargetNullValue, FallbackClick
  • INortifyPropertyChange Interface
  • M-V-VM Pattern
その他
  • RichTexttArea
  • 印刷のサポート: PrintDocument
WCF RIA Services
  • 非同期データ処理, データサービスの使い分け, 複数のレイヤにまたがるデータ処理(クライアント・サーバー間でロジックの分割)
  • サーバーのロジックをクライアントへ射影
  • 非同期, データ処理のカプセル化

セッション: Visual Studio 2010 & .NET 4 時代の並列プログラミング

並列101
  • ムーアの法則: プロセッサ周波数のアップから、メニーコアへのシフト
  • アムダールの法則: どんなに多数のプロセッサで並列に処理しても、直列部分は変わらない
  • 並列(Parallel)と同時実行(Concurrency; 平行とも)
    • 並列: 独立な要求を同時に実行(Webサーバーとか)
    • 同時実行: 一つのの要求(タスク)を可能な並列実行に分解して実行
Visual Studio 2010 と .NET 4
  • 並列ライブラリ
    • タスク並列ライブラリ(TPL
      • タスク並列: task_handle, task_group
      • データ並列: paralelle_for, parallel_for_each, parallel_invoke
    • 並列パターンライブラリ(PPL)(System.Threading.Tasks 名前空間
      • Task, Task, TaskFactory, TaskScheduler, Parallel(Parallel.For, Parallel.Foreach, Parallel.Invoke)
    • エージェントライブラリ, PLINQ
  • 同時実行可能なデータ構造
    • 同時実行キュー, 同時実行バッグ
  • 同時実行ランタイム
    • スレッドプール + ワークスチーリング, 同時実行ランタイム + UMS
  • 並列ツール
    • 並列デバッガ, 並列プロファイラ
カーネルモードスケジューラ
  • プロセスをたくさん作るのは高コスト
  • プロセスはプロセッサのコア数に応じた数にし、分割可能なタスクを各スレッドに分割に分け与える
  • CLR スレッドプール, ワークスチーリング
    • CPUのキャッシュを考慮したローカルワークスチーリングキュー
    • ワーカースレッドAのタスクをBがスチール、など
MyParallelForeach
  • 面白かった
  • 仕事をプロセッサコア数で割ってThreadでやるだけじゃだめ
  • ワークスチーリングで手が空いたワーカープロセスにタスクを取ってくる
PLINQ
  • Parallel LINQ to Object
    • 宣言型データの並列化
    • すべての.NET標準クエリ操作をサポート
    • 既存のLINQモデルへの影響は最小
      • var q = from p in people .AsParallel() ...
協調型データ構造(.NET)(System.Collections.Concurrent 名前空間
  • スレッドセーフコレクション
    • ConcurrentBag, ConcurrentStack, ConcurrentQueue, ConcurrentDictionaly
  • プロデューサ & コンシューマ
    • BlockingCollection, IProducerConsumerCollection
  • 分割
    • Partitioner, Partitioner, OrderablePartitioner
同時実行コンテナ(Win32
  • Concurrent_Queue
  • Concurrent_Vector