PDC 2008 (10/29)

今日のキーノートは Microsoft Research(MSR) の Rich Rashid でした。MSRのミッションは以下のものだそうです。

  • Expand the State of the art in each of the areas in which we do research
  • Rapidly transfer innovative technology into Microsoft products
  • Ensure Microsoft products have a future

ヘルスケア、エネルギー効率コンピューティングのSensorMap, プログラミング教育のBOKU, 次世代Surfaceのようないくつかの研究がデモンストレーションされました。

PDC08 002  PDC08 008 PDC08 009 PDC08 010

今日は以下のセッションに参加しました。

  • Parallel Programming for Managed Developers with the Next Version of Microsoft Visual Studio
  • Windows 7: Design Principles for Windows 7
  • Windows 7: Introducing Direct2D and DirectWrite
  • Deep Dive: What's New with user32 and comctl32 in Win32
  • Windows 7: Introducing The Windows Scenic Ribbon

Parallel Programming for Managed Developers

最初に16コアのレイトレースのデモが行われ、並列化のメリットが強調されました。並列化は「パフォーマンスの向上」と「新しいUXの創造」だと述べていました。

それ以降は4コアのPCで2分木のトラバースでデモが行われました。最初に全て別スレッドで行い、効率が悪いことを見せました(すべてのスレッドがかなりのメモリーを消費するため)。そのあとでタスクで行えば、CLRスレッドプールで自動的にシステムに適切なスレッドにタスクが割り当てられるので、効率的に並列化できることを示しました。TaskクラスとFutureクラスが使えるそうです。

構造化並列化としてParallelクラスが紹介され、Parallel.ForReach()メソッドのデモが行われました。最後にPLINQのデモが行われLINQ構文に .AsParallel() を付けるだけで簡単に並列化できることを紹介しました。並列化できるデータでなければなりませんが... 参照URLはhttps://msdn.microsoft.com/concurrency/ です。

PDC08 011  PDC08 014

Design Principles for Windows 7

文字通りデザインの話でした。デザイン原則は以下のとおりだそうです。

  1. デザインを考慮するためのフレームワーク
  2. デザイン作成プロセスの重要部分
  3. UX成功を評価するためのツール

Windows 7 の原則は以下のとおりです

  1. 信頼性を向上させるためにコンセプトを小さくした
    • シンプルにした(ex.メールを読む方法が多数あったが1つにした)
  2. 小さな問題、Good and Bad
    • ex.エクスプローラにより多くの写真が表示できる
  3. 喜び
    • ex.タスクバーアイコンの背景が、異なる色で、マウスに合わせてハイライトする
  4. 発見ではなく、混乱を解決
    • ex. ジャンプボタン、タスクバーアイコン、マウスを右隅に置くとデスクトップが見える
  5. 時間、すぐに使えるように
    • プリンタの共有にVistaは30-40ステップだが、Windows 7は3-5ステップ
  6. アプリのすべてのライフサイクルでエクスペリエンスを向上
    • インストールから、最初の使用・パーソナライズ、日々の使用、ヘルプ、アンインストール・アップデート
  7. 「Look」and「Go」
    • ex. 携帯を接続するとすぐアイコンが表示され、設定ができる

PDC08 017 PDC08 019

Introducing Direct2D and DirectWrite

昨日発表された Windows 7 に追加される新しいネイティブ API です。Direct2D は2次元のグラフィックス レンダリングで、DirectWrite はテキストレンダリング用にその上に乗るスタックです。GDI、Direct3Dとインターオペラビリティを持ち、Direct3D 10.1 上に構築されているので GDI/GDI+よりCPUの負荷が低くなります。ハードウェアアクセラレーションされますが、ソフトウェアだけでも動作します。Windows Vista まではサポートする予定はあるようです。ネイティブのAPIは以下のように選択してくださいとのことでした。GDI/GDI+はレガシーとなります。

  • ディスプレイ / デバイス→DXGI
  • 印刷→XPS
  • 画像のエンコード/デコード→WIC
  • 2Dグラフィックス→Direct2D
  • テキスト フォーマット→DirectWrite
Direct2D のAPI
  1. ID2D1FactoryインターフェイスからID2DHwndRenderTargetを作成
  2. ID2D1Geometryで経常リソースを定義
  3. BeginDraw(), FillGeometry(), EndGeometry() メソッドで描画

D3DDeviceを作らないだけで、Direct3Dの使い方と似ていますね。GDIとのインターオペラビリティにはIGdiRenderTargetを使い、D3DとのインターオペラビリティにはCreateDxgdiSurfaceRenderTargetを使う。これはD3D10とD3D9デバイスで使えます。

DirectWrite のAPI

IDWriteFactoryで作成し、IWriteTextFormatでフォント指定などのフォーマットを行い、IDWriteTextLayoutでサイズやイタリックなどの書式を指定し、DrawTextLayoutで描画します。ID2D1RenderTargetのメソッドにDrawText(), DrawTextLayout(), DrawGlyphRun()のメソッドがあるので、これを使うこともできます。HFONTとIDWriteText/IDWeiteFontFace間でインターオペラビリティがあるそうです。

Direct2D と DirectWrite とは別に UI アニメーション用のネイティブ API もあるそうです。

右下の写真で、上がGDIで下がDirectWriteです。GDIではずれている表示もDirectWriteでは正しく表示されます。

PDC08 020 PDC08 021

What's New with user32 and comctl32 in Win32

既存のUI系のAPIであまり知られていないものを紹介するという、ちょっとおたくっぽいセッションでした。以下のものをデモ付きで紹介していました。

  1. Double buffered Painting
  2. Cross-Fade Animation Helper
  3. List View Tiles
  4. List View Grouping
  5. Cue Banners
  6. Alpha Blending Menu Bitmap
  7. Icon Scaling
  8. Program Activation

PDC08 022

Introducing The Windows Scenic Ribbon

Windows 7 で採用されるリボン用のネイティブAPIの紹介でした、Windows Scenic Ribbon と呼ぶそうです。Vista でも使えるようにするとのことです。WPF ではマネージ ラッパーでサポートされ、ネイティブでは MFC と Win32 で使えるそうです。

MVCモデルで、WPFと同じようにコードとマークアップで記述し、小さなC++APIがあります。残念ながらマークアップはXAMLではありません。XMLなのでXAMLと非常に似ているが、XAMLではないのは、WPFとは異なるテクノロジーのため同じにはできなかったと言い訳していました。

ローカライズ可能で、カスタムコントロールも可能、アニメーションもできる。しかし今のところデザインツールはないので、XMLを編集するしかないとのことです。当然ですがOfficeのライセンスをとる必要はありません。ガイドラインは https://msdn.microsoft.com/en-us/library/cc872782.aspx (英語)とのことでした。

PDC08 024 PDC08 026 PDC08 027 PDC08 028

PDC Marketplaceでは、書籍やTシャツ、MS ロゴグッズなどが販売されていました。同じ場所でExpansys社が携帯電話を売ってました。

PDC08 023

このブログはマイクロソフトの公式アナウンスではありません。

[追記] Channel9 へのリンクを追加しました。