2007-10-01
■ [javascript] JSSpec
RSpecのJavascript版作ったら面白いんじゃね?と思ったんだが、既にあった。
マニュアルはこちら。
expect("Hello World").should_match(/ello/);
expect([1,2,3]).should_have_at_most(4, "items");
RSpecと違って「expect」から始まるんだなぁ。ArrayやStringを拡張すればexpectを無くすこともできると思うんだけど、 どうなんだろ。
デモがかっこいい。
RSpecについては先日出たばかりの伝説の記事(笑)を参照してください。
■ [scheme] R6RS.Org
来たね!
http://www.r7rs.org/ も既に用意されている。
http://www.r8rs.org/ はまだみたい。(まぁR6RSの策定にかかった年数を考えれば…)
■ [hiki] Hiki公式サイトが…
http://hikiwiki.org/ja/ が困ったことになってるな。
- 「インストール」「ダウンロード」などのページが全て表示不能
- トップページもフッタの上にエラーが
■ [hiki] コマンドライン一発でn個目のHikiを設置するスクリプトを書いた
./init-hiki.rb hoge
とやると、
- データ保存用ディレクトリ (/home/user/data/NAME/)
- Wiki公開用ディレクトリ (/home/user/public_html/NAME/)
- SVNのリポジトリ (/home/user/svn/NAME/)
を一度に初期化してくれる。これで、思いついた瞬間にWikiが増やせる環境が整った。やったぜ(それWikiFarmでっていうツッコミは無しで)。
そもそもどうやって複数設置すんのって話は 同一サーバで複数のHikiを管理する方法(2007-08-08) を参照のこと。
#!/usr/bin/env ruby
require 'optparse'
require 'pathname'
require 'erb'
# Configuration
SERVER_URL = Pathname.new("http://mono.kmc.gr.jp/")
PUBLIC_HTML = "public_html"
HIKI_INSTALL_PATH = "/home/yhara/bin/hiki"
DRY_RUN = false
def abort(msg)
puts msg + " abort."
#exit
end
def shell(cmd)
puts cmd
system cmd unless DRY_RUN
end
def make_directory(path, opt={})
if path.exist? and opt[:must_not_exist]
abort "directory #{path} already exists."
end
unless path.directory?
puts "making directory #{path}"
path.mkdir unless DRY_RUN
end
end
def make_file(path, data, perm)
if path.exist?
abort "file #{path} already exists."
end
puts "writing file #{path} with permission #{perm}"
unless DRY_RUN
if perm
path.open("wb", perm){|f| f.write data}
else
path.open("wb", perm){|f| f.write data}
end
end
end
def run_erb(filename, args)
template = File.read(File.join(File.dirname(__FILE__), filename))
ERB.new(template).result(binding)
end
if ARGV.size != 1
puts "usage: #{$0} WIKINAME"
else
name = ARGV.first
user = ENV['USER']
home = Pathname.new("/home")
make_directory(home + user + "data")
make_directory(home + user + PUBLIC_HTML)
make_directory(home + user + "svn")
data_dir = home + user + "data" + name
make_directory(data_dir, {:must_not_exist => true})
web_dir = home + user + PUBLIC_HTML + name
make_directory(web_dir, {:must_not_exist => true})
svn_dir = home + user + "svn" + name
make_directory(svn_dir, {:must_not_exist => true})
puts "---- init web dir ----"
opts = [
{
:tmpl => "hiki.cgi.erb",
:args => {:hiki_dir => HIKI_INSTALL_PATH},
:path => web_dir + "hiki.cgi",
:perm => 0775
},
{
:tmpl => "hikiconf.rb.erb",
:args => {:repos_root => home + user + "svn" + name,
:data_path => home + user + "data" + name},
:path => web_dir + "hikiconf.rb"
},
{
:tmpl => "htaccess.erb",
:args => {},
:path => web_dir + ".htaccess",
},
]
opts.each do |opt|
make_file(opt[:path], run_erb(opt[:tmpl], opt[:args]), opt[:perm])
end
puts "---- init data dir ----"
puts "access #{SERVER_URL + "~#{user}" + "#{name}/"} to init data dir"
puts "(press enter if done)"
$stdin.gets
puts "---- init svn dir ----"
shell "svnadmin create #{svn_dir}"
text_dir = data_dir + 'text'
shell "svn import -m 'import' #{text_dir} file://#{svn_dir}"
shell "rm -ri #{text_dir}"
shell "svn co file://#{svn_dir} #{text_dir}"
puts "---- done. ----"
end
設定とかそのへんは勘で。
> Hiki公式サイトが…<br>* info.dbのownerがrootになってました。<br>* FastCGIで動かすと、httpdがSEGVしまくってました<br>* メールで報告くれた方が嬉しい<br>というわけで、なおしました〜。
ありがとうございます。ご苦労さまです。<br>次からはメールすることにします。<br># webmaster@hikiwiki.orgみたいな連絡先があるといいかも…