うぅむ。ocamllex では空のトークンは扱えないのか?
いや、そんなこたないか。
lex (の類)を使っていていつも思うのは、 部分文字列を取り出すのが厄介だということである。
まぁ、DFA でやるのが難しいのはわかるのだが、いつかどうにかしたい話ではある。
しかし、こう考えることも出来る。
慣性の小さなプロジェクトに依存したとしても、その機能が少なければ、 あとから自作のものと入れ換えるのは容易なはずである。
とすると、飽きないうちにプログラムを完成させるためには、 可能な限り再利用したほうがいいのかもしれない。
OCaml でプログラムを書いていて不安になるのは ; の優先順位である。
たとえば if a then b else c; d というときに d は else 節に含まれるのかどうかという点が不安になる。
いっそ(camlp4 が標準添付になったことだし) The revised syntax を使うか?
commitinfo による手法と違って、 cvs add で複数のディレクトリを一度に作った場合のデータを まとめて扱えることに気がつく。
年末から - たぶん 12/31 から - CVSsuck が遅い。
どのくらい遅いかというと 1日 1回の cron job が 24時間たっても終わらないほどである。 しばらく前までは半日ほどで終わっていたはずなのだが、 なぜ遅くなったのか、理由はよくわからない。
とりあえず(新しい job の投入を停止して)数日ほおっておいたのだが、 まだ終わらないのでしょうがないので停止する。
調べてみるとメモリを馬鹿食いして遅くなっていることがわかった。 たぶん swapping でもしているのであろう。 まぁ、各ディレクトリの(全てのファイルの) log をいったんメモリに読み込むので自業自得ではある。
とりあえず、各ディレクトリ毎に fork して別プロセスで処理するようにしてみた。 すると、状況が緩和された気がする。
ふと気に入ったので「苦痛魔法ミミ」をサーチしてみる。 うぅむ、なにも見当たらないな。
message の format 部分を実装する。 以前の腐った機構は捨てて eRuby (や JSP や ASP や MSP や HSP や...) like な template を使う。
... しかし、この形式は ML とはあまり相性が良くないようだ。
MSP を調べ直してみると、こっちは不完全な式は扱えない(扱わない)模様。
まぁ、なんというか、速そうではある。
2時間で smtp モジュールをでっちあげる。
いきなり(いまさら) (EHLO でなく) HELO を発行するのがなんであるが、 まぁ、メールを送れることには違いない。
jail xxx yyy 127.0.0.2 とすると 127.0.0.1 に connect できないことに(再度?)気がつく。
うちの postfix は(自分で設定したのかどうかもよく覚えていないのだが、) 127.0.0.1:smtp でしか受け付けないので、 127.0.0.1 に connect できないとテストできない。
なぜ jail を使うと 127.0.0.1 に connect できないのか、 master.cf にはたんに smtp としか書いていないのになぜ master が 127.0.0.1:smtp に bind するのかなど、いくつか疑問がわきあがってくるが、 とりあえずどうにかしないとテストできないのでどうにかする。
jail を 127.0.0.1 につくることを検討... いろいろと port が衝突するので却下。
master.cf に 127.0.0.2:smtp と書いて postfix reload とする。 maillog に fatal: host not found: 127.0.0.1:127.0.0.2 と吐いて postfix が死亡。要検討 version up。
127.0.0.2:10025 から 127.0.0.1:25 へ forward して済ます。 まぁ、動いた。
connection が close するときの挙動について思いをめぐらす。 SMTP だと両側とも EOF には依存しないから forwarder が残るということはないのか。
References: は面倒なので保留。
martin-log.pl なるものをみつける。
ふむ。ヘッダに情報を詰め込んどくのはいい考えかも。
おっかけの最先端は普通 cvs である。
しかし、さらに新しいものはないだろうか? たとえば、開発者の working directory をどうにかして覗くとか。
ふむ。Parrot は register machine なのか。
cvs-info でコマンドラインから宛先を指定できるようにするかどうか悩む。
... まぁ、hard code と設定することも出来れば、指定できてもいいか。
Objective Caml では 0, 1, 2 以外の fd が最初から open されている場合、close できないことに気がつく。 うぅむ。とすると C を使わないと古い cvs ではうまく動かんな。
... と、思ったが、いきなり
external close : int -> unit = "unix_close"
と宣言してしまえば int を引数として close が呼べることが判明。
なんというか、何かを失ってしまった気がする。
... とりあえず type safety を失ったのは間違いない。
OCaml 2.04 ではコンパイルできないことに気がつく。
(cvs-info だけ)運用開始。 最初の commit は何だろうか?
ちゃんと動くといいのだが...
やはり、commitinfo を設定しなくていいのは気楽である。 commitinfo が失敗すると commit 自身が失敗するし。
とはいえ、loginfo から生まれたプロセスを残しておく場合、close が甘いと cvs と互いに終了を待ち合って dead lock になるという問題があったし、 問題が発生し得ない構造とまではいえないのだが。
Obj モジュールを使えば怪しげなことが出来るのか?
それはそれとして、作者の見解が見つかった。
external fd_of_file_descr: Unix.file_descr -> int = "%identity"
というようなことも出来るらしい。
OpenSSH が build 済みの OpenSSL と zlib を要求するため、 configure から configure を呼び出すのはちょっと無謀であったらしい。
Linux ではとくに設定しなくても 127.*.*.* に bind できることに気がつく。
ファイルが足りん。 いきなし失敗してやがる...
Fatal error: uncaught exception End_of_file というだけではわからんな。 もちっと情報を残すようにしよう。
うぅむ。close を忘れてただけか?
log から余計な空行を消す。 LESS が -si だったので気づかなかった。
それはそれとして、cvs も同様な処理をやってから RCS file に記録する模様。 どうせなら処理済みのを loginfo に渡してくれりゃいいのに。
Attic 中にあるファイルの diff が ViewCVS から参照できないことに気がつく。
根本的には Attic が URL に出てくるという (cvsweb から受け継いだ) ViewCVS のアーキテクチャがまずいわけだが、 とりあえず、それなりな修正をしておく。
最近の傾向を調べてみようと思って google で cvs loginfo.
よしよし、いきなり先頭が知らない奴である。 namazu で cvsloginfo2mail なるものを使っているらしい。 diff をつけるところは ViewCVS でつかっているやつ を想起させる。
http://cvs.namazu.org/CVSROOT/ を眺めてみる。
ふむ。cvsloginfo2mail 以外に logaccm なるものを使っているらしい。 だが、これって cvs に同梱されてる log_accum と同根だと思うのだが、 とすると commit_prep (に対応するもの)と一緒に使うことが意図されているのではなかろうか。
直接の起源は FreeBSD か? peter@dialix.com.au というところを見ると FreeBSD の log_accum.pl の 1.22 から 1.29 のどれかなのだろう。 おそらく 1.25 あたりか。(ちなみに FreeBSD はすでに 1.118)
google で logaccm.
http://www.namazu.org/~kitame/logaccm http://chasen.aist-nara.ac.jp/cgi-bin/cvsweb.cgi/CVSROOT/loginfo?rev=1.2&content-type=text/x-cvsweb-markup http://emacs-w3m.namazu.org/ml/msg00568.html
そのへんででまわってんのか? でもどれも commit_prep の形跡がないな。
CVSreport automatically generate a report for each commit on a given repository, reporting added, removed and modified files.
loginfo かと思ったらそうではないらしい。 「インストールのしかた: cvs を cvs.bin に mv して cvs から cvsreport にシンボリックリンクを作れ」とはなかなか。
おぉ。very easy to install とも書いてある。よくいう。
でも、loginfo の形式に影響されずに独自に発展した(気がしないでもない)メールの形式は興味深い。 ただ、text と HTML が選べるんなら、multipart/alternative に出来てもいいのにとは思う。
スペース・タブを使うとは何とも独創的。
Ezm3: An Easier Modula-3 Distribution
(IE みたいに) TAB を入力しなくても補完候補が出てくる シェルを作ると zsh を越えられる気がする。
最初、
(土屋さんの締め切りまでの時間)をモード行に表示する「 display-deadline.el 」
と parse してしまった。意味から考えると、
土屋さんの(締め切りまでの時間をモード行に表示する「 display-deadline.el 」)
と parse するのが適切であろう。
「(x の y) する z」と parse するのは greedy な感じ。 なんとなくパターンマッチ的?
A30p が届く。
一回の commit で(同一ファイルの)複数の branch に修正を加えるやりかたを解説したらうけるだろうか?
loginfo からは CVS/Entries が参照できる。
ただし、local での import, add directory ではファイルが存在しない。 また、(不思議なことに) remote での import, add drectory ではファイルが存在する。 空であるが。
というわけで、意味があるのは普通の commit に対するものだけである。 しかも、commit したファイル以外も入っているし、 当然のことながら commit 後の状態しかわからない。 何に使えるか?
IRC のログの読み方かぁ。
個人的には今のところ tail -f で垂れ流しておくというので落ち着いてるな。 ついでにいえばメールも一緒に垂れ流してる。 (tail -f で扱えるというのは mbox format の数少ない利点の一つではある。)
正確にいえば、この出力を tee でファイルと端末の両方に垂れ流しつつ 別の window でファイルのほうを読む less が常に起動していたりしますが。
ただ、日付が変わるとファイル名が変わって止まってしまうので、 tail-f (-g (glob) オプションつきの -f 専用 tail) を 実装してそれでやってますね。
tail-f 実装する前は GNU tail で
date="`date`" tail -f \ `date -d "$date" +"log%m%d"` \ `date -d "$date 1 days" +"log%m%d"` \ `date -d "$date 2 days" +"log%m%d"` \ `date -d "$date 3 days" +"log%m%d"` \ `date -d "$date 4 days" +"log%m%d"` \ `date -d "$date 5 days" +"log%m%d"` \ `date -d "$date 6 days" +"log%m%d"` \ `date -d "$date 7 days" +"log%m%d"` \ `date -d "$date 8 days" +"log%m%d"` \ `date -d "$date 9 days" +"log%m%d"`
とかしてたなぁ。
autodep: automatically generate C and Java dependancies for make(1)
LD_PRELOAD と ptrace(2) の両方をサポートしているところが気合いの入りかたを感じさせる。
でも、この方針で Java を扱うのは無謀だと思うのだが... (javac の一回の起動で扱うファイルは依存関係にあることもあるし、ないこともあるから。)
うぅむ。なんかいろいろツールがあるな。 以前 interdiff 単独でアナウンスがあった気がする。
ThinkPad A30, A30pでのRed Hat Linux 7.2の稼動状況: X は問題なく動く
ふむ。7.1 は XFree86-4.0.3-5.src.rpm で 7.2 は XFree86-4.1.0-3.src.rpm か... なんか確実なところは良くわからんが、きっと充分に新しくすれば動くのだろう。
うぅむ。ちと論文をどうにかせねばならんな。
うぅむ。結局自分で見に行く前に他の人の日記に出てしまった...
お約束なメールを書いてしまった...
同様なネタを少なくとも fj と正規表現 ML で使ったことがある気がする。
1.1.999 を使ってもらってるわけだが、 もとのに 2.x しかないのがあらわれやがった。
しょうがないので、とりあえず dead な 1.1 を導入することで問題を避けることにする。 そのために CVSsuck を修正。
でも、0.x も考えると、最終的には 1.1.999 はうまくないかなぁ。 やはり特殊な名前の branch tag にはでっかい番号を割り当てるという仕掛けを入れるのがいいのかもしれない。 (たとえば、branch --1000 という suffix がついてたら、最低 1000 にする?)
1.1 が存在しないものを探す方法:
find rep -name '*,v' -print0|xargs -0 rlog -N -r1.1 > tmp grep 'selected revisions: 0$' tmp
commit の log に CR LF を送る奴がいる? 再現しない...
再現した。CR CR LF を送られると loginfo には CR LF がとどくらしい。 いずれにしても CR は問答無用で削除。
... ? あたりへ置換したほうがいいかな? 他の怪しげな制御文字も含めて。
ふと OCaml で文字コード変換があるかということに興味を持ち 「ocaml 日本語コード」と google.
何も見つからない。漢字コードとか EUC とかでも見つからない。
まぁ、簡単な変換くらいならそらで作れるわけであるが、 一つも見つからないというのはなんというか日本におけるユーザ層を感じさせる。
GCC-XML に挑戦。body は出力されないんか...
論文およびそれ以外で忙しいはずであるが、週末は東京にいくことにした。
tar で危ないのは絶対パスだけでなく、.. もあることに気がつく。 a/../b などといったパスを入れておくとカレントディレクトリに b が展開される。 ../../../../../../.. などとして、充分にたくさん .. をつければ事実上絶対パスと同じことができる。
例によって GNU tar は検査してて問題ないようだが、 (Solaris のはいうまでもないが) NetBSD や OpenBSD の tar では展開してしまう。
やはり tar は GNU のに限る。 が、それはそれとして sendbug しておく。
うぅむ。既に報告されていたか。
.. を使いたいという人が返事をしてくれたので、 そういう人もいるのだと認識を新たにし、 意見を尊重して撤回することにする。
一杉さんが、差分ベースモジュール for emacs-lisp をやりたい模様。
とりあえず、なにはともあれ名前空間を分けないといけないので、 obarray を変えて read するということにより名前空間を 実現可能なのではないかという(以前からの)考察を伝えて試してもらったのだが、 難しいということが判明。
名前空間の継承が必要なのだが、 ひとつのグローバル変数を複数の名前空間に属させるというところができない。 (変数というのは obarray の binding なので、 obarray が違うということは即座に変数が share できないということを意味する。)
というわけで普通に read してから置換していく方向でやりなおしらしい。
... XEmacs になんかあったか? でも当人が使ってるのは XEmacs じゃないからだめか。
今日の雑談: passwd コマンドを二つ同時に動かしたらどうなるか。
呑んだ。
同様のメンバーとまた呑むことがあれば、文字な人をつれていくべきだと思った。
うぅむ。resolver の timeout は一度調べにゃならんな。
平面(ないしは 3次元空間)上に人間を配置し、 宴会を 1回開く毎に宴会に参加した人間を囲う輪を書いていくと、 どのような図が出来上がるだろう?
うぅむ。今日は休日だったのか。
w3m を変なタイミングで中断すると mouse tracking が有効なままになってしまうので、 kterm-reset というスクリプトを作る。
kterm-reset は iso-reset というのがベースであり、 iso-reset は toascii というのがベースである。
toascii は(記憶が確かではないが) GL, G0 だけを扱う。 iso-reset は GL, GR, G0, G1, G2, G3 を扱う。 kterm-reset はさらに Mouse Tracking を扱う。
なんというか、もうちょっと長持ちする名前を付けたかったものだ。
symbolic link にも umask が効くことに気がつく。
symbolic link の permission は関係ないんだな。 000 でもたどれる。 いつか変わるのだろうか?
multi-rsync transfers files from one master machine to many machines using UNIX socket's multicasting capability.
ほんとに rsync algorithm なのか? rsync は相手の持っているデータをうまく利用して速度をあげているわけで、 multicast すると利用できない気がするのだが...
... 近くのところのデータを融通しあうと面白い?
情報の 2重管理は良くない。
例えば、main trunk の先頭が削除されているかどうかを dead かどうかと Attic かどうかの両方で 記録するのは最低である。
さらにいえば、直接 mv することによりこの情報を inconsistent な状態にする奴は更に最低である。 (注: まだそういう奴の存在が確認されたわけではなく、cvs のバグという可能性も残ってはいる。)
うぅむ。 cvs-1.10.7 の server に対して cvs-1.10.8 (以降)の client で commit するとき、 複数の directory のファイルを一度に commit すると、 一つの directory のファイルしか commit されない?
一回自前で server を動かして調べてみないとなぁ。
なんとなく Directory リクエストまわりという気がするが、 何はともあれ手元で再現させてからかな。
IE の画面を eps にする。
Adobe の PostScript driver でやったのだが、 bounding box が紙の大きさになってしまう。 しかも白で塗りつぶしてるくさい。 あと、/ というのがスタックに残る。
bounding box は適当に clip を挿入して対処。
/ はなんかとある行末に / がくっついているためだったので削除。 でもなんでこんなものが?
あと、product の表示はコメントアウト。 行末も CRLF と LF が混ざっていたのでなんとなく LF に揃える。
適当に眺めていると、ASCII85 を使っていることに気がつく。 なんとなく中身を調べてみる... よくわからない。 文字列だと思うのだが encoding はなんだろう?
ふと、root-tail を思い出す。 tail -f の結果は kterm ではなく、 root window に垂れ流すべきではないか? だが、mail を読むには日本語を表示できないといけないな。
root-tail の screen shot に日本語は... あー、なんだ、出ていないとはいわないが どーせ扱えないのだろう。たぶん。
「技術系メーリングリストで質問するときのパターン・ランゲージ」を読んで、 我が身を振り返ってみる。
bug report と質問の違いによる影響はどの程度か?
ふと思い立って、垂れ流してるやつの From: と Subject を強調してみる。
perl -pe 'BEGIN { $so = `tput so`; $se = `tput se` }; s/^(from:|subject:)/$so$1$se/i'
補完において zsh を越えるためには:
このあたりに加えて、XMLterm 風であればなかなか面白いのだが。
namespace.rb を書き直そうかと思う。
書き直し始める前からわかっていたことではあるが、 strongly connected components を求めなければならない。 しかたなく、ついに再利用可能なライブラリの形に仕上げてしまう。 名前が(strongly connected components というのは長過ぎるのが)問題なのだが、 あきらめて tsort.rb という名前にした。
VMware を使ってみる。
Guest OS をインストールするわけだが、 network がよくわからない。
というわけで、(network install はあきらめて) 初めて CD からインストールする。 とはいえ、VMware なわけで実物の CD を使ったわけではなく、 CD image を使っただけなわけだが。
しゃっくりはとてもとても危険である。
あおむけに寝ながらノートを腹の上に載せて使っている場合、 しゃっくりのたびにノートが跳ね上がり、 キーボードが指に当たって思わぬキーを押してしまう。
しゃっくり-safe なキーボードの打ちかたはあるだろうか?
arch is a revision control system with features that are ideal for projects characterized by widely distributed development, concurrent support of multiple releases, and substantial amounts of development on branches.
rb と so だけにしたいなら、_path_files に -g '*.(rb|so)' と追加すればできる。 ディレクトリも入れるなら -/ も追加。
どうしても cvs でやりたいのなら、(newdir/newfile とすると)
echo D/newdir//// >> CVS/Entries mkdir newdir/CVS cp CVS/Root newdir/CVS/Root echo CVSROOT/Emptydir > newdir/CVS/Repository echo '/newfile/0/dummy timestamp//' > newdir/CVS/Entries cvs diff -R -N
かなぁ。 サーバが古すぎると CVSROOT/Emptydir が無いということもあるかもしれない。
でも、無理に cvs でやらずに diff /dev/null newdir/newfile としたほうが楽だと思う。
現時点で 次世代 SCM を紹介したページを日本語でつくるとかなり受けるような気がする...
super sed: my own enhanced version of sed
IPSocket.getaddress があるのになぜ Resolv.getaddress を使う?
Socket.gethostbyname があるのになぜ Resolv.getname を使う?
どうもはまりすぎな名前をつけてしまったようだ。 そのうちドキュメントを足そう...
ファイルが加わった時に、 loginfo の %{sVv} の V が NONE でなくなることがあることに気がつく。
cvssh: a secure ext-to-pserver bridge for cvs.
ちっちゃな eps を作る bmeps というのは知りませんでした。 これは FlateDecode と RunLengthDecode を使うみたいです。
jpeg2ps は DCTDecode を使います。 これはそもそも jpeg をデコードしません。
さて、PostScript には(圧縮に使えるフィルタとして) この他に(LZWDecode を除いて) CCITTFaxDecode というのがあります。 探してみると tiff2ps が使うようです。 tiff の中身にもよるのでしょうが。
ふと、convert(1) を眺める。
EPS Adobe Encapsulated PostScript file. EPS2 Adobe Level II Encapsulated PostScript file.
おや?
... eps2 をつかうとちゃんと DCTDecode や FlateDecode を使うじゃないか。
strings libMagick.so してみると CCITTFaxDecode も出てくる。 さすがは ImageMagick.
昔は ImageMagick のなんでもかんでも感が嫌いで、 pbmplus/netpbm が好きだったものだが...
どうも VMware で network を bridge で使う方法がわからない。 NAT なら動くのだが。
手動で IP address/netmask を設定しても外にパケットが出てこない。 うぅむ。
ふと思ったのだが、gnome-vfs に perl/python/ruby binding はあるのだろうか?
何はともあれ Bourne Shell を... うぅむ。いくつ入っているんだ? どれがどういう関係にある? だれか整理して cvs に放りこんでくれないかな...
相性ねぇ。
とりあえずなにが起こっているのかは知りたいな...
shared library を探す方法を理解していないことに気がつく。
EBNF は ISO 14977 で定義されているらしい。
私は、 気になりませんねぇ。
どーせ、(いずれ気がむいた時に) 本体の _ruby を修正するんだし。
ふと思ったのだが、shell に call-next-method (または super call あるいは Chain of Responsibility パターンの handler に対するメソッド呼び出し) に相当する機能があってもいいのかも知れない。 call-next-command とか。
shell は script の path を知っているので、 その directory を PATH 中で探して、それよりも後からコマンドを見つけるような。
ひとつの directory が複数回 PATH に現れるとうまくいかないけど。
Structuring Depth-First Search Algorithms in Haskell, David J. King
とりあえず、4.2BSD から Bourne Shell を取り出してみる。
噂はある程度知っていたわけであるが、 実際に見てみるとなるほどと思う。
.Z なファイルが伸長できない。 magic number が \037\241 というのはなぜだ? compress なら \037\235 だろう?
念のために(gzip でなく) Solaris の uncompress を使ってもうまくいかない。
rsync 以外のでとってくるか?
うぅむ。今まで持っていなかった patch も入っているようだな。
たとえば、patch-1.3 直後の diff -c がサポートされた段階のが Applications/Shoppa_Tapes/usenix878889.tar.gz に入っている。
でも、個人的に持っている patch のリポジトリにどうやって入れよう? cvs だと途中に挿入するってことができないんだよなぁ。 考古学に適した SCM ってあるんだろうか?
4.3BSD-Quasijarus Strong Compression
適当に gzip-wrapper に追加して tar xfz で扱えるようにする。
4.3BSD の file は magic を使わないことに気がつく。
Bourne Shell のコンパイルはこちらでも難航しています。 ただ、4.3BSD-Reno では union とかはましになっていて、 extern を入れるだけで済みました。
とはいえ、似たようなところで止まってるんですが。 なんとなく、この SEGV は意図的であり、 これを trap してメモリを確保してる気がします。 でもって、そのへんで SEGV が連続して起こって無限ループに陥ります。
(SEGV はお友達☆、というのは JIT だけじゃなかったのかー、という気分です。)
でも、 4.3BSD-Reno の Bourne Shell が NetBSD 1.4.2/i386 で何の問題もなくコンパイル出来て動作したという話もあるんですよねぇ。
でも、NetBSD 1.5.1/i386 で試してもやっぱ同じ問題に突き当たるんだよなぁ。
そうそう、$'...' というのは ksh 由来の quote 記法です。
C みたいに \n とかが使えます。
BSD 系の日記に何か情報がないかと思って *BSD Diary Links からここ数日分を眺めてみるが、何も見つけられなかった。
Version 6 の sh を眺める。 これは Bourne Shell ではない。
ここまでくると、もはや portability も(現実的な意味では)関係なくなる。
そっか。 $'' は ksh93 の機能なんですね。
pdksh は ksh88 互換なので動かないのでしょう。 SunOS 5 の ksh (ksh88) で試しても、$ が残ります。
ksh93 ベースなやつ(dtksh)なら $ が残りません。
RPL/2 (Reverse Polish Lisp/2) is a langage derived from the RPL made by Hewlett-Packard for its HP-28S.
ふと、以前林さんが見つけた anonymous cvs で cvs init とゆーのを送ってみる。
結局、--allow-root に指定してあるの(だけ)を cvs init するのは可能であることが意図されているらしい。
(うぅむ。info-cvs は以前はどっかに archive があったと思ったのだが...)
公開する気になったらしい。
The Open Group announces Version 3 of the Single UNIX Specification
syslog forwarder を作るか?
理由ねぇ。 もしそんなものが存在するんならぜひ知りたいものだ。
まぁ、%s については、struct tm で受け渡すという C の strftime/strptime の 本質的制限であるということで、 time_t を把握している Ruby 側で展開してしまうというのが適切な解決法であろう。
おぉ。ついに生の deflate な例が。 IE や mozilla では読めるはずです。
ちなみに生のと生でないのは先頭の内容が重ならないので自動判別が可能だったはずです。
うぅむ。尻切れとんぼになっていることに気がつく。
[latest]