ラベル機能追加

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

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

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

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

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

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

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

自炊リーダー1.1.2公開

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

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

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

隠し本棚

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

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

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

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

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

PDFとNDK

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

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

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

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

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

公開してみた

まだちょっと手直ししたい所はあるけど、なんとなく公開してみた

マーケットに反映されるのはいつになるのか?
時と場合によってまちまちで、ちゃんとインストールできるかどうか確かめたいのに、なかなか検索に引っかからないorz
公開前に、プレビューとかできないもんかね?

ま、今のところ宣伝する気もないし、 競合にド定番なアプリもあるし、何か不具合があっても大した騒ぎにもならんだろう……

LGPLなライブラリの取り込みとか

目標としてるPerfectViewerがネットワーク共有ファイル(CIFS/SMB)の読み込みに対応してしまった
ここまでやられると、とても今更追いつけないよなぁ、とかモチベーション低下中orz

共有ファイル対応自体は、JCIFSライブラリとか使えば簡単に出来るけどね
問題はライセンス
LGPLなので、条件を満たさないとアプリ自体のソース公開義務が発生してしまう
大雑把に言うと、同じインターフェースの別ライブラリに自由に差し替えて実行できるようになってないと、差し替えてコンパイルできるようにする名目でソース公開が必要とされる
なので、Windowsのdllとかみたいに動的リンクの仕組みであればソース公開義務は回避できる

androidアプリの場合、ライブラリも含めて一つの.apkファイルにコンパイルされてしまう
.apk自体はただのzipファイルだが、ソース部分はやっぱりライブラリを含めてひとつの.dexファイルという中間言語のバイナリに変換されている
特殊なツールを使ってリバースエンジニアリングすればライブラリ部分だけ切り出して別のライブラリに差し替える事も可能ではあるけど、それで回避できるくらいなら、既存のあらゆるプログラムもリバースエンジニアリングすればできる訳で、許されるハズもないと思う

かと言って、フルスクラッチするほどの知識も技術も根気もないし
PerfectViewerはどうしてるのか?と思ってデベロッパーのサイトを見たらapkを配布してたのでzip解凍して中身を見てみたら、まさにJCIFSを使っている様子
普通にライブラリとして組み込んでるだけで、ソース公開義務を回避する策を講じてるとは思えないんだが……ソース公開請求とかしたら見せてくれるのかね?

それはさておき、俺流の回避策としては
・ユーザーが別途自分で公式の配布サイトからjarファイルを入手
・アプリ指定のフォルダに置いてもらう
・アプリ側ではDexClassLoaderを使って動的に.dexファイルを生成して使う
といった感じで考えてみた
素のjarをロードできるのか分からんけど、ダメでも元jarを加工したjarをこちらでソース込みで配布すれば良いだろう
どうせネットワークアクセスのパーミッションが必要になるから、アプリ側から配布サイトにアクセスして自動的に取得する、てやった方がユーザーの手間がなくて良いかな?

この仕組みがうまくいくなら、将来的に機能拡張に対応できるアプリも作れるかな?
ユーザーが欲しいプラグインだけ選択して使えるような

まぁいずれにせよ、とりあえずは将来のバージョンアップで対応だなぁ
まずはいい加減アプリをリリースしないと
プログラム的にはとっくに形になってるんだけど、デザインのセンスがないもので、アイコンとか本棚の背景とかどうしようかな、という所で思考停止してしておりますorz
だれかデザインやってくれないかなぁ

更新されないAlertDialog

書籍情報とかの入力をAlertDialogにカスタムレイアウトをsetViewしてやってたんだが、どうも初期値の設定がうまくいかない
初回は設定通り反映されるけれど、他の初期値で再表示しようとしても前回のままとなってしまう


LayoutInflater factory = LayoutInflater.from(mContext);
View inputView = factory.inflate(R.layout.sample, null);
title = (TextView)inputView.findViewById(R.id.text_title);
title.setText("ここに毎回別の文字列");
alertDialog = new AlertDialog.Builder(mContext)
.setView(inputView)
 :
 :
.create();

て感じにやってるんだが……
AlertDialog.Builderではなく、Dialogクラスでなら、


dialog = new Dialog(this);
dialog.setContentView(R.layout.sample);
title = (TextView)dialog.findViewById(R.id.text_title);
title.setText("ここに毎回別の文字列");

 みたいなやり方で対応できた

AlertDialog.Builderでカスタムレイアウトを使ったフォーム部分は作り直しかなぁorz
検索しても固定レイアウト出すだけでレイアウトの中身を動的に変更してるようなサンプルが見当たらない
回避策はあるものの、ちと面倒くさい
何か良い方法は無いものか……

マニュアルを書いてみた

何かやろうとすると仕事が忙しくなる法則により、随分とブランクが……
当初予定してた、作りながらカタチにしていくというスタイルをやってる暇がなくなったので、プログラムだけ進んでしまった
試行錯誤の様子が記憶だよりになってしまうが、出来上がったものから機能別に記事をでっちあげる方向でやっていく事にしよう

んで、色々細かい調整が残っているけど、現状の整理を兼ねて、既に出来上がってる部分のマニュアルをべた書きしてみたので紹介しておく
体裁を整えてアプリに内蔵したり、改めてこのサイトにまとめたりするだろうけど、とりあえず、どんなアプリになっているかの片鱗が見えるんじゃないかと

マニュアル(暫定版)

前回の機能予定と比べて、いくつくか実装できてないのが分かる
とりあえず最初のリリースでは、これにしおり機能をつけて終わりかな?と考えている
今月中にどうにかしたいが、はてさて

自炊ビュワー(2) 機能案件

自分として「Perfect Viewer」に致命的に足りない機能は見開き表示
「Perfect Viewer」にある「自動見開き」は、前後のページと比べて幅が半分程度以下の画像をくっつけて表示するような動きをする
どうも機能的に「Perfect Viewer」はドキュメントスキャナで取り込んだものではなく、フラットヘッドスキャナで取り込んだデータを想定している気がするな
「自動単ページ」なんかも見開きスキャンを左右で分割して表示する機能のようだし

そんな訳で、目指すべき目標は「Perfect Viewer – 不要機能 + 独自機能」に設定
●とりあえずコミックビュワーとして最低限の基本機能を押さえる
・画像を表示、ページの移動
・表示画像の拡大/縮小/移動
・しおり
・本棚
●不要な機能は切り捨て
・画像リサイズのアルゴリズム選択なんて、スマフォの画面じゃ見分けつかんからイラン
(アルゴリズムの独自実装なんて面倒なだけだし……難しいし)
・設定できる項目は割り切る
あんま細かく設定できても使わん/分りにくくなるだけ
必要な機能だけに絞り込むべし
●独自機能
・見開き表示
好きなページで次(または前)ページと見開き表示
・複数本棚
カテゴリ別とか作者別とか、自由に本棚を作成して整理したい
ひとつの書籍で複数の本棚に配置も可能とする
書籍情報をDB化して、作者別とか出版社別とかの本棚はデフォルトで用意
・隠し本棚
隠してある事自体も可能な限り隠す
→説明ページ等、戻る以外操作しない画面にジェスチャーを仕込む
→その画面で事前に登録したジェスチャー操作をすれば隠しモード解除、とか
・自動着色
こちらの記事に、Androidで動くサンプルがあるので組み込む
※GPL汚染されるので、着色処理部は外部サービスにして切り離す
・ネットワークドライブ対応
これもGPL汚染されるし、切り離しも難しい気がするので保留

自炊ビュワー(1) きっかけ

とりあえず、自分がAndroidアプリを作ろうと思い立った案件
自炊ビュワー

割と最近、書籍のデジタル化、いわゆる自炊をはじめました
押入れ全てを使って平積みしてもまるで収まりきらない量の本があって、なんとかしないと部屋が片付かない状態なんですよ
片付けの達人とか呼ばれる人は揃って「捨てろ」と言うけれど、捨てれるくらいなら誰でも片付けられるっつうの!
自分でも二度と読まないと分ってる本でも残しておきたいんじゃボケ
捨てずに片付けられるようになってから達人を名乗れやゴラァ!

Σ(゚д゚;) ハッ
いかん、わき道に逸れた
まぁそんな感じで、電子化して本体は捨てる事にした訳です
ガジェット好きな身としては、電子書籍化とかやってみたかった、てのもあって
(自炊についても、気が向いたら何か記事を書こう)

で、スキャン作業を進めていくと、当然今度は閲覧方法が必要になってくる
その頃、丁度携帯をスマフォに変更したので、どうせならスマフォで見れる環境を整えよう、と思い立ち
とりあえず今のところ、この分野では定番ぽい「Perfect Viewer」を使っていますが、自分的に欲しい機能が不足していました
機能についての詳細は別記事にまとめるとして、欲しい機能が無いなら自分で作れば良いじゃない、とか安易に考えて現在に至る、という感じです