天泣記

2003/03/01

#1

金沢

#2

辰口

forward を切る。

さらば virus/SPAM

2003/03/02

#1

Ribosome build system.

#2

やっぱり、切るのは止めて、forward 先を変えるだけにする。

#3

帰還

2003/03/04

#1

sort をするときに、比較関数が壊れていたらなにが起こるだろうか?

極端な話、比較関数が毎回異なるランダムな結果を返すとすると、 とりあえず、バブルソートはなかなか終了しなさそうである。 が、クイックソートは終了するだけは問題なくするように思う。

では、ランダム程には壊れておらず、 同じものを比較すれば同じ結果が返って来るとしても、 全順序になっていないときにはどうなるか?

#2

STDIO で、r/w の境目では seek が必要なことがある。 seek できないものに対してそういう状況になるとどうなるか?

% ruby -e '
open("/dev/tty", "r+") {|f|
  p f.read(1)
  f << "xyz"
}
'
abc
"a"
-e:2:in `open': Illegal seek - "/dev/tty" (Errno::ESPIPE)
        from -e:2

とエラーになるのは GNU/Linux だが、 FreeBSD や Solaris ではとくにエラーにならない。

#3

A followed by B の解釈でどっちが先でどっちが後だったかしばらく悩む。

普通は文脈から簡単にわかるものだが、 A followed by B と B folowed by A の話が両方書いてあって、 それが微妙にしか違わない上、 まさにその違いがどっちがどっちかを知りたかったため、 文脈には頼れなかったのであった。

2003/03/05

#1

富士

network unreachable.

2003/03/06

#1

富士

2003/03/07

#1

富士

#2

帰還

2003/03/10

#1

たくさん議論したはずなのだが、あんまり覚えてないなぁ。

2003/03/11

#1

s/// の適用における正規形と停止性はどんなものだろう?

2003/03/12

#1

箱根到着

#2

発表... 終了

#3

host コマンドは名前解決に失敗しても exit status が 0 であることに気がつく。

2003/03/13

#1

箱根

2003/03/14

#1

箱根

#2

帰りがけに八重洲ブックセンターに寄る。

2003/03/15

#1

のんびり寝てすごす。

2003/03/16

#1

関数型 make の次は関数型 shell はどうだろう?

もちろん、lisp 系な shell はいくつかあるので、 そうではない pure なやつである。

#2

おととい入手した、 Mastering Regular Expressions, second edition を眺める。

そーか、.NET の Balancing group というのはそーいうものであったか。 あんま素直じゃないなぁ。

ふむ。やっぱ Class set operation は Java にしかないんか...

#3

ふと思いついて algebraic datatype もどきを作ってみる。

require 'datatype'

datatype :Exp, [:Var, :name],
               [:Abs, :name, :body],
               [:App, :operator, :operand]

def ev(exp, env)
  n = b = f = a = nil
  case exp
  when pattern { Var[:n] }
    if pair = env.assoc(n)
      pair.last
    else
      raise "unbound variable: #{n}"
    end
  when pattern { Abs[:n, :b] }
    lambda {|v| ev(b, [[n, v], *env])}
  when pattern { App[:f, :a] }
    ev(f, env).call(ev(a, env))
  end
end

p ev(Var[:a], [[:a, 1]])
p ev(App[Var[:succ],Var[:a]], [[:a, 1], [:succ, lambda {|v| v + 1 }]])
p ev(App[Abs[:v, Var[:v]],Var[:a]], [[:a, 1]])

パターン中で変数に束縛しようとすると、事前に初期化が必要なのがちとナニである。 (また、述べるまでもなくパターンマッチの効率が悪いということも)

#4

algebraic datatype を宣言するキーワードに datatype, data, type のどれを選ぶか?

2003/03/17

#1

明日(と明後日)は PRO に行ってみるか。

#2

Ruby の BTS に登録したバグレポートのうち、今年度のぶんを分類してみる。

最新版(ruby 1.8.0 (2003-03-12))ではバグが再現しない: 104
報告時にはすでにその時点での最新版で直っていた: 1
報告した挙動は仕様でありバグではなかった: 4
最新版と報告時の挙動が変わっていない(バグか仕様か不明): 6

計115

2003/03/18

#1

言語と OS, どっちが下か?

2003/03/19

#1

反省気味...

2003/03/20

#1

gdb の ignore の使い方を覚える。

#2

ruby の問題が volatile であったことが判明したので、 静的解析で volatile の必要性を判断できないか考えてみる。

とりあえず、各関数について実行中に GC が起き得るかどうかは求められそうである。

とすると、あとは危なげな VALUE を形式化すればいいのだが...

#3

動的な検査としては、GC が起き得るところでは全て起こるようにして Rubicon を動かしてみるという手が使えるかもしれない。

どのくらい時間がかかる?

2003/03/21

#1

パッチと言うのは一般用語なのかなぁ。

2003/03/23

#1

ふむ。いつでも TPT?

% zdump -v Asia/Dili 
Asia/Dili  Fri Dec 13 20:45:52 1901 UTC = Sat Dec 14 05:08:12 1901 TPT isdst=0 gmtoff=30140
Asia/Dili  Sat Dec 14 20:45:52 1901 UTC = Sun Dec 15 05:08:12 1901 TPT isdst=0 gmtoff=30140
Asia/Dili  Sun Dec 31 15:37:39 1911 UTC = Sun Dec 31 23:59:59 1911 TPT isdst=0 gmtoff=30140
Asia/Dili  Sun Dec 31 15:37:40 1911 UTC = Sun Dec 31 23:37:40 1911 TPT isdst=0 gmtoff=28800
Asia/Dili  Sat Feb 21 14:59:59 1942 UTC = Sat Feb 21 22:59:59 1942 TPT isdst=0 gmtoff=28800
Asia/Dili  Sat Feb 21 15:00:00 1942 UTC = Sun Feb 22 00:00:00 1942 TPT isdst=0 gmtoff=32400
Asia/Dili  Sun May  2 14:59:59 1976 UTC = Sun May  2 23:59:59 1976 TPT isdst=0 gmtoff=32400
Asia/Dili  Sun May  2 15:00:00 1976 UTC = Sun May  2 23:00:00 1976 TPT isdst=0 gmtoff=28800
Asia/Dili  Sat Sep 16 15:59:59 2000 UTC = Sat Sep 16 23:59:59 2000 TPT isdst=0 gmtoff=28800
Asia/Dili  Sat Sep 16 16:00:00 2000 UTC = Sun Sep 17 01:00:00 2000 TPT isdst=0 gmtoff=32400
Asia/Dili  Mon Jan 18 03:14:07 2038 UTC = Mon Jan 18 12:14:07 2038 TPT isdst=0 gmtoff=32400
Asia/Dili  Tue Jan 19 03:14:07 2038 UTC = Tue Jan 19 12:14:07 2038 TPT isdst=0 gmtoff=32400
% TZ=Asia/Dili date -d '2000-09-16 15:59:59Z'
Sat Sep 16 23:59:59 CIT 2000
% uname -a
Linux serein 2.4.20-686 #1 Mon Jan 13 22:22:30 EST 2003 i686 Mobile Intel(R) Pentium(R) III CPU - M  1200MHz GenuineIntel GNU/Linux

2003/03/24

#1

ちょっと typo を修正してみる。

#2

D Parser

#3

実装から仕様を学ぶにあたって、バグはどのくらい問題になるか?

2003/03/25

#1

non-blocking に設定した fd に対して stdio を使ったときの挙動は規定されているのだろうか?

#2

glibc の info には、使うな、と書いてあることに気がつく。

しかも、あるプロセスで non-blocking にしたら、共有している他のプロセスでも non-blocking になっちゃうからそっちでも stdio を使うのはまずいとのこと。

うむ。たしかにそれはそうだ。なかなか。

#3

そういうことが書かれる原因になった話

続き1

続き2

2003/03/26

#1

InfoPath の記事を読んでみる。

#2

FIONREAD というのはどのくらいポータブルなのだろう?

#3
% ruby -e 'open("zz", "w+") {|f| f.print "a"; f.ungetc ?x}'  
% ls -l zz
-rw-r--r--    1 akr      akr      938426601 Mar 26 18:13 zz

うぉ。

... てゆーか、core を吐くこともあるか。

#4
% rm -f zz
% cat t.c 
#include <stdio.h>

int main()
{
  FILE *f = fopen("zz", "w+");
  fputc('a', f);
  ungetc('b', f);
  exit(0);
}
% gcc t.c
% ./a.out
% ls -l zz
-rw-r--r--    1 akr      akr      939296633 Mar 26 18:44 zz

ふむ。glibc か?

2003/03/27

#1

日本語の句点は文の最後につける。 英語のピリオドもそうである。 また、C のセミコロンも同様である。

だが、Pascal のセミコロンはそうではなく、 文と文の間にいれるものである。

文の区切りかたが Pascal に似ている自然言語はあるだろうか?

また、原理的に言えば、文を開始する記号を考えることもできるが、 そういう言語はあるだろうか?

#2

お、tidy に続いて file もライブラリ化?

2003/03/28

#1

新橋

2003/03/30

#1

散財

#2

ぱい

2003/03/31

#1

google で abstruct: 約4,990件

#2

Pathnames Quick-Start & Quick-Reference


[latest]


田中哲