Windows Phone端末雑感

/ Windows Phone

image
めっきり冷え込んでまいりましたが、Windows Phone改めWindows 10 Mobileのローンチに合わせて、国内端末が続々と発表、月末には発売も控えており、盛り上がりに期待したい今日この頃。
直近で発売されるのはローエンドモデルが中心でミドルやハイエンドは年明け以降と言われていますが、MS純正のLumia 950/950XLを除くと、Qiワイヤレス充電を搭載している端末が今のところ見当たらないのが個人的に残念だったりします。
素直にLumiaが国内に来てくれれば良いのですが、今のところそういった話は出ていないようでこれまた残念。

これは余談ですが、直近にAT&T版のLumia 1520を購入したもののブツが届いて初めてQi未搭載の廉価版だったという事実を知り、己の情弱ぶりに反省しきり。
仕方なく充電用の汎用スタンドを用意したものの、やはり置くだけで充電できるQiの手軽さには敵いません。
ローエンドはともかく、ミドル以上のモデルはQi必須搭載にしていただきたいと思う次第。
ハイエンドなWindows 10 MobileはContinuumも付くので、最悪Qiは妥協してもクレイドル付きなら許せるかもしれません。
そういう意味ではAcerのJade Primoなんかは良さげかもしれませんが、Continuum、実際に使うことあるかなぁ、と考えると案外微妙かもしれず。
将来、まんまデスクトップアプリが動くような状況になれば形勢逆転も夢ではないと思いますが、ストアアプリしか動かない現状では厳しい印象は否めません。
Surface Phoneなんていう噂話も時折見かけますが、こういう発展の仕方になるのならば、PCをダウンサイジングして電話機能を付ける形のほうがシンプルに作れるんじゃないかという気もしてきます。

それはともかく、こんなところに個人的な要望を書いても仕方ないのですが、勢いで個人的にWindows Phoneで必須な機能を羅列していくと、「Qi(ワイヤレス充電)」、「クイックビュー(スリープ状態でも時計などの情報表示してくれる)」、「光学手ブレ補正付きカメラ」、「720p(1280×720)以上の画面解像度」といったところ。
現状のメイン端末であるLumia 1020にはこれら全て備わっているのでここだけは譲れない感じ。
ストラップが付けられるとなお良いのですが、これはさすがに厳しい注文かもしれません。
これらの条件を満たすと自ずとハイエンド系のモデルになると思うので、CPUやストレージサイズなんかはお任せでw
Lumia 950/950XLは全て満たしているので断然そそるのですが、ファブレットは携帯するには大きすぎるということで950一択となってしまうのが現状。
今のところ出始めのご祝儀価格なので手が出ませんが、次期メイン端末はこの辺りを狙いたいわけで、そういう意味ではこれから徐々に発表されるであろう国内のハイエンドモデルにも期待がかかります。
ここ数年、WP端末といえば技適の通っていないLumiaしか選択の余地がなかったことを考えると、来年以降はまさに天国のような、よりどりみどりな状況になるわけでとても楽しみです。


Calendiary

/ Windows Phone

image
久しぶりにWindows Phoneアプリの新作をリリースしたので紹介エントリ。

Calendiary」という名前の日記アプリです。
カレンダー系アプリの安定した人気に乗じて、というのも多少ありますが、諸事情で日記帳的なアプリが必要になったので作ってみた次第。
Windows 10 Mobileの影もチラつく中、ターゲットOSはWP 8.1。(10でも動きます)
軽快に動くことが前提で、かつ必要な機能を一通り網羅することを目標に仕上げてみました。
紙の日記帳として3年日記や5年日記といった、ひとつのページに数年分の同じ日付が書かれていて過去の日記が簡単に読み返せるものがあるようなので、それをピボット表示で再現したのが特徴です。
紙と違って年だけではなく月や週にもワンタッチで切り替えられるようにしたので読み返しに便利。
検索機能も完備しているので、自分で決めたタグ的なフレーズを書いておけば検索してすぐに確認や編集が可能。
ちなみにスペース区切りのAND検索という仕様になっています。

名前の通り、カレンダーと日記がフュージョンしたものなので、起動直後はカレンダー表示、日付をタップすると日記のプレビュー、そのまま編集ページに移動、という流れの操作になります。
カレンダーはもちろん祝日/六曜表示に対応。
PINロック機能によりプライバシー保護にも配慮してみました。
各日の日記にはアイコンと画像を登録できます。
アイコンは100種類以上の中からひとつを選択、画像は複数登録することができます。
ストレージ容量に配慮して、登録した画像は縮小保存されます。(縮小サイズは選択可)
オマケ機能として画像一覧のページを用意したので、フォトギャラリー的な使い方もでき、そこから日記の編集ページにジャンプすることもできます。
さらにバックアップ機能を搭載しているので、バックアップファイルを端末やクラウドに保存しておけば初期化やアプリ再インストール、端末入れ替えなどを行なってもデータの復元が可能です。
自動バックアップ的なことはパフォーマンス的に難しいので、あくまで手動操作になってしまいますが、せっかく入力した日記が消えてなくなるのは悲しすぎるので活用してもらいたい機能です。
その他、人によってはちょっぴり実用的かもしれない隠し機能もひとつ入ってたりするので探してみてくださいw

無料アプリの体裁で出していますが、ライセンス未購入の場合、30日分の日記しか書けないので実質的には有料な感じになっています。
ライセンス購入で保存日数制限が解除され、広告も非表示となりますので、気に入ってくれた方はご購入いただければ何よりです。


フォルダスキャンの高速化

/ Windows Phone

しばらく更新しない間にWindows 10もリリースされてしまいましたが、手元の環境ではまだVM上でしか動かしていなかったり。
「Windows Phone」改め「Windows 10 Mobile」も今日プレビュー版の新版がリリースされましたが、Insider Previewを入れているLumia 620では相変わらず重すぎて触る気が起きないレベルなのが何とも…
そんな中、チマチマとWindows Phone 8.1向けWindowsランタイム(WinRT)ベースのアプリを製作しております。
最新のUWPアプリはWindows 10シリーズでないと動かないため、現時点でいちばん普及しているWP8.1をターゲットとしている次第。
というわけで、この開発作業中に出くわした、とある問題とその対処法について。

WinRTアプリでフォルダやファイルを取り扱う場合、StorageFolderやStorageFileというクラスを利用します。
そしてそれらを通常はLocalFolderというアプリ固有の場所に格納しておくわけですが、まず第一の問題はStorageFolderクラスにファイルの存在チェックメソッドが存在しません。(Phoneのみ、PCはTryGetItemAsyncメソッドでチェックできます)
存在しないファイルにアクセスしようとすると例外を吐くので、情けないことにこれを拾って処理するなどしなければなりません。
次の問題として、あるフォルダに格納されている数千件レベルの大量ファイルの一覧(コレクション)を取得しようとするとやたら時間がかかります。
StorageFileのインスタンスが欲しい場合は仕方ないにしても、ファイル名の一覧だけを取りたい場合などこれでは困ります。
エミュレータは速かったりするので気づきにくいのですが、実機で動かすと数秒レベルで待たされてしまいます。
また、更新日付やファイルサイズなどのプロパティ情報を取得するには別途メソッドコールが必要となり更に遅くなるなど、とにかく大量のファイルに対して何か処理しようと思うと不都合なことが頻発します。
当初はインデックス情報のようなファイルを別途用意して回避しようと考えていたのですが、調べてみるとC++/CXを使うとフォルダアクセスが劇的に速くなることが判明。
C++は門外漢なのですが見よう見まねでC#から呼び出すためのコンポーネントを作ってみたところ、素晴らしく速くなったので参考までにご紹介。
ちなみにネタ元はこちらです。
とにかくFindFirstFileExがやたら速いのでStorageFileインスタンスそのものを必要とないフォルダスキャン処理はC++側に寄せてしまうのもよろしいかと。


ワイドタイル対応

/ Windows Phone

image
IS12T以来、国内から消滅していたWindows Phoneが遂に復活、というわけで、「MADOSMA」発売直前でにわかに盛り上がっているWPクラスタ。
アプリ開発している側としても国内のWPユーザが増えるのは大歓迎なので、ささやかながら貢献すべく、積年の課題であったWindows Phoneアプリのワイドタイル対応に手をつけてみました。

とりあえずのターゲットは弊社提供アプリの中で日本国内では最もDL数の多い「タイルカレンダー」。
それでも世界向けの「Live Calendar」と比べると5%にも満たない程度のDL数しかないので、基本的にメンテナンスも後回しにしていたのですが、Live Calendarに先駆けてワイドタイルに対応することにしました。(テストリリースという意味合いのほうが大きかったりしてw)

ワイドタイルに対応すること自体は実はそれほど難しいものではなくて、表示するネタさえ用意できればすぐにでもできるのですが、カレンダーの隣に表示するとしたらやっぱスケジュールでしょ、ということになるわけで、このスケジュールの取得が経験上色々と厄介だったりするわけです。
それと、バックグラウンドでのタイル更新に伴うメモリ問題。
バックグラウンドの場合、利用可能なメモリ量がOSによってごく少量に限定されてしまうため、大きな画像を扱ったりするとメモリ不足で動かなくなってしまいます。
実際にエミュレータで試してみると、WP8では明らかなメモリ不足に陥ってしまうようだったので、結局ワイドタイル表示への対応はWP8.1限定という形にせざるをえませんでした。
表示レイアウトも悩みどころでしたが、所詮691x336ピクセルの枠しかありませんので、今日/明日の予定だけを表示するようにしてシンプルにまとめてみました。
個人的に鬼門であったスケジュールの取得には案の定手こずったものの、何とか安定的に取得できるようになったので、これは他のアプリにもフィードバックしていきたいと思う所存。
また、ワイドタイル対応に伴って今回からWP7系は切り捨てる形になったので、改修のついでにWP8以降から追加されたSaveAppointmentTaskを使った「予定の追加」もアプリ内から行えるようにしてみました。
編集や削除ができるAPIがあれば文句なしなのですが、ここらへん今一歩ですね。
個人的にはこれでようやく内蔵のカレンダーアプリを使わなくても何とか運用できるレベルになったかな、という感じ。
あとはピボットの挙動調整と、日付をタップした際の視覚フィードバックを追加して、無事に改修完了。
カレンダーの描画にはチューニングの余地がありそうだけども、低スペックなLumia 525でもサクサク動くようなので今のところは手を入れていません。

そんなこんなで、一応ワイドタイル化を果たしてはみたものの、こんなんでよろしかったでしょうか?w
新たにWPユーザとなるMADOSMAユーザさん、スタート画面の賑やかしにオススメですのでよろしかったらどうぞ。
感想、要望等ありましたらレビューにでも入れてあげてください。
なお、この後少し様子を見てLive Calendarのワイドタイル対応をしていく予定です。


Sound of alarms

/ Windows Phone

image
ここ最近、続々と発表があったWindows Phoneの国内(再)発売を記念して…、というわけではないのですが、祝日を除外して鳴らすことができるアラームアプリ「Alarms +」をアップデートしてみました。

初版リリース時の記事でも触れていますが、デフォルトの通知音しか鳴らせない問題はやはりユーザレビューでも何度か指摘を受けていることもあり、今回重い腰を上げてようやく対応した次第。
常用している自作アプリのひとつなので、半ば自分のためのバージョンアップでもありますw

そもそもプロジェクトに音源を埋め込めばすぐにでも対応できた話ではあるのですが、問題は音源の調達。
たまたまネット記事で見かけた「SoundSnap」というサイトでいくつかプレビューしてみたところ良さげな音源が見つかったので組み込んでみることに。
ちなみに同サイト、プレビュー(試聴)は無料ですが、ダウンロードは有料。
支払金額に応じて単価が変動する仕組みですが、とりあえずお試しということで一番安い5曲で$9というプランをチョイス。
1曲200円強ということで数秒の曲にしてはなかなかイイお値段だったりしますが、購入後はロイヤリティフリーということなので、まぁこんなものなのでしょう。
余っているPayPalのクレジットを使ってサクッと購入、WAVとMP3、両方のフォーマットがダウンロードできます。
領収書も発行できるので、法人でも比較的利用しやすいかと。

とりあえず音源が確保できた、ということで、いざプログラムの改修。
オーソドックスにToolkitのListPickerコントロールを使って選択する形を考えていたのでサクッと書けるだろうと思っていたのですが、サウンド選択のページ内にプレビューボタンを付けようとしたらば大ハマリ。
まずListPickerPageを自作するべくToolkitのソースを引っ張ってきたところまでは良かったのですが、なぜか呼び出し元であるListPickerに設定したプロパティがことごとく無視されるという状況が発生。
選択したアイテムが格納されるSelectedItemプロパティもListPicker側に反映されないので、試しにListPicker自身も自前で抱え込む形にしてみたのですが、それもうまいこといかず。
結局、ListPickerPage内部でゴニョゴニョすることによって諸々の問題を強引に回避するという実装に相成った次第。
毎度のことながら、ちょっと標準から外れたようなことをやろうとすると途端にスマートな実装から遠ざかってしまいます…

ま、それはさておき、たったの5曲とはいえひとまずアラーム音が変えられるようになったので少しは普通のアラームアプリに近づけたかと思われ。
本当は端末に保存されている着信音をアラーム音として使える形が理想なのですが、現状その手段は提供されていないので、Windows 10 for phonesに期待しておきます。