algebraic data type を OOP で表現すると、 type を abstract class にして、 constructor はそれを継承した concrete class にする。
さて、algebraic data type の constructor はある種の関数であり、 どこをどうみても型ではなかったわけだが、 OOP のほうでは concrete class であり、これは型である。
これによる得失は何か?
「うりはらえ!!」とつぶやきつつ本を選別し、売り払う。
自分で持っていく気にはならない量なので、 BOOK OFF の出張買取というのを使ってみる。
300冊弱 9000円
Windows にはドライブ毎にルートディレクトリがあるという。
ということは、その構造は木構造ではなく森構造というべきではないだろうか。
東京
本屋が閉まる前に帰りつく。
ふと「逆にいえば」よりも「裏を返せば」のほうがいいまわしとして適切だったろうか、としばらく悩む。
... p->q という文と q->p という文の間だから逆のほうでよかったか。
「対偶」という言葉を自然に含むいいまわしはあるか?
SMATCH is an experiment in finding Linux kernel errors. There are two main parts to Smatch. The first is a patch to the gcc sources to print out a lot of information. The second part is a collection of Perl scripts and libraries to analyze the information.
firewall の事情で、HTTP proxy 越しにアクセスしていたとしよう。
305 Use Proxy といわれたらどうするか?
白地に黄色はあまりに見難いので、地を青みがからせてみる。
ふと思ったのだが、文字の色と地の色の色度差が小さい場合に、 白か黒で自動的にふちどりしてくれるような端末はないだろうか。
うぅむ。今度は緑が見にくい。
... 地の色を変えるのではなく、文字色の明度を落すことにする。
唐突に意味も脈絡もなく xmp の真似。
#!/usr/bin/env ruby module XMP2 DEVNULL = open("/dev/null", "w") STDERR2 = STDERR.dup def self.valid_syntax?(code) STDERR.reopen(DEVNULL) eval("BEGIN {return true}\n#{code}") rescue Exception false ensure STDERR.reopen(STDERR2) end def self.valid_expression?(code) STDERR.reopen(DEVNULL) eval("BEGIN {return true}\nnil if\n#{code}") rescue Exception false ensure STDERR.reopen(STDERR2) end ARGV.each {|f| lines = "" IO.foreach(f) {|line| lines << line if valid_syntax?(lines) v = eval(lines, TOPLEVEL_BINDING) if valid_expression?(lines) print lines.chomp puts " #=> #{v.inspect}" else puts lines end lines = '' end } } end
野蛮の園の単行本が出るか。
シンボリックリンクの無限ループが発生する条件は何か?
(シンボリックリンクは高々有限個しか存在しないため) 無限ループが発生するとすれば特定のシンボリックリンクが 2回以上展開される。
が、特定のシンボリックリンクが 2回以上展開されたからといって、 無限ループになるとは限らない。
% ln -s . a % ls a/a/a/a/a/a a
とか。
シンボリックリンクをパス名の書き換え規則だとみなせば、 正規形が存在するかどうかという問題と考えられるが、 そうすることによって何か知見が得られるか?
もしかして、ループでなく再帰で書いて、 無限再帰の検査をすればいいだけか?
... 書いてみる。そうらしい。
man -k path
... 気になったもの: revpath(1x), namei(1), realpath(3, 3c, 3X), getexecname(3c), mkdirp(3gen), rmdirp(3gen), resolvepath(2)
う、realpath は SUSv3 にあるのか。
rmdir に -p なんぞというオプションがあったとは。
おや。
UDP port 1434 をブロックすると DNS が問題になるというが、 事実上 DNS 以外は UDP を使っていないということだろうか。
プログラマは、(あまり読みにくくならない範囲で) プログラムを短くすることを好む傾向があるように思う。
とすると、同じようなことを行う良い記述と悪い記述があった場合には、 良い記述が短くなるように言語やライブラリを設計すると良いほうに誘導できるのではないか。
あるいは、こうともいえるかも知れない。 悪い記述が短くできてしまうのならば、それは言語やライブラリの設計が悪いのだ、と。
メガライナー
東京
市ヶ谷から。
EXCLAMATION MARK は上部の線と下部の点から構成されているが、 線と点がつながっているものは包接されるのだろうか?
また、包接というものを考えるときには筆記具の制約は考慮されるのだろうか?
終電、終バス。
もうすこしマージンをとるべきだったと思った。
もし、XML のファイルの中から何かを探すツールに名前をつけるとしたら、 当然のように xml-grep つまり xgrep という名前にするのではないだろうか。
探してみる。
うぅむ。ないわけではないがたくさんあるわけではないか。
おや?
% cat tst.html <html> <html> <title>TITLE</title>
html がふたつあると...
% bin/tidy tst.html line 2 column 1 - Warning: inserting missing 'title' element line 1 column 1 - Warning: <title> isn't allowed in <html> elements Info: Document content looks like HTML 3.2 2 warnings, 0 errors were found! <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN"> <html> <head> <meta content= "HTML Tidy for Linux/x86 (vers 1st February 2003), see www.w3.org" name="generator"> <title></title> <title>TITLE</title> </head> <body> </body> </html> To learn more about HTML Tidy see http://tidy.sourceforge.net Please send bug reports to html-tidy@w3.org HTML and CSS specifications are available from http://www.w3.org/ Lobby your company to join W3C, see http://www.w3.org/Consortium
title がふたつでてくる?
bug tracker を調べてみる。 似たようなのがあるから報告しなくてもいいか。
そーか。tidy は TidyLib が本流になっておったのか。
よきかなよきかな。
うぅむ。Ruby-TidyLib から使うと pre 内でも wrap されちゃうなぁ。
% cat z.html <pre> a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b </pre> <p> a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b </p> % ruby -rpp -rtidy -e 'pp Tidy.parse_io(STDIN, :encoding=>"iso-2022-jp", "wrap"=>20).root' < z.html #<Tidy::Node Root #<Tidy::Node Start:html #<Tidy::Node Start:head #<Tidy::Node Start:title>> #<Tidy::Node Start:body #<Tidy::Node Start:pre #<Tidy::Node Text "a a a a a a a a a a\n" "a a a a a a a a a a\n" "a a a a a a a a a a\n" "a a a a a a a a a a\n" "b b b b b b b b b b\n" "b b b b b b b b b b\n" "b b b b b b b b b b\n" "b b b b b b b b b b\n" "b b b b b b b b b b\n" "\n">> #<Tidy::Node Start:p #<Tidy::Node Text "a a a a a a a a a a\n" "a a a a a a a a a a\n" "a a a a a a a a a a\n" "a a a a a a a a a a\n" "b b b b b b b b b b\n" "b b b b b b b b b b\n" "b b b b b b b b b b\n" "b b b b b b b b b b\n" "b b b b b b b b b b\n">>>>>
コマンドから使うと wrap されないのだが。
% tidy -wrap 20 z.html Can't open "/home/akr/.tidyrc" HTML Tidy for Linux/x86 (vers 1st March 2002; built on Mar 8 2002, at 11:02:47) Parsing "z.html" line 1 column 1 - Warning: inserting missing 'title' element z.html: Doctype given is "-//IETF//DTD HTML 2.0//EN" z.html: Document content looks like HTML 2.0 1 warning, 0 errors were found! <!DOCTYPE html PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html> <head> <meta name= "generator" content= "HTML Tidy for Linux/x86 (vers 1st March 2002), see www.w3.org"> <title></title> </head> <body> <pre> a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b </pre> <p>a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b</p> </body> </html> HTML and CSS specifications are available from http://www.w3.org/ To learn more about HTML Tidy see http://www.w3.org/People/Raggett/tidy/ Please send bug reports to Dave Raggett care of <html-tidy@w3.org> Lobby your company to join W3C, see http://www.w3.org/Consortium zsh: exit 1 tidy -wrap 20 z.html Z(3):akr@serein%
調べてみると、wrap は出力時のトラバースで処理されてるようで、 tidyNodeGetText でのトラバースではそのへんが処理されない模様。
ま、wrap しないようにすればいいことか。
wrap しないことはできるが、そうすると、 p 内は一行になっちゃうか。うぅむ。
Start ノードに対して tidyNodeHasText が真を返すことがあるのは意図的なのだろうか?
cvs diff と cvs annotate を組み合わせたような表示はどうだろう?
一度に起こる変更がどの程度分散しているかを測れるか?
同一人物が同時に(あるいは短い時間に) commit するときの平均ファイル数とか?
雪。
なお、出勤時にはまだ雨であった。
確定申告
うぅむ。けっこう払わねばならんな。
なんというか、ひさしぶりに未読 queue が空になりそうである。
忙しいのに... (忙しいから?)
ついに空。
... なのもつかのま。
ちょっと ethereal を使ってみる。
金沢
[latest]