参考にしてVine Linux 2.1.5上でやってみた。失敗した点はこんな感じ。
prc-tools-2.0.92を入れてみた。
インストールに使ったMakefileはこんな感じ。
ROOT=~/ROOT
PREFIX=$(ROOT)/usr/local
PATH=$(PREFIX)/bin:/usr/bin:/bin:/usr/local/bin
EXEC_PREFIX=$(PREFIX)
PALMDEV=$(PREFIX)/palmdev
PALMDEV_PREFIX=$(ROOT)/opt/palmdev
EXEEXT=
SDKDIR=$(PALMDEV)/sdk
SDK35=~/sdk35.tar.gz
WORK=$(ROOT)/tmp
BUILD=$(WORK)/build
PRCTOOLSVER=2.0.92
PRCTOOLSDIR=$(WORK)/prc-tools-$(PRCTOOLSVER)
PRCTOOLSTAR=~/got/prc/prc-tools-$(PRCTOOLSVER).tar.gz
GNUDIR=~/gnu
BINUTILSVER=2.9.1
GCCVER=2.95.3
GDBVER=5.0
MAKEVER=3.77
PATCHED=$(WORK)/gcc-$(GCCVER)/gcc/cstamp-h.in
all-install: $(BUILD)/Makefile
cd $(BUILD) && make all-install
explicitly: $(BUILD)/Makefile
cd $(BUILD) && make all-host
cd $(BUILD) && make install-host
cd $(BUILD) && make all-gcc
cd $(BUILD) && make install-gcc
cd $(BUILD) && make install-palmdev
cd $(BUILD) && make all-target
cd $(BUILD) && make install-target
doc: $(BUILD)/Makefile
cd $(BUILD)/doc && make html
cd $(BUILD)/doc && make install-html
clean:
rm -rf $(WORK)
purge:
rm -rf $(WORK) $(PALMDEV) $(PALMDEV_PREFIX)
config: $(BUILD)/Makefile
$(BUILD)/Makefile: install-sdk $(PRCTOOLSDIR)/symlink
mkdir -p $(BUILD)/empty
cd $(BUILD) && ../prc-tools-$(PRCTOOLSVER)/configure \
--target=m68k-palmos \
--enable-languages=c,c++ \
--with-headers=`pwd`/empty \
--prefix=$(PREFIX) --exec-prefix=$(EXEC_PREFIX) \
--without-shared-libstdcxx-for-tools \
--with-build-sdk=-palmos \
--with-palmdev-prefix=$(PALMDEV_PREFIX) \
--with-palmdev-extra-path=$(PALMDEV)
symlink: $(PRCTOOLSDIR)
$(PRCTOOLSDIR)/symlink: $(PATCHED)
rm -f $(PRCTOOLSDIR)/{binutils,gdb,gcc,make}
ln -s ../binutils-$(BINUTILSVER) $(PRCTOOLSDIR)/binutils
ln -s ../gdb-$(GDBVER) $(PRCTOOLSDIR)/gdb
ln -s ../gcc-$(GCCVER) $(PRCTOOLSDIR)/gcc
ln -s ../make-$(MAKEVER) $(PRCTOOLSDIR)/make
touch $@
patched: $(PATCHED)
$(PATCHED): $(PRCTOOLSDIR)/README \
$(WORK)/binutils-$(BINUTILSVER)/README $(WORK)/gcc-$(GCCVER)/README \
$(WORK)/gdb-$(GDBVER)/README $(WORK)/make-$(MAKEVER)/README
cd $(WORK) && for diff in $(wildcard $(WORK)/prc-tools-$(PRCTOOLSVER)/*.palmos.diff); do patch -fp0 < $$diff; done
touch $@
$(PRCTOOLSDIR)/README: $(WORK)
cd $(WORK) && tar zxf $(PRCTOOLSTAR)
$(WORK)/binutils-$(BINUTILSVER)/README $(WORK)/make-$(MAKEVER)/README: $(WORK)
cd $(WORK) && tar zxf $(GNUDIR)/`echo '$@'|sed -e 's:$(WORK)::' -e 's:/README::'`.tar.gz
$(WORK)/gcc-$(GCCVER)/README $(WORK)/gdb-$(GDBVER)/README: $(WORK)
cd $(WORK) && tar --bzip2 -xf $(GNUDIR)/`echo '$@'|sed -e 's:$(WORK)::' -e 's:/README::'`.tar.bz2
install-sdk: $(SDKDIR) $(SDKDIR)/include $(SDKDIR)/lib
$(SDKDIR)/include: $(SDKDIR)
ln -s Incs $(SDKDIR)/include
$(SDKDIR)/lib: $(SDKDIR)
ln -s 'GCC Libraries' $(SDKDIR)/lib
$(SDKDIR): $(PALMDEV) $(PALMDEV_PREFIX)
cd $(PALMDEV) && tar zxf $(SDK35)
ln -s 'Palm OS 3.5 Support' $(PALMDEV)/sdk35
ln -s sdk35 $(SDKDIR)
$(WORK) $(PALMDEV) $(PALMDEV_PREFIX):
mkdir -p $@
saryを使う設定で/home/pobox/ROOTに入れてみた。saryは./configure --prefix=/home/pobox/ROOTで問題無く入った。
POBox Serverは./configure --prefix=/home/pobox/ROOT --enable-saryだけではうまくいかず、OpenPOBox/server/MakefileのCFLAGSに-I/usr/lib/glib/include
や-I~/ROOT/include
を追加して、さらにpbserverのルールの-lsary
を-L/home/pobox/ROOT/lib -lsary
にして-lglib
をsaryのMakefileを参考にして-L/usr/lib -lgthread -lglib -lpthread
にしたらmakeできた。
skkservが1178を使っているので、chmod +x pbserver.cしてからPOBOXSERVERPORTを変更してmakeし直した。
そしてインストールに書いてあるようにnkf -e ../dict/data/fugodic > staticdic ; ~/ROOT/bin/mksary -l staticdic ; touch learndicをしてから起動した。
telnetで動作確認した後、Emacs版から使ってみたらskkservにつながってなんか変だったので、pobox.elを見て(setq pobox-port 11178)
と設定したらちゃんと使えるようになった。
preservedとEachDelegatorのようにmethod_addedを再定義するものを2つ以上使ったらまずいような気がした。
Dir['foo\ bar']
のようにエスケープすれば大丈夫です。FAQに追加?
ブロック付きのchdirはruby 1.7 featureです。
rubyだとRegexp.quoteでperlだとquotemeta。
正規表現のquoteって忘れられてることが結構あるような気が。
fetch-rwiki.rbのscan(%r<<li><a href="#{Regexp.quote @path}\?cmd=view;name=([^\"]+)">([^<>]+)</a>\((\d+\w)\)>)
のようなquoteって普通は必要なさそうなので。
今は~/.zshrcでこうやってます。
ssh-add -lで既にssh-add済みかどうかを判断するところをもうちょっとどうにかしたいですが。
if [ -z "$PROMPT" ]; then
return
elif [ -n "$ZDOTDIR" -a ! -O "$ZDOTDIR" ]; then
:
elif [ -x /usr/bin/ssh-agent -a -z "$SSH_AUTH_SOCK" ]; then
exec /usr/bin/ssh-agent zsh
elif [ -x /usr/bin/ssh-add -a ${$(/usr/bin/ssh-add -l)[0]} != 1024 ]; then
ssh-add
fi
Apolloでチャットクライアント再び。
RubyのThreadやTCPSocketはうまくいかないようだったので、require 'internet'
で使えるClientSocketを使ってみた。
後はいろいろと調整中。
前提としてちゃんとしたHTMLだとして、要素だけならs/(<\/?)(\w+)/$1.uc($2)/eg
。属性はsplit(/(<[^>]+>)/)しておいてs/\b(\w+)(=(?:(["'].*?\3|\S+))?/uc($1).$2/egとか。属性値はquoteしてしまいたいというのなら
s/\b(\w+)(=(?:(["'].*?\3|(\S+)))?/uc($1).($4 ne '' ? qq(="$4") : $2)/eg
とかいうのを思い付きました。
動作は未確認。
今のところ、思いっきり自分の環境専用のチャットクライアント。
これを作るときにap-listでいろいろお世話になりました。
Phi::Edit#text
で取得したStringにconcatしてもEditの内容は変わらない。
変更した後Phi::Edit#text=
で書き戻す方がRubyレベルの文字列操作を一気にできるのでよさそう。
普通のformの他にeval用のフォームも用意しておくとデバッグなどに便利。
タスクバーにたくさん並ぶのさえなんとかなればなぁ。
form_eval = Phi::Form.new
form_eval.caption = 'eval'
btn_eval = Phi::Button.new(form_eval, :btn_eval, 'e&val')
btn_eval.align = Phi::AL_BOTTOM
memo_eval = Phi::Memo.new(form_eval)
memo_eval.align = Phi::AL_CLIENT
memo_eval.text = 'puts Marshal.dump(form)'
btn_eval.on_click = proc do |sender|
text = memo_eval.text
break if text.empty?
eval text
end
form_eval.show
1.6で確認したつもりだったのに1.7だったのかも。
ruby-devって書いてあるのにリンク先はruby-listになってる。
ツッコミをしやすいようにとか、リンクされたときにわかりやすいようにtDiaryに移転することにした。
nDiaryと同じで空行が入れられないという問題がありますが…。
「■」のところはtDiaryで書いたもののバックアップコピーということでこっちもたまに更新する予定ですが、ツッコミ機能があるtDiaryの方をメインにする予定。
.htaccessや.htpasswdはother権限で読み込めないと効かない。
ディレクトリ(t,t/erb,t/theme)のパーミッションは705。
index.cgiとupdate.cgiは*.cgiは700。.htaccessが効かない問題で悩んでいたときに*.rbから*.cgiに変えてしまったのでそのまま。
erb/*とtdiary.rb、つまり*.rbは600。cgiが実行時に読み出すだけだから。+xは必要ない。
その他のtdiary.confや*.rhtmlなども600。cgiが実行時に読み出すだけなので。
t/theme/*のパーミッションは604。ブラウザで普通に読み出せるようにするため。
README.htmlとHOWTO-write-tDiary.htmlも置くのなら604。
public_html/t/.htaccess
の内容は以下の通りでパーミッションは604。データ用ディレクトリtdiary
はパーミッション701で、その中のtdiary/.htpasswd
のパーミッションは604。
<Files "*.rhtml">
deny from all
</Files>
<Files "tdiary.*">
deny from all
</Files>
<Files update.cgi>
AuthName tDiary
AuthType Basic
AuthUserFile /virtual/znz/tdiary/.htpasswd
Require user znz
</Files>
ツリーで書くとこんな感じ。もう少し厳しくするのならpublic_htmlのotherのr(ディレクトリ一覧を見る権限)とかtディレクトリ以下のすべてのファイルのw(自分の書き込み権限)をはずしてもいいのですが、自分の書き込み権限をはずすのは不便になるだけという気がするのでお勧めしません。
705(drwx---r-x) ~/
701(drwx-----x) +--tdiary/
604(-rw----r--) | +--.htpasswd
644(-rw-r--r--) | +--200109などの後から生成されるファイル
705(drwx---r-x) +--public_html/
701(drwx-----x) +--t/
604(-rw----r--) +--.htaccess
700(-rwx------) +--*.cgi (index.cgi,update.cgiなど)
| (オリジナルのままならindex.rbとupdate.rb)
600(-rw-------) +--tdiary.rb (requireで読み込まれるだけなので
| 実行権限はいらない)
600(-rw-------) +--*.rhtml
600(-rw-------) +--*.rtxt
600(-rw-------) +--*.conf (ちゃんと設定しておくこと)
604(-rw----r--) +--*.html (なくてもいい)
700(drwx------) +--erb/ (公開しないのでotherの権限はいらない)
600(-rw-------) | +--*.rb (tdiary.rbと同じでrequireで読み
| 込まれるので実行権限はいらない)
701(drwx-----x) +--theme/ (公開用なのでotherのxが必要)
604(-rw----r--) +--*.css, *.png
(すべて公開用なのでotherのrが必要)
nonsense talkが更新されてなくてもnAntennaの情報がこっちになってるのはたんぽぽ ひとりごと。から情報をもらってるから?
入れるときに信頼性の高い「実験的日記」(2001-08-31)を参考にしたんですが、参考に仕返されたようで。
問題点はサーバが落ちてると更新できないとか、途中でブラウザが落ちたら消えるとか。
2001年9月9日問題はWindowsMEやCVSupにあったらしい。
リファレンスはRuby GUI センターからリンクされているPhiが一番詳しいみたい。ComboBoxがないみたいだけど。
apollo.exeだと自動でinclude Phi
されているらしくruby_ap.exeで実行したときにPhi::
の付け忘れが発覚した。
今、うさにっきとかhttp://www.dm4lab.to/~kjana/ruby/ruby.htmlにつながりません。
最新のページには<meta name="ROBOTS" content="NOINDEX">
をつけた方がいいような気がするんですが、tDiary(のデフォルト)ではつけないんでしょうか?
たんぽぽ ひとりごと。が置換リストに入れたはずなのにURLのままになっていたのでなぜ?と思ったら、ドメインに大文字が混ざっているのが別URLとみなされていたらしい。
今は^http://(?i:hachi.haun.org)/tp/.* たんぽぽ ひとりごと。
にして置換はされるようになったけど。
別々にカウントされるのはindex.htmlの有無と同じで気にしないというのが一番よさそう。
9桁で処理していたら破綻する(した)というパターンは結構少ない気がする。
もう1つは数値で比較すべきところを文字列で比較してしまっていたというもの。perlのCGIでありがちらしい。
フォルダの名前をfooからbarに変えたような時にfoo/hogeがbar/hogeにならずにfoo/hogeのままだったので、for d in .foo.*; do mv $d `echo $d|sed -e 's/foo/bar/'`;doneで無理矢理変更。
画像を取り込む方法はepsboxとかepsfとかいろいろあるみたいですが、どう違うのかよくわかりません。
2001年9月6日(木) 9:00 〜2001年9月11日(月) 9:00の間停止というメールが停止が終わってから1日以上経ってから(JSTで今日の20時に)届いた。終わってから届いても遅いって。こういう連絡メールだけは停止前に配送してしまうということはできなかったのかなぁ。
Vine Linux 2.1.5やVineSeedのwdmで修復モードでさえログインできなかった原因は、.Xdefaultsか.Xresources(シンボリックリンクにしているのでどっちなのかは不明)がsyntax errorだったかららしい。
と思ったらそうでもなかったらしい。syntax errorを直したら.xsession-errorsができなくなって、setime noneをしたら、.xwm.msgsもできなくなったので、てがかりがさっぱりなくなってしまった。
dRubyで呼び出し中にThread#raise
で呼び出し側に例外があがったらどうなるんだろう?
Kondara Maryに直接ログインすると、.profileでexec zsh -lした後でプロンプトが出てこない。rootで入ってsuでも駄目だった。execの行をコメントアウトして、sh(実体はbash 2.04?)のプロンプトからexec zsh -lすると問題無くzshのプロンプトが出てきた。謎。ssh-addのパスフレーズ入力までいかないということはどこで止まってるんだろう…。
#! /bin/sh
SHELL=`${HOME}/etc/shell.sh`
if [ -n "$SHELL" ]; then
export SHELL
exec $SHELL -l
fi
ちなみに~/etc/shell.shはこんな感じ。zshもtcshもない環境ではbash -lはだめでbash --loginとしないといけなくて残念な思いをする予定。
#! /bin/sh
for SH in zsh tcsh bash csh; do
for BIN in /bin /usr/bin /usr/local/bin; do
[ -x ${BIN}/${SH} ] && echo "${BIN}/${SH}" && exit 0
done
done
exit 1
Debianのapt-lineはdeb http://deb.ruby-lang.org/debian potato main contrib non-free
を例にするとこんな感じなのでしょうか?
deb
はdebのバイナリパッケージで/dist/potato/
(distは固定?)のさらに下のmain/binary-all/Packages{,.gz}
にパッケージ一覧がある。全部いれるとでかいけど、だからといってどれが不必要なのかが初めていれる場合にはわからないという話が。
gsub(/<(?!\w)/, '<')
とかすればいいのかも、と思いましたがどうでしょうか?>tDiary,nDiary
というのがついてるところが最近多い?
tDiaryってツッコミを考えると単純な1ページのみをダウンロードする巡回ソフトと相性が悪そう。
Project HeavyMoon(重月計画)は入ってないみたい。
yamk 日記のアンテナボタンで思い出しましたが、悲しいのでscript必須ならdocument.write
で動的に出してほしいです。noscriptに代わりのa要素があればもっとうれしいです。
例としてはAutoSaveとか。そういえばこれって</
がそのまま書いてあるというのが別ファイル専用という感じ。
Debian(potato)のtmpreaperだと/tmpだけ処理されて/var/tmpはそのままなのに、Vineではtmpwatchによってしばらく使われていないファイルは消されてしまう。
rpm.labelCompare((None,None,None),(None,None,None))
でsegmentation fault。
IMAPのアカウントで使ってみようかと思ったら、CRAM-MD5の認証に対応してなくて使えず。
問題の本質としては鳩丸ご意見番 - 残念な思いを致しました(2) - 謎のアンカーには残念な思いを致しました。と同じです。
ちなみにこういう「大分類 - 中分類 - 小分類」という並びでtitleが書いてあると複数のページを一気に開いたときにタスクバーなどで頭の何文字かしかわからないので、区別しにくくて残念な思いをします。
日記ページで順番を変えて数字だけ見えてたらそれはそれでもっと残念な思いをしそうですが。
やっぱまずいらしい。
mkdirでフォルダを追加しようとしたら、MUAから見ても追加されてなかったのでなぜ?と思ったら、maildirmakeで作らないとだめだったみたい。
サンプルが読めません。
SSLで送った情報を確認のためメールで送ってくるのはセキュリティ的に問題あり。
Vine専用ではないけど置く場所に悩んだのでvineディレクトリにrpmVersionCompare.pyとrpmLabelCompare.pyをおいてみた。
rpm-pythonが必要。
rpmVersionCompare.pyは*.rpmかrpmdb(インストールされているrpmの情報のデータベース)から情報を取り出してバージョンの比較をするスクリプト。引数の末尾が.rpmならファイルとみなしてそこから情報をとりだし、そうでなければrpmdbから。rpmdbに複数あった場合は見つかったものを全部出力して一番最初のと最後のを比較します。
% rpmVersionCompare.py kernelcfg kernelcfg_0.6-9vl1_i386.rpm
kernelcfg 0.6 9vl1 == kernelcfg 0.6 9vl1 # 0 0
% rpmVersionCompare.py libruby_1.6.4-0vl2_i386.rpm libruby_1.6.4-0vl8_i386.rpm
libruby 1.6.4 0vl2 << libruby 1.6.4 0vl8 # -6 6
rpmLabelCompare.pyはあらかじめname version releaseに分割しておいてから引数に渡すとrpm.labelCompare
を呼び出して比較した結果を標準出力にprintするだけというかなり不便な手抜きスクリプト。rpmVersionCompare.pyでrpmdbから複数見つかったときの比較には使えるかも。
% rpmLabelCompare.py man 1.5i 10vl1.2 man 1.5i 10vl1
1
機能があっても気づかなければ意味がない対策としてリンク元置換リストにないURLからのリンクがあったときはツッコミと同じようにメールで通知するというのを思い付きました。
普段はブラウザがエラー処理としてやってくれることをCGIの方で代わりにやっておいて少しでもvalidなHTMLにしようというつもりなので、最後の出力の直前でいいと思います。
HNSのように閲覧者に警告が見えるシステムはなんか間違ってる気がするので、警告するなら更新の時に。
RWikiのRDをそのままCVSで管理しようとすると、CVSというページがあるとまずいというのは.rdをつけてからCVSにいれることで回避していたが、CVSのキーワード($Date$など)があるとまずいかもしれないというのを気にせず放置していたら、CGIで見事に罠にはまってしまったので、cvs admin -ko *.rd; cvs upした後、$Date$を消しておいた。
Refererチェックメールって本日のリンク元が0から1になるときだけということにすれば専用のステートは持たなくていいと思ったんですが、書き忘れてたかも。
閲覧者に警告が見えるのって適切なclassがついててユーザスタイルシートで隠蔽できればなんとか。HNSのも自分で隠す設定にしておけばいいのか。調べておこう。
コメントや閉じタグは思いっきり忘れてました…。コメントタグってIE独自拡張の<comment>のことですか?っていうわかりにくいぼけはおいといて、<!-- これ -->
は注釈宣言っていうのが正式名称のようです。とりあえずタグじゃないというのは覚えておいた方がいいいと思います。
をゐなり日誌のように脚注をtitleでつけてみるのはどうだろうと思って、某所のRWikiにapply_to_Footnote
に%Q[<a name="footnote:#{num}" href="#foottext:#{num}" title="#{CGI.escapeHTML content.to_s.gsub(/<[^>]+>/, '')}"><sup><small>] +
という感じでtitle属性をつけてみた。タグは問答無用で消すのでいいのかどうかが悩ましい。
orphanは簡単にできたけどorphanのページからリンクを開くと、リンクされてなかったから読み込まれてなかったファイルが読み込まれてしまう。
許可が出たので幹にcommit。ということは次にRWikiがリリースされるときには入るはず。
>に関してはXML 1.0 日本語版の2.4 キャラクタデータ・マークアップによると「大なり不等号 (>) は,"
」と書かれていて(原文では「>
" という文字列を使って表わされてもよくTheright angle bracket (>) may be represented using the string "
」)となっているので「>」のままでも構わないと思います。>
"互換性のため (for compatibility)
というのはSGMLとの互換性なので、HTMLやXHTMLではこだわる必要はないと思います。
コマンドを省略可能にするのにこんな感じで逆にマッチするようにすれば(?:...)?
の入れ子でややこしくならなくて済みそうだけど、引数までまとめてチェックするのは無理という弱点が。これを使うのならあらかじめsplitしてからになりそう。
module OmitableMatch
def ===(o)
/^#{Regexp.quote o.to_s[0, self.size]}/.match self
end
module IgnoreCase
def ===(o)
/^#{Regexp.quote o.to_s[0, self.size]}/i.match self
end
end
end
# 使用例
hoge = 'hoge'
hoge.extend OmitableMatch
hoge === 'hoe' #=> nil
hoge === 'hog' #=> MatchData
hoge.extend OmitableMatch::IgnoreCase
hoge === 'Hoge' #=> MatchData
状態をあらわすのにこんなのを思いついた。st.foo!
とかst.bar!
で状態変更でst.foo?
や:foo === st
で状態のチェックができる。===
を定義しているので、case ... when
で使うのが便利。
class State
def initialize(*arg)
@states = arg.collect{|s|
case s
when Symbol
s
when String
s.intern
else
raise ArgumentError, "#{s} is not a symbol or a string"
end
}
@states.each do |i|
eval %Q{
def #{i}!
@state = :#{i}
self
end
def #{i}?
@state == :#{i}
end
}
end
__send__ "#{@states[0]}!"
end
attr_reader :states, :state
def ===(state)
@state == state or @state == state.intern
end
def ==(o)
@states == o.states and @state == o.state
end
def to_s
@state.to_s
end
def _dump(lv)
"#{@state} " << @states.join(' ')
end
def State._load(s)
state, *states = s.split
State.new(*states).__send__ "#{state}!"
end
end
if __FILE__ == $0
st = State.new(:a,:b,:c)
st.b!
st.c? #=> false
case st
when :a
# a
when :b
# b
when :c
# c
end
end
<font color="red">だった…。ユーザスタイルシートで何とかするのは無理そう。
結構参照されているようなので、2001-09-23追記として全ファイルのパーミッションをまとめ直してみました。