新しいコマンドの名前を決めるときに補完の効き具合を調べたい。
いろんな OS のコマンド名の一覧ってないかな。
依存関係を書かなくていい make のようなものを (自分で)使えそうな気分になるまで作ってみる。 drmake と名前をつける。
drmake で補完できるようにする。
CVSspam sends email when a change is commited to the CVS repository.
dbacl is a digramic Bayesian text classifier.
ファイルは生成され、更新され、削除される。
make が生成/更新を直接的にサポートするのに対し、 削除のサポートは間接的である。
直接的にサポートしない理由はあるか?
ファイルを作って書き込むときに write 不能な mode を 設定してもいいことに気がつく。
Marko is a simple toolset that allows you to create markov chain databases of a corpus (or two) of text and then allows you to compare unknown texts to these databases.
引用が全部削除され、かつ、Subject が変化している場合には、 MUA は送信前に Reference と In-Reply-To を削除するかどうか尋ねるべきではないだろうか。
drmake でコマンドを簡単に呼び出せるメソッドを加える。
コマンドを呼び出すときに、 引数がファイル名を指しているかどうかを確認し、 コマンドの終了時にに更新されていない場合には、 そのファイルは依存対象に加えるという乱暴なことをする。
そのうち ptrace を使ってコマンドが実際にファイルを参照する所をトラップしたいところだが、いつになることやら。
なんというか、まぬけなことに作ってみてから気がついたのだが、 drmake は persistent な memo をもった lazy functional language みたいなものなのかもしれない。
ユーザに要求されたエントリの評価をとりあえず始め、 必要になったら他のエントリを評価するというのは、 最左戦略そのものである。 いや、memo があるから、graph reduction になるのか?
なぜこんなにも make に惹かれるのかが判明した気がしないでもない。
それはそれとして、とすると、エントリに引数をつけてもいいかもしれないな...
ということは、普通の make は下から作っていくから、最左最内っつーことか?
思索が深まったところで作り直したいところだが... どうすっかな。
いや、lazy っつーのは嘘か。 値が必要なときにはその値の全体を求めてしまうから。
drmake が普通に strict なのに対し、 普通の make は完全に strict であるといったほうが適切か。
incremental computation というのか?
いろいろ研究されてるっぽい。 でも、今回はないーぶにやろう。
閏秒周辺でも正しく動く版:
#!/bin/sh tmp=/tmp/mtime.a filename=$1 mtime=`tar cf - $filename| dd bs=1 skip=136 count=12 2>/dev/null|od -b|awk ' BEGIN {mtime = 0} { for (i = 2; i <= NF; i++) { if ($i == "000") break mtime = mtime * 8 + ($i - 60) } } END {print mtime} '` #echo $mtime echo posix_sec=`awk "BEGIN {printf(\"%02d\", $mtime % 60)}"` awk "BEGIN {printf(\"!<arch>\n%-16s%-12d%-6d%-6d%-8o%-10d\`\n\", \"dummy/\", $mtime, 0, 0, 420, 0)}" /dev/null > $tmp set `ar tv $tmp|awk '{print \$(NF-4), \$(NF-3), \$(NF-2), \$(NF-1)}'` month=$1 day=$2 time=$3 year=$4 for i in 1 2 3 4 5 6 7 8 9 10 \ 11 12 13 14 15 16 17 18 19 20 \ 21 22 23 24 25 26 27 28 29 30 \ 31 32 33 34 35 36 37 38 39 40 \ 41 42 43 44 45 46 47 48 49 50 \ 51 52 53 54 55 56 57 58 59 60 \ 61 do awk "BEGIN {printf(\"!<arch>\n%-16s%-12d%-6d%-6d%-8o%-10d\`\n\", \"dummy/\", $mtime - $i, 0, 0, 420, 0)}" /dev/null > $tmp t=`ar tv $tmp|awk '{print \$(NF-2)}'` #echo "$i $time $t" if [ $time != $t ]; then break fi done sec=`awk "BEGIN {printf(\"%02d\", $i - 1)}"` echo $month $day $time:$sec $year rm $tmp
make の論文があることに気がつく。
Stuart I. Feldman, Make - A program for Maintaining Computer Programs, Software Practice and Experience, Vol. 9, pp 255-265, 1979.
コピーしようと思ってページをめくったら、 その直後に awk の論文があることに気がつく。
William Pugh and Tim Teitelbaum, Incremental Computation via Function Caching, POPL'89.
を眺める... が、make の類ならここで述べているような(厄介な)問題を扱う必要はないな。
% ruby -e ' h1 = {0=>:a, 11=>:a} h2 = {11=>:a, 0=>:a} p h1 == h2 p h1.eql?(h2) p Marshal.dump(h1) == Marshal.dump(h2) ' true false false
そういえば「矛盾都市TOKYO」は最初から最後に(上から下に)読んでいくべきものなのだろうか?
そう読むしかないからそう読んでいるけど、 日付で sort したい気もする。
drmake を作り直す。
ファイルに対応するオブジェクトの依存関係を管理することで、 コマンドに引数にファイル名が現れるものに関しては 乱暴なことをしなくても済む。 ptrace が必要になるのは引数からいもづる式にしきに他のファイルをアクセスされる場合か。 C の #include とか、Java とか。 まぁ、Java については ptrace を使ったとしてもうまくいくかどうかは定かではないが。
phony target をどう表現するか?
毎回再実行すべきものなわけであるが、そういう印をどうつけたらいいか?
とりあえず、依存対象として現在時刻を扱えるようにしてみる。 動くには動くがどう考えてもエレガントでない。
ps2dvi is a Perl script that converts ps to dvi.
昼寝して夜更しに備える。
眠りかたが甘かったのか、最後のほうはかなり眠くなる。
一般に、学習曲線の横軸は時間だとして、縦軸は何だろう?
まぁ、本人に聞くのが一番ということで本人に聞く。
明日は東京にいこう。でも、午前中で終り?
Xtatic の話を聞く。
Python のってないんだろうか。
unix2tcp is a connection forwarder that converts Unix sockets into TCP sockets.
「険しい学習曲線」とはなにを意味するか?
横軸が時間、縦軸が熟練度として傾きが大きいとすると、 あっというまに熟練していくということか?
JavaScript を使うと、ブラウザが認識した HTML の木構造を取り出したりできるのだろうか?
CCured is a source-to-source translator for C, which analyzes the program to determine the smallest number of run-time checks that must be inserted in the program to prevent all memory safety violations.
Iteration Abstraction in Sather, Stephan Murer, Stephen Omohundro, David Stoutamire, Clemens Szyperski
を読む。
CLU のイテレータって並行には動かせなかったのね...
ついでに、Icon も調べる。
ふむ。backtrack で動くとするとこれも並行には動かない?
しかし、backtrack とすると、 Icon というのは普通な構文の prolog なのかも? でも、unification はないか。
結局、CLU のイテレータは Nested Function を引数として渡すことの syntax sugar にすぎない。 その点で、Ruby のイテレータがクロージャを引数として渡すことの syntax sugar にすぎないのと似ている。 ただし、Ruby では渡されたクロージャをファーストクラスオブジェクトとしてあつかえるぶん強力になっている。
Sather のイテレータは同時に複数のスタックを保持する能力があり、並行に動ける。 Python も同様の能力があり、 さらにイテレータがファーストクラスオブジェクトであるぶん強力になっている。
Prolog は(イテレータとは呼ばれていないが) backtrack によって、繰り返しを表現できる。 Icon の(やはりイテレータとは呼ばれていない)ジェネレータはこれに近い。
で、(本質的に複数のスタックを保持する必要がある)same-fringe 問題を素直に解けるのは Sather, Python である。
うぅむ。なんかきれいな系図が描けてしまった。
A New Implementation of the Icon Language, Todd A. Proebsting, Gregg M. Townsend
の Generator のところにはいきなり Prolog が出て来るではないか...
History of Programming Languages Conference (HOPL-II)
A History of CLU はこのカンファレンスでの発表だったらしい。 ふむ。Icon もあるから、実際に Prolog に影響されたのかどうかもわかるかも。
Icon の人達が Prolog を知ったのは開発を始めてから何年かたってからの模様。
デバイス - アプリケーション間の抽象化として、 Unix の open/read/write/ioctl/close は(とくに ioctl は)役にたってない、 という話を g新部さんが持って来て、 抽象を自由に導入できる枠組はどんなものになるかというような話を議論する。
メモリや IO 回りの管理機構とそこそこ高速な IPC という点で micro kernel の機構みたいなやつと、 callback の塊みたいなプログラムを coroutine(thread) みたいなスタイルで書ける言語機構が欲しいというかんじ。
ひさしぶりに(状況の変化によりほとんど壊れていた) wikisuck に手を入れる。
LD_PRELOAD 用のをお気楽に作れる、 defadvice というコマンドを作るのはどうだろうか。
明後日は大阪
千客万来?
cvscop is a CVS policy program that is launched by the CVS administrative files, commitinfo, loginfo, taginfo, and verifymsg.
hping2 is a network tool able to send custom ICMP/UDP/TCP packets and to display target replies like ping does with ICMP replies.
The ExternalEditor is a Zope product and configurable helper application that allows you to drop into your favorite editor(s) directly from the ZMI to modify Zope.
そっか。 適切に browser を設定した上で、特殊な Content-Type でデータを送りつければ いきなりエディタを起動できるというわけか。
既存の C のコードを入力として、 そのスタイルを indent のオプションとして出力してくれるようなものはあるか?
SO_LINGER ってちゃんと動くとは限らないのか...
connection close 時の微妙な挙動がちゃんと考察され始めたのは HTTP あたりからなのかなぁ。
SCM_CONNECT とはなにか?
神保町
[latest]