/ 最近 .rdf 追記 編集 設定 本棚

脳log[20130126] PRS-650 tools.



2013年01月26日 (土) [COSMOS] Vistaのメモリ診断ツールを実行してみたら開始早々、進捗1%でハードウェアのエラーを検出した。BIOSで 1Tとなってるところを 2Tにしてみたり、空きスロットに差し直したりしてみたがやはりエラーを検出する。メモリがあかんのかもね。この1年ケースを開けた記憶がないほど安定してたのに。動作クロックを下げて最後の足掻きをしてから新しいのを買う。■■■@2012-01-24 同じものを買った。新しいのは標準電圧(1.50V)で DDR3-1600(800MHz)動作すると書き込んであった(古いのは 1.65V)。BIOSでNBとの比率を設定してわずかにスピードアップ。■■■やっぱり強制終了する。こんどは診断ツールでエラーを発生させることもできない。1.ゲームをするまでは何の問題もなかった。2.強制終了して再起動後は問題ない。3.ゲーム中に起こることがほとんど(そこから悪化した)。考えたシナリオは、1.ビデオカードがアクセス違反をおかしてる(OSのキャッシュと衝突?)。2.(グラフィック)共有システムメモリの使用でメインメモリが音を上げた(メモリに直接あたるファンが存在していない)。物理メモリが壊れてるのか冷却に穴があるのか Vistaのメモリ管理が悪いのか AMDのグラフィックドライバが悪いのか。■■■GPUを差し直してみた。場所も5段下にしてメモリから遠ざけた。現在様子見中。

最終更新: 2015-02-09T01:58+0900

[SonyReader] PRS-650 tools.

PCとリーダーのディレクトリ構成が決め打ちなので、きったねえなー、という感想を漏らすぐらいしか使い道がないでしょうが。

  1. $0-RunOnReaderConnected.bat
  2. $1-Update_Collecctions.rb19
  3. $2-Make_CacheXML_And_Sync.rb19
  4. $3-touch_last3_opened_books.rb
  5. $4-cacheExt_tweak.rb19

 1. $0-RunOnReaderConnected.bat

Sony Readerを繋いだら実行する。$1-$4のスクリプトを引数付きで順番に実行するためのもの。前提条件

  • メモリーカードスロットは E:と F:。
  • すべてのバッチとスクリプトファイルが同じフォルダにあり、作業フォルダもこれと一致する。
  • READER MS (E:)と READER SD (F:)という名前のサブフォルダがあり、この中には Readerにコピーする PDFファイルと $Collections.txtというファイルが(フラットに)入っている。

 2. $1-Update_Collecctions.rb19

カレントディレクトリをスキャンして $で始まるファイルと隠しファイルを除いたファイルのリストを $Collections.txtというファイルに保存する。カレントディレクトリはバッチファイルによって READER MS (E:)か READER SD (F:)になっている。以降のスクリプトのカレントディレクトリも同様。

 $Collections.txt

内容はこんな感じ。

____1 [カイ サワベ] ヘンな感じの日本人.pdf
__1__ [森博嗣] 四季.pdf
__1__ [須賀しのぶ] 芙蓉千里.pdf

-__1__ [沢村凜] 瞳の中の大河.pdf
-__1__ [範乃秋晴] 特異領域の特異点.pdf

-1____ $コレクション名 マンガ
-_1___ $コレクション名 実用的なマンガ
-__1__ $コレクション名 小説
-___1_ $コレクション名 実用的な小説
-____1 $コレクション名 実用書

行頭のマイナスは $Collections.txtに記載されていたファイルが現在は見えなくなってることを示す。アンダースコアはコレクションに属していないことを、1はコレクションに属していることを示す。$コレクション名(スペース)で始まるファイル名は特殊で、コレクション名を定義するための行。行頭にマイナスが付いてるのは「$コレクション名 マンガ」という名前のファイルが存在しないから。自分で付ける必要はないが $1スクリプトの実行で付加される。行の並びは自由。ただし見えないファイルと新しく出現したファイルは末尾に集められる。コレクションを追加するときは全ての行の頭にアンダースコアを追加する。コレクション名のデフォルトはコレクションN(※Nは連番)。

例えば、[森博嗣] 四季.pdfと [須賀しのぶ] 芙蓉千里.pdfは同じコレクションに属していて、そのコレクションの名前は小説。[沢村凜] 瞳の中の大河.pdfというファイルは以前存在していたが今は見えない。ファイルが削除されていて見えないのであれば $2のスクリプトがミラーリングを行ったときに Sony Readerからも削除される(はず)。隠しファイルになっていて見えないのであれば Readerから削除はされない(これは robocopyのミラーリングの仕様による)。

 3. $2-Make_CacheXML_And_Sync.rb19

READERDRIVE:/Sony Reader/database/cache.xmlに ./$Collections.txtの内容を反映させ、READERDRIVE:/自炊.pdf/とカレントディレクトリをミラーリングする。

READERDRIVEはバッチファイルから与えられた引数。

 @2014-01-22 修正。

cache.xmlの text要素の開きタグにマッチする正規表現において、閉じタグを省略するスラッシュにマッチする部分をオプションに変更( />\z → /?>\z )。珍しいけど bookmarkDate要素が子になることがある。

when %r{\A<text (?:\s*id="(\d+)"|\s*path="(?:[^"/]*/)*([^"/]+)"|\s*sourceid="(\d+)"|\s*\w+="[^"]*")*\s*/?>\z}i
when %r{\A<text (?:\s*id="(\d+)"|\s*path="(?:[^"/]*/)*([^"/]+)"|\s*sourceid="(\d+)"|\s*\w+="[^"]*")*\s*/?>\z}i

 4. $3-touch_last3_opened_books.rb

E:/Sony Reader/database/cacheExt.xmlと F:/Sony Reader/database/cacheExt.xmlを読んでメモリーカード内のすべてのファイルの最後に開いた日時を取得し、これをもとに最後に開いた3冊に最も新しい更新日時を設定する。すると Readerは最後に開いた3冊を最新の3冊としてホーム画面に表示する。

--resetオプションが与えられるとファイル本来の更新日時を復元する。オプションなしで実行されると復元と設定を行う。

対象ファイルの最終アクセス日時情報は失われる。最終アクセス日時がファイルシステムや他のプログラムによって変更されると更新日時の復元に失敗する。

 5. $4-cacheExt_tweak.rb19

READERDRIVE:/Sony Reader/database/cacheExt.xmlを操作する。1.すべての<history>要素を削除する。2.ファイルの更新日時を比較し Readerの方が古ければ opened="true"属性を削除する。比較対象は cacheExt.xmlに記載されているすべてのファイルと、カレントディレクトリ直下の同名のファイル。

追記@2014-03-10 ホーム画面上部の「続きから読む」欄の一冊は絶対に未読状態にならない。PCとの接続を絶つとすぐに opened属性が Readerによって再設定されるみたい。


こんな苦労が必要なのは、最後にコピーしたファイルのうち3冊だけがホーム画面という特等席に表示されても嬉しくないのと、本を読み続けると蓄積するページ履歴(history要素。ほとんどが連続するページの履歴)が Readerの動作を遅らせ不安定にするのと、合計48GBのメモリーカードに1000冊以上の PDFを入れてるとコレクションへの登録やファイルの削除の途中で必ず Readerがフリーズするのだが eBook Transfer for Readerはメモリーカードの読み込みに5時間を費やしそうな勢いで助けにならないからと、管理対象の数を減らすためにシリーズを一つの PDFに結合していて新刊が出るたびに末尾にくっつけているために既読フラグのクリアが定期的に必要だからだ。結局俺は PRS-650を自分のものにはしていないのだ。そう勘違いさせてくれるだけの選択の自由を Sonyは提供していないし、お仕着せで満足できるほどの完成度も Sonyは提供していない。

 @2015-01-31 lib/prs-650.rb (2.8KiB, 2015-02-09 変数名のミス修正)

  • prs-650が書き出す XML(cache.xmlと cacheExt.xml)に特化したずぼらライブラリ
  • $2-Make_CacheXML_And_Sync.rb19 と $4-cacheExt_tweak.rb19 に共通するコードを抜き出しただけ
  • ファイルをスキャンしながら情報を抜き出したり、ちょっとだけ書き換えたり