ページ

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月21日月曜日

[VS11] Visual Studio 11 のラインナップ

A look ahead at the Visual Studio 11 product lineup and platform support」 より。
Visual Studio 11 の製品構成が発表されてました。

まず、Visual Studio 11 っていうのはあくまでコードネームで正式名ではないってことだったと思いますが、名称については特に何も書かれてないですね。VS11 が正式名になるんだろうか?

で、ラインナップですが、 http://www.microsoft.com/visualstudio/11/en-us/products ここに書かれてるようになるってことみたいです。上記の記事にある “Visual Studio product website” のリンクから行くと日本語のページにいきますが、英語の方のページを見てみると微妙に違います。ラインナップが書かれていますし、日本語のページの方はすべて “Visual Studio 11 Beta” と表記されていますが、英語の方は(タイトルロゴ以外は) “Beta” の文字が無くなっています。ただ、リンク先は Beta のままだったりするのでちょっとアレですが。

有償版の方は VS2010 と似たようなラインナップみたいですが、無償の Express は大きく変わるみたいですね。
C#、Visual Basic といった言語別の Express は無くなり、Express for Windows 8、Express for Web になるようです。for Windows 8 では C#、Visual Basic、C++、JavaScript が使えるようです。ここで言う “for Windows 8” がメトロスタイルアプリのことだけを言ってるのか、メトロスタイルでは無い .NET Framework アプリの開発もできるのかはよくわかりません。(自分は Express を入れてないからわからないんですが、確か VS11 Express for Windows 8 Beta ではメトロスタイルのみって話だったと思うんですが)
あと、記事には 「Blend、プロファイラー、ユニットテストなどといったメトロスタイルアプリの開発に最適なツールも提供される」 ともあります。Express にもこういった機能が入るってことでしょうか?Blend も Express に付いてるってこと?

で、最新のプラットフォーム向けの特別なツール無しの言語別の Express が使いたい場合は、今後も VS2010 Express は引き続き提供されるので、そっちをダウンロードして使ってくれということだそうです。
これは VS11 Express にはメトロスタイル用の for Windows 8 と Web 用の for Web しか無いからそれ以外の普通の .NET Framework 4、4.5 の開発とかネイティブ C++ の開発とかは VS2010 Express を使えってこと?せめて VS11 for .NET Framework 4.5 は欲しかったような(for Windows 8 に .NET Framework 4.5 も含まれるんならいいんですが)

あと、Windows Phone ですが、これは次の Windows Phone がリリースされる時に Visual Studio Express for Windows Phone がリリースされる予定だそうです。ということは Windows Phone 8 のときってことなんでしょうね。(それにしてもそろそろ Windows Phone 8 アプリが Silverlight for Windows Phone 7.1 の発展系になるのか、WinRT の Windows Phone になるのか、それ以外になるのか、といったくらいのところは教えて欲しいなぁ)
同じように Azure も次の Azure アップデートのときに Azure tools が提供されるようです。
それまでの間は VS2010 を使っていてくれとのこと。

そういや、Silverlight のことについてはまったく触れられてませんね。やっぱり、Silverlight Toolkit for VS11 が提供されることは無いのかなぁ。ちょっとさびしい。

VS11 は .NET Framework 4 と 4.5 をサポートするようです。4.5 は Vista 以降のみサポートなので XP、Windows Server 2003 をサポートするには 4 をターゲットにする必要があります。なお、4.5 の新機能の async/await は Async Targeting Pack for Visual Studio 11 を入れてやれば .NET Framework 4 でもサポートされるようになるそうです。これはうれしい。

C++ の方は XP、Windows Server 2003 をサポートするには VS2010 のコンパイラーとライブラリーを使用しろとあります。VS11 と VS2010 はサイドバイサイドで両方インストールできるので使い分け可能だそうです。ただ、VS2010 をサイドバイサイドでインストールすること無しに XP を直接ターゲットにできるようなオプションを評価中だそうです。

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年5月8日火曜日

[HTML5] BuildNewGames.com

Let’s help developers write cross-browser code. Announcing BuildNewGames.com.」 より。
1ヶ月ほど前の記事ですが、Microsoft が Bocoup というところと新しくパートナーシップを結んで BuildNewGames.com という Web ゲーム開発のデベロッパー向けのサイトを立ち上げたそうです。ここで言う Web ゲームとは Flash や Silverlight では無く、HTML5 CSS3 JavaScript を使ったプラグインフリーなもののことです。基本的に Chrome、Firefox、IE9/10 を対象にしている模様。

今見てみると、いくつかのチュートリアルがあります。
記事によるとゲーム開発関連のチュートリアルを 50本くらいは掲載していく予定みたいです。
(こういうのが日本語訳されたりってことは無いんだろうなぁ)

2012年5月7日月曜日

[MetroStyle] メトロスタイルアプリのグローバリゼーション

「WinRT でのグローバリゼーションはどうなってるんだろう?」 と思ってたらちょうど Tim Heuer 氏がまとめてくれてた。
Develop your app for everyone–localize your UI
以下、個人的に気になったところなどを覚え書きを兼ねて。

JavaScript WinRT
How to manage string resources」 によると、strings フォルダを作り、その下に en-us、ja-jp などのフォルダを作り、その下にリソースファイル(resources.resjson)を作る。ちなみに .resjson は拡張子からわかるように JSON 形式。
まず、以下のように onloaded で WinJS.Resources.processAll(); を呼び出しておく。

WinJS.Application.onloaded = function(){
    WinJS.Resources.processAll();
}

XAML では

<span data-win-res="{textContent:'greeting'}"></span>

というような形式で使える。data-win-res は 「Quickstart: Loading user- and device-specific UI resources」 によると data-win-res="{propertyname: 'resource ID', propertyname2: 'resource ID2}" という形式。(ならば、textContent じゃなく innerText と書いてもいいのかな?)
JavaScript では

var resLoader = new Windows.ApplicationModel.Resources.ResourceLoader();
xxx = resLoader.getString("resource ID");

で文字列リソースを取れる。
あと、画像には <img src=”images/logo.png”/> と書いてもスケールにあわせて images/logo.scale-100.png、images/logo.scale-140.png、images/logo.scale-180.png を使ってくれるという機能もある。(images を en-us、ja-jp とかの下に作っておくと言語別の画像を使ってくれるのかどうかは記述が見つからなかった)

C#/VB WinRT
QuickStart: Make your Metro style app world ready」 によると、en-us、ja-jp などのフォルダの下に画像ファイルやリソースファイル(Resources.resw)を入れる。
XAML は、

<TextBlock x:Uid="HelloWorld" Text="Hello World" />

という感じで書いておく。
Resources.resw には

Name=”HelloWorld.Text” Value=”こんにちは、世界”

という具合に書く。
Resources.resw の Name は 「Uid の値」 + 「プロパティ名」 で、Width など文字列以外のプロパティも書ける模様。(たぶん、文字列から変換するコンバーターがあればいいんだと思う) また、添付プロパティで別ネームスペースのものはネームスペースも明示しろとのこと。例: AutomationPeer.Name の場合は MediumButton.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name のようになる。
余談だが、XAML で xmlns:xx=”clr-namespace:Xxxx” と書いていたのも “using:Xxxx” と書くようになったとか。
C# で文字列リソースを取得するのは、

var resLoader = new Windows.ApplicationModel.Resources.ResourceLoader();
xxx = resLoader.GetString("resource ID");

という感じ。

その他
CodePlex に RESX Translator with Bing というツールがある。どうやら .resx を丸ごと Bing で翻訳してくれるみたい。

Visual Studio 11 Beta には Multilingual App Toolkit というツールがある。これを使うと TPX や XLIFF で管理できる?(よくわからないけど XLIFF というのはマルチランゲージを管理するための形式の一つみたい)

http://amanuens.com/ というサイト。どうやらマルチランゲージのリソースを管理できるサイト。「New Feature: Support for Windows Metro Resource Files」 によるとすでに .resw や .resjson に対応済み。あと、このサイトには英語から/への翻訳を人手でしてくれるサービスもある模様 Software localization service powered by Humans (品質とかはよくわからない)

2012年5月1日火曜日

[MetroStyle] WinJS Promises

WDD でも 「JavaScript の非同期では Promise の then や done を使う」 というようなことを言っていたと思うけど、正直 Promise ってよく知らなかった。
で、以下のブログで動画で解説されててわかりやすかった。
WinJS Promises #1
#1~#6 まである。
英語だけどデバッガーで動作を見せながら解説してるので見てるだけでもわかりやすかった。
(ちなみにこれは Microsoft UK の方のプログです)

IE ブログにも解説あり(こっちは日本語文章)
"promise" による JavaScript での非同期プログラミング