贅沢カンファレンス

/ Diary, Windows Phone

昨日は品川で開催されていたThe Microsoft Conference 2011に行ってきました。
IS12TやスレートPCが当たる抽選会が主目的という、いたって不純な動機だったわけですが、抽選会はあっさり撃沈したものの、事前に申し込んでおいたパートナー企業限定のファーストチケットのおかげで、専用ラウンジでマターリできるわ、ホテルレストランでの無料ランチは付いてくるわ、おみやげでマグカップは貰えるわ、という至れり尽くせりのサービスを堪能してまいりました。(完全にイベントの趣旨から外れてそうですが…)
開発者向けのWindows Phoneセッションに参加してきたのですが、立ち見の人までいて、なかなか盛況だったようです。
当然、Windows Phone所有率も異様に高かったわけですが、はたして一般の人にどれくらい普及してくれるのか、そこだけが気がかりな今日この頃。


先日Mango正式版(ビルド7720)にアップデートしたHTC Mozartですが、やっぱりどうしても日本語で使ってみたい、ということで、トライしてみました。
手順としては、Mango開発者向けベータ(ビルド7712)にアップデートする前にとっておいたバックアップ(ビルド7392)を使って、いったんバージョンダウンした後に、レジストリエディタのアプリを使って日本語ロケールのレジストリエントリを追加、しかるのちにあらためてMango正式版までバージョンアップをし直すというもの。
レジストリをいじるには端末がアンロックされている必要があるのでご注意を。
まぁ、詳しい手順はググってもらえば、そこかしこにあるかと思います。
で、めでたく日本語表示に対応したMozartは以下の通り。

これまでは中華フォントだったロック画面の日本語もちゃんと游ゴシックで表示されるようになり、見た目はIS12Tと遜色ない端末になりました。
こうなってくると手持ちのドコモガラケーのSIMを差して実際に電話として使いたくなってきたりするわけですが、技適マーク問題が行く手を阻むといふ…


Mangoリリース

/ Windows Phone

海外でのMangoアップデートがようやく開始されたようです。
手持ちのHTC Mozartも今朝無事にアップデート完了。
開発者向けのMangoベータから正式版のMangoと相成りました。

ベータ版では日本語ロケールの対応が不完全というか表示言語が英語のままだったので、正式版になればちゃんと日本語が表示されるのかなぁ、と思っていたのですが、どうやら考えが甘かったようで、全く変化なし。
まぁ、日本で発売されていない端末なので当たり前といえば当たり前なのですが、調べてみると、レジストリをいじるだけで表示できるようになるとのことなので、試してみようと思ったものの、Mangoで使えるレジストリエディタは今のところ存在しない様子。
開発者向けベータを入れる前に対策をしておけば良かったみたいですが、時既に遅しorz
バックアップから旧バージョンに戻してやり直すという手もなくはないのですが、さすがに面倒なのでMango版のレジストリエディタが出るのを待つしかないかと…
とりあえず全体的にパッと見でペータ版から変わっているところはなくて少々拍子抜けなのですが、個人的にはステルスWi-Fiに繋がるようになったのがありがたいです。


Mangoリリースに合わせてか、これまでZune経由でしか閲覧できなかったマーケットプレースのアプリ一覧などがWebからも見られるようになりました
これでわざわざ自前でスクリーンショット貼らなくても良くなりますw
ちなみに既リリースの電力使用率アプリのページはこちら
ただ、関西電力のCSV提供が9/22に終了したようで、それ以降起動時にコケてしまうという致命的なバグのためにアプリが起動しません。
修正版を先日申請しましたが、まだ承認待ちの状態なので、今ダウンロードしてもらっても起動しないアプリという情けない状態。
中部電力、九州電力も9/30でCSV提供が終わるようなので、残るのは東京電力、東北電力の2社だけなのですが、まぁ、めっきり涼しくなってきたことだし、電力不足の心配も少し和らいできたということでしょうから、ここは素直に喜んでおくことにしませう。


旬の過ぎた電力アプリだけでは寂しいので、新作アプリもふたつばかし開発していて、ひとつは先日マケプレ申請を行いました。
今回は半ば試験的に全世界を対象に公開し、かつ有料版として登録。
英語と日本語だけですが、多言語対応仕様になってます。
試用機能も付けてありますが、世界規模だとどれくらいダウンロードしてもらえるのか。
審査で落とされなければ今週中には公開できるかも、です。


電力使用率アプリ for WP7

/ Windows Phone

というわけで、2回目の審査は無事に通過したようで、ようやく昨夜マーケットプレースに公開されました。
審査はおおよそ4~5営業日と考えておけば良さげです。

でもって、記念すべき初アプリの内容は性懲りもなく電力使用率ネタで、アプリ名もベタに日本語で「電力使用率」w
英語名は「Power Usage for WP7」とか付けてますが、公開先は日本のみなので、まぁ雰囲気だけ。当然ながら無料アプリです、念の為。

WP7ユーザというかZune導入済みの方は、下記のダウンロードリンクから直接マケプレを覗いていただければ良いのですが、一応どんな感じに掲載されているかスクショ貼っておきます。

特長としては、需給情報を公開している電力会社5社(東京、関西、中部、九州、東北)に対応している点と、プッシュ通知によりタイル上に最新の状況を表示できること。
同種のアプリは既にいくつか存在していたのですが、上記の点をカバーしているものはなかったので、早い者勝ちとばかりに速攻で作ってみた次第。

これまで使わせてもらってきた東電状況APIから卒業して、各社のCSVファイルを直接参照する作りにしています。
東京、関西、東北の各社はCSVフォーマットが同じだったのですが、中部、九州については微妙に違っていたので、一律に見せるのに若干手間取りましたが、使っている情報はごく一部なので、まぁ、誰でも作れるレベルかと。

でもって、いちいちアプリを立ち上げないと情報が見れないのは使えないだろー、ということでトライしたのがWindows Phoneのウリでもある「タイル」へのプッシュ通知。
前回少し書きましたが、通知を受ける端末毎に割り当てられるチャネルURLを管理するためのWebサービスは自前で用意する必要があるため、これをAzure上に配置したWCFサービスで行うことにして、データはAzureストレージのテーブルに保存。
さらに、プッシュ通知依頼をするためのバッチサービスをAzureのWorker Roleとして作成し、こちらはぐるぐる無限ループで最新情報の取得と通知の処理を回しています。
現在の仕様では、5分に1回の通知頻度としており、ネットワーク接続が途切れていたりして通知に失敗した端末に対しては、1時間置いてからリトライするような実装になっています。

利用者が増えたときのサーバ側の挙動が若干気になるところですが、通知エラーをちゃんと拾う実装を追加してからは安定しているようなので、とりあえず様子見。
サーバ負荷が心配になるほどユーザ数が増えてくれればむしろ本望かとw

プッシュ通知を有効にすると、ストレージ上に端末毎のレコードが作られるので、おおよその利用者数が分かって(公式のダウンロード数は更新にタイムラグがあるようでなかなか反映されないのです)、ちょっと嬉しかったりするのですが、公開から20時間ほど経過した現時点で、ちょうど10人。
新着アプリを定期的にヲチしているようなコアなユーザはあまりいないんですかね…

ひとまず、WP7アプリ公開までの一連の流れを体験してみたわけですが、まだあちこち洗練されていない部分はあるものの、最低限必要な仕組みは整っているのかな、といった印象。
基本、英語ベースですが、我々でも何とかなったので、とりあえずアプリさえ作れればどうにかなりそうな感じです。
端末の普及加速を願いつつ、アプリ開発のノウハウを蓄積していきたいと思います。


なお、電力使用率アプリのサポートについてですが、@Meeks_Incにリプライしていただければ対応致します。お気軽にどぞー。


WP7審査落ち&プッシュ通知の注意点

/ Windows Phone

WP7の初アプリ申請からちょうど一週間。
先月29日に申請して、2日の夜にようやく結果メールが到着しました。
が、残念ながら審査落ち…orz

申請後に一箇所クラッシュするバグを見つけていたので覚悟はしていたのですが、Microsoftのテスターさんにもしっかり見つけられてしまったようです。
機内モードにしてネットワークに接続できない状態で特定の操作をすると落ちるバグなので、そりゃ見つけるだろー、といった感じですが、噂通りきっちりテストされているようで…

まぁ、このバグは既に直してあったのでさしたる問題はなかったのですが、よく分からないのはもうひとつの指摘にあったアプリケーションポリシーによるもの。
「2.9.1」に記載されているプッシュ通知に関するポリシーのようで「プッシュ通知を有効にする場合はユーザの許可を得よ」という話が書かれているようなのですが、確認用のメッセージボックスは出していたし、停止操作もできるようにしておいたつもりだったので、何をどうすればいいのか謎。
審査結果の文書は全て英語で書かれていることもあって、「ぉぃぉぃ、日本語ちゃんと読めてるんだろうな?」という疑惑はあるものの、仕方ないので文言を少し見直して「通知(Notification)」を強調したものに変えてみたのですが、果たしてこれで良いのかどうか…


というわけで、まだ詳細はお知らせしていませんが、今回のアプリはタイルへのプッシュ通知を利用しています。
WP7のプッシュ通知は、Microsoftが提供するプッシュ通知サーバ(MPNS)を利用するのですが、このMPNSに対して通知のリクエストを行うためには自前のサーバが必要となります。
また、プッシュ通知する相手先端末の一覧を管理するために何らかのWebサービス、ストレージも必要となるため、個人でやるには若干敷居が高めだったりするのですが、BizSparkパートナー企業ということで、Windows Azureを活用してみた次第。
端末管理にはAzumeインスタンスにWCFサービスを追加し、プッシュ通知のリクエスト用にWorkerRoleインスタンスを新作して対応。
Azumeでのノウハウを利用して比較的スムーズに実装できましたが、MPNSの仕様が英語ベースの情報しかないのがツライところ。
一番気になっていた通知頻度の限界値(throttling limit)は、英語のフォーラムを見る限り「1端末(チャネル)につき500回/24時間」とのこと。
未認証サーバの場合にこの制限がありますが、認証済みサーバの場合は無制限の模様。
いずれにしても、3分に1回の通知は可能ということなので、通常の利用においてはそれほど問題にはならなそうです。

通知の実装上注意が必要なのは、プッシュ通知が到達しなかった端末に対して何度も通知リクエストを送り続けると、MPNS側からロックされて、しばらくの間他の端末に対するリクエストも受け付けなくなってしまうという仕様に対処しなければならないこと。(詳細はこの辺に書かれています)
ある端末に対する通知リクエストがエラーになった場合、自鯖側としては当該端末に対する定期的な通知をいったん停止する必要があるということです。
あくまでサーバ側の挙動なので、マケプレの審査内容には含まれていないと思いますが、あまり適当な作りだとプッシュ通知がうまくいかなくなりますので、ご注意あれ。
ちなみに、端末が長時間スリープしているとプッシュ通知が届かなくなり、前述の現象が発生するようになるので、サーバ側の対策は必須と思われます。