The Man Who Fell From The Wrong Side Of The Sky:2007年3月分

2007/3/1(Thu)

Citrus iconv

Unicode5.0のUnihan.txtを元にSIP(Supplementary Ideographic Plane)=2面のサポートを改善してみた。
/distfiles/citrus/NetBSD/patch-sip.gz

Shift_JIS-2004はcitrus_mskanji.cに修正要で、 以前書いたpatchを元に作業中。
ISO-2022-JP-3-strict/compatibleについては当時の問題は解決してるけど保留。
M:N変換はそのうちiconv module書く、今回は保留。
あ、あとFreeBSDからzh_HK.Big5-HKSCSロケールをもらってくること。

ついに/usr/share/i18n以下が10MB超えた。圧縮したいけどlibcにgzipつーのもねぇ。
一応このSIP対応patchではmapper.dirに

UCS:SIP/UCS mapper_zone 0x0000-0xFFFF:+0x020000
UCS/UCS:SIP mapper_zone 0x020000-0x02FFFF:-0x020000

という仕掛けを用意し、DST_UNIT_BITSを32でなく16で扱うことで
iconvdataのサイズを小さくする工夫もしてはいるんだけどね。

テストして週末にはcommitするべ。

これでGNU libiconv-1.10がサポートしてCitrus iconvがサポートしないCESは残りこんだけ。

CP1046
CP1124
CP1125
CP1129
CP1161
CP1162
CP1163
CP922
DEC-HANYU
DEC-KANJI
MACARABIC
MACHEBREW
RISCOS-LATIN1
SHIFT_JISX0213

2007/3/2(Fri)

Thinkpad

中古でs30のマザボ入手、前回新品を入手した時より高くついたのが orz
まあどーせまたもって半年だろうし新マシン購入考えるか。

DEC-HANYU

ってとこか、encoding moduleが必要ですな。

ban the use and implementation of UTF-7

ietf-charsetのMLアーカイブ復活してるので読んでたらこんなお話。
http://mail.apps.ietf.org/ietf/charsets/msg01744.html
日本だったらサ(中略)言うなとモ(以下略

POSIX locale的にはlocaledef(1)のcharmapでUTF-7を扱うことはまず不可能
(まあrepertoiremapを使って逃げることはできるけど)なんで厄介な子ではある。

2007/3/6(Tue)

Citrus iconv

SIPネタとRFC3629ネタまでcommitしました。
UTF-8については5-6byte文字(0x110000-0x7FFFFFFF)を禁止して
MB_CUR_MAX 4にすると互換性の問題がありそうなのでそこだけ対応せず。

2007/3/14(Wed)

Unicode

あちこちでネタになってる シフトJISを捨てられるか?

s/UTF-8/グローバルスタンダードな成果主義/g;s/シフトJIS/日本型年功序列主義/g

とか改変コピペが作れそうだなとしか思わなかったこのなんという2ch脳… ^o^

Shift_JIS-2004、UTF-8をCSIは見下さない、すべて――― 平等に価値が無い!

とかハートマン軍曹ネタもひとつよろしく。

Only ``two'' remote holes

http://www.openbsd.org/cgi-bin/cvsweb/www/index.html.diff?r1=1.548&r2=1.549
「あぁ、remote holeのお出ましだ」の鳥肌実コピペを思い出して吹いた。

2007/3/17(Sat)

current-users

一昨日くらいにlibcのMakefileをmatt氏がいじった時になんとなく嫌な予感がしてたんだけど
やぱりiconv(3)とかsetlocale(3)を壊してたな、暫定対処法だけ周知して今日は寝るw

CSHLIBFLAGSだとダメな理由ってlibc_pic.a関係かな。
-D_I18N_DYNAMICでbuildするとdlopen(3)呼び出すから
libc_pic.aを使うld.elf_soあたりで困ったことになるんだろうかとか適当に予想してみる。

ええい、commit logじゃ意図が判らん、明日matt氏にメールするかなぁ。
でもlibc.soもlibc_pic.soも同じ*.soの拡張子でbuildされた
PIC(Position Independent Code)なobjectだから
libc_pic.aを使わずにld.elf_soを作るというすぐには出来ない解決手段しか考え付かんぞ。
やべ、逃げてぇwwwww

2007/3/18(Sun)

current-users

今朝、ワタクシ眼を覚ましますと 枕元に夏蜜柑が四つ
tsutsuiさんからCPICFLAGSでいいんじゃ?とのsuggestが、ありがとうございます。
冷静に考えるとld.elf_soに影響があるはずもなさげなのでそのまんまcommit.

昔joerg氏はDragonFlyで__PIC__マクロをそのまま使ってたな。
http://www.dragonflybsd.org/cvsweb/src/lib/libc/citrus/citrus_module.h.diff?r1=1.1&r2=1.2
つかこの変更をNetBSDにもいれよーぜって話がtech-userlevelでさっくり蹴られたんだけど
(皆dynamic root論争でうんざりしてて、staticに過剰反応してる奇ガス)
/usr/lib/i18n/lib${ENCODING}.aの存在意義を考えると入れてもいいんじゃないかね。
コソーリcommitしちゃおうかな。

うは俺の送ったメール、時計1日ズレてる。かっちょ悪い。

libstdc++.so.6

なんか後方互換性壊れてね? 去年の8月くらいにbuildしたpkgsrc/mail/spamprobeなんだけど

$ cat /var/db/pkg/spamprobe-1.4.2/+BUILD_INFO
[所々略]
BUILD_DATE=2006-08-21 16:31:55 +0900
CC_VERSION=gcc-4.1.2
CFLAGS=-O2 -I/usr/pkg/include
CPPFLAGS=  -I/usr/pkg/include
FFLAGS=-O
LDFLAGS= -L/usr/pkg/lib -Wl,-R/usr/pkg/lib
MACHINE_ARCH=i386
OBJECT_FMT=ELF
OPSYS=NetBSD
OS_VERSION=4.99.1
REQUIRES=/usr/lib/libc.so.12
REQUIRES=/usr/lib/libgcc_s.so.1
REQUIRES=/usr/lib/libm.so.0
REQUIRES=/usr/lib/libm387.so.0
REQUIRES=/usr/lib/libstdc++.so.6
REQUIRES=/usr/pkg/lib/libungif.so.4

動かすとこんな感じ。

$ gdb spamprobe                                                                
GNU gdb 6.5
[中略]

(gdb) run spam Mail/spam/*
Starting program: /usr/pkg/bin/spamprobe spam Mail/spam/*
(no debugging symbols found)
[中略]

Program received signal SIGSEGV, Segmentation fault.
0x080904e4 in std::operator+<char, std::char_traits<char>, std::allocator<char>> ()

spamprobe作り直したら問題無し。
そのうち調べる。

NetBSD CVS digest

ちょww初めて載った なぜKZ-1048だけwww 掲載基準が判らんw 今週そんなにcommit少なかったっけ?

2007/3/19(Mon)

current-users

今朝、ワタクシ眼を覚ましますと 夏蜜柑が四つ
CPICFLAGSに変更したら今度はamd64とsparc64でbuild errorらすい。
ってももう会社いくから夜まで放置するしかあらへんわ。

続current_users

やっと意味がわかったような。
bsd.lib.mkの中でCSHLIBFLAGSを見てMKSHLIBOBJSをセットしてんだ。

168 .if defined(CSHLIBFLAGS) && !empty(CSHLIBFLAGS)
169 MKSHLIBOBJS= yes
170 .else
171 MKSHLIBOBJS= no
172 .endif

もう-D_I18N_DYNAMICは消しちゃって

#if defined(__GNUC__) && (defined(__PIC__) || defined(__pic__)
...
#else
...
#endif

でifdefしちゃえばいいような気がしてきた。
ちらっと見た限り、openpamも__PIC__マクロみてるもより。

ウェッブ2.0

少しは時代に追い付こうとRSS吐くようにTDSをちょこっといじったんだけど
xreaは自動挿入広告があるのでダメじゃないか、つーわけでとりあえず封印。
長いこと無料で使ってきたけど金払って広告外そうかな。

2007/3/22(Thu)

[文字コード] Shift_JIS? UTF-8?

ソレナンテ=エ=ロゲ(AA略)レヴィ=ストロースの「 野生の思考」より

つー釣り餌を考えたが、ホンモノの哲学者に小一時間問い詰められそうなので止めておく。

2007/3/27(Tue)

[文字コード] DEC漢字コード

基本はEUC、ただし空き領域(2byte目が0x21〜0x7Eの範囲)を使って拡張している。
なもんで94n/96n文字集合はn=2でないとダメ。

んでDECといえば思い出すのは I18N本なんだけど、いちまんえんが惜しい向きには
Tru64 UNIX 国際化ソフトウェア・プログラミング・ガイドをお勧めしておく、でも買え。

2007/3/29(Thu)

[NetBSD] LC_TIME

サブマリンsend-pr急速浮上。 とりあえず海原雄山AAを貼っておこう。

    _ □□    _      ___、、、 
  //_   [][]//   ,,-―''':::::::::::::::ヽヾヽ':::::/、   
//  \\  //  /::::::::::::::::::::::::::::::i l | l i:::::::ミ   
 ̄      ̄   ̄/ /:::::::::,,,-‐,/i/`''' ̄ ̄ ̄ `i::;|   
―`―--^--、__   /:::::::::=ソ   / ヽ、 /   ,,|/   これcommitしたの
/f ),fヽ,-、     ノ  | 三 i <ニ`-, ノ /、-ニニ' 」')  誰だあっ!! 
  i'/ /^~i f-iノ   |三 彡 t ̄ 。` ソ パ゛'、 ̄。,フ | )         
,,,     l'ノ j    ノ::i⌒ヽ;;|   ̄ ̄ / _ヽ、 ̄  ゛i ) 
  ` '' -  /    ノ::| ヽミ   `_,(_  i\_  `i ヽ、 ∧ ∧ ∧ ∧ 
     ///  |:::| ( ミ   / __ニ'__`i |  Y  Y Y Y Y 
   ,-"        ,|:::ヽ  ミ   /-───―-`l  |  //     |     
   |  //    l::::::::l\    ||||||||||||||||||||||/  |     // |    
  /     ____.|:::::::|    、  `ー-―――┴ /    __,,..-'|  
 /゛ー、,-―'''XXXX `''l::,/|    ー- 、__ ̄_,,-"、_,-''XXXXX | 
/XX/ XXXXXXXXXX| |         _,  /ノXXXXXXXXXX|

これFreeBSD由来のplain textをlocale databaseにする実装なのよね。
こんな実装でいいならminoura-xpg4dlブランチに同じFreeBSD由来のものがあった訳だし
とっくにmergeされててもおかしくない。
というかせめてmmap(2)使(以下略

tech-userlevelあたりにobjection投げてもいいんだけど、こっちも根拠が弱いんだよね。
一番もっともらしい反対理由としてはlocaledef(1)でcopy directiveの実装に困るってやつ。
↓の話ね。
http://www.haun.org/ml/b-l-j/a/700/739.html
http://www.haun.org/ml/b-l-j/a/700/741.html

とはいっても

とでも反論されると弱い。

それとLC_TIMEも広義のメッセージカタログなんだから
C99のinttypes.hで定義されるPRI[dioux](LEAST|FAST)?(8|16|32|64)のようなフォーマット文字(MD部)が
メッセージ文言中に現れる場合、MIで扱わないと/usr/share/locale/*/LC_TIMEとして置けなくなるからマズイ、
とかいっても

とでも反論されると、これまた弱い。

さらにMAGICもバージョン情報もないファイルじゃ後々後方互換で困るかもといっても


とでも反論されると、さらにこれまた弱い。

さてどうすんべ。

[NetBSD] localedef(1)

んでちょっと前からISO/IEC TR14652ベースで実装しだして(yamtさんの実装とは全く別)
charmap fileのparseくらいまでは終わってたり。
書きかけのあんまりまだ人に見てもらいたくない状態の ソース

ちなみにuniversalなcharmapを目指すと私の手に余るので
今のmklocale(3)の作るLC_CTYPEとのフォーマットは変えないつもりで
localedef(1)からencoding moduleをdlopen(3)してruneに変換する手抜き工事の予定だったり。

ISO/IEC TR14652ベースで実装するメリットは

など、SUSv3では曖昧だった部分まで仕様が決まってるところ。
まあそれを補って余りあるデメリット(以下略

しかしISO2022周りで 不可解な点がいくつかあってどうしようか悩んでたところだったりする。

2007/3/30(Fri)

[NetBSD] vfprintf(3) positional order


src/doc/ROADMAPが更新されて、christos氏が5.0に向けて作業中とのアナウンス。

私が書いてる実装の最新版は↓
/distfiles/citrus/NetBSD/vfprintf-20070330.tar.bz2
絶賛放置中なので詳しいこと忘れたけど、一応glibc2に付属するテストケースは
gdtoaに由来するlong double精度問題以外はpassしてたと思った。

[TODO]

なんかどれもモチベーションの問題でちっとも進まないのでchristos氏に任せよう。

続ウエッブ2.0

広告外してRSSを有効にしてみた。

[NetBSD] LC_TIME

copy directiveの実装には最悪gettext(3)にならってiconv(3)呼ぶ方法もあるか。
あんまり気は進まんけど。

2007/3/31(Sat)

[NetBSD] 続 vfprintf(3) positional order

作業中つーか、もう2月にvfprintf(3)とvfwprintf(3)を統合して
positional order使えるようになってたのか。

ちなみにvfprintf(3)でformat文字列のparseにmbrtowc(3)を使わないので
ja_JP.ISO2022-JPなんかの7bit stateful encodingでちょっと困るな。