Not only is the Internet dead, it's starting to smell really bad.:2008年07月下旬

2008/07/20(Sun)

今日

お盆明けて、ねこ3回目の月命日。

胃の不調が悪くて胃痛、ここ数ヶ月吐き気で目が覚める事が多いが
今日はわりとすっきり目が覚めた。

ぴまわりの切花はすぐに傷むね、今日も花屋いってくっか。

pkgsrc/x11/openmotif sonameがlibXm.so.3 -> libXm.so.0に退行しとる。
ガブルガブル、誰かUbikもってきてー。

vi vs nvi とかtech-userlevelではじまっとる。
某所ではイーダ・シッペ=ガヤレ(1623~1701)の法則で
regex問題ワシにアサインされとるので信玄餅噴いた(想定通りです)。

current-usersでASLR有効にしよーぜネタ。

and in the typical NetBSD style we did not document/advertise it

ワロス。

2008/07/21(Mon)

今日

たいへんたい!シ毎日の振替休日つーこと忘れてた!
午後から会議の予定を入れてたよ、きづけー俺もお客さんも。

花屋、桔梗+ミニバラ。

misc/39121、uwe氏の

pdp11 with a soviet "clone" of 2.9BSD

冷戦時代の~真ん中は~ '80マジパネェっす、ロッキー4とか洗脳ですから。
PDP-11の cloneとかはわりと有名だけど、2.9BSD cloneって DEMOSのことだろーか。

東側(死語)版 unix historyとか bsd-family-treeほしい。

文字符号の歴史、 アジア編欧米と日本編ときたら、お そ ロ シ ア 編マダー?といわざるを得ない。
ちゅうかまじでもう続き出ないのかね?

tech-userlevel、nvi-1.79に比べてnvi-1.81.6は大きいゆーなら Traditional viにするのが一番(以下略

しかしstrip(1)して304k vs 408kって我慢できんかぁ?
この増分はbuiltinのwide-character regexを捨てて
libcのmultibyte regex使えばすぐダイエットできそうだが。

まぁそうすると検索の度にいちいちwchar_t -> multibyteに戻す
オーバーヘッドがアレなのと、 NetBSDはそもそもmultibyte regex
実装してないので、どっちみちbuiltinしてもらわざるをえない。

2008/07/22(Tue)

今日

2chでは コレジャナiPhoneと命名されてて、ネスカフェ香味焙煎噴いた。

うーにゅSONY α、 キャッシュバックキャンペーンやってんのな。
某量販店の13%ポイント+下取マイナス7000円も併用するとα350ボディが5万切る鴨。
やぱしあのチルト可能な液晶ライブヴューはウエストレベルで使えるし買ってもいいかなぁ。

とかいいながらこの連休で銀塩ボディ2台とデジじゃ使えないレンズ3本増えてるStop me, oh, stop me ~
まぁ合計してもコンパクトデジ1台分にもならん金額ですが。

lib/39175うーん頭痛い、__cputwchar + __cursesi_putnspが悪さしてんのか。

2008/07/23(Wed)

debugging wcurses (reprise) その1

install/39193でumlautが表示されない件が再発したようなので
すわlibcursesのせいかとオモタら転記元のport-sparc/39177読むと
単にlibhackをリンクしてないちゅことげ、ちゃんと全文転記しよーよ。

ちゅーわけでlib/39175の続き。

  plod: cnt=7, in_refresh=1
  plod: returns 6
  plod: cnt=0, in_refresh=1
- __cputwchar: 0x20
- plod: (1,8)WCOL(1), putwchar(20)
+ __cputchar: ^[
+ __cputchar: [
+ __cputchar: C
  plod: returns 0
  makech: 1: wx = 9, ly= 1, lx = 8, newy = 1, newx = 9
  makech: have attr 00020000, need attr 00020000

うーむスペースの場合、refreshの部分でも単純にmove rightするじゃ駄目らしい。

			if (curscr->lines[outline]->line[outcol].attr
				    == curscr->wattr) {

の条件にマッチせずにgoto nondesしてるちゅーことか。

        nondes: if (__tc_nd)
                                tputs(__tc_nd, 0, plodput);
                        else
                                plodput(' ');

よく判らんのでwcwidth == 1の場合はこれまで通りの動作をするような
これはひどいパッチを書いたので後でcommitするする。
ちゅうかwcwidth > 1の場合でもmove rightでは駄目なのかもしれんが
とりあえずXXXちゅーことでいいや。

putwc(3)のラッパでしかない__cputwchar()呼んだだけでカーソル位置の計算が腐るふしぎ。
たぶんどっかで1で決めうちなのだろう、そのうちちゃんとcr_puts.c読む。

そいとcurses_private.hで勝手にMB_LEN_MAXを再定義(=8)してるんだが大丈夫かこれ。

2008/07/24(Thu)

今日

タダゴトジャナイ柳田、マッハとか2時間18分の頃は
今トレンディ(笑)な失敗学(笑)本なぞ足元にも及ばない
綿密な取材の良書だったんだけどな、昭和も遠くなったなぁ。

絶対帰還。ソユーズの表紙で買ってまった。

光文社で突然思い出したのだが、ワールドフォトプレス編集のゲームブック
オルフェウス作戦シャングリラ作戦が猛烈に読みたくなってきた。
あれはかなり考証凝ってたなー、ゲーテル教会とかサイバーパンクっすよ。
つかメカニックマガジンのバックナンバー読みてぇ、とっておけばよかった。

tech-userlevelの"vi vs nvi"(つかどっちもnviだから1.79 vs 1.81.6だな)賛否両論ですな。
そろそろ/usr/bin/emacsとかacmeいうネタを投下すべき時間帯(やめなさい

サイズだけならTraditional viお勧め。
なんてったってcloneじゃなしに美留上位のoriginal viだし。

ただし

とかまぁいろいろあるな。

2008/07/25(Fri)

昨日

現場の人たちとオサレ系中華料理屋。
お一人様\4500は全て凝った内装の償却に回るようで
出てきた料理は人生の中でワースト3に入るレベルの不味さ。

[NetBSD] i18n fold(1)

new developerのahoka氏からuserlandもがしがしi18nするぜーとメールもらた。
まずfold(1)を 書き直してたぜぃ! レビューおながいちゅーことなんだが
これwcwidth > 1の場合の動作が壊れまくりんぐ。

んなわけで他実装の挙動から。
coreutil-6.9-17.fc8のfold(1)はいまどき珍しいことにi18n化されとらんのな。
fold --cjkwidthとかアレなものが生えてないかwktkした俺の期待を返せwww

Solaris 8での動作。

$ cat test.txt
ハヒフヘホ
$ fold -w 2 < test.txt
ハ
ヒ
フ
ヘ
ホ
$ fold -w 3 < test.txt
ハ
ヒ
フ
ヘ
ホ
$ fold -w 4 < test.txt
ハヒ
フヘ
ホ
$ fold -w 5 < test.txt
ハヒ
フヘ
ホ

一方、ahoka氏のfold(1)。

$ cat test.txt
ハヒフヘホ
$ fold -w 2 < test.txt




ホ
$ fold -w 3 < test.txt
ハ
フ
ホ
$ fold -w 4 < test.txt
ハ
フ
ホ
$ fold -w 5 < test.txt
ハヒ
ヘホ

この出力結果見て

カップスタ~食べたその日か~ら~

と歌いだす香具師はオッサン。

軽くソース流し読み。
getchar(3) -> getwchar(3)への書換しとるが、これじゃ-bオプションだめぢゃん。
getchar(3)しつつmbrtowc(3)使わないと何バイト読んだか計算できないってば。
いきなりオワタ\(^o^)/ ぜんぶかきなおしです*1

そいとfwrite(3)代わりにwprintf(3)使うのはダメ。
理由はformat stringのparseコストで無駄に性能が落ちるのが一点。
それとwprintf(L"%.*ls")ちゅーのはL'\0'まで出力してるわけで
multibyte stateは必ず初期化されてしまう、つまりstateful encodingの場合
initial stateに戻す為のescape sequenceが冗長に出力されてしまうのよね。
まぁwprintf(L"%.*ls\n")のように改行を含んでる部分はすでに
initial stateに戻ってるので問題ないといえなくもないけど
ここはやっぱりパラノイアでいこうぜ。

あとどーでもいいけどfold-m10nって、i18nかm17nの間違いだよな。
まぁcoreでもi17nとかtypoすることあるのでこれはまぁしゃあねぇか。
つか既にjoerg氏が 指摘済み*2だったにゃ。

*1:OpenSolarisのfold.cもひどいね、getwc(=getwchar)しつつ-bオプションの場合は
wctomb(3)でmultibyteに戻してからbyte-size計算しちょる、これstateful encodingだめっす。

*2:what does m10n stand for, 実はかつてDEC社内ではmusterbationの略として(ここはuncyclopediaじゃありません

i18n fold(1) その2

fold(width)の中の

        while ((ch = getwchar()) != WEOF) {
            ...
        }

        size_t bytes, n, len, width;
        mbstate_t st;
        char buf[BUFSIZ], *s;
        wchar_t wc;

        bytes = 0;
        mbrtowc(NULL, NULL, 0, &st);
        while ((n = fread(&buf[0], 1, BUFSIZ, stdin)) > 0) {
                for (s = &buf[0]; n > 0; s += len, n -= len, bytes = 0) {
                        len = mbrtowc(&wc, s, n, &st);
                        if (len == (size_t)-2) {
                                bytes += n;
                                break;
                        } else if (len == (size_t)-1) {
                                abort();
                        } if (wc == L'\0') {
                                while (s[len++] != '\0');
                        }
                        bytes += len;
                        width = wcwidth(wc);
                        ...
                }
        }

ややこしいけど、こんな感じでぐるぐるする必要があるやね。

[NetBSD] i18n fold(1) その3

よく考えたら-bで80byteで折り返しするとゆーのは
input側を80byte数えるのではなくoutput側なのだよな。
ちゅうわけで入力に冗長なescape sequenceが合った場合
そいつはカウントしなくておkなはずだ、うぉぉぉ勘違い。

つまりSolarisのやり方でおk、ahoka氏のfold(1)の場合new_column_withd()で

    char dummy[MB_LEN_MAX];
    size_t n;

    if (!count_bytes) {
        ....
    } else {
        n = wctomb(&dummy[0], wc);
        _DIAGASSERT(n != (size_t)-1);
       col += n;
    }

ってな感じでいけるはず。
まぁでもstateful encodingの場合はL'\n'の直前の
escape sequenceの長さをカウントしなけりゃならんし
もうちょいゴニョゴニョせんとだめだけど。

2008/07/27(Sun)

よようび!よようび!

先日ポチったMC ROKKOR-PF 1:2.5 f=100mmの試写がてら、ぶらぶら。
薬科大の裏に住むネコどもにポーズ強要して36枚撮り1本消化。

春日神社で祭やってた、射的とかなつかちー。

ι(´Д`υ)夏バテ気味だったので薬代わりにお高い牛肉(まぁ半額シールだけどなw)
食ったのだけどタレの選択に失敗し痛恨のキワーミ。

[NetBSD] piixpcib(4)

kern/38623直ってるな、動けばおkなpatchでsend-prしたのだけど
ちゃんと この通りHAS-Aに書き直されてた、まぁ当然か。

2008/07/28(Mon)

にちようび!

時々emacs(PKG_OPTION.emacs=motif)が固まるのはxsrc/39209のせいと、めもめも。

install/39193 うーんlibhackリンクしてるのにwcwidth(0xE4)が0を返すんか。
ありえなーい、ちょっと調べる。

関係無いけどiswctype_sb.cのwcwidth()ちとひどいな。
常に1を返しよるのだけどこれcursesとか困ると思われ。
ちゅうかまだCITRUS=NOでbuildって通るのだろか。

[NetBSD] tech-repositoryとか

Mercurialは2年ほど前に小一時間くらい弄ってすぐ捨てたな。

ここで書いたように、NetBSDのように巨大なソースツリーを扱うには不向きだとゆーのが個人的な感想。
ツマミ喰いとか部分アップデートとかよくやるしなぁ、俺。

じゃレイアウト変更して細かく機能ごとに分割し、それぞれ別repositoryにすれば
とかいう人がいるかもしれないけど、repositoryを分割した時点で
MercurialのメリットとされるcommitのAtomicityは保証されない罠。
じ ゃ ぁ C V S で い い ぢ ゃ ん
という結論でてしまい以後弄る気ゼロという、最近はなんか変わったんだろか。

まぁCVSやSubversionでlocalにrepository切ってimportして
vendor branche管理するのめんどくさい=push/pull便利~ちゅうのは判らんでもないけど。

[NetBSD] i18n fold(1)

foldでググったら真っ先にScottish Foldがヒットし、ぬこ例外で落ちた。

結局

149                 if (col > width + 1) {
                                    ^^^

177                                 wprintf(L"%.*ls\n", indx - 1, buf);
                                                             ^^^

あたりが原因で折り返しが変になっとる。

それと

156                                         if (iswblank(buf[i]) &&
157                                             buf[i + 1] != L'\b' &&
158                                             buf[i + 1] != L'\r') {

i + 1ってこれout of index boundsだな。
'\b' or '\r'かのチェックはその前のnew_column_position()ですんどるから不要なはず。
でなきゃ今のfold(1)自体の実装がバグっとる、あとiswblank(buf[i])はL'\t'も含むのでダメ。

更にこいつ

186                         /* Increase buffer by 2048 to fit */
187                         if ((nbuf = realloc (buf, buf_max + 2048)) == NULL) {

sizeof(wchar_t)を忘れとるがな、まぁ無くてもいいけどrealloc呼ばれる頻度が増える罠。
ただこれなんかLINE_MAXで制限喰らうっけ?仕様よく読んでない。

ちゅうわけで書き直してみる、stateful encodingを無視すれば こんな感じかね。
stateful encodingの場合だと

168                                 wmemmove (buf, buf+last_space, indx-last_space);
169
170                                 indx -= last_space;
171                                 col = 0;
172                                 for (i = 0; i < indx; i++) {
173                                         col = new_column_position (col, buf[i]);
174                                 }

wmemmoveしてnew_column_position()をやり直す際に、mbstate_tを巻き戻さんとならんので
もうちょいゴニョゴニョしなければならん、ちゅーか元々のfoldの実装がイマイチ。

[NetBSD] systinst + umlaut

install/39193
char -> wchar_tのキャストでunsigned charにキャストするか & 0xFFしてな
といういつものパターンとみた、ありがち。
src/distrib/util/libhack/multibyte.cが犯人っぽいのだが、libhackをlinkしなくても発生?
これはそもそもsysinstがsetlocale(3)呼んでない罠。

2008/07/29(Tue)

げつようび!

百過日。

夕焼けきれい!

花屋でバラ。

stateful encodingを考慮したfold -b -w の実装ってけっこうめんどくさい。
例えばISO-2022-JPの場合、JIS X0208(ESC$B)の文字中で現在のバイト数がwidthを超える場合
そこで改行するにはISO646-USへ復帰する為にESC(Bちゅーescape sequenceを
吐かないとならんのだけど、たうぜんこの分も現在のバイト数に含まれるのよね。
なもんで常にmbstate_tをsaveしつつwcrtomb(L'\n')してこの分を計算しないとならんわけで。
なぜこんなまんどくさい処理が必要か、C初心者だと思われるahoka氏に英誤で説明する自信ないっす。

昨日のstateless encodingでしか動かない差分だけ渡して、レビュー完ちゅうことでcommitしてもらって
時間のある時にワシが全面的に書き直すとかかな。
そもそもLANG=ja_JP.ISO-2022-JPで生活(以下略

2008/07/30(Wed)

かかようび!

MC ROKKOR 1:1.7 f=85mm ポチった、ポトレの銘名玉扱いなので
結構しんどい値段(ってもSONY Planar T* 85mm F1.4 ZAの1/10www)
だったのだけど悲しいことに絞りに油が回って粘ってしまっとる。
まぁレンズがキレイなので我慢するとしよう、そのうち清掃出すか。

せっかくのポトレンズだけど、いつものモデルさんはLeft Bank(左岸)でおねんね中。
街撮りだと85mmの射程距離まで、ぬこーに近づかせてもらえない俺、あんまり出番無いかも。

しかしここ最近の帝国データバンクの倒産情報はマンション絡みの事案ばっかやね。
建設・住宅業界板的にエリア88を語るスレがあったなら
「あははっは...みんな逝ってしまった...」ってやつですか。

の上のグロマンションとか、タワー型マンション@工場跡地が
うごのたけのっこのっこのこさかなのこー状態、でも売れてないとか
止まるとしーぬーのーじゃーなのに改正建築基準法(以下略)ちゅーところか。

2008/07/31(Thu)

今日

もう7月おわり!

BBM時代のGary Mooreって、なんちゅーか 再結成DoorsのIan Astburyちゅうか
Coverdale/PageのDavid Coverdale並みのコレジャナイ感が漂ってくるよな。
あ、Queen + Paul Rodgers(以下略

なんで突然BBMかちゅーと Cream再再結成なんてヨタ話読んだので。
もうやめて!懐洋楽ヲタの財布は空よ!

Jimmy Pageといえば またかよ、ついこないだ(2002くらい?)リマスタ+紙ジャケ買わせてこりゃないわ。
SHM-CD化(最後に=ハッタリで=まきあげますの略?)とか、アボガド。