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倍だし。
[ツッコミを入れる]