ページ

ラベル WinRT の投稿を表示しています。 すべての投稿を表示
ラベル WinRT の投稿を表示しています。 すべての投稿を表示

2014年11月18日火曜日

[勉強会] めとべや東京 #6 に参加しました

2014/11/15 飯田橋の IIJ さんの部屋を借りて開催された「めとべや東京 #6」に参加しました。めとべや大阪 の勉強会は何度も出たことがありますし、スピーカーも何度もしています。しかし、東京は今回が初めてです。翌日に東京で用事があったため、前入りして参加してみることにしました。

今回は、いろいろなアプリを開発してる方の開発秘話や苦労話など生の情報を聴けるセッションとのことでした。
実際その通りで、ネタ満載のセッションや結構技術的な細かいところにスポットをあてたセッションなど盛りだくさんでした。
ただ、実は朝まで仕事してて出発するのが遅くなってしまったため最初のマイクロソフト田中さんのセッションがほとんど聞けませんでした。残念。自分のせいなので仕方ありませんが。

おもしろかったのは Mac の方がほとんどいなくて、Windows 系のタブレットの方がとても多かったこと。Surface の方も結構いました。先週の Xamarin 勉強会のときはほとんど全員が Mac だったのに。

セッション後は近くの中華料理屋さんで懇親会。こちらもとても盛り上がりました。

ところで 2週間後の 11/29 には大阪で「Room metro #28」が開催されます。今回は XAML Day ってことで XAML をテーマにした勉強会です。XAML をテーマにした勉強会にするっていうのは以前から決まっていて、そんなところに先週開催された Connect(); にあわせて「The Roadmap for WPF」なんてものが公表されました。今後 WPF にさらに機能追加もするし、パフォーマンス向上なども進めていくなんてあって、一部では「WPF 大勝利」なんて話題になりました。その WPF の中でもとても重要な位置を占める XAML がテーマです。そして C# で iOS や Android アプリが作れるということで昨今とても話題になっている Xamarin も Xamarin.Forms (ビュー部分の作成も iOS、Android、Windows Phone で共通化できるという機能)でも XAML を使います。そんな XAML がテーマです。
というわけで、興味がある方はぜひ参加してみてください。まだサイトには載ってませんが私もスピーカーさせて頂くことになりました。(濃い~ところの話をしたらいいのかと思っていたら、入門編でお願いしますってことなので、おもいっきり入門的なところでいきます)

2013年3月21日木曜日

[VS] Google Crash Handler が動いていると Visual Studio の XAML UI デザイナーがハングする?

2月後半くらいからこの現象が出るようになって困ってました。

  1. Windows 8 上の Visual Studio 2012 を起動。(私が使ってるのは Ultimate。他のエディションは不明)
  2. 「ファイル」-「新規作成」-「プロジェクト」 で Visual C# の 「Windows ストア」 で 「新しいアプリケーション (XAML)」 を作成。
  3. プロジェクトができたらソリューションエクスプローラーで MainPage.xaxml をダブルクリックして XAML UI デザイナーを開く。
  4. XAML UI デザイナーのどこかをクリック。

これで、Visual Studio がハングしてどうしようもなくなります。
私の環境では 100% こうなります。
同じような環境が 2つ(デスクトップ PC とノート PC)がありますがどちらも 100% 発生します。
上記では例として新規作成のプロジェクトにしましたが、既存のプロジェクトを開いて XAML UI デザイナーをクリックしても同様です。
何かに時間がかかっているだけかと思い 10分以上放置してみたこともありますが何ともなりませんでした。
ちなみに、WPF のデザイナーでは問題はでません。問題が出るのは Windows ストアーのデザイナーだけのようです。

この状態になったら以下の方法で部分的に復旧させることができます。

  • タスクマネージャーを開き 「Microsoft Visual Studio XAML UI Designer (32 ビット)」 という名前のプロセスを終了させる。

どうやら XAML UI デザイナーは別プロセスになっているようで、こうすると Visual Studio が操作できるようになります。
ただし、XAML UI デザイナーは死んだ状態なので下図のようになりデザイナーは使えません。

XAML_UI_Designer_Hangup.png

デザイナーは使えませんが、XAML を手書きはできますし、XAML UI デザイナー以外の部分は問題ないのでとりあえずこれで使ってました。(最近は XAML UI デザイナーが必要なことはあまりやってなかったのでこれで何とかなってた)

けど、これはさすがに不便なので解決策を探ることに、、、
まず手始めに何かのプロセスが影響を与えていないことを確認するためにタスクマネージャーで殺せるプロセスはみんな殺す。。。あれ?動くようになったぞ?
いきなりビンゴ。あとはどのプロセスが原因になっているのかを特定するため地道に試していくと、、、

  • タスクマネージャーで 「Google Crash Handler (32 ビット)」 という名前のプロセスを終了させれば Visual Studio 2012 の XAML UI デザイナーがハングしなくなる。

でした。

Google Crash Handler が何なのかはわかりません。(まぁ、名前的にクラッシュを検出してレポートするためのものなんでしょうが。そんなものが Visual Studio をハングさせてしまうというのも皮肉な話)
また、何を入れると入るのかもわかりません。Google 日本語入力(Google IME)、Chrome、Google Toolbar あたりだとは思いますが。
ちなみに、GoogleCrashHandler.exe は バージョン 1.3.21.135 で、タイムスタンプ 2013/02/06 08:21 でした。

と、冷静にまとめましたが、原因が特定できたときには思わずガッツポーズしちゃいましたよ(笑)

2013年3月20日水曜日

[勉強会] Room metro #14 大阪に行ってきた

3/16 開催の「Room metro #14 大阪」に参加してきました。
場所は淀屋橋の IIJ さんの会議室。人数の割には広めの会議室で、無線/有線 LAN もあり、UStream 配信も OK というすばらしい環境。(配信設備は自前で用意する必要があるけど、結局それも IIJ の方に(個人的に)借りたのかな?)

どのセッション・LT もとてもおもしろかったです。

  • TypeScript はおもしろそうだし使ってみたいとは思ってるんだけど。node.js + TypeScript とかおもしろそうだし。
  • Direct3D はやっぱりめっちゃおもしろいよな。なんかやってみたい。
  • ちょっとしたデータを保存するには SQLite 便利っすよ。
  • P●P→C# ってよりやっぱり設計が大事っすよね。うん、大事。
  • やっぱりどうせアプリ作るなら最低限英語版は作んないとなぁ。
  • VAIO Tap 20 を持ち歩いてたら目立つだろうなぁ。けど、あれを電車の中に持ち込むのはちょっとw

で、今回 SQLite をネタにセッションをさせて頂きました。セッション資料を下に貼り付けておきます。
最初は 30分くらいのセッションのつもりだったので軽く SQLite を紹介する程度のつもりだったんですが、あとで「50分で」と聞いたので関連するネタを追加したんですね。前日は東京出張だったので新幹線の中で考えてました。(ファイルピッカー使っても一部のフォルダーしか見えないデモとか、PC 側で壁紙を変えると Surface 側も自動的に変わるとか、ARM バイナリーを Surface でリモートデバッグするとか、が追加したあたりのネタ)
んが、ちょっと追加しすぎて、というか、話してたら調子にのっちゃって時間をオーバーしちゃいました。てへぺろ(・ω<)

終わったあとは懇親会。
これも楽しかった。

2012年10月22日月曜日

[WinRT] ページの内容の保存は自分でやるべきなの?

Windows ストアアプリでページの内容を保存するのに NavigationCacheMode プロパティを使うと簡単という記事を結構見かけるんですがそれはまずい(場合もある)んじゃないかと思ってるんですがどうなんでしょう? @IT の 画面遷移する前の状態を保持するには?[Win 8] とか。

NavigationCacheMode は Page のインスタンスをメモリに取っておいて、次回同じ Page の場合はそれを使いまわすってだけです。なので、アプリが終了すれば当然キャッシュは無くなってしまいます。
で、Windows ストアアプリの大きな特徴として、バックグラウンドに回ってるアプリはいつの間にか終了させられることがあるってのがあります。
Windows ストアアプリのライフサイクルについては アプリに対する “常に動作している” 感覚を重視したアプリ ライフサイクルの管理 とか アプリケーションのライフサイクル (Metro スタイル アプリ) とか。前者の記事には 「ただし、Windows がシステム リソースを解放するためにアプリを終了する場合に備えて、このデータは保存しておく必要があります」 とあります。中断したときにいつ終了してもいいようにデータは保存しとけってことです。
けど、Metro スタイル アプリからメモリを回収する にあるようにメモリ不足になってもワーキングセットをスワップアウトすることによって可能な限り終了しないようになっているそうです。
ここまで OS 側でがんばってくれてるなら、横着して NavigationCacheMode を使うだけでもいいのかなぁという気もしないでもない感じです。もちろん、電源が切られたときはメモリ上の情報は無くなってしまいますから、そういった場合でもデータを残しておいたほうがいいアプリはきちんとファイルに保存しておく必要があるでしょう。結局、ケースバイケースでうまいことやるってことになるんだと思います。
ガイドライン的には中断したときに終了に備えてちゃんとデータを保存しとけってことになっていますので、やっぱりそれが一番いいんでしょう。アプリの中断と再開のガイドライン (Metro スタイル アプリ)

ちなみに、ページの内容を保存するのは SuspensionManager を使うのが簡単だと思います。これについても @IT に解説記事があります。起動時に以前の画面を復元するには?[Win 8]

2012年10月16日火曜日

[勉強会] 先月に続きメトロスタイルアプリ エキスパート塾++2 に行ってきた

書くのがちょっと遅くなりましたが 9月26日(水) 19時~21時に開催されたメトロスタイルエキスパート塾の第2回に行ってきました。

MetroStyleDeveloper (プチ) #06 大阪 ~メトロスタイルアプリ エキスパート塾++2~

各自開発環境の入った Windows 8 を持ってきてその場で実際にコードを書いてみようというハンズオン形式の勉強会。
場所は 1回目と同じく梅田のフェンリルさんの会議室をお借りして。

今回は私がスピーカー役で 「SharpDX を動かしてみる」 というテーマのハンズオンです。
SharpDX というのは DirectX をマネージドで使えるようにラップしたオープンソースのライブラリです。Windows ストアーアプリ(以前の MetroStyle アプリ)にも対応しています。なので、これを使えば Windows ストアーアプリでも C# で DirectX が使えます。
私自身が興味があったのでこのテーマを選びました。

が、正直、ちょっと無茶だったかなぁ。
DirectX といってもいろいろな機能がありますが、今回は SharpDX 経由で Direct3D を使って簡単な図形(三角形の面を一つだけ) を表示してみるっていうハンズオンにしたんですが、あらためてやってみるとこれだけでも

  • SharpDX はマネージドで書けるといっても、コード的にはほぼ C++ で DirectX を使うときとほとんど同じなのでどうしてもコード量が多くなる。Direct3D デバイスの初期化やら、ポリゴンの用意やら、レンダリングのためのコードやら、最低限動くようにするだけでもそれなりのコードが必要。
  • 三角形の面を一つだけといってもポリゴンを描画するのには変わりないので、きちんとやるならワールド - ビュー – プロジェクションといった座標変換が必要になる。コード自体はたいした行数ではないけど、その意味を説明するには行列演算のこととかを説明しなくちゃいけない。今回は 「ポリゴンを見える位置に持ってくるためにちょっとした計算をしてやります」 程度の簡単な説明だけで済ませた。
  • 今の Direct3D をやろうとするとシェーダーランゲージ(HLSL)が必須になる。今回は 「GPU での計算のために別の言語が必要になります」 だけにして、シェーダー自体は .cso ファイルをコピーしてもらってそれを使うようにしてもらった。
  • コード量を減らすためにレンダーターゲットのキャッシュとか全然してないのでパフォーマンス悪い。あと、Dispose() とかも省略しちゃってるところもあるのでメモリやリソースが枯渇して死んじゃうこともあるかも、というあんまりよろしくないコードになってる可能性あり。

といった感じで 85分間程度のハンズオンでやるのはちょっと無理があったなぁ、と。
そもそも、これって SharpDX == DirectX のハンズオンであって、Windows ストアーアプリとかほとんど関係なくね?という感じになっちゃいました(苦笑)
そんな内容ではありますが、一応 PowerPoint の資料を下に貼り付けておきます。ハンズオン用の資料なので説明もほとんどありませんし、上記のようにあくまで最低限なコードですが。

10/22 追記
サンプルプロジェクト(Visual Studio 2012 のプロジェクト)を SkyDrive にあげておきました。
SurfaceImageSourceSample.zip
ハンズオンで使用したものよりちょっとだけコメント増やしたり、単なる三角形を三角錐にしたり、隠面処理されるようにステンシルバッファ(深度バッファ)も使うようにしたりしてありますが、基本的にはハンズオンで使用したコードとだいたい同じです。(なので、パフォーマンスがイマイチ出てないとか、本当なら Dispose() しなくちゃいけないのにしていないとかもそのままなので注意)
ここまで追記

終了後は何人かでカレー屋に遅めの夕食を食べに行き解散。(カツカレーが話題になっていた日でしたのでw)

次回の開催もすでに募集が始まっていますので興味のある方はぜひ。
MetroStyleDeveloper (プチ) #07 大阪 ~メトロスタイルアプリ エキスパート塾++3~

 

2012年9月7日金曜日

[勉強会] メトロスタイルアプリ エキスパート塾++1 に行ってきた

8/30(木) PM7~9
MetroStyleDeveloper (プチ) #05 大阪   ~メトロスタイルアプリ エキスパート塾++1~
に参加してきました。
場所は梅田のフェンリルさんの会議室をお借りして。フェンリルさんと言えば有名ブラウザーのスレイプニルを作っているところですね。
スピーカーがしゃべるだけというセッション形式ではなく、説明を聞きながら各自実際にコードを書き進めるというハンズオン形式です。なので、みんな Windows 8 と Visual Studio 2012 が入った PC を持参です。

今回のテーマはさおさんの 「WinRT 実践~C++/CX編~」
実におもしろかったです。
C++ さわったのは久しぶりだったんですが、C++11 の auto とかラムダ式とかの新しい構文と、C++/CX の ref new とか String^ とかで、正直何が何やら状態(笑)
メインテーマは C++/CX での非同期処理の書き方(ppltasks.h の then とか)とかだったんですが、さおさんの説明もわかりやすく、進め方もうまかったので、みんなで 「ほぇ~、こんな書き方するのかぁ」 なんていいながら、ああでもない、こうでもないとやっているとあっという間に終了時間になっちゃったという感じでした。

そういや、Visual Studio 2012 のソリューションエクスプローラーでは Assets フォルダーが 「資産」、Common フォルダーが 「共通」 なんて表示されることでも盛り上がったり。
しかし、これ、こんなところ翻訳する必要無いんじゃないか?これって、「ファイルを Assets フォルダーに入れてください」 と言いたいときに Explorer と VS2012 上とではフォルダー名が違うってことになるし、しかも言語によっても違うってことになっちゃうような。

最後に次回予告の LT。
次回は私が担当させて頂きます。テーマは 「SharpDX を使って C# で DirectX をやってみる」 私自身 DirectX も SharpDX も初心者で、今から勉強しますって感じなのでどの程度説明できるかはわかりませんが、みんなで楽しくできればと思いますので興味のある方はぜひ。
MetroStyleDeveloper (プチ) #06 大阪 ~メトロスタイルアプリ エキスパート塾++2~

ちなみに、Windows 8 には 90日間評価版もありますし、Visual Studio Express 2012 ならもともと無料です。
マイクロソフト・エバンジェリストの大西さんのブログ 「評価版を利用してWindows 8アプリの開発を体験しよう」
MSDN に入ってない方でも一般販売までこれらを使って試してみるってこともできますよ。

2012年8月17日金曜日

[WP8][Win8] Windows Phone 8 で XNA が使えるのか? Windows 8 で XNA が使えるのか?

■ Windows Phone 7 での XNA
Windows Phone 7.x では DirectX 系のものが使いたいときは XNA を使うことになります。WP7 では C++ 使えませんし、レガシーな DLL や COM を呼び出すこともできないので DirectX を直接使うことはどうやったってできません。(技術的には出来るかもしれませんが、そういうことをやると審査に通らなくなっちゃうはずなので公開することが出来なくなっちゃいます)

■ Windows 8 での XNA
ところで、Windows 8 のメトロスタイルアプリ(※1)では XNA は使えません。DirectX 系のものが使いたいときは 「C++ と DirectX を使え」 ということになっています。(SharpDX とかを使えば C# や VB から DirectX を呼び出せます。ただ、SharpDX はマネージドコードから DirectX を呼び出せるようにするラッパー + αなので 「DirectX を使え」 という点には変わりないです)

※1 メトロスタイルという名称は無くなるらしいですが、どういう名前になるのかわからないのでここではとりあえずメトロスタイルと表記します。

■ Windows Phone 8 での XNA
で、Windows Phone 8 ですが、まだ SDK もリリースされてないのでいろいろとわからないところが多いですが
「Status update: Windows Phone 8 Developer Tools (2012.06.21)」
にて、Microsoft の Mark Chamberlain 氏が

  • Windows 8 Metro UX(WinRT API)テクノロジーを使うようになる。
  • XAML/.NET と DirectX/C++ の両方をサポート。
  • DirectX/C++ で書かれたコードは Windows 8、Windows Phone 8、Xbox で走らせることができるぞ。
  • IE10 ベースの WebBrowser コントロールの上で HTML5 を動かすこともできる。

と説明しています。
かなり Windows 8 のメトロスタイルアプリに近くなるみたいですね。
(Windows 8 では HTML/JavaScript を使うこともできますが、WP8 にはそれは無さそう)
そして、XNA については

  • WP7 用の XNA アプリは WP7 と WP8 の両方で動く。
  • WP8 専用 XNA アプリを作ることもできる。

だそうです。
ということは、「WP8 には XNA を含んだ WP7 互換環境が入ってる」 だけじゃなくて 「WP8 にも XNA はある」 ってこと?
そうなると今度は 「Windows 8 のメトロスタイルアプリで XNA 使えるようにはならないの?」 という疑問が。WP8 の WinRT に XNA があるんだとしたら Windows 8 の WinRT にも XNA があってもいいよねぇ。

■ 再び Windows 8 での XNA
しかし、 「Windows 8, XNA and MonoGame – Part 1, Overview」 には

  • Windows 8 のメトロスタイルアプリの開発には XNA Framework は使えない。
  • 推奨は HTML5/JavaScript、XAML/C#、XAML/VB、DirectX/C++ のいずれか。
  • デスクトップアプリとしてなら XNA を選択できる。

と明言されています。
そして、

  • MonoGame を使えばメトロスタイルアプリで XNA を使うことができる。

だそうです。
MonoGame は XNA 互換フレームワークを実装するオープンソースプロジェクトです。(まだ開発中らしい)
名前からして Mono の一環でしょうし、Windows、Windows Phone、iOS、Android、Mac OS X、Linux、PlayStation Suite をサポートする予定だそうです。
記事に図がありますが、WinRT 上の MonoGame は SharpDX を使ってるようですから、要するに 「(WinRT 上の MonoGame は)SharpDX を使った XNA 互換のフレームワーク」 ということですね。そして、Microsoft は WinRT 上に XNA を実装するつもりは無いけど、MonoGame があるからまぁいいでしょ、ということなんでしょうね。なんというか、「お、おう」 という感じw

というわけで、Windows 8 のメトロスタイルアプリでは XNA は無いけど MonoGame があるから XNA 互換で開発ができるってことのようです。
(となると、WP8 も XNA が載ってるわけじゃなくって MonoGame を使うっていう落ちなような気がしてくるな)
ちなみに、「Windows 8, XNA and MonoGame - Part 2, Getting Started」 「Windows 8, XNA and MonoGame - Part 3, Code Migration and Windows 8 Feature Support」 ではチュートリアル的に MonoGame を使ってメトロスタイルアプリを作る方法が解説されています。

2012年7月24日火曜日

[勉強会] MetroStyle アイデアソン・ハッカソンに行ってきた

MetroStyleDeveloper と VS ハッカソン倶楽部のコラボ勉強会
7/14(土) MetroStyleアイデアソン
7/21(土) MetroStyleハッカソン
に参加しました。

7/14(土)
梅田の ECC コンピュータ専門学校にて。
この日は 「Windows 8 を入れてない人は入れてみよう」 「メトロスタイルの勉強会」 「アイデアソン」 という盛り沢山の内容。
私はセットアップのお手伝いなんかもするスタッフという立場での参加。

11時くらいに会場入り。
MetroStyleDeveloper のリーダーであるさおさんからの挨拶の後、さっそく Windows 8 Release Preview と Visual Studio 2012 RC のセットアップを開始。何人かの方がこれらの iso を持ってきていたので、それらを使ってセットアップ作業を進めます。私も DVD に焼いたものと USB メモリに入れたものを持って行きました。
ほとんどの方が VMWare Player を使っていたようです。VHD にインストールしている方もいました。2~3人くらいの方がインストール中に VMWare が落ちちゃってどうにもならず VMWare を諦めて VirtualBox に切り替えてました。今どきの仮想環境はホスト OS だけでなく CPU や BIOS のサポート具合なんかもからんでくるので、こういったよくわからないトラブルはどうしても発生しますね。

昼食を挟んで 13時からはメトロスタイルの勉強会開始。
セットアップ中の人はセットアップを進めながらセッションを聞く形。私は部屋の後ろからセットアップの様子を眺めつつセッションを聞いてました。詰まってそうな人がいたらちょこちょこと助言したり。Twitter にも書きましたが、後ろから眺めてると 30台以上のノート PC すべてが Windows 8 っていうのは何ともすごい光景でした。
最終的には全員の方が Windows 8 と VS2012 のセットアップに成功したようです。
仮想環境だと遅いという声も聞かれましたが、仮想環境だけどまったく問題無い(仮想環境とは気付かないくらい普通に動く)という方もいました。CPU、割り当てメモリ量、GPU などいろいろな要因があるんでしょうが、なんでこんなに違うのかはよくわかりません。ちなみに私は仮想環境は使わず VHD で直接入れているのですこぶる快適です。もう自宅の PC は Windows 8 Release Preview とか使わなくなっちゃいました。

そういや 3時ごろには恒例のおやつタイムもありました。みんなでドーナツを頂いたんだっけかな。

続いてアイデアソン。来週のハッカソンのときに開発するソフトのネタを考えます。
6チームほどにわかれてアイデア出し。出たアイデアは紙に書き留める。(事前に色ペンや画用紙・模造紙を配布済み)10~15分の短時間でいったん区切って各チームどんなアイデアが出たか発表。それを聞いて各自気になった所に移動。これを 3回くらい繰り返してメンバーを変えつつネタをブラッシュアップしていきます。そして、このチームで来週のハッカソンを行うことになります。
こういう形式は始めてでしたが(というか、アイデアソンやハッカソン自体ほとんど経験がありませんが)とてもおもしろかったです。短時間でも意外となんとかなるもんですね。

終了後は 4名(私含む)で飲みに。いろんな話で盛り上がりました。個人的にはちょっと飲み過ぎましたがw

アイデアソン後
VS ハッカソン倶楽部のリーダーである森理麟さんがチームごとに Google ドキュメントと Subversion のリポジトリを用意してくれました。
チームによっては Google ドキュメントのディスカッション機能(ドキュメント上でチャットできる)を使って打ち合わせをしたり、リポジトリにサンプルコードやプロジェクトの雛形を入れたりしていました。

7/21(土)
淀屋橋の IIJ さんの部屋をお借りしてハッカソン本番です。
森理麟さんの挨拶のあと、さっそくハッカソン開始。
チーム分けはアイデアソンで決まったまま。ハッカソンのみ参加の方はどっかのチームに潜り込む感じ。やはり事前にアイデアソンがあったのと、その後に一週間の時間があったのとで、各チーム比較的スムースに作業に入れたように思えました。
私は事前にチューターをお願いされていたのでチームには入らずに部屋の中をうろうろして質問に答えたり、人手が足りないところのお手伝いをしたりしてました。がっつりコーディングするという参加の仕方ではなかったわけですが、これはこれでものすごく楽しかったです。

今回のハッカソンは 「完成しなくても仕方ない」、というか、大多数の人が初体験のメトロスタイルアプリ開発なわけで、「さすがに 6時間で完成は無理だろ」 という感じもあったためか比較的まったりした雰囲気でした。それでも、最後の発表の段階では各チーム部分的にでもデモができるように仕上げてあって(デモが無理な部分はプレゼン資料で作ってあったりして)さすがという感じ。

終了後はみんなで懇親会。
さらにその後 4名(私含む)で二次会。
またちょっと飲み過ぎたかもw

ほんとに楽しかった。またぜひ参加したい。

2012年6月19日火曜日

[勉強会] VSUG DAY 2012 Summer(東京)に行ってきた

6/16 にマイクロソフトの品川オフィスで開催された VSUG DAY 2012 Summer に行って来ました。
当日早くに新幹線で移動して、ちょうど受付開始時間くらいに会場に到着。
すべてのセッションを聞かせて頂きましたが、Windows 8 に Visual Studio 2012、ASP.NET MVC と旬なものが盛り沢山といった感じでものすごくおもしろかったです。

私もセッションを担当させて頂きました。セッションで使った資料を下に貼り付けておきます。(そのうち VSUG のサイトにまとめて上げられるかもしれませんが)
そういや、デモをしようと VS2012 を立ち上げたときにメトロスタイルのデザイナーがエラーを表示して動かなかったのはちょっと焦りました。エラーメッセージを見ると 「解像度が 1024×768 を下回ってる」 となってて、原因がすぐにわかったので事なきを得ましたが。(プロジェクターに繋いだ時にいつの間にか 1024×600 とかになってて縦が 768 無かったのが原因)しかし、1024×768 無いとデザイナーすら立ち上がらないというのは知りませんでした。

終了後はいつものように懇親会に参加。
さらに二次会へと移動。実はこのあたりからあまり記憶がありません(汗)
その後、温泉に泊まり、お風呂の中で寝てしまったり、テーブルに突っ伏して寝てしまったりw
翌日はお台場のガンダム見てから新幹線で帰阪。

2012年5月24日木曜日

[MetroStyle] WinRT に Jet API なんてあったのか

先日の記事へのコメント で WinRT に Jet API があると教えてもらいしました。
へぇ、確かにリファレンスに載ってますね。
Win32 and COM for Metro style apps (data)
けど、これ、「メトロスタイルアプリでサポートされている」 と書かれてますが、どう使ったらいいのかさっぱりわかりません。Jet API のリファレンス自体は既存のものをコピペしただけみたいで Vista とか Windows 2000 とか書かれたままですし、.h と .lib が書かれているだけで namespace とかなんにもないのでマネージドから使える気がしません。これって、DirectX が C++ からしか使えない(マネージドから使いたいときはラッパーを自分でどうにかする必要がある) のと同じように C++ からなら使えるってことなんですかね?

ライブラリーの名前が ESENT.dll となってますが、ESENT っていうのは Extensible Storage Engine のことで、Jet Blue と呼ばれることもある Jet の拡張版みたいなものらしいです。ESENT 自体は Active Directory や Windows Desktop Search、Windows Mail、Live Mesh、Windows Update などで使われているそうです。

で、ちょっと検索してみたら
「Making ESENT / Jet APIs work in Metro-style apps」
こんな記事を見つけました。
ESENT をメトロスタイルアプリ(C#)で使ってみたという記事です。
どうやら、CodePlex にある ManagedEsent (名前のとおり ESENT.dll をラップしてマネージドから使えるようにしたもの) を使ったら ManagedEsent のサンプルコードがほとんどそのままメトロスタイルアプリでも使えたってことのようです。
やっぱり、ESENT.dll はそのまま使えるのは C++ からで、マネージドから使いたいときはラッパーを自分でなんとかする必要があるみたいですね。

けど、サンプルコードとか見てもこの ESENT.dll ってあまり使い勝手はよさそうではないなぁ。ManagedEsent には IDisposable を実装して using を使えるようにしたクラスとかも用意されているようですが、それでもあまり気軽に使えるっていう感じではなさそう。
もともと、ローカルにちょっとしたデータを保存するのに便利なものはないかと思ってたんですが、これなら永続化可能なクラスを読み書きしたり、XElement 属あたりを使って XML を読み書きしたりした方が楽そう。(わざわざ WinRT で ESENT.dll を使えるようにしたのは、Windows 8 標準のメールアプリや SkyDrive アプリなんかで使いたかったからかなぁ。Windows Mail や Live Mesh が ESENT を使っているそうなので、そんな感じがする)

2012年5月22日火曜日

[MetroStyle] メトロスタイルアプリで SQLite を使う

「Using SQLite in a Metro style app」 より。
Tim Heuer 氏のブログでメトロスタイルアプリで SQLite を使うことについて紹介されていたので覚え書き。

どうやら SQLite はすでに WinRT に対応しているので自分でビルドしてやればメトロスタイルアプリで使えるってことみたいです。
で、.h と dll を使えば C++/CX から使えるし、参照設定してやれば C#、VB、JavaScript から使えるようです。

そういや ARM でも使えるのかな?確か C++/CX ではターゲットを x86、x64、ARM から選べて、みんなを含めたパッケージにしておけばどこでも動くものが作れるって話だったと思うから、SQLite が ARM 向けにビルドできれば大丈夫そうではあるけど。

つか、WinRT で使える SQL Server Compact Edition とか無いのかな?

2012年5月10日木曜日

[MetroStyle] WriteableBitmapEx が WinRT に対応

CodePlex の WriteableBitmapEx が WinRT に対応したそうです。
WriteableBitmapEx は WriteableBitmap に DrawLine、DrawRectangle、DrawEllipse、DrawBeziers といったドローイングに必要なメソッドを追加してくれるライブラリです。(もともとの WriteableBitmap には点を打つ程度のメソッドしか用意されていない)
今見たら CodePlex のサイトはまだ更新されていないようなので DOWNLOADS のところか SOURCE CODE から 1.0.0.0 Beta 2 を落とすといいみたいです。(私はまだ試してませんが、これが WPF、Silverlight、Silverlight for Windows Phone、WinRT 対応版みたい)

詳細については 「One Bitmap to Rule Them All - WriteableBitmapEx for WinRT Metro Style」 で解説してくれています。
Silverlight の WriteableBitmap では Pixels プロパティでビットマップの中のピクセルデータに直接さわれるけど、WinRT の WriteableBitmap にはそういうのは無いので拡張メソッドとかで同じような感じに扱えるようにして対応したみたいです。
おどろいたことに WinRT ではピクセルデータのフォーマットが BGRA になってるんですって。(ビットマップは普通は ARGB でした) この BGRA という並びは Direct2D で使われているものとのこと。(ということは WriteableBitmap の中身は Direct2D だったりする?)

ちなみに、WinRT の WriteableBitmap を見ると PixelBuffer プロパティというのがあります。これでピクセルデータにアクセスできます。
PixelBuffer プロパティの型は IBuffer です。リファレンス見ると Length プロパティくらいしか無いですけど。
しかし、WindowsRuntimeBufferExtensions クラスに AsStream メソッドがあります。こいつで IBuffer から Stream を取り出せます。AsBuffer メソッドを使えば反対に byte[] を IBuffer にできます。

しかし、これ、ドキュメントがわかりにくいなぁ。
Windows.Storage.Streams 名前空間にある IBuffer をどうやって変換するのかと探しまわったら System.Runtime.InteropServices.WindowsRuntime にあるクラスを使えってんだからなぁ。しかも今の時点だと WinRT の API Reference と .NET Framework 4.5 の Class Library Reference って感じであるところがぜんぜん別だし。まぁ、Windows 8 Releace Preview が出る頃にはドキュメントも整理されるんじゃないかと思いますが。

ところで、このようにピクセルデータにアクセスするのが Stream 経由になるのでパフォーマンス的にはきびしいのかもしれません。
まぁ、パフォーマンスが必要なときは Direct2D を使えってことになるんでしょう。
この記事を書いた方も 「WinRT で 2D グラフィックスをやるときのベストソリューションは Direct2D を使うことだ」 と書いてますし。

2012年4月23日月曜日

[Silverlight][WP7][WinRT] XAML Spy

(まだダウンロードすらしてないけど)
http://xamlspy.com/
実行中アプリの XAML の内容を閲覧することが出来るツールです。Silverlgith、Silverlight For Windows Phone、WinRT に対応してます。
現在は Preview リリースなので無料で使用できるようです。

ちなみに作っているのは Silverlight Spy と同じところみたいです。

(@biac さんのつぶやきで気付いたので以下追記)
Silverlight は Web ブラウザーを内蔵していて、それ経由でアクセスすることにより任意のアプリの XAML を見ることができるようです。参考: Connecting a Silverlight application (Silverlight Spy も同様の動きでした)

Silverlight for Windows Phone はエミュレーター上で XAP を動かすことによって XAML を見るようです。なので、XAP が入手できるアプリであれば任意のアプリの XAML を見ることができるんじゃないかと思います。参考: Connecting a Windows Phone application

WinRT は Silverlight の Web ブラウザーや Silverlight for Windows Phone のエミュレーターにあたるものが無いようで、あらかじめコードに XAML Spy と通信するためのコードを埋め込んでおく必要があるようです。参考: Connecting a WinRT application ということは、あらかじめこのコードを埋め込んであるアプリの XAML しか見ることはできないことになりますね。

うーん、そうかぁ。
WinRT ランタイムをホストするための仕様なんかが公開されれば、それ経由で XAML にアクセスすることができるかもしれませんが、そうなるまではどうしようもないんでしょうね。