‘プログラミング’のエントリ
掲示板にも書いたけど,Ver1.2でいろいろテストして,起動時のエラーの原因ぽいものは分かった。ここには技術的な話を書く。
原因は,Ver1.2で追加したエラーログ。ファイルが開けない場合などはデバッグログを出すようにしていたが,Ver1.2ではRelease版のときだけファイル出力するように変更した。しかし,大量のエラーログが出た場合に排他制御がうまくいかず,UnauthorizedAccessExceptionエラー(Access Denied)が出るようになっていた。起動時にパスワードPDFなどがたくさん登録されているとエラーになりやすくなる。
await FileIO.AppendTextAsync(logFile, message);
awaitがついているので単純にlockかけることはできない。なので,メッセージをキューに入れて,タスクから一定時間毎にキューの内容を出力するのが正攻法か。とりあえず今回はエラーログは封印して出さないように修正しておく。
アメリカはこれから週末なので,今からストアに申請しても,公開されるのは日本時間の来週の火曜日以降だろう。
ただ,すでにSharpCompressというライブラリを取り込んでrar対応してしまったので,バグFixと一緒にrar対応も入ってしまう予定。
プログラミング
Analog Book Reader
コメント・共有する
とりあえず職場の人にLenovoとSurfaceRTのテストを頼んでみた。それで何もなければWindows Dev Centerにダンプが出るのを期待して待つか。で,他のマシンで試していて気付いたけど,ホイール無しマウスだと拡大縮小できなくて使えないですね。キーボードでできるようにするか拡大ボタンが必要か。
そしてよさそうなrarライブラリがあるっぽいので週末試してみよう。
プログラミング
Analog Book Reader
コメント・共有する
Windowsストア提出後,40分で公開された。早すぎる。ということでAnalog Book Reader Ver1.2公開。変更点はこのページの後ろに書いておいた。
で,今回本棚の画像をキャッシュして,本を追加して一回表示した後は一瞬で表示できるように変えたのだが,コメントで落ちるようになったという方がいますね。自分のところでは数百個追加したり追加中に削除してを繰り返すテストをして大丈夫だったのだが,ハードウェアによるのだろうか。100個でも数MB~数十MBの消費なのでメモリやディスク不足ではないと思うし。
Windows Storeのコメントに返信する機能があればいいんだけど,現状追加情報をもらう手段すら存在しない。自分で自分のアプリにレビューすればいいのかな。とりあえず他にこういう症状が出る方がいたら教えて欲しいです。できればどのPCを使っているかも一緒に。
プログラミング
Analog Book Reader, Windows Store
コメント・共有する
2chのSurfaceスレでAnalog Book Readerの名前が出ていたので反応してみる。Analog Book Readerは,大々的には言ってないけど漫画ビューアとしても使える。あまり売りとして言ってないのは以下の理由。
- 漫画ビューアには漫画ビューア独特の要求がたくさんあって,その辺に対応していない。rar対応もそうだし,各種補正とか,本気で対応するなら最低限そういう要求に応えないと漫画対応は名乗れない
- Analog Book Readerはどちらかというとページ数が多くて1ページ読むのに時間がかかる本であるほど良さが分かるアプリだと思っているので,漫画を読んでも多分そんなに嬉しくない
ただ,Windows Storeには漫画を読むのによいアプリがあまりないという話っぽいので,漫画的な機能を付けていくのもアリかなあ,とは思う。要求をリサーチするために,次のバージョンで漫画とかコミックを試しにキーワードに入れてみるかなぁ。
ていうかアイデアリストが既に20を超えていて,いくらやっても追いつかないのが正直なところ。Analog Book Readerの強みを考えるとe-pubの方が優先度高いだろうし。
プログラミング
Analog Book Reader
コメント・共有する
ページ見開きが難しい。のでとりあえず新しい機能を入れたりしている。四隅にスクロールするボタンとか,謎の選択機能とか,本が見つからない場合は本棚画面でダイアログを出すようにしたり。使い勝手を評価してもらうために試し公開してみたいけど,MS審査がいるからどうしても気軽に公開できない。
プログラミング
Analog Book Reader
コメント・共有する
次バージョンに向けてとりあえず軽い修正をいくつかした。
- スナップ表示でUIが崩れる問題の修正
- ヘルプ画面でページ移動ができる問題の修正
- デスクトップからのPDF/Zip関連づけ起動
- 本サムネイルのデザインを変えて,ページ数を表示できるようにする
- 本を選択したらメニューが自動的に出るようにする
- Deleteキーで本を削除できるようにする
- 右開きの場合,ブックマークは右側に置くようにする
あとはファイルがないときの処理と見開きの処理ができたら一旦公開かな。
プログラミング
Analog Book Reader
コメント・共有する
いろいろ使っていて,バグを発見。Analog Book Readerでファイルを開いて,一旦デスクトップを表示してからもう一度開くと,カーソルキーがきかなくなる。デバッガを使っていると再現しないので今まで気付かなかった。OnNavigatedToでWindow.Current.CoreWindow.KeyDownイベントを登録してOnNavigatedFromで解除しているのだが,デスクトップを表示するとOnNavigatedToなしでOnNavigatedFromが呼ばれるので,KeyDownイベントが解除されてしまっていた。NavigationModeを見て,本棚に戻るときだけ解除するようにして解決した。
プログラミング
Analog Book Reader, winrt
コメント・共有する
先週ぱじさんにアメリカのナイスお土産を持って行ったときに,Kindleを使った漫画の読み方を見せてもらった。そういう使い勝手なのか。コメントでもらった,次のページへのスクロールが欲しいって言っていた意味がようやく分かった。Kindleは一度に見えるのが1/4くらいとすると,次のページに進むと,見えていない部分にスクロールするのか。Analog Book Readerではどうしようかな。
Kindle自体はZom-Bを買ってAndroidで読んでいるが,小説だと単純に次のページにいくだけなのでこれだけだと思っていた。
プログラミング
Analog Book Reader
コメント・共有する
少しずつWindowsストアのコメントが増えていっている。評価がばらけているところもなかなか面白い。既存の電子書籍リーダーの常識的なところを割と無視しているので、ぴったり使い方が当てはまればいい評価になるし、当てはまらなければ何コレ?的な感じだと思う。掲示板にも書いたが、ダメなところを言ってもらえると参考になるので、そういう意見は歓迎。
今日ついたコメントだと、見開きでスキャンした本を縦置きで表示したときに、画面タップすると2ページ進んでしまうので使いづらいというもの。なるほど確かに。自分の環境は横置きメインで気づきにくいので、参考になった。他にも、ペン色は操作を複雑にしたくないのであえて黄色一色にしていたのだが、変えられるようにしたいというのが2票目なので、需要がありそうとか。
Analog Book Reader要望集を作ったので、進捗が知りたい方は見てください。
プログラミング
Analog Book Reader, Windows Store
コメント・共有する
新しいバージョンがWindowsストアに登録された。ファイル読み込み中にページ移動しても一瞬でページが表示されるようにして、サムネイルも現在ページに近い順に読み込むようにしたので、体感的にはだいぶ改善されているはず。あとファイルを大量に登録しているときに、サムネイルを読み込んでから表示していたのを、表示してから少しずつ読み込むようにした。これで起動時に遅いのも改善される。
後は、どのページが見開きなのかという情報と、サムネイルそのものをキャッシュするようにすればかなり快適になると思うが、それはまた今度。
プログラミング
Analog Book Reader, Windows Store
コメント・共有する
MSから回答。なんか障害だったらしくて今は大丈夫とのこと。見てみると,アプリケーションクラッシュのようだ。レポートには,いくつかの情報ファイルが含まれていて,一番重要なのがdmpファイル。このファイルをVisual StudioかDebugging Tools for Windowsで開いて,クラッシュの原因を調べる。今までのWindowsアプリだと,アプリケーションのpdbがあればどこで落ちたかがすぐに分かったのだが,winrtではなかなか難しい。言語レイヤーがいくつかあって,async/awaitでスレッド実行シーケンスが複雑になり,何重にも例外がラッピングされている。
普通に解析するのはかなり大変なので,Defrag ToolsのOneDriveで配っているPDEというツールを使うと,「!pde.dse」コマンド一発でコアな部分のスタックトレースまで表示してくれる。で,今回の場合,それでもユーザコードのココ,っていうのは出てこなくて,winrtの中で落ちてたりするので100%これが原因ってのは分からない。
とりあえず何かのボタンを押し終わったときに落ちていたのが分かったので,全てのボタンの動作をテストした。結果,ボタンの二重押しとかロード中にボタンを押したりしたときに落ちることが分かったので対策した。
プログラミング
Analog Book Reader, Windows Store
コメント・共有する
Analog Book ReaderのWindows Storeのコメントで,「統計画面にスペルミスがある」というのと「遅くて使えない」というのをもらった。
遅いというのは他の人からも指摘されていて,改めてチューニングを考えてみた。今までは,ファイルロード中,最初から読み込んでいくのと平行して,画面に表示しようとしたページを優先で表示するようにしていた。それはいいのだが,ページをパラパラやっていると,読み込み待ちのページが増えていって,結局表示されるのがずいぶん後になってしまっていた。なので,今表示しようとしたページを最優先で表示するようにしてみた。専門用語で言うとFIFOからLIFOに変えたってことですね。とりあえずこれだけでもだいぶ改善されて,ロード中にパラパラめくる分にはそんなに待たないようになった。
あとは見開きの決定をもっと早くできればよいのだが,見開き計算結果をキャッシュするしかないだろうな。ここは慎重にやらないとバグりそうなのでもう少し後で。
ストアに提出したので,まもなくダウンロードできるようになるはず。
プログラミング
Analog Book Reader, Windows Store
コメント・共有する
Flashぱじさんの非公開日記から。最初,私が「アナログ本に近い電子ブックリーダーを作る」と言ったときに,「パラパラめくるアニメーションに力を入れるの?? それは違うんじゃないかなー リアル本に近づけても意味ないよー」という感想を持ったらしい。
元々Analog Book Readerは,Windows 8の脱スキューモーフィズム,つまりデジタルなのにアナログを真似して使いにくくするのはもうやめよう,という理念に賛同して作り始めたもの。電子書籍も,本を読みたい人にとっては,ページめくりなんかやりたくないものであって,デジタルでまでめくる操作をさせられるのは苦痛だよね,と思ったのがきっかけ。なので私が目指したものとぱじさんが最初から持っていた感覚は同じわけですね。さすがぱじさん。
名前にAnalogが入っているが,これはデジタルで読んでいるのにアナログの本を読んでいるような感覚を得るという理想を表したつもりだが,まだそこまではいってないですね。できるだけ理想に近づけたいところ。
プログラミング
Analog Book Reader
コメント・共有する
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とみなすように実装した。
プログラミング
Analog Book Reader
コメント・共有する
Windowsストアに登録して10日くらい。最初,書籍カテゴリの一番最後に登録されていた。その後数日経過して書籍の新着の上の方に入って,ダウンロード数が一気に上がった。今は書籍の無料トップ6位くらいに入っている。なので,順位は最近数日のダウンロード数を元に計算していて,新着ソフトが比較的優遇されているといったところか。
今は新着で目立っているが,新着じゃなくなると目立たなくなりそう。定期的にバージョンアップしていく必要がある。あとはストアのアイコンをもう少し派手にしないといけない。アプリのアイコンをそのまま載せたけど,他の人は割と派手なアイコンにしてるのが分かった。
プログラミング
Analog Book Reader, Windows Store
コメント・共有する
そういえば,Windowsストアアプリの開発関連の話って検索しづらくて,自分は「winrt」を入れて検索している。この日記で開発の話を書くときもwinrtのキーワードを入れるようにしよう。
本題。EPUBリーダーを作るためにWebブラウザを作ろうとしているが,まずCSSの解析を作るのに時間がかかりそう。NuGet探してみたけど,Winrtでそのまま使える手軽なものというとかなり制限されてしまう。
プログラミング
Analog Book Reader
コメント・共有する
やっぱり電子書籍と言えばEPUBということで,調べている。まずはWindows StoreにあるEPUBリーダーをかたっぱしから入れてみたが,やり方はさまざまっぽかった。というか結構落ちまくるし使いづらいし,成熟してなさ感が強い。その中でもBook Bazaar Readerというアプリは読み込みは完璧な感じ。自力でレンダリングしてるんだろう。ただ,ページめくりのアニメーションとか,使いやすさよりも本っぽさを優先しているので,UI的に私が目指しているものとは正反対。
EPUBは中身がHTMLなので,扱いがちょっと難しい。やり方としてはWebViewを使ってIEのエンジンを使って描画するか,自力でWebブラウザを作るか,ってところか。IEエンジンを使うとページ分割がかなり大変になるし,ブラウザを作るのはさらに大変。多分テキストと画像のみに対応したWebブラウザを作るところに落ち着くかな。将来PDFを自力で読むことも考えると無駄にならないし。
プログラミング
Analog Book Reader
コメント・共有する
Windows Storeに公開して6日。電子ブックリーダーカテゴリの新着に載った。どういうアルゴリズムなんだろう? そして初のコメントでやる気が出ますね。Google Playだと作者側からコメントを仕返す機能があったけど,Windows Storeはなさそう。とりあえずEPUBは元々次のバージョンでサポートするつもりだったのでニーズはあってることが確認できた。
プログラミング
Analog Book Reader, Windows Store
コメント・共有する
Analog Book Readerを作る際,Visual Studio 2013にしてしばらくほっておいたのだが,一段落したのでWeatherTyping,WorldTester,PurentroをVisual Studio 2013用に再構築。なんかプロジェクトファイルを自動変換したらVisual Studio 2013がすぐ落ちるようになったので,結局すべてのライブラリやアプリのプロジェクトを再作成。毎回そうだからもう慣れたけど。とりあえずこれで何か急にパッチを出すことになっても対応できる。
プログラミング
コメント・共有する
最近日本語と英語の日記を同時に書いているのだが,その時から日記の更新率が低くなった気がする。英語で書くのがめんどうというならしょうがないが,更新するファイルが多すぎてめんどうなだけというのが本当の理由なのでもったいない。1回の更新でトップページと日記トップページと各日記ページを日英で更新しているのでやってられない。 というわけで日記を更新するソフトを作った。WPFで作ればこのくらいのものは1日で作れる。特にLINQの生産性は異常。

プログラミング
コメント・共有する