天泣記

2010-07-03 (Sat)

#1

null device の名前を得る方法。

% perl -e 'use File::Spec; print File::Spec->devnull(), "\n";'
/dev/null

% python -c 'import os; print os.devnull'
/dev/null

2010-07-06 (Tue)

#1

Linux では、EPIPE になった後のソケットが select で writable にならないようだ。

linux% ruby -rsocket -e '
serv = TCPServer.open("127.0.0.1", 8888)
s1 = TCPSocket.open("127.0.0.1", 8888)
s2 = serv.accept
s2.close
s1.write "a" rescue p $!
s1.write "a" rescue p $!
p IO.select(nil, [s1], nil, 0)
'
#<Errno::EPIPE: Broken pipe>
nil

FreeBSD や Solaris では writable になる。

freebsd% % ruby -rsocket -e '
serv = TCPServer.open("127.0.0.1", 8888)
s1 = TCPSocket.open("127.0.0.1", 8888)
s2 = serv.accept
s2.close
s1.write "a" rescue p $!
s1.write "a" rescue p $!
p IO.select(nil, [s1], nil, 0)
'
#<Errno::EPIPE: Broken pipe>
[[], [#<TCPSocket:0x283263d8>], []]

solaris% ruby -rsocket -e '
serv = TCPServer.open("127.0.0.1", 8888)
s1 = TCPSocket.open("127.0.0.1", 8888)
s2 = serv.accept
s2.close
s1.write "a" rescue p $!
s1.write "a" rescue p $!
p IO.select(nil, [s1], nil, 0)
'
#<Errno::EPIPE: Broken pipe>
[[], [#<TCPSocket:0x80e6e6c>], []]

書き込めるわけじゃないが、書き込んでもブロックしないので、writable になったほうがうれしいと思う。

EOF だって、読み込めるわけじゃないけど readable だし。

あと、UNIX socket (pair) では linux でも writable になる。

linux% ruby -rsocket -e '
s1, s2 = UNIXSocket.pair                
s2.close                              
s1.write "a" rescue p $!
p IO.select(nil, [s1], nil, 0)
'                       
#<Errno::EPIPE: Broken pipe>
[[], [#<UNIXSocket:fd 3>], []]
#2

初心者と中級者の違い」という記事を読む。

検索で探し物をするときの挙動の違いをアイトラッキングで調べたという話。

アイトラッキングの動画が載っているが、あまりよくわからない。うぅむ。

2010-07-07 (Wed)

#1

<URL:http://mkosaki.blog46.fc2.com/blog-entry-1116.html>

ほう。pipe の読み込み側を close すると書き込み側が readable になるとな?

試してみよう。

linux% ruby -ve '
r, w = IO.pipe
p IO.select([w],[w],[w],0)
r.close
p IO.select([w],[w],[w],0)
'
ruby 1.9.3dev (2010-06-10 trunk 28257) [i686-linux]
[[], [#<IO:fd 4>], []]
[[#<IO:fd 4>], [#<IO:fd 4>], []]

おぉ、たしかに。

Linux 以外では?

freebsd% ruby -ve '
r, w = IO.pipe
p IO.select([w],[w],[w],0)
r.close
p IO.select([w],[w],[w],0)
'
ruby 1.8.7 (2009-04-08 patchlevel 160) [i386-freebsd8]
[[], [#<IO:0x2832738c>], []]
[[#<IO:0x2832738c>], [#<IO:0x2832738c>], [#<IO:0x2832738c>]]

% ruby -e '
r, w = IO.pipe
p IO.select([w],[w],[w],0)
r.close
p IO.select([w],[w],[w],0)
'
[[], [#<IO:0x80e7e20>], []]
[[#<IO:0x80e7e20>], [#<IO:0x80e7e20>], [#<IO:0x80e7e20>]]

FreeBSD と Solaris では readable になるだけでなく、exception 状態にもなるようだ。うぅむ。

しかし、ready for reading は読み込み操作でブロックしないことを意味するんだから、むしろ、ふだんから readable であってもいいような...

いや、FreeBSD や Solaris のパイプは双方向だったか。そうすると r.close すると w が readable というのは (EOF が読めるようになるはずだから) おかしくないな。

(OpenBSD も双方向だから) 残るは NetBSD で試すしかないか。しかし、単方向なパイプを手元で試せるのは Linux と NetBSD しかないな。

% ruby -ve '
r, w = IO.pipe
p IO.select([w],[w],[w],0)
r.close
p IO.select([w],[w],[w],0)
'
ruby 1.8.8dev (2009-10-07 revision 25250) [x86_64-netbsd4.0.1]
[[], [#<IO:0x629bc0>], []]
[[#<IO:0x629bc0>], [#<IO:0x629bc0>], [#<IO:0x629bc0>]]

NetBSD でも読み込み側を close すると、書き込み側が readable/writable/exception すべてに反応するようになる。NetBSD では close 前でも ready for reading であってもいいような気がするが...

#2

そういえば pipe と select については以前に少し似ている話を書いていた。

#3

struct tm に tm_tzadj なるフィールドがある OS があるらしい。どれだろう?

... SCO か?

2010-07-10 (Sat)

#1

SUSv4 の strftime には + というフラグがあることに気がつく。

おや、これは FreeBSD, OpenBSD の %+ と衝突するのではないかな。

#2

ISO 8601 の recurring time interval ってなんなんだろう。

たとえば、R12/19850412T232050/19850625T103000 というのは、1985年4月12日23時20分50秒から 1985年6月25日10時30分という期間を 12回、という意味らしいのだが、本当にそうなのだろうか。

2010-07-14 (Wed)

#1

Adobe Reader には読み上げ機能なんていうものがあったのか...

2010-07-15 (Thu)

#1

お、北海道サマータイムは止めたのか。

#2

「出版のユニバーサルデザインを考える」(出版UD研究会 編)を読み終わる。

「バスケットボールのビデオを見る」というところで紹介されていた動画 (を指示どおりに見たときの自分の認知) にはとても驚いた。

#3

Edward Tufte の PowerPoint 批判を読む。

PowerPoint Does Rocket Science--and Better Techniques for Technical Reports

スペースシャトルコロンビア号の空中分解事故の話。

2010-07-17 (Sat)

#1

slideshare で tufte を探したときに tuft や tufts がひっかかるのをやめさせる方法はないのだろうか。

それはそれとして、 visualizing Information in 6 steps は面白かった。わからないところもあったが。

2010-07-18 (Sun)

#1

小数点に "." と "," のどちらを使ってもいいという話は知っていたが、3桁毎の区切りにはそれらは使ってはいけなくて、空白を使うのだそうな。

そうしてあれば、たしかに曖昧ではなくなるな。

2010-07-20 (Tue)

#1

Partial Evaluation and Automatic Program Generation は全文ダウンロードできるのか。

<URL:http://www.dina.dk/~sestoft/pebook/pebook.html>

2010-07-24 (Sat)

#1

RFC 3986 (URI) について前に指摘したのが errata として出たようだ。

<URL:http://www.rfc-editor.org/errata_search.php?rfc=3986&eid=2033>

もとが間違っていた、というわけではないが。

2010-07-30 (Fri)

#1

「C++ の設計と進化」を読み終わる。

実際の用法に即して言語を拡張していくという姿勢は素晴らしく、とても共感する。

しかし... 同時に C と同等の効率性を実現し、また C との互換性をほぼ保つ、という方針は至難を極めるようだ。


[latest]


田中哲