2002-02-11(Mon) [長年日記]
_ コードを
かけばどうにかなるらしい。でも、tdiaryのデータってMarshalですよね?ということは、- プログラミングRubyによれば、Marshalって元のクラスの定義がわからないとロードできないらしい。あれ?網道編だったっけ?
- rubyのバージョンが違ったらバイナリフォーマットが違う可能性?ローカルで生成しても通用しなかったりして...。
_ 自力解決
とりあえずやってみた。もし試される奇特な方がいたら自己責任でよろしこ。添削希望です。もっとエレガントなやつ。#!/usr/local/bin/ruby -KE #---------------------------------------------------------------------- require 'pp' require '/home/kog/tmp/tdiary-1.3.3/tdiary.rb' def transaction( filename, diaries = {}, mode = 'r' ) begin PStore::new( filename ).transaction do |db| begin case mode when 'r' diaries.update( db['diary'] ) when 'w' db['diary'] = diaries end rescue PStore::Error end end end return diaries end bkup = {} add = {} merge = {} bkup = transaction('/home/kog/200202', bkup) add = transaction('/home/kog/200202.add', add) add.sort.each do |key, data| unless bkup.has_key?(key) bkup[key] = data end end merge = transaction('/home/kog/merge', bkup, 'w') pp merge.sortバックアップファイルが 200202, 追加したいのが2000202.add, マージ結果がmergeです。unless.has_keyでチェックしてるのは追加したいファイルには本文だけ手動リストアしたので無視したかったから。ホントに単純にマージするだけなら、eachする必要もなくって、
merge = {} merge = transaction('/home/kog/200202', merge) merge = transaction('/home/kog/200202.add', merge) merge = transaction('/home/kog/merge', merge, 'w')でいいのではないかと。あ、CGIじゃないすよ、これ。ふつーのrubyスクリプトです。FreeBSD4.5-stable, ruby 1.6.5 (2001-09-19) [i386-freebsd4]で実行しました。
_ デュアルディスプレイ
にしてみたのだ。G450DualHeadなので。いやー結構広くて快適ですなあ。これで1枚が1024*768でも広さは2倍だし。