Linux Conference 2006 (2日目)
Linux Conference 2006 (3日目)
いままで MSG_DONTWAIT は Linux 特有だと思っていたのだが、どうやらちがうらしい。 NetBSD にあるのである。
http://www.levenez.com/unix/history.html を見ながらいくつか確認すると、4.3BSD-Reno と 4.4BSD-Alpha の間で入ったようだ。
なお、Net/2 にはない。
これは 4.4BSD-Lite 以前だから、最近の BSD にはみんなあるのではないか。
「でりつま」(山名沢湖) に、「プロが書いた名作読んで感想文書くのと 素人の小童の作文 何十も読んでコメントつけてくのと どっちがいいご身分かしら!?」というセリフがある。
ちょっと共感。
今日の講義は正規表現エンジンを拡張するというネタで \A とかいくつか拡張した。 <URL:http://staff.aist.go.jp/tanaka-akira/textprocess/>
当初は *? とかもやろうかと思っていたのだが、レポートを読んでいて再帰がわかってない傾向が強く感じられたため来週再帰を説明しなおして、その後かな。
<URL:http://www.radiumsoftware.com/0606.html#060607>
ke はなにか?
% print -l $^path/*ke /usr/X11R6/bin/imake /usr/bin/automake /usr/bin/make /usr/bin/pbmmake /usr/bin/ppmmake /usr/games/ksnake
まぁ、make と考えるのが順当ではないか。
<URL:http://journal.mycom.co.jp/column/nihongoprog/062/>
えぇと、それは二次方程式じゃないような?
日本 Ruby カンファレンス 2006 で発表。
準備不足がたたって後ろがきれてしまったので反省。
資料: <URL:http://cvs.m17n.org/~akr/pub/rubykaigi2006-06-10.pdf>
Amrita2 の発表後に中島さんと DHH が話しているのに横から口を出す。
その後、昼に htree の話を DHH にしてみる。
野首さんは研究熱心であった。
FSIJ の監査をする。
伝票をいろんな側面から集計したりするわけだが、とりあえずテンキーが欲しいと思った。
ヒューマンエラーはなぜ起こる というのをみつけて、読んでみる。
長いが、なかなか面白い。
Process.getrlimit と Process.setrlimit のテストを書く。
といっても、とりあえず両方が存在するか、両方が存在しないか、どちらかというだけである。
で、やってみると両方が存在しないときに問題があることが指摘された。
呼び出すと両方が NotImplementedError という検査をしたのだが、getrlimit, setrlimit がないときは、Process.getrlimit, Process.setrlimit が定義されないので NoMethodError なのであった。
ここは微妙で、無いときに定義しないことによって、その存在を、respond_to? で呼び出さずに検査できるという利点がある。
が、他のそういうメソッドはメソッド自体はあって、呼び出されると NotImplementedError なので、一貫性に欠ける。
Process.getrlimit, Process.setrlimit を最初に実装したときはおそらくその利点を優先したのだと思うが、今日はいろいろと考えた結果、結局、NoMethodError を rescue すると typo を見逃してしまう可能性が出てくる欠点に気がつき、常に Process.getrlimit, Process.setrlimit を定義することにした。
ただ、呼び出さずに機能の存在を確かめられないというのはたしかに欠点であって、それはそれでどうにかしたいところではある。
まぁ、Process.getrlimit, Process.setrlimit に限っていえば不適切な引数で呼び出せば TypeError, ArgumentError になるので、副作用無しに検査でき、大きな問題は無い。
どうにかする (ことに挑戦する) のは、副作用無しに検査できないケースを見つけてからにしよう。
今日は lambda とブロック
先週の再帰なレポートを眺めていると、うまく再帰を書けない人が予想以上にいることがわかる。
電車の中でいろいろと考えて、再帰がどのようにして動くのかだけでは説明が足りなかったのではないかと思った。そこで、どうやって再帰のしかたを見つけるのか、というプログラマ側の視点を説明する資料を講義の直前に作ってみた。
それはそれとしてしかし、再帰を教えている授業はたくさんあるはずだし、自分自身でも昔 (授業を受ける側として) 体験したはずなのだが、あまり思い出せない。fact を使っていたような気がするが、どうやって再帰するプログラムを書くのか、どう習ったのか、あるいは習わなかったのか、記憶にない。
思い出して、chkbuild で、ext/tk のメッセージ中の segmentation fault というのを無視するようにする。
あと runner.rb に -v をつける。
林 創, 再帰呼び出しを含む手続きの処理の難しさ, 認知科学 Vol.6 No.4 (Dec. 1999)
ざっと眺めてみる。
chkbuild のサマリで、SEGV してるのに [SEGV] がつかないのを直す。
うぅむ。サマリの生成のデバッグが面倒過ぎる。
いまはビルドとサマリの生成が一体化していて、サマリの生成を試すにはビルドもしないといけない。
どう考えても実際にビルドするのとは独立にサマリを生成できるようにすべきだな。
まぁ、問題が起きなければ問題はないのだが、問題は起こるわけだし。
新宿の東側にいたとしよう。紀伊國屋の地下とか
小田急線に乗る必要があったとしよう
ここで小田急新宿駅は JR新宿駅の西側にあるので駅を越えないといけない
案内をみつけて (メトロの方の通路にはまだ遠いなぁと思いつつ) たどっていくと JRの中央東口にたどりついた
どうも小田急 (や京王) に乗る場合にも JR の駅を通りぬけられる模様。たしかに小田急 (と京王) の券売機もある
さて、手元にはパスネットカードがある。パスネットカードは小田急や京王の乗車券のかわりに使用できるはずである。これは使えるのだろうかと思いつつ使ってみると問題なく使えた
ここで面白いと思ったのは、券売機を使った場合には、乗車券を購入した時点で行ってしまう小田急と京王の選択が、パスネットカードではまだ行われていないということである (もちろん心の中では選択しているのであるが、JR の自動改札にとってそれを知る術はない)
(ところで、API の設計でも人間にどのタイミングで情報を要求するかは重要な要素である)
さらに面白いのは、パスネットカードには裏側にログが印字されるのであるが、この時点でどんな印字がされるのかである。ログにはいろいろな情報が入っているが、改札に入ったときに乗車駅が、改札から出たときに降車駅が印字される。
しかし、JR新宿中央東口からパスネットカードで改札を通った場合、この時点では、乗車駅が小田急新宿駅か京王新宿駅か不明なので、どちらとも印字できない。
さて、どうなるのかな、と思いながらチェックしてみると、「新宿」とだけ印字されていた。また、この時点では無料のようである。うぅむ。
その後、小田急への連絡改札を通ると、「小」と「新宿」の前に印字された。なかなか。
疑問:この JR新宿駅のような運用がされている駅で、駅名が一致していないケースはあるか?
... <URL:http://homepage2.nifty.com/-53/torinuke.htm> というページを見つける。
そーか。alloca は V7 にはなかったのか。
setjmp/longjmp は V7 にあった。
PowerPC の calling convention だと、parameter area というものを呼び出し側が用意するのだが、そうすると tail call は必ずしも可能とは限らない感じがする。引数が増えると収まるとは限らない。
あぁ、tail recusion は常に可能か。引数のサイズが変わらないから。
[latest]