自炊した本を読むためのアプリを、今年初頭からこつこつとつくっていた。
https://github.com/mootoh/messtin/
解決する問題
自炊した本はえてして巨大な画像を束ねた PDF になる。 zip で固めた JPGs 御仁s がいることも知っているけれど、自分はすべて PDF にしている。
- スキャンした本はテキストが主であるものが多い → OCR かけたい → PDF
- Mac などのコンピュータからも閲覧しやすい
という理由から。
しかし、そうした PDF ファイルは 100-200MB 級になりがちだ。自炊した本をいまざっと数えても 500 冊ある。100GB のストレージを cellphone/tablet などモバイルデバイスに確保するのは難しい。
一部だけをデバイスに転送する方法だと、都度送ってローカルのあまり読んでないのを消して、などしなくていけなく、いちいち手間が煩わしい。転送/同期する時間も馬鹿にならない。それに、いま読みたい本がそこになかったら、家に帰るまでその本を読めなくてイライラムキムキする。
Messtin
たんに PDF を読むアプリなら、すばらしいものが存在する。 iPad なら i文庫HD、 Android なら Perfect Viewer が挙げられる。しかし、自分の問題を解決してくれるアプリを見つけることはできなかった。
Messtin は、巨大 PDF をデバイスに転送しない。あらかじめ JPGs にほどいてどこかのサーバに置いておき、クライアントアプリで読み進めるにつれて、オンデマンドにダウンロードする。少しの先読みを添えて。汎用 PDF 読みアプリと異なり、自炊本のみをターゲットにすることにより、こうしたオフラインでの前処理が可能になる。
ダウンロードしたページは LRU キャッシュに保存され、決めておいたストレージ容量を超えるともっとも昔に読まれたページが削除される。デフォルトでは 1GB に上限を設定してある。これで、モバイルデバイスの貧弱なストレージを圧迫することがなくなる。
Android ではそこそこちゃんと動く。自分がいちばん使っているから。 iPad 版はちゃんとテストしていないし、まだ LRU キャッシュが入っていない。使うとしたら https://github.com/ishkawa/ISDiskCache あたりがよいのだろか。
ToDo
いちおう、自分が必要としていた最低限の機能を備えたので 0.1 とタグを打った。しかしまだまだやりたいことはある:
- もっと賢い先読み。いまは前後1ページを読むだけなので
- ピンを打っておいた本はキャッシュから追い出されない
- クライアントアプリ間で進捗を共有する。 Kindle の WhisperSync って特許なんだろうか
- ちゃんとブックマーク
- UI 設計が雑 (自分しか使わないし…)
- サムネイルを一覧してのざっと見をすばやく
- OCR のテキストも抽出してサーバに保存
他にもたくさんある。
辛かった GDrive
2014年2月から開発をはじめて、ある程度のプロトタイプができたのは3月。しかしここでクラウドのストレージを Google Drive にしようと決めたのがよくなかった。いや、 Google Drive は 1TB あたりのコストがいちばん安いじゃないですか than Dropbox/SkyDrive/whatever. まぁ integration はかんたんじゃろ、と始めてみたのが泥沼の入り口。 iOS 版はそんなにトラブルなく完成したのだけれど、 Android 版が… データがちゃんとダウンロードされてこないという致命的な問題があり、ああだこうだと七転八倒し、気づけば桜が散り、梅雨が終わっていた。
こんなことではいかん、プロトタイプを迅速につくれないと存在価値がない! と自分を取り戻して、最速で動くものが手に入る方法 == 自分のサーバ でなんとかすることにした。ほんとうは、人々がさくっと試せる Google Drive がよかったのだけれどね…
Amazon S3 や Dropbox を backend storage にすることもできると思う。でもまぁお金が少しかかりそう / 自分のサーバでやるみたいに好きにコントロールできない という理由で今回は見送りに。
Wikipedia: Mess tin
A mess tin is an item of mess kit, designed to be used over portable cooking apparatus. A mess tin can be thought of as a portable version of a saucepan, intended primarily for boiling but also useful for frying. Mess tins were originally a military design, but are also popular among civilian campers.
ということで、飯盒炊爨のあれのことだと思った。自炊、キャンプ、飯盒炊爨。
自分が欲しいアプリ、時間さえかければつくることができる時代なのだから、つくるべきだ。