BeOS では、ウインドウに対応するスレッドがあって、イベントはそこに届くらしい。
Approaching Be(Japanese Translated Version)
アプリケーションが複数のスレッドを持つことになるのは、アプリケーションが複数のウインドウを持つ場合?
/proc/loadavg とかが select に反応しないのは Linux 2.6.13 で直っているようだ
<URL:http://kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.13>
author Luke Kosewski <lkosewsk@nit.ca> Wed, 01 Jun 2005 12:39:28 -0500 Input: do not corrupt system-wide procfs fops. entry->proc_fops is a pointer to struct file_operations. When we call create_proc_entry(...), it pointis to proc_file_operations, deep in fs/proc/generic.c. By adding a 'poll' member to this struct we effectively force the 'poll' member on every file in /proc, which is wrong (they all fail select(...) calls). This patch changes a copy of entry->proc_fops and reassigns it rather than changing the original member. Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
8月頭に報告したときにはすでに直していた人がいた模様。
日記をいじくる
へー、XHTML では document.write って使えないんだ。
HTree が出力を script 要素 (と style 要素) も含めて全部エスケープするのは XHTML として出力することを選択したからだが、document.write はどのくらい生き残っているのだろう?
まぁ、なんだ。死滅しそうな感じはしないな。
HTree で、テンプレートが HTML だったら (XML 宣言がなくてルート要素が HTML っぽかったら) 展開結果も HTML にするようにしてみる。
しかし、XML ベースの他のテンプレートライブラリでは問題にならんのかな
<URL:http://www.shiro.dreamhost.com/scheme/wiliki/wiliki.cgi?Gauche%3aWishList>
お、Gauche で nonblocking write かぁ。
やはりどこでも single thread で (おそらく event driven で) やりたがる人はいるものだ。
call/cc でやれば綺麗というのはまさに Scheme 的感覚だと思うが、それはそれとして、興味を持ったのは procedual port と conversion port における問題である。
そういえばそういう I/O モドキにおける nonblocking I/O については真面目に考えたことがない。考えてみると、たしかに zlib とかで、partial write や EAGAIN を実現するのは難しそうである。
また、event driven で書くなら、zlib の出力側で起きた partial write と EAGAIN は、zlib の入力側に何とかして戻すよりも、むしろともかく受け取ってしまってバッファリングしておき、書けるようになった (ことに event loop が気づいた) ら、書くように作業を登録しておけば良い。
とすると、zlib では nonblocking I/O は困難な上に不要っぽいわけで、そういうことは提供しないことになりそうである。そして、そうなると、zlib と普通の IO で nonblocking I/O の部分が多態ではないことになる。
ここで blocking と nonblocking がひとつのメソッドで提供されているとその多態性を Duck Type で表現できなくて悲しい。やはりひとつのメソッドに blocking I/O と nonblocking I/O を同居させるのはよろしくないと思う。
XML 宣言と document.write を両方含んでいるページを手元のアンテナからいくつか探してみる。
どれも Content-Type: text/html なので、少なくとも mozilla では HTML として解釈され、document.write は問題なく動くのであろう。
ところで、HTML の script 要素のいやなところは、</ が書けないところである。
ところで、JavaScript で </ はどこに現われ得るだろうか?
<URL:http://www2u.biglobe.ne.jp/~oz-07ams/prog/ecma262r3/>
まず、< という演算子の後に、/* や // というコメントが続くことはありそうである。その場合は間に空白をいれれば良い。
また、文字列にも含まれそうである。その場合はどちらかをエスケープすれば良い。
あと、コメントにも含まれそうである。その場合は間に空白をいれるとかすれば良い。
ふむ。JavaScript の字句解析を行えば、</ を自動的に除去することも出来そうではある。
では、CSS はどうか?
うぅむ。DOM で木じゃない構造を表現するとは。
珍しく、日本語を扱うコードを書く。
require 'htree' def strip_newline_in_japanese(tree) h = {} tree.make_loc.traverse_text {|t| next if t.loc_list.any? {|l| l.elem? && l.name == '{http://www.w3.org/1999/xhtml}pre' } h[t] = t.to_s.gsub(/([^\n])\n(?=([^\n]))/) { a, b = $1, $2 a + if /[ぁ-んァ-ヶ亜-熙]/ =~ a && /[ぁ-んァ-ヶ亜-熙]/ =~ b "" elsif /[・:;(〔[{〈《「『【]/ =~ b "" elsif /[、。,.・:;)〕]}〉》」』】]/ =~ a "" elsif /[?!]/ =~ a " " # xxx: should be zenkaku space? else "\n" end } } tree.subst(h) end
HTML 中のブラウザに渡されて欲しくない改行を削除する。
まぁ、この件については以前いろいろ考えたのだが、とりあえずはこの程度で。
AS/400 の (OS/400 の?) ポインタはなかなか。
そういえば Cray もなかなかだったと聞いたことがあるので調べてみる。
あるマシンに Linux 2.6.13 を install する。
最初 make O=... として別ディレクトリで build したら NVIDIA の driver がコンパイルできなかった。
どうも DSP は word addressing が多いらしい?
郵便局に不在届を出すことが役に立つケースもあるらしい
void * と char * が他のポインタよりも大きいマシンがあるという話を聞いたことがあるが、具体的にどのマシンがそうだという話は聞いたことがない。
ふと、もしそんなマシンがあったとすると、printf の %p がうまく動かないのではないかという疑問を思いついたが、しらべてみると仕様としては void * でないといけないのであった。
おぉ、<URL:http://tools.ietf.org/inventory/verif-tools> から <URL:http://cvs.m17n.org/~akr/abnf/> へリンクされている。
% google-count {身,実,味,美,見,未,三,観,御,巳,魅,己,視,看,診,深,壬,箕,み,ミ}も{蓋,二,ふた,フタ}も{無い,亡い,内,ナイ,ない} |sort -n ... 1 見もフタもナイ 1 三も二も無い 1 身も蓋も内 1 身も二もない 1 身も二も無い 1 未もふたも無い 1 未もフタもない 1 巳も蓋もない 2 みもふたもナイ 2 見もふたもナイ 2 実もフタもナイ 2 実も二も無い 2 味もふたもない 2 巳も蓋も無い 2 箕もふたもない 3 味もフタもない 3 未もふたもない 4 味も蓋も無い 5 身もふたもナイ 5 箕も蓋もない 7 箕も蓋も無い 8 観も蓋も無い 9 味も蓋もない 11 実も蓋もナイ 15 ミもふたも無い 15 見も蓋もナイ 22 みもフタも無い 23 美も蓋もない 27 観も蓋もない 31 ミも蓋も無い 34 みも蓋も無い 38 身もフタもナイ 51 ミもフタもナイ 56 見もフタも無い 61 ミも蓋もない 76 未も蓋も無い 132 未も蓋もない 140 身も蓋もナイ 222 見もフタもない 257 見もふたもない 275 みも蓋もない 287 見もふたも無い 347 身もフタも無い 372 実もフタもない 448 実もふたもない 480 ミもふたもない 485 見も蓋も無い 507 実もふたも無い 510 みもふたも無い 573 実もフタも無い 761 みもフタもない 865 実も蓋も無い 949 身もふたも無い 991 実も蓋もない 1040 見も蓋もない 1230 ミもフタも無い 10700 みもふたもない 11400 身もフタもない 17200 身も蓋も無い 17900 身もふたもない 27200 ミもフタもない 97700 身も蓋もない
昨日の夜から boron の chkbuild が動いていないので調べたら、chkbuild 自体が終っていなかった。
なんか、finalize_list が無限ループになっている。
(gdb) Run till exit from #0 rb_gc_mark_frame (frame=0x30) at gc.c:1249 garbage_collect () at gc.c:1316 1316 if (frame->tmp) { (gdb) Run till exit from #0 garbage_collect () at gc.c:1316 0x080717e5 in rb_newobj () at gc.c:393 393 } (gdb) Run till exit from #0 0x080717e5 in rb_newobj () at gc.c:393 ary_alloc (klass=1076875924) at array.c:107 107 OBJSETUP(ary, klass, T_ARRAY); Value returned is $19 = 1076875924 (gdb) Run till exit from #0 ary_alloc (klass=1076875924) at array.c:107 0x080d0484 in ary_new (klass=1076875924, len=1) at array.c:131 131 ary = ary_alloc(klass); Value returned is $20 = 1076875924 (gdb) Run till exit from #0 0x080d0484 in ary_new (klass=1076875924, len=1) at array.c:131 rb_ary_new2 (len=1076875924) at array.c:143 143 } Value returned is $21 = 1076875924 (gdb) Run till exit from #0 rb_ary_new2 (len=1076875924) at array.c:143 rb_ary_new3 (n=1) at array.c:176 176 for (i=0; i<n; i++) { Value returned is $22 = 1076875924 (gdb) Run till exit from #0 rb_ary_new3 (n=1) at array.c:176 0x08073368 in run_final (obj=1075674300) at gc.c:1785 1785 args[1] = rb_ary_new3(1, rb_obj_id(obj)); /* make obj into id */ Value returned is $23 = 1076875924 (gdb) Run till exit from #0 0x08073368 in run_final (obj=1075674300) at gc.c:1785 finalize_list (p=0x401d7cbc) at gc.c:1002 1002 if (!FL_TEST(p, FL_SINGLETON)) { /* not freeing page */ (gdb) l 997 RVALUE *p; 998 { 999 while (p) { 1000 RVALUE *tmp = p->as.free.next; 1001 run_final((VALUE)p); 1002 if (!FL_TEST(p, FL_SINGLETON)) { /* not freeing page */ 1003 p->as.free.flags = 0; 1004 p->as.free.next = freelist; 1005 freelist = p; 1006 } (gdb) n 1007 p = tmp; (gdb) 1000 RVALUE *tmp = p->as.free.next; (gdb) 1001 run_final((VALUE)p); (gdb) p p $24 = (RVALUE *) 0x401d7cbc (gdb) p p->as.free $25 = {flags = 2051, next = 0x401d7cbc} (gdb) p p->as.free.next $26 = (struct RVALUE *) 0x401d7cbc
サイクルになってるなぁ。
% ruby -v ruby 1.9.0 (2005-06-04) [i686-linux]
とりあえず Ruby が古いのはなんなので、新しくしてみた。
手元のお手製 rss2html で、各 item の dc:creator を表示するようにしてみる。
% google-count --quote PD{盤,板} 346 PD盤 343 PD板
ファイバをひくときには PD盤をつけていくが、撤去するときには外さない。
外させるには別に頼まなければならない。
% google-count {一,二,三,四,五,六,七,八,九}文字言葉 343000 一文字言葉 129000 二文字言葉 44600 三文字言葉 76700 四文字言葉 13200 五文字言葉 1250 六文字言葉 527 七文字言葉 870 八文字言葉 427 九文字言葉
% google-count ててて てててて ててててて あわててて あいててて いてててて 63500 ててて 36200 てててて 10500 ててててて 690 あわててて 1230 あいててて 18000 いてててて
austin-group-l で Ruby をネタにして sizeof(FILE) の話が出ているのでちょっとメールを書いてみる。
<URL:http://www.rubyist.net/~akr/chkbuild/netbsd-2.0.1/ruby-trunk/log/20050922T140801.txt.gz> の、test_scanf.rb の失敗を調べてみる。
おや、ruby_strtod に同じ引数を与えているのに返って来る値が違う?
FPU のモードが Process.spawn のあたりで Double Precision (53-bits) から Extended Precision (64-bits) に変化している?
うぅむ。根拠はないが xen のせいな気がする。
% google-count 人並みに奢れや ひとなみに{おご,ぐぐ}れや 273 人並みに奢れや 411 ひとなみにおごれや 0 ひとなみにぐぐれや
cvs-1.12.12 が __fpending を使っていることに気がつく。
これは (ドキュメント通り) 出力バッファの検査に使っているようだ。
[latest]