CVSと同期するRWikiの設定をした時のメモ。
rw-config.rbとrw.cgiは独自の設定が必要なのでシンボリックリンクではなくコピー。
logのパーミッションが777なのはセキュリティ上まずい。
後はapp/rwikiでcvs upをすれば更新できる。
rw-cgi.rbが更新されたときにrw.cgiを更新し忘れるとはまる。
rwiki@www:~$ cvs -d :pserver:anonymous@cvs.ruby-lang.org:/src login
(Logging in to anonymous@cvs.ruby-lang.org)
CVS password:
rwiki@www:~$ cvs -d :pserver:anonymous@cvs.ruby-lang.org:/src co app/rwiki
cvs server: Updating app/rwiki
U app/rwiki/README
U app/rwiki/concat.rhtml
U app/rwiki/edit.rhtml
U app/rwiki/err.rhtml
U app/rwiki/footer.rhtml
U app/rwiki/header.rhtml
U app/rwiki/info.rhtml
U app/rwiki/list.rhtml
U app/rwiki/map.rhtml
U app/rwiki/navi.rhtml
U app/rwiki/rd2rwiki-ext.rb
U app/rwiki/rd2rwiki-lib.rb
U app/rwiki/recent.rhtml
U app/rwiki/rw-arb-test.rb
U app/rwiki/rw-arb.rb
U app/rwiki/rw-cgi.rb
U app/rwiki/rw-concat.rb
U app/rwiki/rw-config.rb
U app/rwiki/rw-desc.rb
U app/rwiki/rw-drb.rb
U app/rwiki/rw-info.rb
U app/rwiki/rw-lib.rb
U app/rwiki/rw-mail.rb
U app/rwiki/rw-map.rb
U app/rwiki/rwiki.rb
U app/rwiki/search.rhtml
U app/rwiki/submit.rhtml
U app/rwiki/view.rhtml
cvs server: Updating app/rwiki/installer
U app/rwiki/installer/.cvsignore
U app/rwiki/installer/ChangeLog.ja
U app/rwiki/installer/Makefile
U app/rwiki/installer/README.en
U app/rwiki/installer/README.ja
U app/rwiki/installer/rwiki-installer.ja.sh
U app/rwiki/installer/rwiki-installer.sh
cvs server: Updating app/rwiki/lib
U app/rwiki/lib/application.rb
cvs server: Updating app/rwiki/rd
U app/rwiki/rd/RD%20format
U app/rwiki/rd/README
U app/rwiki/rd/RWiki
U app/rwiki/rd/Ruby
U app/rwiki/rd/TEST
U app/rwiki/rd/concat
U app/rwiki/rd/help
U app/rwiki/rd/info
U app/rwiki/rd/install
U app/rwiki/rd/list
U app/rwiki/rd/map
U app/rwiki/rd/rd-draft.rd
U app/rwiki/rd/recent
U app/rwiki/rd/search
U app/rwiki/rd/top
cvs server: Updating app/rwiki/rd.ja
U app/rwiki/rd.ja/BUG
U app/rwiki/rd.ja/ChangeLog
U app/rwiki/rd.ja/ERb
U app/rwiki/rd.ja/README
U app/rwiki/rd.ja/RWiki
U app/rwiki/rd.ja/Ruby
U app/rwiki/rd.ja/TEST
U app/rwiki/rd.ja/dRuby
U app/rwiki/rd.ja/eRuby
U app/rwiki/rd.ja/help
U app/rwiki/rd.ja/info
U app/rwiki/rd.ja/install
U app/rwiki/rd.ja/list
U app/rwiki/rd.ja/map
U app/rwiki/rd.ja/me
U app/rwiki/rd.ja/recent
U app/rwiki/rd.ja/search
U app/rwiki/rd.ja/top
rwiki@www:~$ mkdir cvs-rwiki
rwiki@www:~$ cd cvs-rwiki/
rwiki@www:~/cvs-rwiki$ mkdir lib log rd.local
rwiki@www:~/cvs-rwiki$ for i in `find ../app/rwiki/ -type f -maxdepth 1`; do ln -s $i .; done
rwiki@www:~/cvs-rwiki$ ln -s ../../app/rwiki/lib/application.rb lib/
rwiki@www:~/cvs-rwiki$ cp ../app/rwiki/rd.ja/* rd.local/
cp: ../app/rwiki/rd.ja/CVS: ディレクトリは対象外です
rwiki@www:~/cvs-rwiki$ rm rw-config.rb
rwiki@www:~/cvs-rwiki$ cp ../app/rwiki/rw-config.rb .
rwiki@www:~/cvs-rwiki$ vi rw-config.rb
rwiki@www:~/cvs-rwiki$ cp rw-cgi.rb rw.cgi
rwiki@www:~/cvs-rwiki$ vi rw.cgi
rwiki@www:~/cvs-rwiki$ ln -s ../cvs-rwiki/rw.cgi ~/public_html/
rwiki@www:~/cvs-rwiki$ chmod 777 log
現在のcvs upをしてmakeをするスクリプトはこんな感じ。
ALL_LINGUASの書き換えはいいとして、置き換えられなかった/@[A-Z_]+@/
を全部noにするのはちょっとまずい気もする。
#!/bin/sh
set -e
cd /var/tmp
(cd sylpheed-current && cvs -q up)
rsync -aC sylpheed-current/ sylpheed
cd sylpheed
rm -f po/[a-ik-z]*.po
rsync -a ../gdk-pixbuf-0.11.0/gdk-pixbuf.m4 ac/
mv configure.in configure.in~
awk '{if(/^ALL_LINGUAS/){print "ALL_LINGUAS=ja"}else{print}}' configure.in~ > configure.in
./autogen.sh
perl -pli~ -e 's/@[A-Z_]+@/no/g' intl/Makefile
make
sky.plを入れてみた。19990911だったのでかなり長い間安定しているみたい。
転送したメールがどんな感じなのかがパソコン側には残らないようだったので、sub SEND_MAIL
にpush(@adrs,'root@localhost')
という感じで1行加えてローカルのアドレスにも送るようにしてみた。
recent.htmlに無い古い日の日記は見えないのかなぁ。
とりあえずドライブ指定が出来ればいいだけならこんな感じ。a:Class::methods
みたいなので誤動作しそうだけどレアケースということで。./a:Class::methods
にすれば回避できるし。
Index: debug.rb
===================================================================
RCS file: /src/ruby/lib/debug.rb,v
retrieving revision 1.20.2.3
diff -u -r1.20.2.3 debug.rb
--- debug.rb 2001/06/29 08:34:21 1.20.2.3
+++ debug.rb 2001/08/05 03:10:59
@@ -297,11 +297,9 @@
stdout.print "Trace off.\n"
end
- when /^\s*b(?:reak)?\s+((?:.*?+:)?.+)$/
- pos = $1
- if pos.index(":")
- file, pos = pos.split(":")
- end
+ when /^\s*b(?:reak)?\s+(?:((?:[A-Za-z]:)?.*?):)?(.+)$/
+ pos = $2
+ file = $1 if $1
file = File.basename(file)
if pos =~ /^\d+$/
pname = pos
試してみた。
sky.datのemail_replytoをsky.plへパイプしているアドレスと同じにしてemail_send_fromを空欄にするよりも、ちゃんとreplytoはエラーメールを受けるための別のアドレスにして、email_send_fromを設定した方がよかったみたい。
~/.irbrc
にrequire "irb/completion"
といれるとメソッド名の補完ができるらしい。
デフォルトだとファイル名の補完なのはReadlineの仕様らしい。
default.idaにリンクしておけばCodeRed以外のカウントも増えそう:-)
重複なくランダムに数字を出していくカウンタ。範囲は0からmax-1まで。PStoreのファイルがどんどん大きくなるのがダメそう。だんだん遅くなるし。
#!/usr/bin/ruby
require 'pstore'
class RandomCounter
def initialize(filename, max=10)
@db = PStore.new(filename)
@max = max
end
def count
@db.transaction {
return -1 if @db.roots.size == @max
begin
r = rand(@max)
end while @db.root? r
@db[r] = true
r
}
end
end
if __FILE__ == $0
rc = RandomCounter.new(ARGV.shift || 'count.db')
puts rc.count
end
(0...@max).to_a
で初期化した配列からary[rand(ary.size)]
で減らしていく方法。
class RandomCounter
def initialize(filename, max=10)
@db = PStore.new(filename)
unless FileTest.exist? filename
@db.transaction {
@db['count'] = (1..max).to_a
}
end
end
def count
@db.transaction {
ary = @db['count']
return -1 if 0 == ary.size
ary.delete_at(rand(ary.size))
}
end
end
class RandomCounter
def initialize(filename, max=10)
@db = PStore.new(filename)
@max = max
end
def count
@db.transaction {
unless @db.root? 'count' and 0 < @db['count'].size
@db['count'] = (1..@max).to_a
end
ary = @db['count']
ary.delete_at(rand(ary.size))
}
end
end
cshjunkiequotesを設定しているとうまく動かない関数が。どうしようかなぁ。
% zsh --version
zsh 3.1.9-dev-8 (i686-pc-linux-gnu)
% setopt cshjunkiequotes
% run-help :
run-help:36: unmatched '
% unsetopt cshjunkiequotes
% run-help :
%
apt-lineを書いてなかったので書いておいた。
それからここのaptdataをどうやって生成したのかを忘れそうだったので書いておいた。
../ruby/configure; makeって感じで別ディレクトリでmakeしているとext/digest/sha2/extconf.rbの#include "../defs.h"
が失敗していた。
原因探すときに1つずつ条件を変えていかないといけないのに一気に2つ条件を変えてしまって無駄に時間がかかってしまった。
別ディレクトリでmakeするとき全体に関わる問題らしいので、原因がわかったところで後はcommiterの方にお任せ。
と思ったら結局sha2だけの修正みたい。
IRCでの話によるとperl -e 'print $ 0'
って感じで$の後に空白があってもいいらしい。
同じ日に2度以上実行したらパーミッションが400のファイルでエラーが。
引数のyournameの部分が同じディレクトリを同じバックアップ先にバックアップしようとすると変になりそう。
引数の最後に/をつけていると中身が/backup/2001/08/18/hogeって感じでバックアップされるみたい。
/の有無で動作が違うのはrsyncと同じか。
コマンドラインの""や''に改行を入れたいことって今までなかったし、対応が取れてないときは100%入力ミスだったので、次の行の入力を待たれるよりもエラーになって履歴でさっきのを編集し直した方が早いので。
「quote>」のプロンプトからBackSpaceで前の行に戻れれば解決という気も。
Perlメモのmy_flockをRubyに移植してみた。synchronizeでブロック中だけロック出来るのが便利かも。ちなみにsynchronizeの中でsynchronizeをしても大丈夫。
VineSeedのzsh-4.0.2-0vl2でもダメらしい。
一度実行するとキャッシュされてるみたいで、途中でsetoptしても結果は変わらず。
unsetoptすると何も出なくなるだけというのは謎。
vineseed% rpm -q zsh
zsh-4.0.2-0vl2
vineseed% zsh --version
zsh 4.0.2 (i386-vine-linux-gnu)
vineseed% run-help :
run-help:36: unmatched '
vineseed% unsetopt cshjunkiequotes
vineseed% run-help :
vineseed%
potato% zsh --version
zsh 3.1.9-dev-8 (i686-pc-linux-gnu)
potato% run-help :
run-help:36: unmatched '
potato%
vineseed% unsetopt cshjunkiequotes
vineseed% run-help :
colon not found
colon のマニュアルはありません。
vineseed% setopt cshjunkiequotes
vineseed% run-help :
colon not found
colon のマニュアルはありません。
vineseed%
[[ -d $HOME/bin && -z ${(M)path:#$HOME/bin} ]] && path=(${HOME}/bin $path)
としたかったのに[[ -d $HOME/bin && -z "${(M)path:#$HOME/bin}" ]] && path=(${HOME}/bin $path)
としていたら常に-zが真になっていて悩んだ。
inlineってclass Foo {};
の中に関数の本体を書く場合にはいらないような。
static SingletonImpl *_instance(NULL);
って複数のファイルからincludeするとまずいような気が(未確認)。
% cvs di -uN -rroot_of-dev-man1_6 -rrel-1_2_2 > root_of-dev-man1_6.rel-1_2_2.diff
% vi root_of-dev-man1_6.rel-1_2_2.diff
% patch < root_of-dev-man1_6.rel-1_2_2.diff
patching file `edit.rhtml'
patching file `footer.rhtml'
patching file `info.rhtml'
patching file `list.rhtml'
patching file `map.rhtml'
patching file `cvstnXbrN'
patching file `rd2rwiki-lib.rb'
Hunk #2 succeeded at 57 with fuzz 1 (offset 6 lines).
Hunk #4 succeeded at 200 (offset 6 lines).
Hunk #5 succeeded at 314 (offset 1 line).
Hunk #6 succeeded at 368 (offset 25 lines).
patching file `recent.rhtml'
patching file `cvsCino2I'
patching file `cvsJqzRbx'
patching file `rw-cgi.rb'
patching file `rw-lib.rb'
patching file `rw-mail.rb'
patching file `rwiki.rb'
Hunk #1 FAILED at 1.
Hunk #3 FAILED at 23.
Hunk #4 succeeded at 225 (offset 12 lines).
Hunk #6 succeeded at 274 (offset 12 lines).
Hunk #7 succeeded at 392 (offset 27 lines).
Hunk #8 succeeded at 484 (offset 25 lines).
Hunk #9 FAILED at 544.
Hunk #10 succeeded at 557 (offset 27 lines).
3 out of 10 hunks FAILED -- saving rejects to rwiki.rb.rej
patching file `search.rhtml'
patching file `cvsmmwZ5r'
patching file `view.rhtml'
cvs*なファイルができてるのは変ということで+++の行を再編集して他のファイルをpatch前に戻してあてなおし。
% vi root_of-dev-man1_6.rel-1_2_2.diff
% patch < root_of-dev-man1_6.rel-1_2_2.diff
patching file `edit.rhtml'
patching file `footer.rhtml'
patching file `info.rhtml'
patching file `list.rhtml'
patching file `map.rhtml'
patching file `rd2rwiki-ext.rb'
patching file `rd2rwiki-lib.rb'
Hunk #2 succeeded at 57 with fuzz 1 (offset 6 lines).
Hunk #4 succeeded at 200 (offset 6 lines).
Hunk #5 succeeded at 314 (offset 1 line).
Hunk #6 succeeded at 368 (offset 25 lines).
patching file `recent.rhtml'
patching file `rw-arb-test.rb'
patching file `rw-arb.rb'
patching file `rw-cgi.rb'
patching file `rw-lib.rb'
patching file `rw-mail.rb'
patching file `rwiki.rb'
Hunk #1 FAILED at 1.
Hunk #3 FAILED at 23.
Hunk #4 succeeded at 225 (offset 12 lines).
Hunk #6 succeeded at 274 (offset 12 lines).
Hunk #7 succeeded at 392 (offset 27 lines).
Hunk #8 succeeded at 484 (offset 25 lines).
Hunk #9 FAILED at 544.
Hunk #10 succeeded at 557 (offset 27 lines).
3 out of 10 hunks FAILED -- saving rejects to rwiki.rb.rej
patching file `search.rhtml'
patching file `submit.rhtml'
patching file `view.rhtml'
%
rwiki.rb.rejをみるとRCSのIdやコメントだけだったので気にしないことにする。
そして実際に動かしていって少しずつ問題をつぶしていった。
010326のIRCのログからdev-man1_6の特徴を発掘。
dev-man1_6は1.2ベース。
rw-config.rbにREF_POLICY
という定数があって内部参照の文法が選べる。
:rwiki
だと((<page>))でページへの参照。((<page/label>))でラベルへの参照。
そうじゃない場合は((<page/>))でページへの参照。後者はよりRD風。
1.2は((<page/label>))がない。
:rwiki
の方が変更が少なくてすみそうだがRDtoolで処理できない。
参照されるラベルはMethodList, DescList, Headingなどで作られる。
MethodListにクラス名を書かないとクラス名のないラベルになる。
で、((<Array/join>))のように参照する。
Arrayの中だと((</join>))のようになる。
RWiki全体でグローバルなラベルというのは支援されなくなっていて、マニュアル特化版は一ページが一文書と考える。
IO::read
とIO#read
みたいなのはラベルがぶつかる。
Arrayなんかだとself[nth]=val
みたいな記述になっていてselfがついている。
ラベルがぶつかる、ことへの解決のプロポーザルとして RWikiは全部で一つの文書、ラベルの単位でページが分かれる というものとして作られた。
JavaScript Library (.js file)にあるCookieファイル操作 (cookie.js)とくっつけてautosave.jsとして<script language="JavaScript" type="text/javascript" src="autosave.js"></script>
とRWikiのedit.rhtmlに書いて使ってみてますが、とりあえず動いているようです。
var src_area;
var timerId;
var cookie_name = "src";
var timeout_time
function AutoSave() {
setCookie(cookie_name, src_area.value);
timerId = setTimeout("AutoSave()", timeout_time);
}
function AutoSave_start(src, timeout) {
timeout_time = timeout;
if (src_area) {
alert('already started. timeout changed.');
} else {
src_area = src;
AutoSave();
}
}
function AutoSave_stop() {
if (src_area) {
clearTimeout(timerId);
src_area = false;
} else {
alert('already stopped.');
}
}
function AutoSave_load(src) {
src.value = getCookie(cookie_name);
}
function AutoSave_delete() {
deleteCookie(cookie_name);
}
document.write('<div id="JavaScript_testing">AutoSave JavaScript testing<br>')
document.write('<input type="button" value="AutoSave Start" onclick="AutoSave_start(this.form.src, this.form.timeout.value)">')
document.write('<input type="button" value="AutoSave Stop" onclick="AutoSave_stop()">')
document.write('<input type="button" value="Load From Cookie" onclick="AutoSave_load(this.form.src)">')
document.write('<input type="button" value="Delete Cookie" onclick="AutoSave_load(this.form.src)">')
document.write('<br>timeout:<input type="text" id="timeout" width="5" value="60000">')
document.write('<br></div>')
Vine Linuxの方はVine Linux Security Watch Teamというのができてますが、メンバーが(今のところ)VineSeedと同じやんという声あり。
((<日記:今日>))みたいな特異ページを用意して実際の内容は((<日記:2001-08-28>))に保存とか。これだと内容にリンクされたときに困るからリダイレクトの方がいいかもってそれならRWikiでやる必要はないかな。
Last-modifiedは日記:*のファイルのうち一番新しいものにすれば便利かも。
((<ZnZ:*>))みたいに特定のprefixのつくページに一括して特異ページを設定して、特定のユーザのみに書き込めるようにするとか。