最終更新: 2012-06-05T20:30+0900
Readerに接続したメモリーカードのルートにこのスクリプトをコピーして実行するとそのメモリーカード内で最後に開いた 3冊の本がホーム画面に並ぶという、以前書いてたあれをすることに。並べ替えが PC接続時に限られるのがいまいちでその気はなかったのだけど。
方法は、ファイルの最終更新年を未来のものに書き換えてる。本来の更新年月日を最終アクセス年月日として保存してるのでアクセス日の記録は失われる。
今使ってる版はこれ($3-touch_last3_opened_books.20120101.rb)。MemoryStickと SDカードの二枚差しになったのでメモリーカードドライブのルートで実行する代わりにドライブ文字をハードコーディングしてる。ところで、Rubyの 2038年問題って何?初耳。このスクリプトの「MAGIC_YEAR = 2035..2037」って部分と明らかに関係があるんだけど。
Bing検索でトップのスライドを読んだら Ruby 1.9.2で Timeが大幅にパワーアップしてるらしい。2038年以降だけでなく以前に書いた(組み込みの Timeが UTCと localtimeしか扱わないのがもったいない。任意のオフセットに基づいた日時を出力したいだけだから、DateTimeは牛刀な印象がある)、任意の時差も扱えそう。そもそも Timeの制約って OSの制約がそのまま見えてたってわけだったのか。
今使ってる版はこれ。
$3-touch_last3_opened_books.20120605.rb (2.1KiB)
オプションを新設。--set
オプションで最近読んだ三冊の更新日時を未来のものにセット。--reset
オプションで本来の更新日時を復元。オプションなしで従来通り reset&set。
分離できるようにした理由は、更新日時の復元と更新の間に、robocopyで Readerと自炊ファイルの同期を行いたかったから。2035(,2036,2037)年のタイムスタンプがセットされたままだと Readerにある方が新しいと誤認されて転送されなかったりする。
それと、連続して --setを行うと本来の更新日時が失われる不具合を修正。何度 --resetして --setして --setしても同じ結果になるように。
* 作業した順番が悪かったせいで『4871826090』だとか『4871826198』だとかが。