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みたいな連絡先があるといいかも…