平衡点
2008/12/27
_ howm を複数ファイル分割へ戻す
changelog メモっぽく単一ファイルにしていたけれど, 流石に検索が重くなってきたので, 複数ファイルへ戻すことにする.
#!/usr/bin/env ruby
$KCODE='e'
#--- config start ---"
src = ENV['HOME'] + "/work/howm/ChangeLog.howm"
outdir = ENV['HOME'] + "/work/howm/"
#--- config end ---"
unless File.exist?(src)
puts "ChangeLog files does not given"
exit 0
end
# howm の形式の指定
datef = '\d{4}-\d{2}-\d{2}'
timef = '\d{2}:\d{2}:\d{2}'
timelinef = datef + '\s' + timef
# 日付毎に分割
cl = File.read(src).split(/(?=^\[#{timelinef}\])/m).sort
cl.each do |entries|
entries.gsub!(/^\s+$/, "")
dt = $1 if entries =~/\[(#{timelinef})\]/m
fn = $1 + "-" + $2 if dt.gsub!(/-/,"").gsub!(/:/,"") =~ /(\d{8})\s(\d{6})/
File.open(outdir + fn + ".howm", "w"){|f|
f.puts entries
}
end
安易です.
ついでに howm からはてダラ用のソースへと変換するスクリプトもでっちあげる.
#!/usr/bin/env ruby
$KCODE='e'
require 'tempfile'
src_dir = ENV['HOME'] + "/work/howm/"
out_dir = ENV['HOME'] + "/work/hatena/"
src = Dir.glob(src_dir+"*.howm").sort
# エントリー格納用 Hash
howm_entries = {}
# エントリーパース
src.each do |src_file|
# 日付の取得
yy, mm, dd = $1, $2, $3 if File.basename(src_file) =~/^(\d{4})(\d{2})(\d{2})/
# 出力ファイル名の設定. これを Hash の key にする.
out_fname = yy + "-" + mm + "-" + dd + ".txt"
# ソースの読み込み
entry = File.open(src_file).read
# 不要な空行を削除
entry.gsub!(/^\s+$/,"")
# 秘密のエントリ以外を出力
unless entry =~ /^\=\s*p:.*/
# howm 用の timeline を空行に(はてなダイアリでタイトルを入力しない)
entry.gsub!(/^\[\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\].*$/,"")
# ファイルへのリンクを削除
entry.gsub!(/(\=\=\>.*?\n)/m,"")
# 逆リンクの削除
entry.gsub!(/(\<\=\=.*?\n)/m,"")
# 連続した改行を \n\n に置換
entry.gsub!(/\n\n+/m, "\n\n")
# プラグイン関係を preformatted に
entry.gsub!(/^\>/,"\s\>")
entry.gsub!(/^\|/,"\s\|")
entry.gsub!(/^\</,"\s\<")
entry.gsub!(/^f:id/,"\sf:id")
entry.gsub!(/^map:/,"\smap:")
entry.gsub!(/^\<iframe:/,"\s\<iframe:")
# 格納
if howm_entries.key?(out_fname)
# ださい...
pre = howm_entries[out_fname].to_s
new = entry + pre
howm_entries[out_fname] = [new]
else
howm_entries[out_fname] = [entry]
end
end
end
# 出力
howm_entries.sort.each do |out_fname, entries|
str = ""
diaryfile = out_dir + out_fname
if File.exists?(diaryfile)
old = open(diaryfile).read
end
str = entries.to_s.gsub(/^(\=.*\:?)/,'\1'+"\n")
rd2 = "rd2 -r rd/rd2hatena-lib"
unless str.empty?
IO.popen(rd2, 'r+') do |pipe|
pipe.write(str)
pipe.close_write
new = pipe.read
unless old == new
puts "#{diaryfile} is updated"
File.open(diaryfile, "w"){|file|
file.puts new
}
end
end
end
end
...いまいち. 特に以前同様, 配列に一度格納しているのがなんか嫌. ファイル数が多くなると破綻しそうな気がする.
ちなみに整形自体は, 以前いんちき臭く作成したrd2hatena-lib.rb経由で.
...日記自体はちゃんと更新できている様なので, まあいっか.
_ bluetooth 経由で聞くと音が切れる
前回(bluetoothでじたばた)の続き.
rhythumbox で音を鳴らして聞いているのだけれども, 頻繁に音が飛ぶ.
どうも処理が複数走った時に, 割り込みくらって止まっている感じだなぁ.やはり USB の bluetooth スタックだと駄目なのかな? リアルタイムカーネルにすれば良いんだろうか? うーん.
iPod で鳴らしている分には問題無いのに. なんか悔しい.
[ツッコミを入れる]