天泣記

2002/05/01

#1

ふむ。リーダは分離禁止文字なのだな。そりゃ当然か。

とすると、「かわいくて、ちょっぴり…」と「…ギスギスしたマンガです。」 というように三点リーダが分離しちゃっているプラネットガーディアンの帯は失敗なのだろうか。 いや、これはきっと意図的なのだろう。

#2

そこらにあった文庫本をいろいろ見てみる。 全部ぶら下げあり。

DRAGON MAGAZINE も電撃 HP もぶら下げあり。

しかし、なぜか The Sneaker (の本文)はぶら下げなし。 スニーカー文庫をもう一度確認してみるが、やっぱりぶら下げあり。

なぜ?

#3

「太郎丸の大冒険」にも三点リーダが分離しているところがあることに気がつく。 銀河の最後の台詞。

これだと、追い込むにせよ追い出すにせよ 2文字必要だけど、 1行15文字だと分離してた方がましということかなぁ。

#4

JIS X 4051 をざっと眺めてみる。

ぶら下げには触れられていない。解説によれば議論はあったようだ。

感嘆符と疑問符直後の空白には触れられていない。

#5

CVSps を動かしてみる。

2002/05/02

#1

そぉか。 CSS の最初の段落について,字下げをやめさせるという例は 実際にそういう慣習があるから例になっているんだな。

#2

感嘆符と疑問符直後の空白は行末に来た時には除去すべきなのだが... この挙動を CSS で表現することはできない気がする。 できるのだろうか?

#3

HTML は改行とそれ以外の空白を区別しないことにいまさら(再度?)気がつく。

#4

通常、行間は文字の半分から同じくらいの幅をとるようである。 これは(横書きでいえば)文字の横の並びの方が縦の並びよりも関係が深いので、 関係が薄い方(縦)に空白を入れるという原理に従っており、 まったくもってもっともである。 また、ルビは普通の文字の 1/2 のサイズを使うので、 半分以下だとルビが入らないという実際的な問題もある。

とすると、そういう通常の印刷に慣れている人が、 縦横両方にベタに組んでしまう環境 - ちょうど今私が使っている kterm みたいなのとか - に出会った時に、 一行おきに書くのは むしろ当然なのかも知れない。

考えてみれば、誰に習うわけでもないのに一行おきに書く人が それなりにいるというのは そういう背景があるということなのであろう。 そういう人は読みやすさ・美しさに対する感覚があるということで、 むしろ感心すべきなのかも知れない。

#5

fill-region の挙動をすこし試す。

うぅむ。疑問符をぶら下げるのは変な気がする。

#6

実験的に、KTerm のリソースに *lineSpace: 2 を入れて行間を空けてみる。

16dot font を使っているのだから、半分の 8dot にするべきかも知れないけど、 そこまで画面を浪費する気にはなれない。どうせルビは使えないし。

#7

予測されていたことではあるが、w3m で縦の罫線がつながらないのは痛い。

... おぉ、w3m はいつのまにか DEC graphics の罫線を使えるではないか。 こっちだとちゃんとつながるんだよねぇ。

ついでに、こっちは JIS X 0208 の罫線と違って半角なので画面の消費を抑えられるというおまけつき。

#8

英文の行間が間延びした感じになることも推測されるが、2dot だと微妙である。

8dot だと明らかに間延びしすぎだけれども。

#9

うぅむ。DEC graphics だと線の幅が一つしかないか。

bold にすれば太くなるのではないか、と一瞬思ったものの、残念ながら太くならないようだ。

ついでにいえば、細いのと太いのが交わっているようなのは表現できないから、 たとえ太くなったとしても JIS 罫線よりは質が落ちるであろう。

#10

そーか。半角の約物を使いたければ、半角仮名を使えばいいではないか。 句点、読点、中黒、鈎括弧はあるんだし。

そーいえば、メールやニュースで半角の約物が混じっていることがあるが、 これもやはり著者(ないしは使用しているソフトの作者)の美しさへの追求のなせる技かも知れない。

#11

鉤括弧と鈎括弧と鍵括弧、どれが適切か?

#12

半角の中黒の使いかたは難しい?

半角スペースだと二分アキしか表現できないので、 前後を四分アキとしたければ全角中黒を使わざるを得ないか。

#13

うぅむ。行間の罫線がスクロールなどの時に消されない臭い。

#14

The Archive Webserver will redirect all Web clients to a configurable url such as Google's cached version of your Web pages (provided that it has indexed and cached your pages), or the archived page from the Wayback Machine (www.archive.org).

#15

The "3DM" XML 3-way Merging and Differencing Tool

#16

なんか感じが違うと思ったら、リストの項目の印が ASCII になっていた。

#17

構造化文書の記法というものを書いた。

2002/05/04

#1

ふむ。URL に / を加える半可通は絶滅したか?

2002/05/05

#1

PIGALE is a graph editor and an algorithm library essentially concerned with planar graphs.

#2

Apache2 は無意味に chunked にならないよう asis が改善されている?

2002/05/06

#1

asis だと If-Modified-Since が効かないか。

2002/05/07

#1

m5 と名付けられたマクロプロセッサはいくつあるか?

2002/05/09

#1

うぅむ。cvs.m17n.org を OpenSSH 2 にするか...

2002/05/10

#1

cvs が hang する原因を調べる。

strace で調べてみると、 どうも今までは通信の最後に \n を(圧縮した形で) client -> server, server -> client と送りあっていた模様。

cvs-1.11.2 ではこれがなくなって、server が \n を送り返さない。 このため、client がずっと待ちつづけるというのが原因らしい。

しかし、\n を送っているコードはどこだ?

#2

やはり、deflate を伸長するコマンドは重要である。 というか、基本であろう。

なお、becho も便利。

#3

2001-05-03 00:00:00 GMT から 2001-05-07 00:00:00 GMT までに絞りこむが、よくわからない。

refactoring だというんなら挙動を保存しろとゆーのだ。

#4

cvs diff -D の時刻指定がデフォルト地方時なのはよろしくない。 (getdate.c を使ってるからだろうが。)

さらに、cvs log の時刻をそのまま受け付けないのはまったくもってよろしくない。

#5

いっそ圧縮を禁止するか?

#6

たまに必要にせまられて小さなスクリプトをつくることがある。

そういうスクリプトは、大抵そのまま忘れ去って disk の肥やしになっていくわけであるが、 ごく稀に長期間に渡って拡張を繰り返して使用するものがある。

個人的には becholineup がそういうものである。

print-l2 もよく使うが、拡張の必要性は感じない。

スクリプトがそういうものになる条件は何だろうか?

2002/05/11

#1

\n というのは完全に勘違いであった。 いくら探してもコードが見つからないはずである。

問題は close のタイミングなのだった。

#2

cvs のプロトコルには NNTP などの quit に当たるコマンドがなく、 クライアントがサーバへの通信路を遮断することによって通信の終わりを示す。

具体的にこの遮断というのは、 通信路が socket なら shutdown による half close だし、 また、圧縮をかけていれば zlib format の終端の ADLER32 checksum が流れた後に下位の通信路が遮断されるということである。

問題だったのは「checksum が到着した後に下位の通信路が遮断される」という点である。

cvs-1.11.2 以降では、 クライアントは checksum を流した後に下位の通信路を遮断するし、 サーバは checksum を確認した後に下位の通信路の遮断を確認する。

cvs-1.11.1p1 以前では、 クライアントは checksum を流した後に下位の通信路を遮断せず、 サーバも checksum を確認した後に下位の通信路の遮断を確認しない。 ここで、サーバに checksum まで到着したということによってサーバは通信の終了を知っているため、まずサーバが(クライアントに checksum まで送ってから)終了し、 サーバから送られた checksum を確認したクライアントも終了する。

しかし、cvs-1.11.1p1 以前のクライアントが cvs-1.11.2 以降のサーバに接続しようとすると問題が生じる。 サーバが checksum を確認した後、さらに下位の通信路の遮断を確認しようとするが、 いつまでたってもこれは遮断されないのである。 そのようにしてサーバがブロックし、checksum (およびその直前の BFINAL が立ったブロック)を待っているクライアントもまたブロックする。

なんというか、通信の遮断というのは難しいものだ。

まぁ、どちらからでも終了できる奴はもっともっと難しいんだろうけど。

2002/05/12

#1

疑問が湧く。

ssh 経由で half close は扱えるのだろうか?

扱えないとすると、cvs サーバは下位の通信路の遮断を検知できないか、 あるいは逆方向の遮断を送れないか、どちらかの問題が生じるような気がする。

... うぅ、扱えるのか。

#2

しかし、とすると、half close が扱えない通信路はもはや cvs ではプロトコルを圧縮できないということだな。

#3

port forwarder でトラブルが出るかも、というわけで試す。

socket -slqvp 'socket -q cvs.m17n.org 2401' 8010

おや? 圧縮無しで hangup して、圧縮有りは問題無し?

... あぁ、cvs.m17n.org は対処してしまったからか。 圧縮無しで hangup するのは、client が close したのが server に伝わらないからだな。

圧縮無しなら大丈夫ともいえない、と。なかなか。

#4

設定を失敗して、emacs-mime-ja 宛のをいくつか(1016-1018)受け取り損ねた。

アナウンスの反応が入っているか? アナウンス、大橋さんの質問、中島さんの回答で 3通だから反応はないか。

semi-gnus-ja はアーカイブを見ても反応はついていなかったからいいとして、 apel-ja は反応がついていてもわからんな。

IRC で聞いてみると反応はなかった模様。

#5

あ、wl に流すのを忘れた。

lsdb も、入って流すべきか?

そういや bitmap-mule も別の ML だったような?

UTF-2000 も?

きりがないから(もう一回流すのは)やめよう...

#6

なんか、(再度あるいは再々度) half close を扱う port forwarder を作りたい気分。

#7

単純に実装するなら

require 'socket'

server_host = '...'
server_port = '...'

proxy_host = '...'
proxy_port = '...'

TCPServer.open(proxy_host, proxy_port) {|serv|
  loop {
    Thread.new(serv.accept) {|client_sock|
      print "(accepted)\n"
      TCPSocket.open(server_host, server_port) {|server_sock|
        print "(connected)\n"
        client_to_server = Thread.new {
          begin
            loop { server_sock.print client_sock.sysread(8192) }
          rescue EOFError
            print "(client EOF)\n"
            server_sock.shutdown 1
          end
        }
        server_to_client = Thread.new {
          begin
            loop { client_sock.print server_sock.sysread(8192) }
          rescue EOFError
            print "(server EOF)\n"
            client_sock.shutdown 1
          end
        }
        server_to_client.join
        client_to_server.join
      }
      client_sock.close
    }
  }
}

で済むわけで、べつに難しくはない。

ただ、以前から妄想している奴は、client 側と server 側を分離して、 組み合わせによって socks サーバにしたり、tunnel にしたりすることができるというシロモノである。 あと、RST が流れた時も可能な限り早く検出して転送するとか。いろいろ。

名前だけは決まっていて wormhole というのだが...

#8

info-cvs, bug-cvs で hang up まわりの話を調べる。 Subject に hang と入っているのを眺めただけだが。

同じ話がある(対処法は違うけど)。 これも同じか。

圧縮よりも SSH2 で hang するという話が多い。 たぶん、half close がうまく扱えないものがあるのだろう。

それに、どうも cvs 側の hang する原因は他にもある模様。 half close が要求されるのは今に始まったことではないらしい。

#9

half close ができない双方向通信路にはどんなものがあるか?

System V, FreeBSD, OpenBSD の pipe と... 他には?

pty?

2002/05/13

#1

送る

#2

そうか、絶対パスは相対URI なのか。

2002/05/14

#1

田中

#2

austin-regexp-l ができた模様。

#3

akr

#4

田中姓に隠された謎

うぅむ。もしかして先祖がつくばにいたりしたのだろうか。

2002/05/15

#1

API をうまく設計するためにはどうしたらいいか?

2002/05/16

#1

「前向き」というのは、前を向いているということの他に、進んでいない、ということも含意しているのかも知れない。

#2

Apache2 は MultiViews の挙動が違う? xxx.asis を読んでくれない?

#3

ふと、Klez のつける base64 なパートに最後が =9 で終わっているものがいくつもあることに気がつく。

2002/05/17

#1

MetaOCaml

#2

<bigwig>

#3

Growing Languages with Metamorphic Syntax Macros, Claus Brabrand and Michael I. Schwartzbach, PEPM 2002.

を読む。

停止性のあるマクロ展開というところに興味を持ったのだが、 それはたいしたことなくて、再帰禁止というだけの話であった。

2002/05/20

#1

軽量XMLライブラリー

2002/05/21

#1

URI の param は何に使えるか?

#2

tcptraceroute

#3

AOP with design patterns as meta-programming operators, Uwe Aßmann

を読む。 Design Pattern を class graph の変換とみなす話。 変換で意味を保存する条件の話がついている。

2002/05/22

#1

#! - the Unix truth as far as I know it.

うぅむ。 今までかなり調べたつもりだったんだけど、 まだまだ知らないことがてんこもりだなぁ。

#2

distro is a small utility used to identify which distribution is being run on a system.

#3

gzip_x86 is a distribution of gzip tuned for faster decompressing when running on Linux/x86.

#4

g新部さんが gUSA の話をしてくれた。

最後の store が atomic でないといけないので、 ものによっては長いものを書き込むことはできないかも知れない。

まぁ、穴は見つけられなかった。

#5

Aspect-Oriented Dependency Inversion, Martin E. Nordberg III

を読む。 position paper だけあって後になるほど具体性に乏しくなっていくが、 前半は共感できる。

2002/05/23

#1

KAKASI で日本語をローマ字に変換する時に、 片仮名の単語をもともとの綴にできないものか?

リポジトリが ripojitori になってしまって悲しい。

2002/05/24

#1

zlib で nowrap なんてのができたとは知らなかった...

2002/05/26

#1

やっと、cvs のはなしの(形式的な)書き換えが終わる。

2002/05/27

#1

ローカルブランチに関しては長らく試行錯誤しているので、 あれはかなり古かったりする。

いちおう、現在考えている手法(そして、某氏を実験台にしようと思っているもの)は、 xxx--number というような名前(タグ)でブランチを作ると x.y.number なブランチができるという奴である。 これは環境変数ではないのでリモートでも(サーバだけ変更すれば)動くし、 新しいファイルを加えた時も自動的に number が効くし、 vendor branch で開発する方法(はあのページには結局書かなかったわけだけど)とは違って ちゃんとタグがあるから ViewCVS で眺める時も困らないし、 奇数を指定することにより衝突の可能性はさらに低くなるし、 欠点はタグに番号を入れなければならないことだけな、 今までのよりもかなりましな方法、になるはずである。

cvs.m17n.org (の cvs サーバ)はすでに変更済みで、 残りは最小限のテストと説明だけだったりするのだがなかなか手がつかないのが問題である。

などと書いている間にやればいいのかもしれない。 1.11.2 に変えようと思った時に作業したのだが、圧縮のトラブルに水を差されてそれっきり。 圧縮はなんとか片付けたんだから手をつけるか...

#2

手を付け始める。

とりあえずミラーをちゃんと cron でやるようにして、 CVSsuck でマージするようにする。

数日様子を見たら説明して開始?

でもなぁ、やっぱ CVSsuck で他からとってくるのは良くないよなぁ。うぅむ。

#3

形式の次は内容である。

とりあえず、anonymous 編にちょっと追加。

2002/05/29

#1
% perl -e '"A" =~ /\x61/i; print "$&\n"'
A
% ruby -e 'p (/\x61/i =~ "A")'               
nil
#2

うぅむ。cron からだとうまく動いてなかった...

2002/05/30

#1

fifo を open してるところで dead lock してるようなのだが、 なんで cron から動かすかどうかで違うんだ?

2002/05/31

#1

cvs diff (など) の -D オプションの引数は cvs client が UTC に変換してからサーバに送っていることに気がつく。

#2

Socat is a relay for bidirectional data transfer between two independent data channels.

この類のやつはいくつかあるけど、どれか de facto standard になって OS に標準添付にならないものかな。

#3

.... という演算子を持っている言語はあるか?

#4

cvsproxy is a relay server for the cvs pserver protocol.

ひとつの proxy(host:port) でどこにでも繋げる。


[latest]


田中哲