ページ

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 での非同期プログラミング

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 にアクセスすることができるかもしれませんが、そうなるまではどうしようもないんでしょうね。

2012年4月20日金曜日

[.NET] async、await の発音は?

昨日参加した勉強会 MetroStyleDeveloper #02 での一コマ。
私はずっと 「async」「await」 を 「エイシンク」「エイウエイト」 と発音してました。
そしたら、さおさんから 「async って アシンク じゃなくて エイシンク だったんですかぁ」 と。で、私は 「非同期の asynchronous って エイシンクロナス ですよね?なので エイ でいいと思ってたんですが。。。どうなんでしょ?」 と。その場で 「どなたか英語に詳しい人、わかる人います?」 と聞いてみましたがどなたも返事なし。

ということで、あらためて調べてみた。
asynchronous は辞書の発音記号では eɪsíŋkrənəs。カタカナで書くとしたら 「エイシンクロナス」 ってところでしょうか。
await は辞書の発音記号は əwéɪt。カタカナで書くと 「アウエイト」 でしょうね。おぅ、こっちは エイ じゃなかったんだ。知らんかった。

さらに、あらためて Future directions for C# and Visual Basic を聞いてみた。
これは、C# の言語設計者であり、C# 世界の首領と言っていいであろう Anders Hejlsberg 氏の BUILD でのセッションです。
やっぱり、asynchronous は 「エイシンクロナス」、async は 「エイシンク」、await は 「アウエイト」 と言ってるように聞こえます。
(あと、async は async modifier で await は await operator なのか)

というわけで、これからは 「エイシンク」「アウエイト」 と言っておこう。
(ほんとはどう発音するのがいいのかご存じの方がいたら教えて下さい)

[C#] foreach の仕様が C# 5.0 で変更される

(Twitter 経由で知った 2ch のスレ経由で知った)
C# 5.0 の新機能 (C# によるプログラミング入門): 「foreach の仕様変更」 より。

おぅ、そうなんですか。知らんかった。
なんか、まったく同じ話を昔書いた覚えがあるなぁ、と思ったら 「Anonymous Method はクロージャではない その2」 これですね。
このときに 「それは仕様書の方が間違ってる」 と言ってた内容が C# 5.0 では正しいことになるというわけですね。
まぁ、確かに影響を受けるコードはそんなに多くないだろうとは思いますが、影響を受けるかどうかがパッと見でわかりにくいのがちょっとイヤンな感じ。(影響を受けるのは foreach のカウンタ変数をラムダ式や匿名メソッドでキャプチャしているときってことになるのかな?)

2012年4月19日木曜日

[.NET] .NET 4.5 は WinRT、Silverlight、Windows Phone のすべてを含む

.NET for Metro style apps」 より。
記事の中ほどに .NET Framework 4.5 は WinRT、Silverlight 5、Windows Phone 7.1 のすべてを含むということが図示されています。
WinRT は、今までの .NET Framework や Silverlight とはいろいろと違うところがあったりすると思いますが、.NET Framework 4.5 から見ればサブセットになるようにデザインされているようです。

と言っても、これはあくまで 「どっちがどっちのサブセットになっているか」 というような概念的なところでしょうし、そもそも、この解説を書いてるのが 「CLR コアフレームワークチームのプログラムマネージャー」 なので .NET Framework 4.5 や Silverlight といってもそのすべてのことではなく 「コア」 の部分のことです。
「コア」 っていうのは、簡単に言ってしまえば System.String とか System.Int32 とか List<T> とかっていう基本的な部分のことです。WPF やら XAML やらといった部分は含まれません。

このあたりの話は Silverlight 2 時代がわかりやすいんじゃないかと思います。
Silverlight 2 のときは .NET Framework と互換性がありませんでした。なので、Silverlight で作ったクラスライブラリのアセンブリ(DLL)を .NET Framework のプロジェクトで参照設定すると 「互換性がないアセンブリ」 と言われてビルドすることも実行することもできませんでした。たとえそのクラスライブラリが String しか使ってないような単純なものであってもです。
サーバーとクライアントでやりとりするデータをクラスとして表現してサーバーのプロジェクトとクライアントのプロジェクトで共有して使うっていうようなことが出来なかったんです。このころはソースコードを共有するしかありませんでした。(ソースコードは互換性がありました)
これが Silverlight 3 で変更されて .NET Framework と互換性があるようになりました。もちろん、.NET Framework にしか無い機能、Silverlight にしか無い機能を使ってるとダメですが、そうでなければアセンブリを相互に参照することができます。

ブログの記事にもリンクがある MSDN の 「汎用性のあるクラス ライブラリ」 が具体的です。
Visual Studio 11 Beta には汎用性のあるクラスライブラリを作るための Portable Class Library プロジェクトが入ってるそうです。このプロジェクトテンプレートを使えばどのプラットフォームのどのバージョンをサポートしたいかを選択できます。(たぶんそれに合わせて適切なアセンブリを参照してくれるんでしょう)
Portable Class Library で選択できるプラットフォームは以下みたいな感じ。

PortableClassLibraryDialog.png

Portable Class Library で使えるのは以下のアセンブリ。

  • mscorlib.dll

  • System.dll

  • System.Core.dll

  • System.ComponentModel.Composition.dll

  • System.ComponentModel.DataAnnotations

  • System.Net.dll

  • System.Runtime.Serialization.dll

  • System.ServiceModel.dll

  • System.ServiceModel.Web.dll

  • System.Xml.dll

  • System.Xml.Linq

  • System.Xml.Serialization.dll

  • System.Windows.dll

このうちすべてのプラットフォームで使えるコアアセンブリは mscorlib.dll、 System.dll、 System.Core.dll、 System.Xml.dll、System.Xml.Serialization.dll だけ。

2012年4月17日火曜日

[.NET] アプリの起動が速くなる MPGO (.NET 4.5)

Improving Launch Performance for Your Desktop Applications」 より。
MPGO という技術が解説されています。
上の記事ではかなり長文で詳細に説明されてますから、ここでは要点のみ。

.NET Framework のアセンブリは中に入ってるのは IL (中間コード)で、それが実行時(just in time – JIT)にコンパイルされて動きます。
ngen.exe を使って事前にコンパイルしておけば、実行時にコンパイルするオーバーヘッドがなくなるので起動などが速くなります。インストール時にインストーラによって ngen.exe が実行されるようにしておくというような感じで使われます。.NET Framework の System.DLL などは事前に ngen されています。
これがさらに managed profile guided optimization (MPGO)を使うと高速化できるそうです。

MPGO はコンパイル後のネイティブイメージがより効率良く読み込めるように配置してやる(キャッシュのヒット率が良くなるようにとかディスクアクセスが少なくなるようにとか)ことによって起動を高速化する技術だそうです。こういう技術ですので、それなりに大きなアプリでないとあまり効果は無いと思います。
また、これをするには事前に「トレーニング」が必要です。トレーニングというのは、実際にアプリを操作してそのときのコードの使われ方を記録するっていう操作です。なのでうまいことトレーニングしておかないと逆効果になってしまうようなこともあるんじゃないかと思います。

トレーニングするためのツール(mpgo.exe)は Visual Studio 11 Ultimate Beta に付いているそうです。
また、.NET Framework 4.5 に付いている ngen.exe は MPGO に対応しているそうなので、これを使ってトレーニング済みのアセンブリを ngen してやれば MPGO 済みのイメージとなるそうです。

2012年4月16日月曜日

[勉強会] MetroStyleDeveloper 大阪#02 「MetroStyle初心者の集い」に参加します

メトロスタイルな勉強会 MetroStyleDeveloper #02 が 4/19 の夜開催されます。
今回は平日の夜 19時~21時15分の開催です。

私も参加します。
スピーカーもさせて頂きますが、25分というショートセッションですし、「ざっくばらんに MestroStyle 初心者の集い」 がテーマなので、あまり堅苦しくなく軽いノリでいくつもりです。(と言うか、25分でまとめられる自信がない(笑))
まだ、余裕はあるようですので、興味のある方はぜひ。

2012年4月13日金曜日

[.NET] VB11 の新機能

Visual Basic 11 Beta Available for Download!」 より。
そういや、VB の新機能はまったく把握してなかった。
以下、気になったとこだけ。

Async / Await は、まぁ C# と同じ。

Iterator は、ん?なにこれ?VB は今まで yield return とか書けなかったんだっけ? Iterator キーワードと Yield キーワードを使うのか。

Iterator はラムダにも書ける。

Iterator Function()
    For Each fn In IO.Directory.EnumerateFiles("c:\\", "*.jpg")
        Yield fn
     Next
End Function.Invoke()

おぉう、これはキモい(笑) End Function の後ろに .Invoke() と続けることができるのか。

Caller Informatin は C# と同じだな。

ほう、Visual Studio は ByVal を付けなくなるのか。

2012年4月12日木曜日

[.NET] .NET Framework 4.5 の新機能 – Caller Information

こんなのあったんですね。
Caller Information (C# and Visual Basic)
機能としては見たまんまですね。呼び出し元の情報が取れるようになるというもの。
どうやらコンパイラがコンパイル時に埋め込むみたい。(実行時にスタックトレースをたどるというものでは無い)
なので難読化とかの影響は受けない。反対に動的に Invoke してるときとかは取れるとは限らない。という感じみたい。

2012年4月11日水曜日

[MetroStyle] マネージドコードで DirectX が使いたい

メトロスタイルでは基本的に WinRT を使うことになるわけですが、なんか WinRT に XNA って無くないですか?
Windows Phone にも乗って、Silverlight にも乗ったのに WinRT に乗らないとは思わなかったなぁ。
タブレットとかをサポートするために DirectX 自体がサポートされないのなら XNA が無いのもそりゃそうだと思うんですが。

Windows 8 アプリ開発者ブログ: 「XAML と DirectX の統合
これなんか読むとメトロスタイルでも DirectX は普通にあるんですよね?というか、DirectX はメトロスタイルでもかなり重要な要素だと思ってるように思います。けど、これを読むと、SurfaceImageSource なんかはマネージド側からはメソッドとかが見えなくなってて WinRT C++ から使わないといけないようになってるんですね。うーむ。

今は無いだけなのか、それとも今後も XNA をサポートするつもりは無いのかはよくわかりませんが、無いものは仕方ないですね。

で、どうやら SharpDX という DirectX をまんま C# でラップしたものがあるそうです。
DirectX 11.1、Windows 8 もサポートしていてメトロスタイルアプリからも使えるとあります。

Lighting Effects in your XAML/C# metro apps :)
Effect-Graphs in our XAML/C# metro apps using SharpDx :)
WinRT-XAML/C# アプリから SharpDX 経由で DirectX を使ってみたという記事がありました。
ほぅ。
自分では試してないですが、ほんとにちゃんと使えるみたいですね。

ちょっと気になるのは Windows Store から配布するには審査に通る必要がありますが、まさかマネージドから DirectX 呼んでると審査落ちするなんてことは無いですよね?(WinRT C++ が大丈夫なんですから大丈夫なんだと思いますが)

あと、ANX.Framework なんていうのもありました。
XNA 互換のライブラリだそうです。(SharpDX を利用)アルファとあるので完成度はわかりませんが。

というわけで XNA が無くても何とかなると言えば何とかなるのかな?
# いっそのこと OpenGL サポートしちゃえば iOS や Android からの移植が増えそうな気がするんだけど、そうはいかんもんだろうか。

2012年4月10日火曜日

[Silverlight] コントロールのテンプレートを書き換える

某所を見て難しいとか面倒とか言われていたので書いとく。

たとえば、「コンボボックスの IsEnabled が false のときの色を変えたい」なんてときはコントロールテンプレートを書き換えてやることになります。
Silverlight の標準のコントロールのテンプレートは MSDN の 「コントロールのスタイルとテンプレート」 にあります。コンボボックスなら 「ComboBox のスタイルとテンプレート」 です。

実際にコンボボックスを例にやってみます。

MSDN の前半に書かれているパーツやら状態やらは単なる説明なのでどうでもいいです。
XAML が書かれているところのちょっと上に使われている名前空間が書いてあります。xmlns:vsm と xmlns:sys を使ってるとあるのでこれらを書き足してやります。
続いて XAML の <Style TargetType=”ComboBox”> と <ControlTemplate x:Key=”ValidationToolTipTemplate”> を <UserControl.Resources> の中にそのままコピー&ペースト。
必要なのはこれだけです。

<UserControl x:Class="SilverlightApplication1.MainPage"
    ......
    xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    ......>

    <UserControl.Resources>
        <ControlTemplate x:Key="ValidationToolTipTemplate">
             ...MSDN の内容をここにペースト...
        </ControlTemplate>

        <Style TargetType="ComboBox">
             ...MSDN の内容をここにペースト...
        </Style>
    </UserControl.Resources>

    <Grid x:Name="LayoutRoot" Background="White">
        <ComboBox ... .../>
    </Grid>
</UserControl>

一つだけ注意があります。
MSDN 上では先に <Style ...> が書かれていますが、このスタイルの中で後に出てくる <ControlTemplate x:Key=”ValidationToolTipTemplate”> を使っています。この場合、実際の XAML では <ControlTemplate ...> を先に書いておかないとエラーになってしまいます。

あとはこの XAML を好きなように書き換えれば OK です。
上から眺めていけば

<vsm:VisualState x:Name="Disabled">
    <Storyboard>
        <DoubleAnimation Duration="00:00:00" Storyboard.TargetName="DisabledVisualElement" Storyboard.TargetProperty="(UIElement.Opacity)" To=".55"/>
    </Storyboard>
</vsm:VisualState>

なんてのが見つかります。名前を見ただけでも 「Disabled になったときに DisabledVisualElement を 0.55 の透明度にする」 ということなんだろうという検討が付きますね。
で、この DisabledVisualElement を探すと

<Rectangle x:Name="DisabledVisualElement" RadiusX="3" RadiusY="3" Fill="White" Opacity="0" IsHitTestVisible="false" />

となってます。
試しに Fill=”White” を Fill=”Red” にしてみたら Disabled になったときに赤っぽくなるコンボボックスになりました。
XAML をガシガシ書き換えてやれば好きなようにカスタマイズできますので後はお好きなようにどうぞ。

ちなみに、Expression Blend を使うともっと簡単だったりします。
確か、コントロールを右クリックして 「テンプレートの編集」 とか何とかを選んでやるだけでよかったはず。

[勉強会] わんくま大阪 #48 に参加した

4/7 に開催された わんくま同盟 大阪勉強会 #48 に参加しました。
わんくまの勉強会に参加したのは確か 2回目。調べたら 1回目は 2007年 11月なのでずいぶん久しぶりですね。
前回もスピーカーさせてもらったんですが、今回も 「MetroStyle アプリ開発入門」 というセッションをさせてもらいました。

もちろん、自分のセッションだけでなく、すべてのセッションを聞かせてもらいました。
個人的にはあまりふれる機会がないようなジャンルのセッションが多かったので、どれもおもしろかったです。

懇親会にも参加しました。ちょっと飲み過ぎて翌日は二日酔いで大変でしたがw

2012年3月1日木曜日

[Win8] Windows 8 First Apps Contest の受賞作

以前に紹介したこともある 「Windows 8 First Apps Contest」 ですが、その受賞作が紹介されてました。

Windows Store 開発者向けブログ: 「First Apps Contest 入賞作品の紹介
(日本語訳版です。英語の記事とほとんど同時に投稿されたみたい。気合はいってるなぁ)

やっぱり WPF や Silverlight、C# なんかの経験がそれなりにあった方が多いようですが、興味深いと思ったのが 2番目に載っている Pew Pew。どうやらこれってもともとあった JavaScript のゲームを MetroStyle に移植したみたいですね。そしてそれは 「驚くほど簡単だった」 とあります。へぇ。(作者さんが Adobe のシニア開発者で Flash の中の人ってのもおもしろいですが)

ところで、Windows 8 Consumer Preview を入れると、もう Windows Store に繋げることできるの?

2012年2月1日水曜日

[Win8] MetroStyle IE から Desktop IE へワンタッチ切り替え

Web Sites and a Plug-in Free Web より。
Windows 8 には MetroStyle な IE とデスクトップな IE があります。
そして、MetroStyle な IE では Silverlight や Flash といったプラグインが動きません。反対に、デスクトップな IE は従来通りの IE です。
なので、こういったプラグインを使っているページをみるときには MetroStyle な IE からデスクトップな IE に切り替える必要があります。
そこで、

HTTP ヘッダー

X-UA-Compatible: requiresActiveX=true

META タグ

<meta http-equiv="X-UA-Compatible" content="requiresActiveX=true"/>

のいずれかを入れておけば、MetroStyle な IE でそのページを開いたときに 「デスクトップな IE で開くか?」 と聞いてくるようになって、ワンタッチでデスクトップな IE に切り替えられるようになるそうです。

ちなみに、Silverlight も IE からみたら ActiveX なプラグインなはずなのでこのフラグが使えるはず。

2012年1月27日金曜日

[WP7] WebClient を gzip 圧縮対応させてパフォーマンスアップ

Please ship your next Windows Phone app with GZip: speed requests 50-80%」 より

どうやら Windows Phone 7.5 の WebClient は HTTP 圧縮に対応していないみたいです。
けど、WebClient をちょこちょことやってやればそんなに難しくなく圧縮に対応できるよ。そうすれば、通信の時間が短縮できてパフォーマンスアップできるかも、と。
(だから標準で対応してくれって言ってるんですね。確かにこれくらい対応しててもよさそうなもんだけど)

元ネタとなっている記事はこちら。「GZIP Compressed Web Requests in WP7 - Take 2
WebClient を使って圧縮に対応する方法が紹介されています。(ソースをダウンロードすることもできますし、NuGet から取得することもできます)

簡単に解説。(私もあまり詳しくないけど)
今どきの Web サーバーはレスポンスを gzip で圧縮して返すことができます。圧縮してデータのサイズを小さくできればネットワークの負荷を下げて効率を良くすることができるわけです。けど、毎回圧縮処理をするとそのぶん CPU 負荷があがっちゃうので良い面ばかりでもないです。
JSON や XML などといったテキストベースのデータの場合はかなり圧縮率が高くなることが期待できますが、反対に JPEG や MPEG といったもともと圧縮されているものはそれ以上圧縮しても何の意味もない、というか、かえってサイスが大きくなっちゃったり、CPU 負荷を上げたりと悪い面の方が大きくなってしまいます。
なので、圧縮を使ってるかはサーバーによっていろいろみたいです。圧縮をまったく使ってないサーバーだとか、静的な HTML ファイル等だけ圧縮してそれ以外のファイルや動的な CGI や PHP、ASP.NET などで作られるデータは非圧縮としているサーバーだとか。
で、もちろん、クライアントの側も対応していないと話になりません。
圧縮に対応しているクライアントは HTTP リクエストヘッダーに “Accept-Encoding: gzip” と入れておきます。
これが入っている時のみ、サーバーはレスポンスを gzip 圧縮して返します。(もちろん、非圧縮で返してもいい)
レスポンスが圧縮されているときはレスポンスのヘッダーに “Content-Encoding: gzip” と入っています。
上記で紹介されているコードを見ても、これと同じ事をやっています。で、レスポンスが gzip だったらレスポンスのストリームを SharpGIS.ZLib.GZipStream というもの経由で返すようにしています。

2012年1月26日木曜日

[Win8] ReFS の記事が日本語訳されてます

以前に 「[Win8] 仮想ストレージだとか NTFS の次の ReFS だとか」 で紹介した記事が日本語訳されています。

ストレージを仮想化して、スケーラビリティ、復元性、効率性を高める
Windows の次世代ファイル システム: ReFS

ちなみに、この 「Building Windows 8」 というブログ、他の記事も日本語訳されています。
日本語だけではなく、フランス語、ドイツ語、ポルトガル語、韓国語、中国語、ロシア語に訳されているようです。それぞれの言語にはブログの横にある Language から行けます。
だいたい、英語の記事が掲載されてから 4~5日後くらいに他の言語版が一斉に掲載されるというパターンが多いみたいです。

IEBlog とか Windows Store 開発者向けブログ とかも同じような感じで各言語に翻訳されているみたいです。

2012年1月23日月曜日

[勉強会] メトロスタイルな勉強会に行ってきた

この記事 でも紹介した MetroStyleDeveloper 主催の勉強会に行って来ました。
MetroStyleDeveloper #01 「MetroStyleってなぁに?

おもしろかったー!
すべてのセッションが Windows 8 / MetroStyle 関連な勉強会は日本初なのかも。

会場は、IIJ 関西支社さんの会議室。
会議室と言っても、普通にセミナーなどに使うような部屋でした。

予定通り、私は 「Windows 8 / MetroStyle を見たことのない人向けにどんなものなのかを紹介」 ってなセッションを最初にさせて頂きました。
最初に 「動作している Windows 8 をまだ見たことない人」 と挙手をお願いしたんですが 4人ほどでした。これが 0人だったら 「オレのセッションやる意味なくね?」 となっちゃうところだったのでよかったです(笑)まぁ、それならそれで開発よりの話を多くするとか適当に対処するつもりではあったんですが。
ちなみに、参加者数は 27人程度だったそうです。

セッションで紹介した 「MetroStyle IE では、その Web サイト用の MetroStyle App がある場合、関連付けをすることができる」 というのの紹介は以下の記事にあります。
Connect Your Web Site to Your Windows 8 App
また、Windows 8 のキーボートショートカットは以下あたり
Windows 8 Tip: Windows Key Shortcuts
これに加えて Windows + Shift + C で右側のチャームが出ます。

私のセッションはデモばかりでしたのであまり意味が無いようには思いますが、一応セッション資料を SlideShare に上げましたので貼り付けておきます。

そして、他の方々のメトロスタイルなセッション。
デザイン的な面、実装体験的な面、XAML 的な面、C++ 的な面、VS11 的な面、といろいろな面からのセッションがあり、どれもとてもおもしろかったですし、ためになりました。
あぁ、そういえば VB 的な面からのセッションはなかったな(笑)

終了後は 15人ほどで懇親会。これも楽しかった。

2012年1月19日木曜日

[HTML5] Angry Birds を HTML5 に移植した人へのインタビュー記事・セッション

Joel Webber氏がAngry BirdsのHTML5への移植を語る
すごく興味深い。
HTML5 版は Google Web Toolkit を使って Java で書いてるのか。なんか、GWT を使って Java で書いたり、Script# を使って C# で書いたりと、「JavaScript だけど JavaScript は使ってない」 というのがどんどん増えていきそうだな。
レンダリングは WebGL モードと DOM モードがある。(セッション見たら WebGL、Canvas、DOM があるみたい)

記事にセッションへのリンクもあったので見てみた。(ほとんど聞き取れてないので、ほんとに見ただけって感じ)
Angry Birds on HTML5
以下、見ながら自分用の覚え書き

ゲームループ

  • ごく普通に ユーザーの入力 → ワールドの更新 → ワールドのレンダリング らしい

スレッド

  • モダンなゲームエンジンはシミュレーションとレンダリングに分かれてる
  • けど、JavaScript はシングルスレッド
  • HTML5 の Web Workers でマルチスレッドはできるが、そのぶん複雑になる

DOM によるレンダリング

  • 普通のエレメントや CSS を使う
  • <div style=”
    background: url(hoge.png) no-repeat;
    –webkit-transform: matrix3d(
    m00,m10,0,tx,
    m01,m11,0,ty,
    0,0,1,0,
    0,0,0,1);”/>
    みたいな感じ

Canvas によるレンダリング

  • 2D のグラフィックシステム
  • HTML5 Canvas は多くのブラウザーでハードウェアアクセラレーションが効く
  • var ctx = Canvas.getContent(“2d”);
    ctx.save();
    ctx.transform(m00, m01, m10, m11, tx, ty);
    ctx.drawImage(hoge.png, 0, 0);
    ctx.restor();
    みたいな感じ

WebGL によるレンダリング

  • 3D のグラフィックシステム(OpenGL ES 2 モデル)
  • もっとも高速
  • けど、まだほとんどサポートされてない

計算

  • function mul(A, V, out) {
        out.x = V.x * A.m00 + V.y * A.m10;
        out.y = V.x * A.m01 + V.y * A.m11;
    }
    var A = new Mat(1, 0, 0, 1);
    var V = new Vec(0, 0);
    mul(A, V, out);
    これだと mul() の中身で 875 インストラクション(V8)
  • function mul(A, V, out) {
        out[0] = V[0] * A[0] + V[1] * A[2];
        out[1] = V[0] * A[1] + V[1] * A[3];
    }
    var A = new Float32Array(1, 0, 0, 1);
    var V = new Float32Array(0, 0);
    mul(A, V, out);
    これだと mul() の中身で 376 インストラクション(V8)
    ざっくり、こうすれば 30% の時間で済むことになる

ガーベジコレクション

  • GC が動くとその間止まる(60fps をキープできなくなる恐れあり)
  • そこで、事前にオブジェクトをアロケートする、オブジェクトをプールするといったことをする
  • 要するに、GC にゴミ回収させなければ、GC のせいで遅くならないってことか

起動時

  • ブラウザーのキャッシュをうまく使う
  • HTML5 AppCache は使える
  • 細かい画像をたくさん読み込むより、1つにまとめていっきに読み込む

PlayN

  • カジュアルゲーム用の Java ライブラリ
  • ターゲット: HTML5、Flash、Android
  • デスクトップの JVM を使って開発とデバッギング
  • developers.google.com/playn
  • GameLoop、Graphics、Audio、AssetManager、Network などのモジュール。Box2D も組み込んである

2012年1月18日水曜日

[勉強会] MetroStyleDeveloper 主催のメトロスタイルな勉強会 「MetroStyleってなぁに?」(大阪)

メトロスタイルの勉強会が今週末(2012/01/21(土))に大阪で開催されます。
MetroStyleDeveloper #01 「MetroStyleってなぁに?
まだ空席はあるようですので、興味のある方はぜひ!

私もスピーカーさせて戴くことになりました。
Windows 8 とかメトロスタイルとかがどんなものなのかを紹介します。
ほんとに紹介だけで、難しい話はしないつもり。
というか、私自身、メトロスタイル初心者なので難しい話はできないってのがほんとのところですが(笑)
なので、私も他の方のセッションを聞くのが楽しみです。

2012年1月17日火曜日

[Win8] 仮想ストレージだとか NTFS の次の ReFS だとか

ちょっと覚え書き。Windows 8 のファイルシステムとか。(まだよく読んでない)

Virtualizing storage for scale, resiliency, and efficiency
複数の物理ディスクをひとつのでっかい論理ディスクのように使えるといった機能が強化されるってことなのかな?
今までだって同じようなことは出来なかったっけ?何が変わるんだろ?

Building the next generation file system for Windows: ReFS
Windows 8 では NTFS の進化形である ReFS ってのが搭載される?
NTFS より堅牢性が高くなるとかスケールアップしやすくなるとかそういう感じ?
API 的には NTFS と互換性がそれなりにある模様。

上記いづれもブートディスクには使えないみたい。

2012年1月13日金曜日

[MSMVP] え?この人たちが MVP 審査落ち?

How I Lost, Regained and then Turned Down an MVP Award
長文ですし、最初のほうをナナメ読みしただけなんですが。。。

どうやら、この記事を書いてる Eisenberg 氏が MVP の審査に落ちちゃったようです。(Caliburn / Caliburn.Micro を作ってる人だそうです)
メールには 「MVP は過去一年に対するもので、そういう意味で十分でなかった」 とあったと。Caliburn.Micro は RC を 2011/2 にリリースしてからその後もバージョンアップしたりドキュメント書いたりしてたのに。
で、Twitter で 「Caliburn / Caliburn.Micro に対する私の活動は Microsoft にとっては十分で無かったんだってさ。今年は MVP 受賞出来なかったわ」 とつぶやいたら、すごくたくさんの人から敬意と励ましのレスが返ってきて、そして Microsoft の何人かの人からもレスが来て、聞いたところではスコット・ガスリー氏のところまで話がいったとか。で、結局 「前言撤回。MVP 受賞です」 と連絡が来たと。

この Twitter でのやりとりの際に StructureMap、FubuMVC、Storyteller の開発者である Jeremy Miller 氏、Moq の開発者である Daniel Cazzulino 氏も審査落ちしたことがわかったそうです。

MVP 受賞の連絡はもらえたけど、結局、Eisenberg 氏はいろいろ思う所があって MVP を辞退したようです。

--

これは、ちょっと Microsoft が 「やらかしちゃった」 という感じなのかな。
もともと MVP の審査は数値で表せられるものが重要視されています。「フォーラムで何回回答した」「勉強会で何回スピーカーをした。受講者数は何人だった」「解説記事を何本執筆した。参照数は何回だった」 なんてものですね。
これは、もちろん客観的に評価できるようにっていこうことと、効率よく評価できるようにってことがあるんでしょう。

MVP に応募するときに過去一年間の実績をマイクロソフトに報告します。
これを記入するためのシートが用意されています。(MVP に応募するとマイクロソフトから送られてきます)
私は日本語版しか見たことが無いので英語版がどうなっているのかは知りませんが、そういえば、このシートにはオープンソースのことについて書く欄は用意されてませんでした。もちろん、フリーコメント欄はありますから、そこにいくらでも書くことはできます。

けど、オープンソースでの貢献を評価するってなかなか難しいですよね。
コードの行数なんて意味ないですし、ダウンロード数が多けりゃいいってもんでもないですし。
そもそも、オープンソースで何か公開したからといって、それが常にコミュニティや他の人への貢献とはならないでしょうし。たとえば、単にオープンソースなゲームを公開したなんてのは MVP の対象では無いでしょう。けど、そのソースの解説記事を書いたりしてれば対象になって来そうな気はします。
なかなか数値化が難しい要素がいっぱいありそうです。
客観的、かつ、公平に評価するのには難しいかもしれませんが、ぜひマイクロソフトには頑張って欲しいところ。
ちょうど、昨日、MSDN にこんな記事が掲載されましたし。
オープン ソース、オープンな標準にマイクロソフトはどう取り組んでいるか ~ 丸山 不二夫 × Gianugo Rabellino 対談 ~

2012年1月12日木曜日

[.NET] All-In-One Code Framework

All-In-One Code Framework
Microsoft がメンテしているサンプル集です。
WPF、Silverlight、Azure、ASP.NET、Windows.Form、Windows 7、Windows Phone などなどいろいろなサンブルが入っています。デバイスドライバーのサンプルなんてのもあるみたいです。
言語も C#、VB、C++ など。
基本的に、コードの断片ではなく、動くアプリケーションとしてサンプルが作られているようです。(全部がアプリの体になっているのかは知りませんが)
そして、サンプルもちょこちょこと増えていっています。

と、これ自体は結構前からありますが、最近はぜんぜんチェックしてませんでした。
で、なにげに見てみたら、いつの間にか All-In-One Code Framework Sample Browser っていうのが出来てて、メトロ UI なアプリで見るようになってるんですね。(以前は単純にサンプルが入った圧縮ファイルをダウンロードするだけだったと思う)

どうやら ClickOnce なアプリケーションになっている模様。
初めて起動したときにダウンロードしたサンプルを保存するフォルダを聞かれます。(あとで “SETTINGS” で変更することもできます)
あとは、検索したりして欲しいサンプルをダウンロードするだけ。
けどちょっと一覧性が低くて探しにくい感じ。

あと、Visual Studio 2010 のアドオン版もありました。使い方は ClickOnce 版とほとんど同じ。
Microsoft All-In-One Code Framework Sample Browser
こちらを入れておくと Visual Studio の「ツール」メニューに “Search Code Sample” が増えます。もしくは、コードエディター上で右クリックして “Search Code Sample”。(コードエディターを右クリックした場合は、選択していた API を自動的に検索するって書いてあるんですが、私の環境だと検索してくれません。VS が日本語版だからかな?)

2012年1月11日水曜日

[Win8] Windows 8 First Apps Contest (申し込み期限済)

Windows 8 First Apps Contest
もう、ラウンド 1 の申し込み期限は過ぎちゃってますが、こんなコンテストがあったんですね。
Windows 8 のメトロスタイルのアプリのコンテストです。
ルール によると Japan からも応募できたようです。ただし、アプリ自体は英語じゃないとダメとありますが。

ちなみに、ラウンド 1 が 2011/12/06~2012/01/08 で、このラウンド 1 の中から勝ち残ったものがラウンド 2 に進むという形式みたいです。ラウンド 2 は 2012/01/16~2012/02/03。

優秀作 8本は、

  • Windows Store Beta オープン時にアプリが掲載される
  • BUILD で配布されたサムスンの Windows 8 プリインストール済みタブレット PC
  • Windows Azure 1年分
  • Windows Store のサブスクリプション 2年分

が景品だそうです。(金額にすると 4,899ドル相当とあります)

ラウンド 2 に進んだら、コンフィデンシャル版のアップデートされた Windows 8 をベータプラグラムからダウンロードして、そいつで動くようにアプリをビルドして、それを Windows Store にサブミットすること、とあります。
Windows Store Beta の開始が 2月下旬とかでしたっけ?そのころに Windows 8 Beta も出てくるとかってニュースになってたと思うので、そのバージョンが事前に配布されるんでしょうね。

ちょっと気になったのが、”One (1) two year subscription to the Windows Store. Approximate Retail Value (ARV) $99.99.” という一文。
これって Windows Store のサブスクリプションは 2年分が 1セットになってて、それが 99.99ドルって意味なのかな?
どっかで 99ドルのと 49ドルのがあるって見たような気がするけど、単に 2年だと 99ドルで 1年だと 49ドルってことなのかな?
そういやこれって、AppHub とは別に払わないといけないんだろうか?

2012年1月10日火曜日

[HTML5] Cut the Rope が HTML5 に移植されたそうです

Cut the Rope now in HTML5」 より。
ZeptoLab の 「Cut the Rope」 という iPhone、Android 用のゲームが HTML5 に移植されたそうです。(iPhone、Android 版は 7千万ダウンロードとのこと)
この移植を行ったのは PixelLabs、ZentoLab、Internet Explorer チームで、Chrome、Safari、IE9、Opera で動くそうです。

上記の記事に Play リンクがありますが、ゲームは http://www.cuttherope.ie/ です。
この記事で Cut the Rope というのを初めて知りましたが、普通におもしろいですね。
つい第2ステージまで遊んじゃいました。
実は Chrome で遊んでたんですが、第2ステージまでクリアして第3ステージに進もうとすると 「IE9 をダウンロードしてから戻って来てね。タスクバーにピンしとくといいよ!」 だそうですw

ちなみに、と Windows Phone 7.5 の IE で試してみたら、一応動きました。(最初のダウンロードがなぜか 72% で止まるんですが、しばらくまってるとちゃんと進みます)
ただ、遊んでみるとドラッグが IE に取られちゃうみたいでロープを切りことができません。これは 「オプション」 の 「drag to cut」 を 「click to cut」 にしてやれば切ることができるようになりました。
けど、しばらく遊んでるとものすごく重くなってゲームにならない感じになってしまいました。
残念。

で、記事に “The Developer Guide” なんてリンクもあります。
(ゲームそのものより、コッチの方が気になったんですけどね)
こちらには Objective-C から JavaScript に移植した際のもろもろなんかが書かれているようです。(まだ読んでない)
Windows 8 Apps へのリンクもあったり、「get ready for the Windows 8 Store!」 なんてことも書かれてたり。
あぁ、そうか、HTML5 にしとけば Metro style アプリにすることも簡単だってことになるのか。