うぅむ。あまり非現実的なかんじはしないな。平成1000年とか出るとおもしろいのだが。
% ruby -rgtk -e 'print Time.local(2037).strftime("%EY\n")' 平成49年
JIS X 0303:1971 は 350円だそうである。
もっと安いのはあるだろうか?
ソースコードレビューはいいことだという。 が、実際にはどのくらい行なわれているのだろう?
広く浅く... ところによってとても深く。
RFC 1468 を手元においていなかったことに気がつく。 思えば遠くに来たものだ。
即座に手元に確保。
double を int に cast して範囲に収まらなかった時の挙動を知らなかったことに気がつく。
implementation defined だそうだが、手元の環境の挙動はどこに書いてあるのだろう? gcc の info には見当たらない。
g新部さんに pty の話を教えてもらう。 うぅむ。devpts か。
chroot 環境でも mount するようにする。
ついでに、tag をつけ忘れたどうこうという話をする。 やはりなにはともあれある時点の状態を簡単確実に同定できる Subversion (や Perforce)はエラいということになった。
CVSps is a program for generating 'patchset' information from a CVS repository.
%EY は SUSv2 にものっているものであり、独自拡張ではありません。
招き猫には右手(前足)をあげているものと左手(前足)をあげているものがあり、 招くものが異なる。
RELAX の招き猫は なにを招くか?
AC_CONFIG_SUBDIRS で呼び出す subdirectory の configure の --prefix は変えられない?
いや、ac_configure_args を変えればいいのか?
OpenSSL が Configure を使っていることに気がつく。 別ディレクトリでの build は出来ない模様。 あと、DESTDIR じゃなくて INSTALL_PREFIX なことにも気がつく。
また zlib は DESTDIR がない。
Asynchronous Hostname Lookup API, A Proposal, Ulrich Drepper
GNU diff におけるバイナリの判定は(binary_file_p によれば) \0 が含まれているかどうかのみによって決まる。
はじめて JavaScript をつかってみる。
inetd の代用にとりあえず socket を使ってみる... cvs-pserver がなんか終了しない。
とりあえず 5分で tcpserver like な Ruby script を作って試すと終了する。 close が甘いのか?
まぁ、これでなんとか cvs-pserver が動いた。
やはり chroot するときには LockDir を相対パスにしておかないと扱いにくくてしょうがない...
C で負の被除数を mod, div として扱うには:
x div y = -(-(x+1) / y) - 1 x mod y = y - (-(x+1) % y) - 1 where x < 0 and y > 0
time_t が 64bit になるのはいつ頃か?
... linux/alpha ではすでにそうらしい。
そうか。long が 64bit だからなんだな。
glibc にも timegm はあることに気がつく。
chroot, chdir, setgroups, setgid, setuid を順に呼ぶプログラムを作る。
Date and Time on the Internet: Timestamps
うぅむ。-00:00 と +00:00 は違うのかぁ。
うぅむ。西暦 21億年くらいまでしか扱えんのか。
今日の Ruby script:
def f(a, b) ta = yield a tb = yield b while a + 1 < b m = (a + b) / 2 tm = yield m if ta == tm a = m ta = tm else b = m tb = tm end end [[a,ta], [b,tb]] end tst = Proc.new {|m| begin t = Time.at(m).utc (t.year < 0) == (m < 0) rescue ArgumentError false end } p f(-(1 << 63),-1, &tst) p f(1,(1 << 63) - 1, &tst)
[[-67768040609740801, false], [-67768040609740800, true]] [[67767976233532799, true], [67767976233532800, false]]
つまり、 Thu Jan 01 00:00:00 UTC -2147481748 から Tue Dec 31 23:59:59 UTC 2147483647 まで扱えることになる。
そぉか。-(1 << 31) + 1900 なのか。 正の方ももう 1900 年くらい扱える模様。
ちなみに、弥勒が出現するという 56億7千万年後にはちょっと足りない。
cvs 管理に移行。
ふと思ったのだが、開発を詳細に観測し始めるのは開発者になる前兆のひとつだと思う。
記事は読んでいないが、 とりあえず思ったこと: 「commit log は?」
pdksh も DESTDIR がないんか...
ふと、(UTC との)時差が正負両方存在するタイムゾーンがないかどうか調べる。
うぅむ。Atlantic/Madeira みたいなのを想定していたのだが、現行のものは見当たらない。 日付変更線をまたがって変える例が見つかったのは意外すぎ。
いや、日付変更線が変わったというべきか?
% TZ=Asia/Katmandu ruby -rtime -e 't=Time.now; p [t.rfc2822, t.zone]' ["Tue, 18 Dec 2001 07:51:02 +0545", "NPT"]
うぅむ。守岡さんに聞いた体験談と合う。
他の例としては現在 Pacific/Chatham の CHADT が +13:45 というのがある。 (CHADT は夏時間で、標準時の CHAST は +12:45)
なんというか、Ruby/TZFile はこういうのを調べるのにとても便利だ...
時差を 24時間増やすと一日消えるわけであるが、 逆に 24時間減らすと同じ日付が 2回存在することになるはずである。
そーゆー例はないのだろうか?
先々週のことであるが、境界条件男と形容された。
「怪奇! 境界条件男」とか前置すれば七不思議に食い込めるかも知れない。
やっぱ A30p にしよう...
Makefile の中で cd xxx; $(MAKE) all とやって痛い目に合う。
cd xxx && $(MAKE) all とすべきであった。
ゆにまがを読む。うぅむ。全然違う話だったのだな。
修正 BSD ライセンスとして自分のプログラムに使っていたものの第3項目が、 もともとの BSD ライセンスの第4項目にたいして、`not' が挿入されていたことを指摘される。
つまり、
4. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
というのが
3. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.
となっていた。
しらべてみると、他にも may not なものもある。 (もともとどこかからコピーしてきたんだから当然だけど。)
BSD ライセンスの揺れを調べあげてある資料はないんだろうか?
う、そーか。neither X nor Y may be used ... だから、not だけに着目しても意味がないな。
ふと思い立って、Ruby/TZFile のタイトルイメージを変える。 GMT の使いかたを思い出すのに時間を食ってしまった。
適当にとってきて乱暴に pgm に変換して眺めてみる... うぅむ。 南極って海抜が高いんだなぁ。
おっとか 思ったが自由ではないか。
kworldclock は XGLOBE & XPLANET MAPS を使っているらしい。
いつのまにか sunclock も使うようになっていたらしい... うぅむ。なんかずいぶんと変わっているな。
つくばにシネプレックス以外の映画館はあるのだろうか?
SSH の protocol version の negotiation で悩む。
よーするに negotiation と認証が独立しているのが トラブルが起きやすい理由のような気がする。 認証が失敗したら古い version でやりなおせばトラブルはもっと少なくなるのではなかろうか。
ふと Bugzilla で deflate を探してみると、 何やら見つかった。
tar を安全に展開するポータブルなやりかたはあるか?
GNU tar は先頭の / を無視するが、 古い tar には無視しないものもある。 確実に無視させるやりかたはあるか?
exclude もないようなやつだと tar tf でファイル名を調べるしかないか? でもファイル名に空白や改行が入っているとまずいよなぁ...
... そーか。tar tf の出力のいずれかの行頭に / が出てきたら やめちまえばいいのか。 少々保守的だが、実用的な問題はあるまい。
Ptah というやつは Makefile (に相当するもの)をシェルスクリプトに変換することができることを狙っているらしい。 開発は進んでいなさそうだが。
bootstrap するにはそういうやりかたがきれいだと思う。 それなりに大変そうだし、即座にどうこうという話じゃないけど。
RAA が生データを公開しない理由に感付く。
sunclock は(昔と違って)デフォルトで世界各地の都市などがプロットされ、 日本国内では東京が登録されている。
が、拡大すると他の場所も登録されていることに気がついた。
札幌、木曽観測所、美星スペースガードセンター
まぁ、観測所とかが登録されているのはそういうものだと思うことにしよう。 だが、なぜ札幌?
loginfo 専用の sh (という名前のプログラム)を作り始める。
quote の解釈は作らにゃならんか...
動いたら次はついに OCaml か。
diff3 のアルゴリズムってどういうものなのだろう?
... うぅむ。なんか ad-hoc な気がする。 merge に使うのに適切なんだろうか?
そーか。sh を OCaml で作らない理由はないな。
ひさしぶりの OCaml はずいぶんと目新しい。
わすれているだけともいう。
XSLT で再帰をしてみる。
xsl:template name="foo" で関数(らしきもの)が定義でき、 xsl:param name="bar" で仮引数が定義でき、 xsl:call-template name="foo" で定義したのが呼び出せて、 xsl:with-param name="bar" で実引数が指定できることはわかった。
条件判断も出来るからちゃんと終了することも出来る。
さて、呼び出された側から呼び出した側へ値を返すのはどうしたらいい?
xsl:with-param や xsl:variable の中に xsl:call-template をおけばいい、のか?
Turing Machine Markup Language (TMML)
XSLT は turing complete である、と。
XSLT は Scheme と ML のどちらに近いか?
型がないところや、 (トップレベルの) xsl:variable で、宣言する前に変数が使えるところは Scheme に近い。
scheme2xslt はどの程度簡単に実装できるか?
クロージャを扱うのは厄介か。でも、クロージャ無しでも欲しい気がする。
configure が tar.gz を展開してパッチまで当てるのはちょっとやりすぎか?
深い拡張と浅い拡張。
上野さんの cvsinfo を試す。
うぅむ。findlib のサイトは落ちてるは、 O'Caml Class Library はコンパイルできないは、 Ocamlnet は smtp が消えてるは、 踏んだり蹴ったり。
車輪の再発明の予感。
もし、 得られる教訓があったとすれば、 慣性の小さなプロジェクトに依存するのは考えものだということだろうか。
loginfo だけで(commitinfo を使わずに)複数の directory への commit の情報を集めるところを作ってみる。
まぁ、予想通り可能であった。
プロジェクトの慣性を大きくするにはどうしたらいいか?
慣性を大きくするには質量を増やせばよい。 つまり、たくさんコードを書くか、 ほかのコードと混ぜれば良い。
... という類推は結構当たっているかも。
Haskell Server Pages - Functional Programming and the Battle for the Middle Tier
[latest]