ページ

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 アプリにすることも簡単だってことになるのか。

2012年1月6日金曜日

[IE][JavaScript][WP7] JavaScript と Script# と PhoneGap

進化する ECMAScript
これは、Internet Explorer チームのブログ(英文記事を日本語訳してくれたもの)ですが、Microsoft が JavaScript に対して結構本気だっていうことがよく分かる感じです。Math、String、Number やグローバリゼーションの強化案ってことでプロトタイプを作ってすでに公開しているとのこと。
そういや、以前に jQuery でもグローバリゼーション・プラグインを公開していましたね。(@IT: 「Microsoft発のjQueryグローバリゼーション・プラグイン」)

と、まあ、こういった JavaScrpt の強化についても気になるところではありますが、個人的にこの記事で一番気になったのは 「数十万行の JavaScript コードから成る Office Web アプリケーション は、主に Script# をベースに記述されており」という部分。
そういや、Script# が使われていると聞いたことがあるような気がしないでもない。
Script# っていうのは、C# で JavaScript のコードを書けるようにするっていうシロモノです。(C# をコンパイルすると JavaScript が生成される。記事にも出てくる Google Web Toolkit は Java をコンパイルすると JavaScript が生成されるヤツですね)
私もプログに取り上げたことあったなぁと検索してみたら

といったあたり。2006年のころですか。WPF/E なんて単語も出てきてて、なつかしい。(ちなみに、WPF/E は Silverlight のコードネーム)

で、先日の PhoneGap と Script# を組み合わせて使うなんてことができるとおもしろいかも、なんて思いました。
これができるなら、Windows Phone、Android、iOS すべてで動くアプリを C# で書けるってことになりそうですね。
理屈の上では PhoneGap の API をマネージドであるかのように見せかけるアセンブリ ( ここ の “Referenced Assemblies” にあたるアセンブリ) があればいいのかな?

Mono for AndroidMonoTouch を使えばプログラミング言語としては C# を使えるけど、これらは API 自体はプラットフォームごとに異なるから UI 部分なんかはそれぞれごとに作らなくちゃいけないですよね?それに対して、PhoneGap は HTML+α がベースだから UI 部分も含めて大部分が使い回し可能ってことになりそう。
時間があったら Script# について久しぶりに調べてみたいな。

# ところで、Office Web アプリケーションを作るのに使った Script# って公開されてるのと同じものなんだろうか?ひょっとして、Microsoft 社内用のバージョンがあったりするのかな?

2012年1月5日木曜日

[WP7] Coding4Fun Windows Phone Toolkit

http://coding4fun.codeplex.com/
ほぅ、こんなのあったんだ。
Windows Phone 7 用のコントロール集です。
上記にスクリーンショットがありますが、RoundButton(丸いボタン)、TimeSpanPicker(時間間隔の選択)、Pipup を使ったメッセージボックスや入力ダイアログ、アバウトダイアログなど、色選択コントロールなんかが入っています。「Addition to the Coding4Fun Toolkit - MetroFlow」 にある MetroFlow コントロールも入っています。(言葉で説明しにくいですが横配置で選択されている項目だけが広くなるようなコントロールです)
あと、bool を Visibility に変換するコンバーターなども入ってます。
Themed Image Converter は現在のテーマが “Dark” か “Light” かによって使う画像を切替えてくれるコンバーターなのかな?そりゃいいな。(しかし、ApplicationBar は UIElement じゃないからデータバインドできないよ、とかって悲しい事になりそうな気がするけど)

パッケージ(NuGet)で入れれるみたいですが、Source Code のところの Latest Version をダウンロードすれば、サンプルも含めてソースコードをダウンロードできます。(確認してないけど、NuGet の方だとサンプルは入ってないんじゃないかな)
Latest Version のソースコードをダウンロードして、Visual Studio 2010 でソリューションを開き、Coding4Fun.Phone.TestApplication を 「スタートアッププロジェクトに設定」 して実行すればサンプルをエミュレーターで動かすことができました。("Dependencies\Microsoft.Phone.Controls.Toolkit.dll" を 「ブロックの解除」 してやらないとビルドできないかもしれません)

2011年12月26日月曜日

[Windows8] ピクチャパスワードの解説

ピクチャ パスワードを使ってサインインする」 より。

Windows 8 の新しいサインイン方式 「ピクチャパスワード」 (要するに、画像に 3回程度タッチしてそのパターンをパスワードにする) の安全性などについて解説されています。
タップと線と円を組み合わせれば 3回程度で結構な強度になるんですね。
「画面に残る操作痕に対するセキュリティ策」 なんてことも考えなくちゃいけないのはおもしろいな。これに関連してちょっと思ったのは、パスワードをキー入力しているところを盗み見てもとっさに全文字覚えるのは大変ですが、ピクチャパスワードなら覚えることができちゃいそうってところかな?

2011年12月22日木曜日

[WP7] Windows Phone 上でアプリ開発ができるツール - TouchDevelop

TouchDevelop v2.5: new tutorial, artwork, forum, and more より。

へえぇぇぇ、こんなのがあったんですね。
TouchDevelop という Windows Phone 7 アプリです。すでにバージョン 2.5 なので結構前からあったのかな?
サイトなどを見るとわかるように開発しているのは Microsoft Research です。Microsoft Research というのは Microsoft 社の研究開発部門なので、このアプリも研究の一環なんでしょう。

で、この TouchDevelop ですが、このアプリ自体がアプリの開発環境であり、実行環境にもなっています。
アプリの開発は、独自言語を持っていて、その言語でガシガシ書いていくようです。スクリーンショット に “action main()” で始まるいかにもプログラムっぽいものがありますが、コレです。
ただ、アルファベットをすべて打ち込むわけではなく、カーソルがあるところの文脈にあわせてそこで使えるコマンドなどが表示されるのでそれをタップして行くという感じです。(インテリボタンと言うみたい)
たとえば チュートリアル (英文・PDF) では、まず Shake イベントを選びます。続いてこのイベントの中身をプログラミングするんですが、「media ボタンをタップ」「songs ボタンをタップ」「rand ボタンをタップ」「play ボタンをタップ」 と 4回タップするだけで 「保存されている曲をランダムに再生」 というコードが出来上がる、なんて感じです。

もちろん、作ったアプリはいつでも実行できますし、Pin すればスタートスクリーンに配置することもできます。
また、Publish すれば公開することもできます。公開したアプリは誰でも TouchDevelop で読み込んで実行することができますし、コードを編集することもできるようです。また、公開されているアプリは https://www.touchdevelop.com/ でも見ることもできますし、こんな風に コードの内容も丸見え状態になってます。

TouchDevelop をインストールすると最初からいくつかサンプルが入っていて、実行したりコードを編集したりできます。これを書きながらちょこちょこと眺めてみましたが、なかなか興味深いです。

2011年12月21日水曜日

[WP7] PhoneGap が Windows Phone 7.5 に完全対応

PhoneGap が 1.3 で Windows Phone 7.5 に完全対応したそうです。
Full Support for PhoneGap on Windows Phone is Now Complete!

PhoneGap は HTML5+CSS3+JavaScript フレームワークで、これを使えば iOS や Android などのマルチプラットフォーム対応アプリケーションを作成することができます。(と言っても、私は使ったこと無いですし、ぜんぜんわかってないですが)
HTML5 と言っても Web サイト上のアプリではなく、出来上がるのはクライアントアプリです。
WP7 の場合は .xap ファイルが出来上がります。(.xap の中に HTML5、CSS3、JavaScript などのファイルも含まれています)
なので、普通のアプリと同様にマーケットプレース経由で配布することになります。

Get Started with PhoneGap on Windows Phone 7
こちらのブログには紹介動画もありました。
PhoneGap をインストールすると Visual Studio 2010 用のプロジェクトテンプレートも入るようです。これでプロジェクトを新規作成すると一通り必要なものは自動作成されます。あとは HTML なり CSS なり JavaScript なりをガシガシ書いていくだけです。

一本目の紹介動画を見ると、navigator.notification.alert(“メッセージ”); なんてやるとちゃんと WP7 風のメッセージボックスが表示されてます。(ソース見たわけじゃありませんが、HTML で擬似的に作ってるんじゃなく、WebBrowser コントロール経由で本物の MessageBox を呼び出してるんじゃないかと思います)
console.log(“ログ出力”); なんてやると Visual Studio の 「出力」 に出力されます。(これは System.Diagnostics.Debug.WriteLine を呼び出してるのかな)

二本目の動画では、カメラを呼び出してます。
カメラは navigator.camera.getPicture() で呼び出せるようですが、どうやらデフォルトではカメラはサポートされていない様子。
と言っても、サポートするのは簡単で、PhoneGap に Camera.cs というソースが含まれているのでそれをプロジェクトの Plugins フォルダに追加するだけ。サイズをコンパクトにできるようにプラグイン方式にしているんでしょうね。

2011年12月20日火曜日

[WP7] エミュレーターでもラジオのテストができる

Windows Phone Arch 主催の Windows Phone Hackathon in Osaka (12/4 開催) のときに 「FM ラジオってエミュレーターでは鳴らせませんよねぇ」 という話をしていたら 「いや、鳴らすことできますよ」 と教えてもらいました。

エミュレーターでも周波数 88.5 もしくは 89.5 にすれば音楽が流れるようになってるんですね。88.5 と 89.5 ではちゃんと違う曲が流れます。もちろん本物のラジオが鳴るわけではなく、エミュレーターに埋め込まれた音楽が鳴るだけですが。
コードで書くと

Microsoft.Devices.Radio.FMRadio.Instance.Frequency = 88.5;

これだけでエミュレーターから音楽が鳴り始めます。

しかし、この情報ってどこに書いてあるんだろ?MSDN Library を検索してみましたがどこに書いてあるのかわかりませんでした。

2011年12月19日月曜日

[Silverlight] Silverlight 5 の 3D アクセラレーションがデフォルトで動かない件

前の記事の 「[Silverlight] Silverlight 5 の 3D アクセラレーションはデフォルトでオフ(オフと言うか拒否)」 について。
正直、自分では 「ふーん、デフォルトでは拒否なんだ」 程度にしか思ってなかったんですが、これってかなり残念な感じかも、という気がしてきました。

Silverlight 5 で 3D なゲームを作っても一般の人にはよくわからない理由で動かないわけです。
動くようにするためには以下の手順で 「許可」 してもらう必要があるわけです。

  1. Silverlight プラグインの上で右クリックして 「Silverlight(S)」 をクリック。
  2. 表示されたダイアログの 「アクセス許可」 タブをクリック。
  3. 一欄から自分のサイトを探してもらう。(URL が列挙されてるだけなのでわかりやすいとは言えないかも。frame で別サイトを組み込んでいたりする場合はどうなるんだろう?)
  4. 見つかったらそいつを選んで 「許可」 ボタンを押してもらう。

単に 「アクセス許可を与えてくれ」 だけじゃ、それなりの人にしかわからないでしょうから、この手順を書いとかなくちゃダメって感じになりますね。
先の記事にも書いたように GraphicsDeviceManager.Current.RenderMode を見ればハードウェアアクセラレーションが使えるかどうかがわかるので、それで表示・非表示してやる感じでしょうか。メッセージボックスだと OK ボタンを押して閉じないと Silverlight プラグイン上で右クリックできないので、見ながら操作できるように XAML で書いといた方がよさそうですね。
アプリにもよるでしょうが、最低限、日本語と英語くらいは用意しておいた方がいいかもしれません。

でも、一番の問題はなぜデフォルトでは拒否されているのか、それを許可するとどうなるのか、をきちんと説明しないといけないことじゃないかと思うんですよ。
HTTPS なんかでもありますよね。オレオレ証明書を使っていて 「警告メッセージが表示されるけど問題ないからそのまま OK してくれ」 なんて説明してるサイトが。問題があるから (問題がある可能性があるから) 警告メッセージがでるわけで、こんないい加減な説明をしていいはずがありません。
これと同じで 「何も考えずに 3D グラフィックスを許可してくれ」 はまずいんじゃないかと思うわけですよ。
けど、きちんとした説明を書く自信なんて無いなぁ。

■ RequestDeviceAccess() は無いの?
Silverlight 4 からはカメラやマイクが使えるようになってますが、これも知らないうちにオンにされたりしたら困るわけで、ちゃんと使う前に許可を得なくちゃいけません。
そのために CaptureDeviceConfiguration.RequestDeviceAccess() という静的メソッドが用意されています。
このメソッドを呼び出すだけで

Silverlight5_CameraAccess.png

このダイアログが表示されます。
右クリックしてどうのこうのとしなくても、このダイアログで簡単にアクセス許可の可否を選択できます。
「回答を保存する」 をオンにすれば右クリックで出るダイアログの 「アクセス許可」 のところにちゃんと記録されます。
もちろん、今の言語にあわせて日本語なり、英語なりで表示されます。
「詳細情報」 のリンクをクリックすればマイクロソフトのプライバシーポリシーの説明が表示されます。

3D グラフィックスには RequestDeviceAccess() に相当するものって無いですよね?
デフォルトで拒否でいいからこれを用意して欲しいなぁ。

2011年12月16日金曜日

[VS11] Visual Studio 11 の Direct3D サポートすごいな

Somasegar’s Weblog 「Visual Studio 11 Platform Tooling Advances」 より

Visual Studio 11 の Direct3D 関連のサポートがすごいことになってるんですね。

■ The first area of improvement
HLSL (High-Level Shader Language。GPU に対する命令を記述するための C 言語風の言語) が VS で普通にサポートされるみたいです。
あまり詳しくないんですが、以前は DirectX SDK に付いてる外部の HLSL コンパイラ(fxc.exe)を呼び出してコンパイルしてたと思いますが、これは XNA GameStudio でも今だに変わってなかったのかな?それがきちんと VS に統合されるという感じでしょうか。
また、エディターもちゃんと色付けやインデントなど C# や VB と同じようにサポートされるようです。(当然インテリセンスもできるんでしょうね)

シェーダーではいろんなことができますが、ピクセルシェーダーでは
    「マテリアル表面のテクスチャ A」 と 「陰影のテクスチャ B」 を合成する
みたいなことをやったりします。
これをビジュアルに編集するノードエディターが搭載されるようです。編集中もリアルタイムに結果が表示されるとか、”Time” ノードでアニメーションも定義できるとか、なにこれ、すげぇ!
もちろん、ビジュアルに編集した結果は HLSL がジェネレートされます。

■ The second area of improvement
.FBX や .DDS のビューワーも搭載されるようです。これで 3D モデルを VS11 内で確認できるとのこと。
(さすがに 3D モデルの作成機能は無いよとのこと)

■ The third area of improvement
DirectX のフレームをキャプチャしたり、GPU パイプラインの内容を参照したり、ピクセルの描画イベントを参照したりといった GPU のデバッグ機能が搭載されるそうです。(このあたりは (これまた詳しくありませんが) DirectX SDK や XNA GameStudio にはあった機能かもしれませんが)

--

今まで DirectX 関連は DirectX SDK や XNA GameStudio にまかせっきりだったものが、Visual Studio 本体に機能追加されつつ統合されるという感じでしょうか?
Windows Phone はもともと XNA をサポートしてますし、Silverlight も 5 で XNA サポートと、本体と分離して考えるほうが無理が出てきたってことかもしれませんね。

2011年12月15日木曜日

[Silverlight] Silverlight 5 の 3D アクセラレーションはデフォルトでオフ(オフと言うか拒否)

Silverlight 5 では GPU アクセラレーションが強化されて 3D とかも速くなったとかなんとか。。。ということだったので、試してみようと
http://david.blob.core.windows.net/babylon/Babylon.html

にアクセスしてみました。ここは、Code Recipe でコードが公開されている Babylon 3D engine のデモサイトです。

が、サイトにアクセスすると以下のようなメッセージボックスが表示されて正常に実行されません。

Error during initialization:Hardware rendering is disabled by security reason. Please right click on your silverlight plugin, go to permissions tab and allow 3D for this application.

解決策はこのメッセージに書いてあるとおりなんですが、Silverlight 上で右クリックしてコンテキストメニューを表示、「アクセス許可」 で 「3D グラフィックス」 を 「許可」 してやります。それからページをリロードしてやれば今度はメッセージボックスが表示されること無く、実行されるはずです。

Silverlight5_Allow3D.png

明示的に許可してやらないとダメなんですね。
確か WebGL もセキュリティ的な問題があるというような記事を読んだような記憶があるんですが、これも同じような理由でしょうか?GPU のことも、セキュリティのこともあまり詳しくはありませんが、確か以下のような話だったような。。。

Silverlight はサンドボックス内で実行されているのでどうがんばってもマシンに悪影響を与えることはできません。Silverlight ランタイムがいろいろがんばってセキュリティ的な悪影響を与えないようにしてくれてるわけです。しかし、GPU やグラフィックスドライバといった 3D アクセラレーションの部分は Silverlight ランタイムの管理外になってしまいます。今どきの GPU はすごく高機能で、単に画像を表示するだけではなく、シェーダー言語と呼ばれる C 言語風の言語で処理内容を定義するようなことができます。このあたりを利用して物理演算なんかも GPU でやってしまおうという DirectCompute、OpenCL、CUDA なんてものもあります。確か Silverlight 5 はシェーダーモデル 2.0 のシェーダー言語をサポートしていたんじゃないかと思います。こういったシェーダー言語の部分も含めて Silverlight の管理外となってしまうわけです。もちろん、GPU が 「マネージド」 になってて Silverlight ランタイムと同様に安全性を検証できるようになっていれば問題ないんでしょうが、もともと 「いかに高速に処理するか」 をメインテーマに進化してきたものなのでセキュリティ的な面からはいろいろとまずい所があるんでしょう。
そんなわけで 3D アクセラレーションに関する部分については Silverlight ランタイム側で安全性を保証できない、だから明示的にユーザーが許可してね、ということなんじゃないかと思います。

ところで、Babylon のデモサイトですが、“Predefined scenes:” のところでシーンファイルを選んでやるとデモ用に用意されたシーンが描画されます。データを読み込むのには時間がかかりますが、読み込んでしまえば 60fps で動いてました。

また、この 「3D アクセラレーションが使用可能か?」 の判断方法については Bobylon 3D engine の作者さんのブログにも書いてありました。
Silverlight 5 is out!
GraphicsDeviceManager.Current.RenderMode を見ればハードウェアアクセラレーションが使えるかどうかがわかり、GraphicsDeviceManager.Current.RenderModeReason を見ればハードウェアアクセラレーションが使えない理由がわかるようです。

2011年12月14日水曜日

[Live] SkyDrive API

まだよく読んでませんがちょっと覚え書き。

SkyDrive APIs for Docs and Photos—now ready to cloud enable apps on Windows 8, Windows Phone and more

もともと含まれていたのか、それとも今回追加されたのかはよくわかりませんが、最近リリースされた Live SDK 5.0 には SkyDrive だとかカレンダーだとかにアクセスするクラスが含まれているようですね。それだけでなく、REST で SkyDrive にアクセスする方法なんかも公開されているみたい。

Windows Phone 用の公式 SkyDrive アプリもリリースされましたが、Live SDK を使えば SkyDrive 対応アプリを作るのも簡単そう。

# 実は一番驚いたのは Live SDK のサンプル を見ようと思ったらサンプルの公開に github が使われてることだったり。
# Microsoft 公式で、Download Center とか CodePlex とかでなく github が使われてるのなんて初めて見た。

2011年9月29日木曜日

[WP7.1] Windows Phone SDK 7.1 のリリースノートに書かれてることで気になったところ

Windows Phone SDK 7.1 の正式版がリリースされましたね。
とりあえず、リリースノート を見てみました。(RC のときはリリースノートは英語のままでしたが、今回はリリースノートも日本語に翻訳されてます)

で、気になったところ。

「その他」のところにちょこっと書かれてるんですが、

  • 「HttpWebRequest オブジェクトの Response.ContentLength プロパティは、65,536 バイトを超えるすべての応答に対して 0xFFFFFFFF を返します」
    ってなんかすごいなw ContentLength プロパティって long(Int64)なのに上限が 65,536って。まぁ、HTTP 的に ContentLength は必ずしもあてに出来るプロパティじゃないから別にいいってことだろうけど。
  • 「XmlnsDefinitionAttribute クラスの使用はサポートされていません。使用すると、アプリケーションが応答を停止する場合があります」
    例外が出るとかじゃなく、アプリがだんまりになっちゃうってこと?まぁ、XmlnsDefinitionAttribute って使ったこと無いけど。
  • 「複数行テキスト ボックスでは、改行文字に \r\n ではなく \r を使用します」
    これは RC にも記述がありましたが、\r\n に決め打ちしてると困ることがあるかも。
  • 「XNA Framework レンダリングを使用する ListBox コントロールは、正常にスクロールしません」
    これも RC にも書いてありました。「ScrollViewer.ManipulationMode="Control"」 をつければ OK と。
  • 「Bing、Marketplace 検索、WebBrowser タスク プロパティで、Unicode 文字が正しく機能しない。 この問題を回避するため、タスクは Unicode 文字を使わずに表記してください」
    まじですか?!
    var searchTask = new MarketplaceSearchTask();
    searchTask.SearchQuery = "日本語";
    searchTask.Show();
    RC のエミュレーターでこうやるとバケバケになります。HttpUtility.UrlEncode("日本語") としてもダメです。これがそのまま正式版になっちゃったってこと?(誤訳かもと思って 英語のリリースノート を見てみましたがまったく同じことが書かれてました)
    ”Bing” っていうのは BingMapsTask の SearchTerm のこと?最近せっかく日本の地図がまともになったのに、BingMapTask で日本語検索できないとしたらがっかりだなぁ。
    WebBrowserTask ってのはどういうことだろ?
    var bworserTask = new WebBrowserTask();
    bworserTask.Uri = new Uri("http://www.bing.com/search?q=" + HttpUtility.UrlEncode("日本語"));
    bworserTask.Show();
    

    ってのが動かないってことは無いよね?(RC ではちゃんと動く。てか、UrlEncode してるんだから Ascii 文字しか使ってないし)WebBrowserTask には他に文字列使うプロパティは無いと思うんだけど?(URL プロパティは Obsolete になってる)

続く 「互換性に影響する変更点」 には結構いろいろ書かれてます。こちらは「理由」や「対処方法」も書かれてますし、一度は読んどいた方がいいかも。

あと、「元に戻された互換性に影響する変更点」 の 「既定では、画像のデコードは UI スレッドではなくバックグラウンド スレッドで発生します」 というのがすごくわかりにくい。RC のリリースノートには 「バックグラウンドスレッドでするようにしたけど、リリース版では元に戻す」 と書いてあったので、7.0 ではデフォルトで UI スレッド → 7.1 ベータではデフォルトでバックグラウンドスレッド → 7.1 正式版ではデフォルトで UI スレッドに戻った、ということなんだと思います。で、バックグラウンドスレッドでやりたいときは自分で BackgroundCreation と指定すればいいということなんじゃないかと。

2011年9月28日水曜日

[WP7] @IT:たった30分で完成。初めてのWindows Phone 7.5アプリ開発

@IT に記事が掲載されました。
たった30分で完成。初めてのWindows Phone 7.5アプリ開発

「WPFやSilverlightでの開発経験がある方に向けて、Windows Phoneでのアプリケーション開発がどのようなものかを紹介」という内容です。よろしければぜひご一読ください。

2011年9月9日金曜日

[WP7] Silverlight for Windows Phone Toolkit August 2011 のサンプルをビルドする

デブサミ関西のセッションでも 「Silverlight for Windows Phone Toolkit はとっても便利」 という話をしたんですが、サンプルを見てみようとするとうまく動かなかったりするので、書いときます。(将来のリリースでは修正されるといいなぁ)

まずは Silverlight for Windows Phone Toolkit August 2011 のソース & サンプルをダウンロード。
http://silverlight.codeplex.com/releases/view/71550
ここの 「Silverlight for Windows Phone Toolkit Source & Sample - Aug 2011.zip」 ってやつです。

ダウンロードして Windows Phone SDK 7.1 が入った環境で PhoneToolkit.sln を読み込んでビルドすれば OK、、、だといいんですが、エラーや警告がでます。

まず、「Xap パッケージ化に失敗しました。オブジェクト参照がオブジェクト インスタンスに設定されていません。」 というエラーが発生する件。
これは、PhoneToolkitSample プロジェクトの Image フォルダにある画像ファイルのファイル名が文字化けしているのが原因です。
私の環境だと København.jpg と Mürren.jpg が文字化けしてました。
ファイル名をリネームしてやるなりして、ちゃんと参照できるようにしてあげてください。

それから、「Silverlight for Windows Phone Toolkit - Aug 2011.msi」 の方でセットアップした Microsoft.Phone.Controls.Toolkit.dll には PhoneTextBox が入っていないようです。なのでこの dll を参照した状態では PhoneToolkitSample をビルドすることはできません。
もし PhoneTextBox 関連のエラーが出るようなら PhoneToolkitSample の 参照設定でいったん Microsoft.Phone.Controls.Toolkit への参照を削除し、参照の追加で 「Microsoft.Phone.Control.Toolkit プロジェクト」 への参照を追加しなおしてください。dll への参照ではなくて、プロジェクトへの参照です。「Silverlight for Windows Phone Toolkit Source & Sample - Aug 2011.zip」 に入っているソースコード版の Toolkit には PhoneTextBox がちゃんとあるのでこれでビルドできるようになります。

あと、「プロジェクト 'Microsoft.Phone.Controls.Toolkit' を参照できません。参照されるプロジェクトは、異なるフレームワーク ファミリー (Silverlight) を対象としています。」 という警告が出ます。これを消すには Microsoft.Phone.Controls.Toolkit.Design プロジェクトと Microsoft.Phone.Controls.Toolkit.VisualStudio.Design プロジェクトの参照設定にある Microsoft.Phone.Controls.Toolkit への参照を一度削除し、Microsoft.Phone.Controls.Toolkit プロジェクトをビルドした結果できあがる Microsoft.Phone.Controls.Toolkit.dll (Bin フォルダの下にあります)への参照を追加してやれば OK です。(こっちはプロジェクトの参照ではダメで、dll への参照にしてやる必要があります)

これでサンプルを動かすことが出来るんじゃないかと思います。
(他にも警告が出ていますが、それらは無視しても大丈夫そう)