色々対応

自炊リーダーVer1.3を公開
今回は色々やった気がする

  • SD入れ替え支援
    まず、アプリ終了時、データベースのバックアップをSD上に作成するようにしました
    アプリ起動時、データベースとバックアップのバージョンを比較して、差異があればSDが変更されたと判断
    SD変更時はバックアップから復元するか初期化するか選択できるようにしました
    新しいSDにした時、データベースを初期化して、そのSD用にデータベースを登録・バックアップしておけば、次回入れ替え時は簡単にデータベースを復元できます
    ※作業フォルダを全てのSDで同じパスにしておくと、よりスムーズです
  • 検索条件の保存機能追加
    検索画面でメニューを表示すると、検索条件のセーブとロードのメニューが出ます
    何度も同じような検索をする場合、入力した内容を保存しておけば、次回からロードするだけで入力を省略できます
    保存時は名前を付けておけるので、何を検索するか分かるように名前をつけておくと良いでしょう
  • 一括操作を追加
    本棚画面でメニューを表示すると、各種一括操作を行う事ができます
    一括操作は、その時本棚画面に表示されている書籍全てに対して操作ができます
    主に、検索した結果に対して一括で指定した本棚に登録等を行う事を想定しています
  • ファイル選択画面でスクロール位置を記憶
    今まで、ファイル選択画面では、フォルダを移動すると常に先頭から表示されていました
    同じ階層を行ったり来たりしたい場合、毎回スクロールするのが面倒だったので、スクロール位置を記憶するようにしました

まぁ色々と使う上での細かい補助機能、てな感じでしょうかね
もちろん、この他にバグ修正なんかもしたりしてますが

 

エラーレポート

マーケットのレビューに、初コメントを頂いたYO!

「使えない ファイル選択したらいきなりアプリが落ちます。まだ一度も使えてません。」

orz
申し訳ない
せっかく報告を頂いたので対処したい所なんですが、エラーレポートが届いてないので、原因はおろか現象が分からない状況
本名登録は私個人のポリシーに反するのでGoogle+の利用規約に同意できず、コメント投稿者本人様と直接コンタクトできない状況なので、ここを見てるとは思えないけどこちらで報告をさせてもらいます
(デベロッパーコンソールのコメント返信機能はいつ実装されるんだろう?)

アプリでエラーが起きた時、「レポートを報告する」みたいなダイアログは表示されないだろうか?
ここで報告を送ってもらわない限り、開発側ではエラーの内容について把握できません
(エラーが起きてる事さえ分からない)
このレポートには、どのプログラムのどの場所でどんなエラーが出たか、という情報しか含まれません
ユーザー側の情報は機種名しか分からないので、プライバシー問題とか気にせず、出来る限りレポートを送信してもらえると、開発側としても助かります
ついでに、どの画面でどんな操作をした時、どんな現象が発生したのか、という報告を開発者に伝えてもらえると、修正が迅速に行われると思います

 

で、前述の通り、今回のコメントに該当しそうなレポートが届いていないので、コメントから状況を推測してるんですが、情報が少なすぎで対処が難しい
・ファイル選択したら
これはファイル選択画面上で、ファイルをタップしたら、だろうか?
フォルダなら平気なのか?特定のファイルだけでなるのか?
それともメイン画面の「ファイル選択」ボタンを押したら、だろうか?
「まだ一度も使えてない」との事なので、こっちの可能性が高いかな
・いきなりアプリが落ち
このとき、何かダイアログとか出てないだろうか?
「予期せず終了しました」みたいなダイアログが出ていたら、単純にアプリ側のバグなので、どの画面で何をどうしたら、さえ伝われば修正可能と思われます
ダイアログも出ず、ただアプリが終了(ホーム画面に戻ったとか)という場合だと、他の常駐サービスとの相性等もあって、アプリ側より環境依存の可能性が高くなります
(タスクキラーに引っかかったり、ウィルス対策ソフトにブロックされたり)

この件のコメント投稿者様に限らず、エラーが発生したら可能な限り詳細な情報をレポートしてあげて下さい
普通のプログラマーならエラーを放置なんてしたくないハズなので、修正に必要な手掛かりさえあれば、必ず対処してくれると思います
(開発に飽きて放置したままのアプリだと無理かもしれませんが)
自分も含め、Androidのアプリ開発者は個人でやってる人も多く、テスト端末を用意するのにも限界があります
せっかくの便利なアプリがエラーで動かないのは勿体ないと思うので、積極的にご協力いただけると幸いです

……とりあえず、コメントくれた方がNexus7だったので、テスト用に4系タブレットも欲しかったのでNexus7を購入しといた
ブツが届いたら色々と試してみるんで、しばらくお待ち下さい

ラベル機能追加

自炊リーダーVer1.2公開
今回の機能追加は、ラベリングの対応と、それに伴う検索機能の強化です

おそらくAndroid使いの人なら大抵Gmailとか使った事あるだろうけど、Gmailにあるラベル機能みたいなものを追加しました
まぁこのアプリの場合、本棚が既にラベル機能の変形版みたいな作りになってるんだけどね

検索機能の強化は、今までの定型検索(タイトル別とか)を廃止して、入力欄を設けて自由に検索できるようにしました
既存の定型検索は、検索画面で表示グループを指定する事で同じ事ができます

これでようやく、書籍情報をデータベース保存にしたのが活きて来たかな?
入力する手間はあるけど、一度設定してしまえば、比較的自由に検索できる
DB化して必要な時に検索して取り出す、というスタイルは、あまり競合アプリにはない特徴になったかな、とか思う

ついでに、書籍情報に評価の項目を追加しました
評価は★の数で設定するレーティングです
個人利用で評価の項目はあまり意味が無い(評価は自分の頭の中にあるから)ようにも思うけど、このアプリは自分の勉強用でもあるので、色んな標準ウィジェットを使ってみたかったからつけてみましたw
まぁ文字通り評価として使わず、★の数でカテゴライズするという使い方もできる訳で
(例えば、★1は娯楽物、★2は技術書、とかいった使い方)

これからも、思いついたら登録できる項目は増やしていくかと思うけど、とりあえず次回は入力支援を充実させてみようかと画策中
例えば、ラベル管理画面で既に導入してあるけど、入力欄に対するサジェスト機能を他の項目にも、とか
検索結果で表示された書籍一覧をそのまま全て本棚に登録、とか
本棚内の書籍に対してラベルの一括登録、とか
検索結果と本棚・ラベルの一括登録を組み合わせれば、本棚管理も少しは楽になるんじゃないかなぁと予想しております
またUIから考えないといけないので、機能の割りには公開まで時間がかかるかもしれませんが

ネタをくれ

宣伝も何もしてないのに、いつの間にか500DL越え
もっと出来の良い競合アプリがあるのに、なんでこのアプリを選んだのか??
着色なんかは他に無い機能とも思うけど、プラグインのDL数はさほどでも無いんだよね

いや、使ってもらえるのは有り難いんですが
つい最近、はじめてストアで★評価をつけてもらったんですが、未だにコメントがつかない
ユーザーからのフィードバックがないと、次にどんな機能を作れば良いかが分からない
将来的に予定している機能はいくつかあるけど、実装には前準備として言語の勉強からやらないとイカンので、ちょっと時間がかかる
なので、要望とかあれば取り入れたい所なんだが、誰からも何も要望が出てこない……
今だとこんな状況だから、要望さえ出れば高い確率で採用(技術的に難しいと無理だが)されるハズなんだけど、誰か何かアイデアは無いかね?

ネットドライブ対応するには

LAN上の共有ファイルに無線アクセスできると色々便利
前にも書いたけど、JCIFSライブラリてのがあるので、少なくともWin環境の共有フォルダにアクセスするのはできるハズ

ここで問題になるのが、ライブラリのライセンスがLGPLなところ
本体に組み込むと本体もLGPLにしないとならんので、これまでのように外部アプリにしてプラグインとして扱う事になる
幸い、PDF対応の際に、別アプリのクラスもローカルのように扱うやり方を見つけたので、既存のファイラーと違和感なく組み込めるだろう

が。
自動着色にせよ、PDF対応にせよ、これまでのプラグインは、一応単体でも使い道のあるアプリとして作って来た
しかし今回はネットドライブに接続するだけの機能なので、単体では使い道がない
これをプラグインとして別アプリにするのは、まさにライセンス回避のためだけ、という事になってしまう
そういうのは何だか嫌なんだよなぁ……
何かネットワークドライブと連携してこそ、なアプリのネタは無いものか

 

SDカード同様、マウントさえしちゃえば後はローカルと同様にアクセスできる、て感じにOS側で対応してくれないものなんだろうか?
Linux系だし、できないハズは無いんだが、俺が知らないだけで何か方法あるのかね?
(そんな仕組みに対応してるアプリとか知らんので、多分できないんだろうけど)
アプリ個別に対応しなきゃならんのは無駄に思うんだけどなぁ
root化できるなら、CifsMangerとかでマウントできるんだけど、この程度の事はroot化せずにやらせて貰えないんだろうか?

 

パスワード付きファイルに対応

自炊リーダー1.1.2公開

パスワード付きZIPに対応し、書籍情報にパスワード保存欄を追加しました

パスワードを保存した書籍は、本棚等から開く際に、パスワード入力せず開く事ができます
逆に言えば、せっかくパスワード保護してるファイルなのに、パスワードを知らなくても開けてしまう状態になるので、扱いには注意して下さい

なお、パスワードは暗号化して保存されます
しかし、データベースのバックアップ等によって(暗号化されてるとはいえ)パスワードを含む情報が簡単にファイルとして残す事ができてしまいます
取り扱いには十分ご注意下さい

隠し本棚

自炊本を管理してて、人に見られたくない書籍ってあるじゃない?
むふふな薄い本とか会社の機密情報が入った資料とか

将来的にはちゃんとした機能を追加するとして、とりあえず現在の機能で、ある程度レベルの隠密性を確保する方法
具体的な作成方法はマニュアルページのメモに書いておいたけど、改めて補足と解説を

要点は、複数のバックアップを切り替える事で本棚を切り替える、というだけ
・普段用データをバックアップ
・隠し用データをバックアップ
・通常時は普段用で運用し、必要な時だけ隠し用を復元、使い終わったら普段用を復元して戻しておく

普段用に、誰に見られてもOKなものだけ登録し、見られたくないものを集めて隠し用に保存して必要な時に切り替えて使う
または、
普段は、見られてOKなものも隠したいものも全て混在して使い、端末を人に弄らせる場合等に備えて安全なものだけまとめた物を必要な時だけ使う
といった運用方法を想定しています

切り替えの頻度が高いと面倒なので、どうにか簡単に切り替える機能を組み込みたいと思案中
現状だとデータベースを隠せても書籍本体の画像ファイルは、せいぜい隠しファイルにしておくくらいしかできないので、まずはパスワード付きzipファイルに対応したいところ
対応ライブラリもあるし、パスワード入力はPDF対応時に組み込み済みなので、これ自体は楽にできそう
が、閲覧の度にパスワード入力は面倒だし、かといってAndroidの環境でパスワードを保存するのはセキュリティ的に避けたいし、という点で悩み中
独自形式に変換するのも面倒だし、何か良い案はないものか……

進捗

PDF対応は、MuPDFをそのまま使い、サービスではなくClassLoader経由で呼び出す方式にした
サービスではBitmapのような大きいサイズのデータをやりとりできず、ファイル経由にする必要があったため、処理に余計な時間がかかった
ClassLoader経由では、別アプリのクラスを自アプリのクラスのように読み込めるので、Bitmapの扱いもメモリ内で処理できる

ただし別アプリのクラスを使うには、Manifestに共通のandroid:sharedUserIdを指定して、共通の署名で書き出す必要があるらしい
せっかくプラグイン形式で分けてあるのに、利用するには各アプリに合わせて設定を修正して書き出さねばならず、ちょっともったいないけど
ま、サービスはサービスとして機能するように作ってあるので、外部利用したい人はサービスを使ってもらう、て事で勘弁してもらおう
どうせ GPLでソース公開もするので、必要があれば各自組み込んでもらえば良いし

んで、この方式の方がかなり早いので、自動着色プラグインも修正しようかなぁ、なんて考え中
とりあえず先にPDF対応だけして、次のバージョンで、とかも考えたんだけど、自動着色がファイル前提で組まれてるので、せっかくPDF対応がファイルなしで対応できるのに、一度書き出さないと加工できなくて……
このまま無理に組み込むより、ちょっと修正に時間かかるけど自動着色も手直ししようかなぁ、とか

問題は、既に自炊リーダーと自動着色を併用してるユーザーさん
同時にアップデートできれば良いけど、そうそううまく行く訳ないし
かといって両方式を併用するのは無駄なので、ClassLoader版が使えなければアップデートを促して機能制限するしかないかな……

PDFとNDK

PDF用プラグインは一通り形になった
単体機能としてはPDFから指定ページを画像化するアプリとなる予定
公開までには、まだ自炊リーダーとの連携処理部分とか弄らんとダメだけど

で、弄ってみると、書き出した画像を自炊リーダーのビューワーで見ると、どうしても荒く見えてしまう
個人的に画像系なら気にならない程度だけど、文章PDFだと文字の判別がツライ
書き出されたファイル自体は、十分読める解像度なんだけども

なぜこうなるかというと、自炊リーダーがJAVAで書かれてるから
dalvikが扱えるメモリがNDKでCが使えるメモリと比べて遥かに小さいので、Cで書かれたPDFプラグインで扱える画像でも、JAVAで書かれた自炊リーダーではリサンプリングして読み込まないと無理になる

こうなると欲がでるもので、自炊リーダーの画像の読み込みもCで作りたくなる
しかし画像は読み込んだらビューワーで操作できるようにしないと行けない訳で、その辺まで含めると、結構な大改造が必要となってしまう
PDFと連携するには必要と思うので、今回のバージョンアップはちょいと時間がかかりそう
まぁこれができれば、既存の画像表示も高解像度化できるわけで、やる価値は十分にあるんだけど

ちょいと気合い入れて頑張るかー

今後の予定

まぁ当面はデバッグ作業をやるとして
とりあえず、現状で予定してる機能強化をメモ

●検索機能の強化
せっかくDB使ってるので、もっと色々手早く目的の書籍にアクセスする手段を用意したい
機能の実装自体は簡単だけど、分かりやすい・使いやすいUIを設計する能力が……

●本棚等のソート
まぁこれも機能だけならスグできそう
問題はドラッグ&ドロップによる並び替えとの兼ね合いか

●左開き対応
日本向け書籍の大半は右開きなので、個人的には今のままでも問題ない
が、逆方向に開く本もある訳で、対応しておかないと不味い
単にページ送りとかスクロール方向をフラグで反転する程度の修正で実装はできる
が、ビューワーの設定画面で切り替えるのは再び右開きを見る時に戻さないといけなくて煩わしい
すると、書籍別に設定ができるようにしなければならず、やっぱりインターフェースの改造が必要となる

●PDF対応
Adobeが公式にコンバーターとか出してくれりゃ良いのに……
色々ライブラリを試しているが、うまくコンパイルできなかったり、できても日本語表示がお粗末だったり
さすがにPDFの仕様を調べて自力で実装するのは趣味の範囲を超えるしなぁ
何か都合の良いライブラリを見つける事ができたら考えよう

●ネットドライブ対応
以前にもぼやいたが、実装自体はライブラリを使えばできるハズ
問題はプラグインのように機能を本体から切り離すのが難しいので本体がGPL汚染される事
まぁこのアプリ自体は知的好奇心を満たすためのものなので、別にソースを公開しても良いのだが、実験作故に色々汚いコードとか実験だけして消し忘れたゴミとか、人に見せるにゃ恥ずかしいソースなのよね

●NDK使用
現在はオールJAVAで組んでるが、画像処理等の高速化のためにNDKを使ってC++で書き直したい
別の言語に移植する訳で、かなりの大改造になるので、できればこれ以上機能が複雑化する前に済ませてしまいたい
が、C系統なんて10年以上触ってないので、やるとなると色々と面倒な準備期間が必要で
とりえあず、JAVAで実用速度なうちは放置するかなぁ

あとはユーザーからの要望対応かね
要望出るほどインストールされれば良いんだけどwww