‘プログラミング’のエントリ

Analog Book Reader Ver1.2をWindows Storeに提出。うまくいけば今週中にストアに並ぶはず。アイコンとかストアの説明文なんかも改善したので,日本以外のダウンロード数も増えてくれるといいなあ。

Analog Book Reader Ver 1.2完成。あとはスクリーンショットとか作りながら,しばらく使ってみて問題なければMicrosoftに送ろう。

Analog Book Readerテスト中だが,順調にバグを見つけてるので来週中くらいには公開できるか?

日本のWindowsストアでは,書籍カテゴリの無料トップ6~7くらいで安定しているが,実際はダウンロード数はだいぶ下がっている。日本のWindows 8.1ユーザでPDFを見たい人だとこれ以上は難しいのかな。海外ダウンロードを増やしたいんだけど,まずはストアのスクリーンショットとかで目立つようにするのがいいのかなあ。

2chのSurfaceスレでAnalog Book Readerの名前が出ていたので反応してみる。Analog Book Readerは,大々的には言ってないけど漫画ビューアとしても使える。あまり売りとして言ってないのは以下の理由。

  • 漫画ビューアには漫画ビューア独特の要求がたくさんあって,その辺に対応していない。rar対応もそうだし,各種補正とか,本気で対応するなら最低限そういう要求に応えないと漫画対応は名乗れない
  • Analog Book Readerはどちらかというとページ数が多くて1ページ読むのに時間がかかる本であるほど良さが分かるアプリだと思っているので,漫画を読んでも多分そんなに嬉しくない

ただ,Windows Storeには漫画を読むのによいアプリがあまりないという話っぽいので,漫画的な機能を付けていくのもアリかなあ,とは思う。要求をリサーチするために,次のバージョンで漫画とかコミックを試しにキーワードに入れてみるかなぁ。

ていうかアイデアリストが既に20を超えていて,いくらやっても追いつかないのが正直なところ。Analog Book Readerの強みを考えるとe-pubの方が優先度高いだろうし。

そういえば誤解を生みそうな表現だったので補足。次バージョンで選択機能をサポートするっていっても文字を選択する機能はまだサポートできないので,あくまで画像として選択できるというもの。選択してどうするかというと・・・リリースしてから書こう。

Analog Book Reader 1.2用の修正は完了。ページ見開きについては,とりあえず偶数奇数で見開きを読み込んで,確定した時点で更新するようにした。んだけど今回のバージョンはかなりいろいろ変えたのでテストに時間がかかりそう。

新しい機能は実装完了。範囲選択。自分は欲しいと思うけど,他の人が欲しいかは謎。とりあえずあとは保留していた見開き改善をやったらVersion 1.2かな。やっぱり自宅にいると作業がはかどる。本を読む時間が減って本末転倒という説もあるけど。。。

ページ見開きが難しい。のでとりあえず新しい機能を入れたりしている。四隅にスクロールするボタンとか,謎の選択機能とか,本が見つからない場合は本棚画面でダイアログを出すようにしたり。使い勝手を評価してもらうために試し公開してみたいけど,MS審査がいるからどうしても気軽に公開できない。

次バージョンに向けてとりあえず軽い修正をいくつかした。

  • スナップ表示でUIが崩れる問題の修正
  • ヘルプ画面でページ移動ができる問題の修正
  • デスクトップからのPDF/Zip関連づけ起動
  • 本サムネイルのデザインを変えて,ページ数を表示できるようにする
  • 本を選択したらメニューが自動的に出るようにする
  • Deleteキーで本を削除できるようにする
  • 右開きの場合,ブックマークは右側に置くようにする

あとはファイルがないときの処理と見開きの処理ができたら一旦公開かな。

しばらく開発してなかったので思い出すために軽くライブタイル対応してみた。ワイドと大の2種類のライブタイル対応をしたかったのだが,検索しても複数のサイズに対応させるやり方を書いたものがなく,最終的にQuickstart: Sending a tile updateを参考にした。テンプレートを2つ作って,最初のテンプレートの「visual」にもう一つのテンプレートの「binding」を追加すればOK。

ライブタイル対応で各本のサムネイルをキャッシュするようにしたので,本棚表示する時のサムネイル表示を速くしてみた。一応たくさん本があっても快適にはなった。

いろいろ使っていて,バグを発見。Analog Book Readerでファイルを開いて,一旦デスクトップを表示してからもう一度開くと,カーソルキーがきかなくなる。デバッガを使っていると再現しないので今まで気付かなかった。OnNavigatedToでWindow.Current.CoreWindow.KeyDownイベントを登録してOnNavigatedFromで解除しているのだが,デスクトップを表示するとOnNavigatedToなしでOnNavigatedFromが呼ばれるので,KeyDownイベントが解除されてしまっていた。NavigationModeを見て,本棚に戻るときだけ解除するようにして解決した。

先週ぱじさんにアメリカのナイスお土産を持って行ったときに,Kindleを使った漫画の読み方を見せてもらった。そういう使い勝手なのか。コメントでもらった,次のページへのスクロールが欲しいって言っていた意味がようやく分かった。Kindleは一度に見えるのが1/4くらいとすると,次のページに進むと,見えていない部分にスクロールするのか。Analog Book Readerではどうしようかな。

Kindle自体はZom-Bを買ってAndroidで読んでいるが,小説だと単純に次のページにいくだけなのでこれだけだと思っていた。

少しずつWindowsストアのコメントが増えていっている。評価がばらけているところもなかなか面白い。既存の電子書籍リーダーの常識的なところを割と無視しているので、ぴったり使い方が当てはまればいい評価になるし、当てはまらなければ何コレ?的な感じだと思う。掲示板にも書いたが、ダメなところを言ってもらえると参考になるので、そういう意見は歓迎。

今日ついたコメントだと、見開きでスキャンした本を縦置きで表示したときに、画面タップすると2ページ進んでしまうので使いづらいというもの。なるほど確かに。自分の環境は横置きメインで気づきにくいので、参考になった。他にも、ペン色は操作を複雑にしたくないのであえて黄色一色にしていたのだが、変えられるようにしたいというのが2票目なので、需要がありそうとか。

Analog Book Reader要望集を作ったので、進捗が知りたい方は見てください。

新しいバージョンがWindowsストアに登録された。ファイル読み込み中にページ移動しても一瞬でページが表示されるようにして、サムネイルも現在ページに近い順に読み込むようにしたので、体感的にはだいぶ改善されているはず。あとファイルを大量に登録しているときに、サムネイルを読み込んでから表示していたのを、表示してから少しずつ読み込むようにした。これで起動時に遅いのも改善される。

後は、どのページが見開きなのかという情報と、サムネイルそのものをキャッシュするようにすればかなり快適になると思うが、それはまた今度。

MSから回答。なんか障害だったらしくて今は大丈夫とのこと。見てみると,アプリケーションクラッシュのようだ。レポートには,いくつかの情報ファイルが含まれていて,一番重要なのがdmpファイル。このファイルをVisual StudioかDebugging Tools for Windowsで開いて,クラッシュの原因を調べる。今までのWindowsアプリだと,アプリケーションのpdbがあればどこで落ちたかがすぐに分かったのだが,winrtではなかなか難しい。言語レイヤーがいくつかあって,async/awaitでスレッド実行シーケンスが複雑になり,何重にも例外がラッピングされている。

普通に解析するのはかなり大変なので,Defrag ToolsのOneDriveで配っているPDEというツールを使うと,「!pde.dse」コマンド一発でコアな部分のスタックトレースまで表示してくれる。で,今回の場合,それでもユーザコードのココ,っていうのは出てこなくて,winrtの中で落ちてたりするので100%これが原因ってのは分からない。

とりあえず何かのボタンを押し終わったときに落ちていたのが分かったので,全てのボタンの動作をテストした。結果,ボタンの二重押しとかロード中にボタンを押したりしたときに落ちることが分かったので対策した。

Windows Storeから新しいバージョンがリジェクトされた。のはいいのだが,詳細を見ると

Overall result: in progress
Report generated at 1/1/0001 12:00 AM UTC

となってそのまま半日くらい変わらなかった。ので,サポートの認証ステータスのリンクから質問してみた。

Analog Book ReaderのWindows Storeのコメントで,「統計画面にスペルミスがある」というのと「遅くて使えない」というのをもらった。

遅いというのは他の人からも指摘されていて,改めてチューニングを考えてみた。今までは,ファイルロード中,最初から読み込んでいくのと平行して,画面に表示しようとしたページを優先で表示するようにしていた。それはいいのだが,ページをパラパラやっていると,読み込み待ちのページが増えていって,結局表示されるのがずいぶん後になってしまっていた。なので,今表示しようとしたページを最優先で表示するようにしてみた。専門用語で言うとFIFOからLIFOに変えたってことですね。とりあえずこれだけでもだいぶ改善されて,ロード中にパラパラめくる分にはそんなに待たないようになった。

あとは見開きの決定をもっと早くできればよいのだが,見開き計算結果をキャッシュするしかないだろうな。ここは慎重にやらないとバグりそうなのでもう少し後で。

ストアに提出したので,まもなくダウンロードできるようになるはず。

CSSのセレクタを実装中。結構ルールが複雑なのでオートマトン化を検討中。でもHTML内にある全ての要素をCSSの数十のルールと全てマッチングをとるというのはなかなかヘビーな気がする。ブラウザの実装ってどうやってるんだろう。

リリース以降、自分で使っていて気付いた不良をいくつか修正。詳細は更新履歴参照。夜中にWindows Store申請を出したら朝には公開されていた。米国で審査しているとしたら、時差の関係で日本からは効率よく公開できますね。

ユーザはどうやって更新するかというと、Windows 8.1の場合は自動更新らしい。なのでそのうち入れ替わっていることになる。

Flashぱじさんの非公開日記から。最初,私が「アナログ本に近い電子ブックリーダーを作る」と言ったときに,「パラパラめくるアニメーションに力を入れるの?? それは違うんじゃないかなー リアル本に近づけても意味ないよー」という感想を持ったらしい。

元々Analog Book Readerは,Windows 8の脱スキューモーフィズム,つまりデジタルなのにアナログを真似して使いにくくするのはもうやめよう,という理念に賛同して作り始めたもの。電子書籍も,本を読みたい人にとっては,ページめくりなんかやりたくないものであって,デジタルでまでめくる操作をさせられるのは苦痛だよね,と思ったのがきっかけ。なので私が目指したものとぱじさんが最初から持っていた感覚は同じわけですね。さすがぱじさん。

名前にAnalogが入っているが,これはデジタルで読んでいるのにアナログの本を読んでいるような感覚を得るという理想を表したつもりだが,まだそこまではいってないですね。できるだけ理想に近づけたいところ。

CSSのパーサーはなんとなく完成。@ルールはとりあえず非対応かなあ。ってところで,CSSはBNFで定義されているのでそれ通りに組めば良いのだが,一箇所変なところがあった。

URI:url({w}{string}{w})
    |url({w}([!#$%&*-[]-~]|{nonascii}|{escape})*{w})

で,stringは「""」か「”」の文字列。これだとurl(“http://denasu.com”)はAcceptで,url(http://denasu.com)はRejectになる。つまり引用符がない場合,一部の記号とASCII以外かエスケープ文字しか受け付けないので,コロンとかピリオドとか,アルファベットすら受け付けない。後半の例には引用符なしのものが出てくるので,引用符なしも正しいはずなのに。ってことで定義がバグっていると決めつけて,左括弧が来るまではURIとみなすように実装した。

Windowsストアに登録して10日くらい。最初,書籍カテゴリの一番最後に登録されていた。その後数日経過して書籍の新着の上の方に入って,ダウンロード数が一気に上がった。今は書籍の無料トップ6位くらいに入っている。なので,順位は最近数日のダウンロード数を元に計算していて,新着ソフトが比較的優遇されているといったところか。

今は新着で目立っているが,新着じゃなくなると目立たなくなりそう。定期的にバージョンアップしていく必要がある。あとはストアのアイコンをもう少し派手にしないといけない。アプリのアイコンをそのまま載せたけど,他の人は割と派手なアイコンにしてるのが分かった。

そういえば,Windowsストアアプリの開発関連の話って検索しづらくて,自分は「winrt」を入れて検索している。この日記で開発の話を書くときもwinrtのキーワードを入れるようにしよう。

本題。EPUBリーダーを作るためにWebブラウザを作ろうとしているが,まずCSSの解析を作るのに時間がかかりそう。NuGet探してみたけど,Winrtでそのまま使える手軽なものというとかなり制限されてしまう。

やっぱり電子書籍と言えばEPUBということで,調べている。まずはWindows StoreにあるEPUBリーダーをかたっぱしから入れてみたが,やり方はさまざまっぽかった。というか結構落ちまくるし使いづらいし,成熟してなさ感が強い。その中でもBook Bazaar Readerというアプリは読み込みは完璧な感じ。自力でレンダリングしてるんだろう。ただ,ページめくりのアニメーションとか,使いやすさよりも本っぽさを優先しているので,UI的に私が目指しているものとは正反対。

EPUBは中身がHTMLなので,扱いがちょっと難しい。やり方としてはWebViewを使ってIEのエンジンを使って描画するか,自力でWebブラウザを作るか,ってところか。IEエンジンを使うとページ分割がかなり大変になるし,ブラウザを作るのはさらに大変。多分テキストと画像のみに対応したWebブラウザを作るところに落ち着くかな。将来PDFを自力で読むことも考えると無駄にならないし。

Windows Storeに公開して6日。電子ブックリーダーカテゴリの新着に載った。どういうアルゴリズムなんだろう? そして初のコメントでやる気が出ますね。Google Playだと作者側からコメントを仕返す機能があったけど,Windows Storeはなさそう。とりあえずEPUBは元々次のバージョンでサポートするつもりだったのでニーズはあってることが確認できた。

Analog Book Readerを作る際,Visual Studio 2013にしてしばらくほっておいたのだが,一段落したのでWeatherTyping,WorldTester,PurentroをVisual Studio 2013用に再構築。なんかプロジェクトファイルを自動変換したらVisual Studio 2013がすぐ落ちるようになったので,結局すべてのライブラリやアプリのプロジェクトを再作成。毎回そうだからもう慣れたけど。とりあえずこれで何か急にパッチを出すことになっても対応できる。

最近日本語と英語の日記を同時に書いているのだが,その時から日記の更新率が低くなった気がする。英語で書くのがめんどうというならしょうがないが,更新するファイルが多すぎてめんどうなだけというのが本当の理由なのでもったいない。1回の更新でトップページと日記トップページと各日記ページを日英で更新しているのでやってられない。 というわけで日記を更新するソフトを作った。WPFで作ればこのくらいのものは1日で作れる。特にLINQの生産性は異常。

2014032201

Windows 8.1を持っている人にAnalog Book Readerをテストしてもらっている。まず最初の指摘はPDFを開くのが遅いこと。Windows 8.1の.NETに標準で付いているPDFレンダラーを使っているのだが,標準のAdobe Readerに比べるとやはり遅い。途中のページから読むときはそこだけまず読み込むから普通に本を読むときにイライラすることはないはずだが,PDFの解析とレンダー部分を自作するかどうしようか。

そういえばAnalog Book ReaderをWindowsストアに公開するときに,紹介用のスクリーンショットを作ったが,それだけで1日かけてしまった。著作権がいろいろあるのでスクリーンショット用の本を自作したのだが,最近TeXの環境もインストールしてないので,1度も起動していないAdobe InDesignを使おうと考えた。で,やり方がまったく分からず,基本から勉強することになった。せっかく苦労して作ったのでここに公開しておこう。タイピングソフトの作り方.pdf

「Analog Book Reader」がWindowsストアで公開された。Appストアのときは5日くらいかかってたから相当早い。denasu.comの中に紹介ページも作っておいた。

テストはSurface Pro 2でやっている。今日あたり職場の人がSurface RTとかLenovo Windows 8タブレットで試してくれるはず。

2014031901

ようやく「Analog Book Reader」の開発が完了。Windowsデベロッパーセンターで登録してみたので,来週には登録されているはず。

本当は先月リリースするはずだったのだが,テストフェーズに入って毎日バグが見つかっていたので延期になっていた。どこにバグが多かったかというとほとんどが非同期処理。Windowsストアアプリは,UIをブロックするのは許さないというのがある。例えば電子書籍アプリだと,本を開いたとき,本を開き終わるまで待つようなことはしてはいけない。でも自分のアプリだと,ブックマークや落書きがキャンバスにあって,ローディング中に操作できるようにするというのがかなり難しかった。