2002-05-01 (Wed) 黄金週間中休み
▲ リファクタリング
昨日の目標はほぼ達成。
- メソッドの抽出 …
60%ほど。あとは仕様が固まってからやろう。結局なんだかんだ言ってだいたい整理してしまった。あとは休み明けにしよう。 - クラスの抽出 … 済。このクラスにNullObjectパターンを適用するかは検討。
- 新たなCompositeクラスを追加 … これで木構造の枝を表現。
- 設定系クラスをシングルトン化 … 設定が欲しいクラスは能動的に設定を参照できるようになり独立性が向上。
▲ コーディングスタイル
しかしコーディングスタイルに添ってないところは著しく読みにくくなるな。Checkstyleを導入してユニットテスト時に自動チェックしてやることにしよう。いちいち他人に注意すんのは疲れる。
2003-05-01 (Thu)
▲ tDiary: TrackBack
安定してきたっぽいので TrackBack plugin を導入してみる。まだ使い方がよくわからん。あとで白井さんの日記に TrackBack ping してみよう。
▲ 休みはどうぶつの森で散歩
休み中ずーっとB00005S01Z三昧。どうぶつの森という仮想空間で NPC 相手にお手紙書いたり、買い物したり花を育てたり釣りをしたりするゲーム。戦わない、冒険しない MMO といったところか。これの楽しさは、e-mail を書いたりする楽しみそのものだろう。
どちらかと言えば低年齢層向けで、文字を覚えたてのお子様なんかにオススメしたいゲーム。しかし、ゲーム内で入手できる「ファミコン」で遊べるミニゲームがファミコンで育った世代のハートをガッチリ掴む。ファミコンで遊んだ「くるくるランド」や「囲碁」などが、当時のまんま遊ぶことができる。これってエミュレータだろうか。とにかく懐かしすぎ。
UO 好きの (や)もハマってるみたい。これがネット対応してしたらもっと面白いのにと思っていたらゲームキューブ SDカードアダプタに対応した「どうぶつの森e+」というのが出るのね。多人数で同時プレイできるといいなぁ。
2007-05-01 (Tue)
▲ リポジトリ壊れた
WebDAVで外部に公開していたsvnリポジトリが、いつのまにか壊れていた。リポジトリタイプはfsfs。普通にチェックアウトできていたので気がつかなかったが、ふと思い立ってダンプしてみると最後まで終わらずにエラーで止まる。db/revs以下を見てみると途中のリビジョン情報のいくつかが消えて失われているようだ。
恐らくfsfsが不安定だったバージョンの時期に発生しているのだろうけれど、チェックアウトもアップデートもできていたので気づくのが遅れてしまった。また、バックアップも--delete付きでrsyncを走らせていたため、消滅したファイルはバックアップ先でも消滅してしまっていた。
直近のリビジョンは取得できることと、以前のダンプファイルがあるので大事には至らなかったが、 やっぱし定期的にダンプしたものもバックアップしておいたほうがよさそう。
ということで複数のリポジトリをぐるぐるとダンプして回るRakeを作って対処してみた。
# -*- mode: ruby -*-
#
require 'rake'
require 'date'
SVNADMIN_CMD = '/usr/local/bin/svnadmin'
BACKUP_DIR = '/home/svn/backups'
SVNROOT_BASE = '/home/svn'
SVNROOTS = ['foo1', 'foo2']
desc "svn repository backups"
task :svnbackup do
SVNROOTS.each do |root|
svndump root
end
end
def svndump(root)
Dir["#{SVNROOT_BASE}/#{root}/**"].each do |dir|
mkdir "#{BACKUP_DIR}/#{root}" unless File.directory?("#{BACKUP_DIR}/#{root}")
sh "#{SVNADMIN_CMD} dump #{dir} > #{BACKUP_DIR}/#{root}/#{File.basename(dir)}-#{Date.today.strftime('%Y-%m-%d')}.dump"
end
Dir["#{BACKUP_DIR}/#{root}/**/*.dump"].each do |file|
sh "/usr/bin/gzip -9 -f #{file}"
end
end
▲ ソースコードの色づけ
実はリポジトリ壊れたのに気がついたのは、結構前のことなので単になにかのソース貼り付けたかっただけだったりして。
前々からソースコードを貼り付けたときにシンタックスのハイライトが欲しいと思っていて、綺麗に整形して行番号や印刷やクリップボードやらと機能的なdp.SyntaxHighlighterが気になりまくりであったが、elisp未対応なので、よくelispコードを貼ってる白井さんのために断念。
Gonzuiから分かれたLangScanを使うことにしてみた。対応言語がやけに多くてとても良い。
使い方
こんな感じに書くと
{{code(<<-'EOS', 'elisp')
(lambda (x) (+ x 1))
EOS
}}
こうなります。
(lambda (x) (+ x 1))
Rubyだと
{{code(<<-'EOS', 'ruby')
class Duck
def hello
p "hello."
end
end
EOS
}}
こんな感じ。
class Duck
def hello
p "hello."
end
end
codelist.rbプラグイン
codeプラグインは、こちらのcodelist.rbにちょこっと手を入れて使ってる。
2番目の引数で言語を指定するが、言語をあらわす文字列でもLangScanのシンボルを直接渡してもどちらでも動くようにした。
対応言語と文字列一覧は以下。
"autoconf" == LangScan::Autoconf "automake" == LangScan::Automake "bf" == LangScan::Brainfuck "c" == LangScan::C "csharp" == LangScan::Csharp "css" == LangScan::CSS "d" == LangScan::D "eiffel" == LangScan::Eiffel "elisp" == LangScan::EmacsLisp "io" == LangScan::Io "java" == LangScan::Java "js" == LangScan::JavaScript "lua" == LangScan::Lua "ocaml" == LangScan::OCaml "perl" == LangScan::Perl "php" == LangScan::PHP "python" == LangScan::Python "rpmspec" == LangScan::RPMSpec "ruby" == LangScan::Ruby "scheme" == LangScan::Scheme "sh" == LangScan::Shell "text" == LangScan::Text
変更したcodelist.rbプラグイン
require 'langscan'
module LangScan
def self.choose_by_abbrev(hint)
::LangScan::LangScanRegistry.each_value {|scanner|
return scanner if hint.downcase == scanner.abbrev
}
::LangScan::Text
end
end
Highlight_type = [
:fundef, :funcall, :classdef, :moduledef, :comment, :string,
:keyword, :const, :character, :type
]
add_header_proc do
%Q[\n]
end
def codelist(file)
scanner = LangScan.choose(file)
scanner = LangScan::Text unless scanner
code(File.open(file).readlines.join, scanner)
end
def code(content, scanner = LangScan::Text)
scanner = LangScan.choose_by_abbrev(scanner) if scanner.kind_of? String
contents = []
scanner.scan(content) {|f|
text = if Highlight_type.include?(f.type)
"#{CGI.escapeHTML(f.text)}"
else
CGI.escapeHTML(f.text)
end
f.text = text
contents.push(f)
}
contents.sort! {|a, b| a.byteno <=> b.byteno }
ret = "\n"
contents.each {|f|
ret << f.text
}
ret << "\n"
return ret
end
行番号対応はそのうち...






# oku [TraceBack のURLをクリックするとエラーが出ているようです。。以下のような感じです。 Content-T..]