The Man Who Fell From The Wrong Side Of The Sky:2009年2月分

[最新版] [一覧] << == >>

2009/2/1(Sun)

今日

さみーっす。

バブル期には丸井で吊るしのスーツ( イタ服な)が20〜30万とかザラってじっちゃとばっちゃがいってた。

VMware + NetBSD HEADってXを終了するときやたらと刺さるな。
最近は刺さってもjornalingがあるから再起動すりゃいいやとか深追いせず以下略

opensslの0.9.8iと0.9.8jの区別がつかずしばらく悩んだ、フォント変えよう…

pkgsrc/wip/scimの動作確認をOpenBSDでやろうと思ったものの、gccが3.3.5でぐんにょりしたので
FreeBSDをインスコして環境構築ちゅ、8-CURRENT。
まぁbootstrap-pkgsrc使ってるのでDebian/kFreeBSDならぬNetBSD/kFreeBSD状態だけどね。

gccは4.2.1か。

$ gcc -v           
Using built-in specs.
Target: i386-undermydesk-freebsd
Configured with: FreeBSD/i386 system compiler
Thread model: posix
gcc version 4.2.1 20070719  [FreeBSD]

undermydeskって何よと思ってググったけど、 どこで笑えばいいのかよーわからん。
誰かLC_JOKEを実装してくれ。

pkgsrc/lang/perlのpatches/patch-coが8-CURRENTを想定してないのと
pkgsrc/x11/xf86-video-radeonhdで、rhd_helper.cがdefine SEGV_ON_ASSERT 1の場合kill(2)呼ぶのに
sys/types.hとsignal.hをincludeしてるのだけど、これがxf86_ansic.hとconflictしてbuildがコケる。
pkgsrc/devel/nbitoolでFreeBSD.cfのExtraLibariesに-lxpg4(テラナツカシス)があるけど8-CURRENTには以下略。
pkgsrc/inputmethods/canna-libが変、まずpost-configureのsymlinkでコケる、${WRKSRC}/includeがmkdirされてない。
次にnbitoolのxmkmfが走ってないようで、cannot open Makefileとなる、これはX11_TYPE=modularのせい?
あとMakefileの${OPSYS} == "DragonFlyBSD"と同様の処理も以下略。
ちゅーことでscim-cannaやめてscim-anthyでテスト。

結論としてはFreeBSDでも同じように落ちた、char_traitsだけでなくallocatorも書かんといかんのかな。

Program received signal SIGABRT, Aborted.
[Switching to Thread 28c01140 (LWP 100111)]
0x28895af7 in kill () from /lib/libc.so.7
(gdb) bt
#0  0x28895af7 in kill () from /lib/libc.so.7
#1  0x28895a56 in raise () from /lib/libc.so.7
#2  0x2889467a in abort () from /lib/libc.so.7
#3  0x2887a9a6 in __assert () from /lib/libc.so.7
#4  0x2881cca5 in malloc_usable_size () from /lib/libc.so.7
#5  0x2881d227 in free () from /lib/libc.so.7
#6  0x29108ec1 in operator delete () from /usr/lib/libstdc++.so.6
#7  0x28f8998d in std::basic_string<unsigned int, std::char_traits<unsigned int>
, std::allocator<unsigned int> >::_Rep::_M_destroy ()
   from /usr/pkg/lib/libscim-1.0.so.10
#8  0x28fbd5c0 in std::basic_string<unsigned int, std::char_traits<unsigned int>
, std::allocator<unsigned int> >::assign () from /usr/pkg/lib/libscim-1.0.so.10
#9  0x28fe465f in scim::TransactionReader::get_data ()
   from /usr/pkg/lib/libscim-1.0.so.10

そもそもucs4_t自体気に入らんのでCSIに書き直してぇ。
まぁそれかC++0xの実装が出揃うまで放置して、char32_tって手もあるのか(ぉ


2009/2/2(Mon)

[NetBSD] pkgsrc/wip/scim

最適化がらみなのか、-O2とっぱらったらgtk2相手でも落ちなくなったにゃ。
しかしC++でgdbは非力過ぎて氏ねる。

NetBSDの方でも最適化とっぱらって動かしてみたら、違うとこで落ちた。
これはwchar_t = ucs4_tの場合でも発生するのでchar_traitsとは無関係っぽ。

0xbaa7fdb0 in ?? ()
(gdb) bt
#0  0xbaa7fdb0 in ?? ()
#1  0xbacdf8d1 in gtk_im_context_scim_shutdown () at gtkimcontextscim.cpp:456
#2  0xbacf22fe in ~FinalizeHandler (this=0xbacffb28)
    at gtkimcontextscim.cpp:322
#3  0xbacdfa20 in __tcf_10 () at gtkimcontextscim.cpp:326
#4  0xbb3c59c6 in __cxa_finalize () from /usr/lib/libc.so.12
#5  0xbacddbd4 in __do_global_dtors_aux ()
   from /usr/pkg/lib/gtk-2.0/immodules/im-scim.so
#6  0xbacf6d08 in _fini () from /usr/pkg/lib/gtk-2.0/immodules/im-scim.so
#7  0xbbbf5e47 in _rtld_call_fini_functions () from /usr/libexec/ld.elf_so
#8  0xbb70b200 in ?? ()

もういややー、今の気分 こんなかんじ

他にもGTK2アプリ終了時に

/usr/lib/i18n/libGBK2K.so.5.0: Trying to call undefined weak symbol `__deregister_frame_info'

ちゅーメッセージが出る時があるんだな。

現在のlocaleはzh_CN.GB18030ではないので、このencoding moduleはloadされてないはずなんだが。
多分 lib/39986と同件っぽい、なんかld.elf_soに虫さんがいるような気がする。
こないだDF_1_INITFIRST関連で.ini/.finiセクションの実行順いじったのがなんか悪さしてるのかも。

それとchar_traits<ucs4_t>がscim_chartraits.cppにあるっちゅーのは変なので
scim_types.hにごっそり移してみた、 patch
つかscim_chartraits.hとして、scim_types.hがincludeする方がいいのかも。


2009/2/3(Tue)

[NetBSD] pkgsrc/wip/scim

finalizeで死ぬのはFreeBSDでも同じだった、そもそもfinalizeでscimは何やってるんだ?

結局Trying to call undefined weak symbol `__deregister_frame_info'問題とか
今のNetBSD HEADのgccとlibgcc_sがさっぱり信用ならんので
pkgsrc/wip/gcc43をインスコしてscimをbuildしたら完全に問題は解消した、やっぱおまいか。
ということでNetBSDのgcc41とFreeBSDのgcc42でC++するのは止めとけってことで。

しかしこれは困った、5.0をこんなアヤスィ状態のgcc41でリリースしていいのかなw

関係ないけど、64bit time_tでX + wsmouseがぶっ壊れたままなんですが修理まーだー?
いちおpatchがtech-x11流れてるけど、これ当ててもVT switchするだけで動作がまた変になりよる。
まだ/dev/psm0(だっけ?)って使えたかしら…

[NetBSD] libgcc_s

__deregister_frame_infoってlibgcc_sのsymbolなんだけど、libcにDF_1_INITFIRSTつけたせいで
libgcc_sがunmapされた後に__deregister_frame_infoが呼ばれてundefined symbolになってるとかかな。
でもそれなら毎回起きるはずなんだが…

これ気になるな、怪しい。

$ ldd /usr/pkg/gcc43/lib/libgcc_s.so.1
/usr/pkg/gcc43/lib/libgcc_s.so.1:
        -lc.12 => /usr/lib/libc.so.12

$ nm /usr/lib/libgcc_s.so.1.0 | grep __deregister_frame_info
0000778c T __deregister_frame_info
0000768c T __deregister_frame_info_bases

$ ldd /usr/lib/libgcc_s.so
/usr/lib/libgcc_s.so:

$ nm /usr/pkg/gcc43/lib/libgcc_s.so.1 | grep __deregister_frame_info
0000840c T __deregister_frame_info
00008328 T __deregister_frame_info_bases

$ nm /lib/libc.so.12.164  | grep deregister
         w __deregister_frame_info

手元のFedora Coreの場合

-bash-3.2$ ldd /lib/libgcc_s.so.1
        linux-gate.so.1 =>  (0x00110000)
        libc.so.6 => /lib/libc.so.6 (0x0011d000)
        /lib/ld-linux.so.2 (0xb7f4f000)

-bash-3.2$ nm -D /lib/libgcc_s.so.1 | grep __deregister_frame_info
000080e0 T __deregister_frame_info
00007ff0 T __deregister_frame_info_bases

-bash-3.2$ nm -D /lib/libc.so.6 | grep __deregister_frame_info
0010afc0 T __deregister_frame_info
0010b4e0 T __deregister_frame_info_bases

うーむ、libgcc_sはlibcへの依存関係を記録しておく必要あり?


2009/2/4(Wed)

[NetBSD] いろいろ

current-user、いっそのことiconv(3)弄って//TRANSLITとか
ホイホイ喰っちまって捨ててしまうようにした方がいいような気がしてきた。

昨日のHEADに入替えたらstartxで100%刺さるようになった、currentっぷりにおらワクワクしてきたぜ!

pkgsrc/wip/scimの状況を整理すると:

  1. char_traitsをspecializeすると、basic_stringでoperator=を使ったとき
    char_traits::assign内でクラッシュする、おそらくjunk pointerをfreeしてる

    これは最適化(-O?)で顕在化するバグのようで最適化しない or gcc43を使うとこの問題は発生しない

  2. アプリケーション終了時にmemory faultが発生する

    これもchar_traitsをspecializeすることで発生する、最適化の有無に関わらず発生するが
    gcc43を使うとこの問題は発生しない。

  3. 必ずではないが、weak symbolである__deregister_frame_infoが解決できず落ちる

    多分NetBSD specificな問題くさい(ld.elf_so? libgcc_s?)どうやらFreeBSDではこの問題は発生しない。
    というかFreeBSDの場合、__deregister_frame_infoは呼ばれない?
    (ちなみに問題の発生しない環境は全てlibgcc_sはlibcへの依存関係を記録してる)

という3つの問題が渾然一体とワケワカメ状態なので正直めんどくさくなってきたw

それにしても

ちゅーなんでこんなおいらの趣味と正反対のアプリをデバッグしてんだろ状態。
this must be the ugliest piece of bread i've ever eaten、ジャムでしょ?


2009/2/5(Thu)

[NetBSD] C runtime object

FreeBSDではcrtbegenT.oをリンクしない限り__(de)?register_frame_infoは使われない模様。
確かこいつらってC++の例外でstack frame情報の取得に使うんだったっけ?

じゃぁ何でNetBSDはcrt{begin,end}がこいつら使ってるんだって話かな。
まぁlib/39986の解消とは本質的にはかんけーないのだけど。
あれはやっぱりlibgcc_sが思いがけないタイミングでunloadされてる希ガス。

あたりが 臭いなぁ、なかなか再現もしないので正直理詰めでデバグするしかないのだが
オツムが足りてないのが困る。

main()の前とexit()の後は知っちゃなんねぇとばっちゃがいってた。

TODO、真面目にELF/DWARF2の仕様書を読む。

うーん、gtk-demoをgdbで動かしてみる限り、

で、うまいこといってるっぽいぞ。そうすっとやっぱld.elf_soなのかな。


2009/2/6(Fri)

[NetBSD] pksrc/wip/scim

gcc43でbuildしても実はダメでした(笑)
scim-1.4.7/extras/gtk2_immodule/Makefile*が腐ってるのかc++ -sharedだとそういうもんなのか
libgcc_sがリンクされず、gtk-query-immodules-2.0がコケて登録されず
gtkimmoduleでなくxim経由で入力できてるだけでした、もういやこのinputmethod。

そもそもpure CのGTK2がC++のscim immoduleをdlopen(3)すること自体いいんだろか。
こないだの非pthreadアプリがpthreadなshlibをdlopen(3)するとアウチな件と
なんか同じ根っこの問題があるような気がしないでもない。

あとで読む
読んだけどろくな事書いてなかった orz

やっぱC++も勉強しないとダメだな、BSDLなlibstdc++があればねー。

__deregister_frame_info問題はさていおて、終了時にクラッシュする問題を片付けるべく
extras/gtk2_immodule/* を読もうと決意したが、gtk2のcallbackによる終了処理と
C++のdestructorでの終了処理がいりまじって、とっても危険な 臭いが…


2009/2/7(Sat)

[NetBSD] pkgsrc/wip/scim

すっかりwchar_t as UCS4のような文字コード問題だと思ってたので、そっち方面は調べてなかったのだけど
gtkimmoduleを使う場合にゲーロ吐いて氏ぬのはFedoraでも一緒で、こんなlocal patchをあててるのだな。
(追記) SuSEのsrpmみるとscim-launcherの問題っぽい。

diff -Nur scim-1.4.5/src/scim_frontend_module.cpp scim-1.4.5-fix/src/scim_frontend_module.cpp
--- scim-1.4.5/src/scim_frontend_module.cpp     2005-01-10 16:30:54.000000000 +0800
+++ scim-1.4.5-fix/src/scim_frontend_module.cpp 2006-11-17 14:30:56.000000000 +0800
@@ -69,7 +69,9 @@

         m_frontend_init (backend, config, argc, argv);
     } catch (...) {
-        m_module.unload ();
+    /* FIXME: scim does not unload cleanly, so just skip unloading for now.
+        m_module.unload ();
+     */
         m_frontend_init = 0;
         m_frontend_run = 0;
         return false;

どうみても対症療法パッチです、本当にあ以下略。

というかPure CなGTK2からdlopen(3)するアプリでC++の例外を使ってる自体
死亡フラグの気がする…まずは何でこの例外が起きてるのか調べるか。
NetBSDでもこのpatchをあてると__deregister_frame_info問題以外は 動いてるように見える。やっぱダメ。

というか、pkgsrcではgtkimmoduleはoffにしちまった方がいいような気がする。
あまりにコードが[お察しく下さい]過ぎるわこれ…

今日

the Pop Group Documentaryとかktkr! というか誰が得するんだよ状態。
ツレの中でも喜ぶ香具師は2人くらいしかいねーぞw

Tom WaitsがリマスタされてるけどSHM-CDなので買うのやめた。
そういやTom Waitsがロイツマ(Ievan Polkka)歌ってもあんま違和感ないよな。

某スレ読んで、そのうち[ck]?shのmultibyte対応やらなあかんTODO思い出した。
あとLANG=ja_JP.CP932ってやっぱ必要かな、現状mount時にUTF-8なんかへコード変換する機能ないし。

ほんとは変換なしでmout(つまりCP932)した上で適切なlocale(LANG=ja_JP.CP932)を設定して
ファイル操作するのが理想と思うのだが、如何せんそうすっとMSがサポートするcodepage全部必要になっちまうので
どうみもkludgeなれどもコード変換機能は必要かなぁとは思う、しかしkernel iconvを実装する人が以下略

ま゛理想をいえば、filesystemの文字コードとlocaleの文字コードは協調できるようにする必要があるのよね。
LANG=ja_JP.eucJPで動いてるアプリが、UTF-8 filenameなfilesystemに書き込む時って、今のところ
アプリ側でそのfilesystemの文字コードを意識してコード変換してやらんとダメなのでどうみてもオワットルわけで。
まぁこれはopen(2)をopen(3)にするとか、実際のsyscallには文字コード名を引数として増やしてkernel iconvあるいは
wide-character filename syscall(これCSIで実装しようとすると結局Citrusをkernelで持つというアレなことに)が必要になるのよな。
POSIXがこのへん黙り込んでる間は手を出したくないしな。

libc内で文字コード変換処理が閉じれればいいのだけど、この段階ではfilesystemの文字コードを知る方法がないのがね。
例えば文字コード情報を取得するのにstat(2)を拡張するっても、stat(2)を呼ぶのに文字コードが判らないと以下略。
金庫を開けるのに鍵は金庫の中状態、おいらkernelよう知らんからアレですがなんか抜け道あるのでしょうか。

current-users、Desktop NetBSDだと。twmのこと?(ぉ


2009/2/8(Sun)

[NetBSD] pkgsrc/wip/scim

SuSE Linux 11.1がscim標準だったはずなのでインスコしてみた。
なぜかscim標準のgtkimmoduleでなしに scim-bridgeを使ってる、なんぞ?

ちゅうかscim-bridgeのプロジェクトページに

You can use this to avoid the problem caused by C++ ABI transition.

とか書いてありやがんの、あsdfghjkl
まぁ今回の件は同じverのgcc/g++だから違うんだけど、やっぱりC++以下略

まぁでも、SuSEだとGTK_IM_MODULE=scimで起動してもクラッシュしないのだね。
ちょっとこの環境で調べてみますか。

とりあえずNetBSDの場合にはstatic objectのdestructorで氏にまくりなので
こんな patchでMemory Fault発生しないようにした。
class ConfigPointerがなぜ明示的に初期化せんと落ちるのかはよく判らんけど
FinalizeHandlerはGTK2のim_module_exit()イベントですでに終了処理は終わってるので
冗長な処理だし不要だと思われ、まぁC++だとdestructorで終了処理するのが定石みたいだけど。

あとは__deregister_frame_info()問題とg++のchar_traits最適化問題かぁ。
もうC++爆発しろ!

今日

current-users、本場物の " In Soviet Russia" ワロタ。

[NetBSD] __deregister_frame_info

まずはC++で書かれたshlibとC以下同文をdlopen(3)する簡単なサンプルを書いてテスト。

$ cat >foo.h
#if defined(__cplusplus)
extern "C" {
#endif
void foo(void);
#if defined(__cplusplus)
}
#endif
^D
$ cat >foo.cpp
#include <string>
#include <iostream>
#include "foo.h"

void
foo(void)
{
        std::basic_string<char> msg;
        msg = std::basic_string<char>("hello, C++ world.\n");
        std::cout << msg;
}
^D
$ g++ -shared -g -o libfoo.so foo.cpp
$ cat >bar.h
void bar(void);
^D
$ cat >bar.c
#include <stdio.h>
#include "bar.h"

void
bar(void)
{
        printf("hello, C world.\n");
}
^D
$ gcc -shared -g -o libbar.so bar.c

結果、Trying to call undefined weak symbol `__deregister_frame_info'が発生するのは
dlopen(RTLD_GLOBAL)でloadした場合かつ、C++なshlibをdlclose(3)してからC以下同文のみ。

$ cat >buzz.c
#include <dlfcn.h>

typedef void (*func_t)(void);
int
main(void)
{
        void *foo, *foo_func, *bar, *bar_func;
        foo = dlopen("/home/tnozaki/libfoo.so", RTLD_GLOBAL);
        foo_func = dlsym(foo, "foo");
        ((func_t)foo_func)();
        bar = dlopen("/home/tnozaki/libbar.so", RTLD_GLOBAL);
        bar_func = dlsym(bar, "bar");
        ((func_t)bar_func)();
        dlclose(foo);
        dlclose(bar);
        return 0;
^D
$ gcc -g -o buzz buzz.c
$ ./buzz
hello, C++ world.
hello, C world.
/home/tnozaki/libbar.so: Trying to call undefined weak symbol `__deregister_frame_info'

じゃ単純にRTLD_LAZYあたりに書き換えりゃいいかってーとそうでもなくて
Solarisの ドキュメントにはRTLD_GLOBALを使わないと例外も使えないともある、うーみゅ。


2009/2/9(Mon)

[NetBSD] __deregister_frame_info^2

FreeBSDのcommit logみると こんな対応してるみたいだけど
このdiffのようなfake symbolをセットする対応自体はNetBSDもとっくにやっとるので関係ないな。

        /*
         * If we found no definition and the reference is weak, treat the
         * symbol as having the value zero.
         */
        if (def == NULL && ELF_ST_BIND(ref->st_info) == STB_WEAK) {
                if (in_plt) {
                        _rtld_error(
                            "%s: Trying to call undefined weak symbol `%s'",
                            refobj->path, name);
                }
                rdbg(("  returning _rtld_sym_zero@_rtld_objself"));
                def = &_rtld_sym_zero;
                defobj = &_rtld_objself;
        }

src/libexec/ld.elf_so/arch/i386/mdreloc.cの_rtld_relocate_plt_objectとか眺めた感触としては
やっぱりcrtbeginS.o *1は__(de)?regisrer_frame_infoへのweal referenceを持ってたらダメな気がするんだよな。

NetBSDの場合のリンクオプション

$ gcc -### -shared -o libbar.so bar.c
Using built-in specs.
(中略)
"ld" "-shared" "-o" "libbar.so" "/usr/lib/crti.o" "/usr/lib/crtbeginS.o" "/var/tmp//ccgdmwa0.o"
"-lgcc_pic" "-lc" "-lgcc_pic" "/usr/lib/crtendS.o" "/usr/lib/crtn.o"

$ nm /usr/lib/crt*S.o | egrep "__(de)?register_frame_info"
         w __deregister_frame_info
         w __register_frame_info

Linuxの場合の以下同文

$ gcc -### -shared -o libbar.so bar.c
Using built-in specs.
(中略)
"/usr/libexec/gcc/i386-redhat-linux/4.3.2/collect2" "--eh-frame-hdr" "--build-id" "-m" "elf_i386"
"--hash-style=gnu" "-shared" "-o" "libtest.so" "/usr/lib/gcc/i386-redhat-linux/4.3.2/../../../crti.o"
"/usr/lib/gcc/i386-redhat-linux/4.3.2/crtbeginS.o" "-L/usr/lib/gcc/i386-redhat-linux/4.3.2"
"-L/usr/lib/gcc/i386-redhat-linux/4.3.2" "-L/usr/lib/gcc/i386-redhat-linux/4.3.2/../../.."
"/tmp/ccKHu6ho.o" "-lgcc" "--as-needed" "-lgcc_s" "--no-as-needed" "-lc" "-lgcc"
"--as-needed" "-lgcc_s" "--no-as-needed" "/usr/lib/gcc/i386-redhat-linux/4.3.2/crtendS.o"
"/usr/lib/gcc/i386-redhat-linux/4.3.2/../../../crtn.o"

$ nm /usr/lib/gcc/i386-redhat-linux/4.3.2/crt*S.o | egrep "__(de)?register_frame_info"

ちゅうことで、crt*のソースを眺めてみると、--eh-frame-hdrつきでリンクすりゃ
__(de)?register_frame_infoは不要ってことみたい、src/gnu/dist/gcc4/gcc/crtstuff.c参照。

 89 #if defined(OBJECT_FORMAT_ELF) && defined(HAVE_LD_EH_FRAME_HDR) \
 90     && !defined(inhibit_libc) && !defined(CRTSTUFFT_O) \
 91     && defined(__GLIBC__) && __GLIBC__ >= 2
 92 #include <link.h>
 93 # if (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ > 2) \
 94      || (__GLIBC__ == 2 && __GLIBC_MINOR__ == 2 && defined(DT_CONFIG)))
 95 #  define USE_PT_GNU_EH_FRAME
 96 # endif
 97 #endif
 98 #if defined(EH_FRAME_SECTION_NAME) && !defined(USE_PT_GNU_EH_FRAME)
 99 # define USE_EH_FRAME_REGISTRY
100 #endif

288 #ifdef USE_EH_FRAME_REGISTRY
289 #ifdef CRT_GET_RFIB_DATA
290   /* If we used the new __register_frame_info_bases interface,
291      make sure that we deregister from the same place.  */
292   if (__deregister_frame_info_bases)
293     __deregister_frame_info_bases (__EH_FRAME_BEGIN__);
294 #else
295   if (__deregister_frame_info)
296     __deregister_frame_info (__EH_FRAME_BEGIN__);
297 #endif
298 #endif

しかしそれNetBSDやるとかなりの大災害だよね、バイナリ互換なくなる気がするんだけど
そうすっとまーた全部再コンパイル以下略

結局はld.elf_soでいちいち警告出してるのを黙らせるしかないんじゃないかという感触。
in_pltフラグをゴニョるか引数増やしてもいっこflag立てるか。


*1:crtbeginS.oが-sharedで、crtbeginT.oが-staticでlinkされる。

今日

ギクリ、現状Citrusのドキュメントって

しかないのでやらんとまずいのですよね、某developerにも散々文句いわれてますし *1

政府紙幣、一方アメリカは貧困層にクレカをばら撒いた、ばら撒いた結果がこれだよ!
20万で金買ってインフレに備える使い道が一番多かったりしそうな日本人。


*1:しかし返事書いてない(苦笑)


2009/2/10(Tue)

昨日

__dergister_frame_info()、別に--eh-frame-hdrありなし混ぜても問題なさげ。
どうせunload時に.finiセクション実行するだけだしな。

長いことkinput2 + sj3しか使ったことないので、今時のinputmethodとか
お前はどこのワケワカメじゃ(by 石立鉄男)なんだけど、 ウィキペにはkinput2の記事ないのか、ひどい。

ところでscim-uimとuim-scimって同時に使うとシックス以下略

某所のFedora鯖を10に更新、yumエラーでまくりんぐで困る、SuSEのZyppの方がマシげ。
それとbootstrap-pkgsrcがbuildコケまくり、pkg_installが新しくなったからだなー。
ARG_MAXとかissetugid()とかopenssl周りをいろいろゴニョゴニョして更新。

そういやbluewall linuxって消えたのね、まぁあれってminimal Debian + pkgsrcでしかなくて

をどう共存させるか中途半端(というか何もやってない)なので、わざわざ使う意味もなかったけど。

久しぶりに Jane's Addictionなぞ聴いている、やっぱこの頃のDave Navarroいい海苔してるな。
レッチリに加入したやつは重過ぎて辟易したけど。
リマスタ紙ジャケキボンヌ、あっとSHM-CD抜きで。


2009/2/11(Wed)

昨日

sudoさんちの bobといえば Dylan言語は回文だったんだよ(ナンダッテー
元ネタは これの2. Tombstone Bluesだけど、そっくりだなw
映像のほうからすっと元ネタは こっちの1. Subterranean Homesick Bluesか。

Kodak E100Gの10本入り期限切迫品が50% OFFだったので買ってきた、撮り切れるか心配。

HMVでJane's Addictionの最近出たリマスタありの ベスト買ってきた。

[NetBSD] pkgsrc/wip/scim^n

scim-bridgeも落ちまくりらしいので野良build

Program received signal SIGSEGV, Segmentation fault.
0xbbb56a4c in scim::Module::unload (this=0x62696c08) at scim_module.cpp:258
258         if (!m_impl->handle)
(gdb) bt
#0  0xbbb56a4c in scim::Module::unload (this=0x62696c08) at scim_module.cpp:258
#1  0xbbb57b7a in ~Module (this=0x62696c08) at scim_module.cpp:132
#2  0x0804fc7e in ScimBridgeAgentImpl::finalize_scim (this=0xbb7040b0)
    at /usr/pkg/include/scim-1.0/scim_config_module.h:68
#3  0x0804fcec in ScimBridgeAgentImpl::finalize (this=0xbb7040b0)
    at scim-bridge-agent.cpp:415
#4  0x0805001f in ~ScimBridgeAgentImpl (this=0xbb7040b0)
    at scim-bridge-agent.cpp:203
#5  0x080525d6 in ScimBridgeAgent::alloc () at scim-bridge-agent.cpp:186
#6  0x0804ef24 in main (argc=1, argv=0xbfbfe89c)
    at scim-bridge-agent-application.cpp:110
(gdb)

これConfigModuleが初期化されてないからっすな。

--- agent/scim-bridge-agent.cpp.orig    2009-01-18 11:58:59.000000000 +0900
+++ agent/scim-bridge-agent.cpp 2009-02-12 12:10:16.000000000 +0900
@@ -195,6 +195,7 @@
 running (true), noexit_enabled (false), standalone_enabled (false), client_app_count (0),
 accept_listener (NULL), interruption_listener (NULL), panel_listener (NULL), signal_listener (NULL), displ
ay (NULL)
 {
+scim_config_module = 0;
 }



このpatchあててもまだダメか。

$ gtk-demo                                                                     
Cannot bind the socket: Address already in use
Failed to allocate the agent. Exitting...
Failed to establish the connection: Connection refused
The messenger is now down
The messenger is now down
An IOException occurred at scim_bridge_client_imcontext_set_cursor_location ()
The messenger is now down
The messenger is now down
Memory fault (core dumped)
(gdb) bt
#0  0xbafc58a2 in ?? ()
#1  0xbb3328fd in __cxa_finalize () from /usr/lib/libc.so.12
#2  0xbb3327ee in exit () from /usr/lib/libc.so.12
#3  0x08051b3c in ___start ()
#4  0x08051a97 in _start ()
(gdb)

なんだかなー。

/tmp/のsocket file消して再起動したら今度はカナ変換時にselect(2)で固まった。
もういやこのinputmethod。

[NetBSD] sj3 + pkgsrc

iwataさんとこ、実は私も以前pkgsrc化しようとして *1sj3-dictの扱いで困って以下略

できればconfigureに--with-installed-sj3mkdic or --with-installed-sj3client的なものを
追加していただけると、pkgsrc的に幸せだったかと(自分でconfigure.in書き直そうとして挫折ちう)。
いっそnbmake用のMakefile書くほうが早い(笑)


*1:ThinkPad 240がWAPBLで死んだのでサルベージがめんどくさくて放置中…


2009/2/12(Thu)

[NetBSD] Desktop NetBSD

baseにed(1) ex/vi(1)以外のシンプルなエディタを追加しようぜちゅう話をtech-userlevelでしとるけど
debian標準?のnanoだけは勘弁してほしいな、あれUCS4 hardwired wchar_tのとってもアレな実装なので
大幅に手を入れなきゃならん(こっちみんなAA略)、まぁ順当にFreeBSD ee(1)なんだろうけど。
nvi-1.81もなーstateful encodingなlocaleの場合の動作直さんとな。

そいや bsdinstallerって 中文表示できてんのね、これコンソールはどうしてるんだべさ?

我らがsysinst(8)もwcurses化されてるはずなのでlibhack版ではないlocale関数を使えば
日本語くらい表示できるはずなんだけどやったことないな、そいや。
まぁどのみちi18n wsconsをどうするかがじゅーよーなので以下略

libhackはやっつけの名の通り、C localeのcodesetをISO-8859-1してしまうというやり方で
これは言語{de,es,fr,pl}ならいいけど、将来的にmultibyte localeなんかにも対応する場合どうすっかだよな。

あくまでフロッピーの枚数を最小限にするという方法であれば、UTF-8オンリーの
ちんまいlocale subsystemを書くとゆーやり方もinstallerに限定してならありだろね。

それか各言語用のフロッピを用意する、つまり今のi18nを放棄してl10n化するとか。
ほんとはCitrusはせっかくdynamic loadingなんだから、installerのmenuで言語選択すると
encoding module/locale databaseの入ったinstall diskを要求すればi18nでもいけるのだけど
installerのsysinst(8)はcrunchgen(1)なバイナリなのでdlopen(3)使えないからアウト。

それかフロッピー止めてfull dynamically linked installer、まぁこれはないな。


2009/2/13(Fri)

今日

アザラシは手も足も出ない=静観しますというメッセージだけど、 ラッコは石=武器を使うという
米国のメッセージだとノビーと彼の友人のCIAエージェントから聞いたお>>テポ丼。

gccには__attribute__((unused))があるのにlintにはこれに相当する機能ってないのだよな。
ここで/*LINTED*/を使ってしまうと他のチェックまでommitされてしまうので#ifdef __lint__するしかないか。
それと__attribute__((nonnull(...))をcdefs.hでwrapしてないのがアレだ。
これC99の__VA_ARGS__が必要になるからかな。


2009/2/14(Sat)

今日

今日は暖かかかったっすね、壁に貼られたClashのポスター剥がす仕事も終わりですな。
ウォンバット・ロック

予算委員会、なんという8 Mile wwww このdis合戦には腹筋が崩壊せざるを得ない。
エンディングには是非 これ流してホスイ、TV観てるとアホになる。

水曜に作ったkernelだけどWAPBLおかしくなってんな、logから復帰したファイル壊れまくりだ…

ネコ探してますの張り紙が回収?されてたけど見つかったんかいな。
ネコの名前がうちの子を拾ってくれた人と同じという偶然もあって気になって仕方がない。

もういっちょ 政界MCバトル、もう駄目だwwwwこの国wwwww


2009/2/15(Sun)

[NetBSD] pkgsrc/wip/scim-bridge

先に起動しておいたscim-bridgeが、gtk-demoを起動してim-scim-bridge.soをloadして直ぐくらいに /tmpにcore吐いて死んでんのか。

Program received signal SIGSEGV, Segmentation fault.
0x0806df5b in scim::Slot3<bool, scim::IMEngineInstanceBase*, int, int>::Slot3 ()
(gdb) bt
#0  0x0806df5b in scim::Slot3<bool, scim::IMEngineInstanceBase*, int, int>::Slot3 ()
#1  0x00000000 in ?? ()
(gdb) 

そんでselect(2)のtimeoutがアレなのかしらんが帰ってこないちゅう感じ。


2009/2/16(Mon)

今日

またしても風邪引いて一回休み、どっかの大臣みたいにフラフラになりつつ
薬飲んでどっかの党首みたいに昼寝しようとしたらいきなりふともももが攣る悲劇。
痛さに悶絶してたらパニック発作まで起こして酷い目にあった。

ピ〜キュ〜って、ちょっと円谷プロ何やってんすかwww
発禁のプリQは こっちから見れるけどこれはひどいwww

ガリQでPale Saintsの Mrs Dlphin思い出した、テラナツカシス。


2009/2/17(Tue)

今日

消費者行政担当相 「酒と風邪薬の全面販売禁止を」以下略

大昔、風邪だろうが前日明け方近くまで無駄な会議だろうが、休めないマジキチなソルジャー系営業職やってた頃
風邪薬飲んでるのに、上官命令で高速道路を長距離運転する破目になり(ちゅうか諏訪IC - 中津川IC往復が日常茶飯事)
途中意識が朦朧としてきて危うく側壁にヒットする寸前までいった経験があるので、マジで副作用には注意した方がいい。

さすがに自分だけ死ぬのはまだしも他人巻き込むのが嫌なので、程なく辞表叩きつけて *1以下略
コの業界は月500時間労働超なデスマだろーが意識失うのは机の上なので人投しにならんだけまだマシ。

しかし辞任しなきゃ予算審議拒否とか野党なんなの、GDPマイナス2桁でも党利党略優先っすか。
まあこのまま自分の首絞めてけば 将来が不安で貯蓄 → 将来を悲観して散財 にマインドが変化して消費が上向くかもね!
俺もキルビルみたいなライダースーツ *2と刀買ってヒャッハーな時代に備えるかな。


*1:まぁそれだけじゃないんだけど。
*2:最近若干太ってきたので脂肪遊戯とかゆーな

PHP mb_check_encoding

kbkさんとこ、 s/0x39/0x3A/はまぁ単純なミスでしょう、私もときどき やらかします/(^o^)\

んでラウンドトリップ、そもそも文字コード変換なんて邪悪な処理をする香具師は地獄の火の中に投げ込むもので以下略

「そのencodingに対して正しいmultibyte列か否か」はCESレベルでの範囲チェックだけで済ませるような実装の方が多いかと。
昔は今みたいに厳密にShift_JISとCP932とかeucJPとCP51932といった厳密な区別をしなかったので
相互運用性を考えてできる限り不正なバイト列と判断してはならない、という考えが一般的だったわけでして。

wchar_t APIを例にとると、以前もちょっと 書いたけど、eucJP localeにおいては
0xADA1〜0xADFCは符号化手法(CES)としては有効範囲ですが、文字集合(CCS)としては実際のところ割当がありません。
# いちおCP51932の場合だとNEC特殊文字が割り振られていますが以下略
このケースにおいてmbrtowc(3)がどう判定するかというのは、実装によって異なります。

ちゅうかんじ。

Citrus的には

あたりを理由として今の実装になってたような記憶、他にもあったような気がするけど思い出せない…
#そいやSolarisは0xADA1もwcwidth(3)で2を返すのだけど、これcharmapどうなってんだろ。

ぶっちゃけPOSIXではmbrtowc(3)の実装について、Encoding Dependent *1(それぞれのencodingに対して最適化したものを用意)するよか
Encoding Independent(charmap中で定義されるmultibyte列からTrie木を構築して最長マッチ検索)するような実装を念頭において
仕様決めてるくさいので、未定義領域はEILSEQにすべきかもしれまへんな。

OSに問い合わせる方法、まぁちょっといやらしい方法ですがiconv(3)の変換元と変換先を同じ文字コードにして *2
1byteつづ食わせつつ変換が成功する or EILSEQになるかの結果を調べるとかくらいしか無いですね。
将来的にmulti-localeが標準規格になればmbrtowc_l(3)なんかも使えるかと思いますが
Austin Group(=POSIX)でwithdrawnされたままだし、C1Xあたりに入るかは期待薄かと。


*1:NetBSD界隈ではMD/MI(マシン依存=Machine Dependent/マシン非依存=Machine Independent)という用語を多用するのだけど
Citrusで↑にならって文字コード依存/非依存ををED/EIとか略してしまうと、スラドのおっき不全治療広告と紛らわしいので他になんかいい略語ないですかね。

*2:変換元/先が同じ場合、最適化の為に内部でmemcpy(3)相当の処理にしてしまえーとかやってる実装も
世の中には存在しそうだけど、それは不正なmultibyte列があったらEILSEQを返すという仕様に違反してますな。



2009/2/18(Wed)

今日

景気梃入れにはもう手遅れだし、給付金2兆円分使ってJRのホームドア整備した方がいいんじゃね?


2009/2/19(Thu)

[VMware] VMware Server2

obacheさんとこ、VMware Server2のApache Tomcatはあれ管理画面のUIにServlet使ってるだけなので
止めてしまってESXi用のVMware Infastructure Clientを使う方が楽ですよ。
Server2インストール後に追加で

%%インストール先%%\VMware\VMware Server\hostd\docroot\client\VMware-viclient.exe

を起動してインストールすればスタートメニューに出てきます、まぁこっちもかなり出来悪いですが。
ホストOSがWindows Vistaでもない限り *1Server 1.0.x使う方が幸せかと。

他にもVMwareのクライアントって実はあれVNC + SSLなので( ソース)、*.vmxをエディタで開いて

RemoteDisplay.vnc.enabled = "TRUE"
RemoteDisplay.vnc.password = "********"
RemoteDisplay.vnc.port = "5900"

を追加しとくとVNC viewerからも繋げたり(2.0でもこの機能残ってるか未確認)。
ただ使う場合の注意として

ちゅー感じなので実用に耐えませんけど。


*1:Vistaだと1.0.xは仮想マシン起動時にメモリのスワップアウトと激しいディスクアクセスで10分以上操作不能になります。


2009/2/21(Sat)

昨日

月命日。
近所の迷い猫はやっぱ見つかってない様子、冷え込んだし心配だ。

はっぴいえんどがヒッピージエンド以下略 ハッピーターン中毒こわい!

Zappa様(若!)はハッパクスリやるやつぁASSHOLEと以下略
一方 Captain Beefheart様はセクロスも禁止した。

やっぱり Bill Payneはネ申すなぁ、そいやLowell Georgeはクスリで逝って今年で30年なのか。

今の政局を指してPeter Pumpkinhead状態という、南無南無。

cabinet are burning
in the still air
and you know where they burn cabinet
people are next
the paper of matches
anoints in ignorance with gasoline
the tube of matches
grows fat by breathing in the smoke of dreams
it's quite obscene
cabinet are burning
i hope somehow this will allow a phoenix up from the flames

Andy Partridgeムスカ大佐説ワロタ


2009/2/22(Sun)

今日

にゃーにゃーにゃーの日。

Tシャツ1枚じゃ寒いから大黒柱を切り倒して薪にする経済政策 by 確かな 夜盗

nviのwregexが壊れてるとな。
検索で"."と"["って、おいらがwregex wchar_t 32bit cleanのときに一番対応に困った部分なので
これはきっと 俺の罪と思ったのだが、確認してみたら全く問題なかった。
これ最近lukem氏が水道のポタポタ滴のようにあちこちcommitして凄みすら感じる
fix -Wsign-compare issuesが原因っぽいっすね、ありがち。

pkgsrc/editors/nviがbuildできひん、db4を使うようになったのにconfigureが対応してないわ。

なぜかtcpdumpがDBG=-gでbuildできへん、なんぞこれ。

やばい、どこまで何やってたか忘れた。ld.elf_soとかcrt*.oとか何だっけ?

これはひどいwwwwww
おいらがベースWarwick使ってるのも間接的にJamiroquaiの影響なのだけど
Canned Heatの入ってるやつ以降聴いてねぇなそういやー。

[NetBSD] nvi-1.81

ちゅうことでnviのwregex直した、NetBSDの場合RCHAR_T(=wchar_t)は32bitフルに使う必要があるので
RCHAR_T_MAXが特別に0xFFFFFFFFつまりwchar_t=signed intだと負の値(-1)になっとるちゅーイヤン状態を
lukem氏が考慮しないで(まぁ無理だろ)、RCHAR_Tにキャストしたためですな。

@@ -105,7 +105,7 @@ static states step __P((struct re_guts *
 #define	BOW	(BOL+4)
 #define	EOW	(BOL+5)
 #define	CODEMAX	(BOL+5)		/* highest code used */
-#define	NONCHAR(c)	((c) > RCHAR_T_MAX)
+#define	NONCHAR(c)	((RCHAR_T)(c) > (RCHAR_T)RCHAR_T_MAX)
 #define	NNONCHAR	(CODEMAX-CHAR_MAX)
 #ifdef REDEBUG
 static void print __P((struct match *m, char *caption, states st, int ch, FILE *d));

s/RCHAR_T/UCHAR_T/して(あんまりすっきりしないけど)解決。
つかこのチェック自体-DUSE_WIDECHARの場合そもそも不要な気もする。


2009/2/24(Tue)

昨日

草食の次は 昆虫系男子っすか。
お前ら ハンミョウのグラムロックな格好良さナメてるだろ、あれ山本寛斎デザインだぞ。

やぱし昆虫っぽい男子というとグラム時代の David Bowieを想像してしまう。
しかしこの人も還暦迎えてなおこの 少年っぽさって何なの、これぞ※ただしイケメンに限る、だよな。

つか他の人って、今日は黒に白のドット柄シャツでゴマダラカミキリ風とか
マットなスエード地でコフキコガネ風とか、ベージュのアノラックとニット帽でカブトムシの幼虫風とか
着る服コーディネートしたりしないの?

今日

アリマキ系男子、 小動物幻視という呼称がにゃーにゃー鳴く動物っぽくて好き。

三島系男子とか夢野系男子とか横尾系男子とか澁澤系男子とか以下延々と提案してみるテスt
この手の パタレコは嫌いじゃない、むしろ好き。

もう SPOOK COUNTRYって邦訳出てたのか。
訳は安心と信頼の浅倉久志センセ、つかP.K.ディックの方全部お願いします…

映画 BLACK WHITE + GRAYが3/28からとな。
若い頃のPatti Smith萌えす、なのにヒゲ生えたおばちゃんになっちゃって…
Patricia Morrisroeの書いた MAPPLETHORPEもおもろかったし観に行くかね。

つかドキュメンタリーもいいけど当時を再現した映画とか誰か撮らないもんかね。
80年代ブーム来てるみたいだしな。
Anton Corbijnの次回作とか勝手に夢想してみる、作風は全然違うけど同じ写真家繋がりで
結構面白い出来になると思うんだけどな。でもまぁこの人基本UKな人だしNYモノは無理かな…

厚生労働大臣クラウス・ノミの 映画なんてやってたのか、知らんかった。


2009/2/25(Wed)

今日

蓼科女子と空目した元 Bルート住民です(原住民ではない)、 女神湖うpキボンヌ。

蓼科も暖冬+スキースノボ不人気で/(^o^)\だし、諏訪湖周辺の精密業なんぞ元々バブル崩壊以降
\(^o^)/状態の中、なんとか踏ん張ってたとこもバタバタ逝きそう、すで四勤三休給料カット当たり前状態に突入中みたい。
まぁ国会で漢字クイズやっとる平行世界とは関係の無い話ですが。

青森と北海道ではミサイルを警戒して 迎撃体制…ふぅ。


2009/2/26(Thu)

今日

7〜11月には今の現場のシステムはお役御免なんだが、スケジュールがなかなか確定しないのでとても困ってる。
金融恐慌で仕事の絶対量もばーっと減るだろし早めに営業に動いてもらわんとならんのだがね。
しかもおいら情報処理弱者なので、いまどきのWEB系の仕事とか持ってこられても浦島太郎状態だしなぁ。


2009/2/27(Fri)

[NetBSD] テキストファイルの文字コード vs localeの文字コード

DragonFlyBSDにCitrusの移植をしてたjoerg氏からお手紙モラタ、要約すると

というご意見をたまわわわわった。

おいらの意見は iconv(3)もmbrtowc(3)もウンコ、こんなものこれ以上魔改造したって
両生動物のクソをかき集めた値打ちしかない、どうせやるなら

てのが一番すっきりするよなーと思う。

FILE *fp;
wchar_t ws[BUFSIZE], *pws;

setlocale(LC_CTYPE, "ja_JP.eucJP");
fp = fopen("utf8.txt", "r,ccs=utf-8");
if (fp == NULL)
	abort();
pws = fgetws(&ws[0], BUFSIZE, fp);
...

まぁこれ*BSDやglibc2であればfopen(3)を拡張せずとも
funopen(3)とかfopencookie(3)を使ってread/writeの裏でiconv(3)を動かせば同じことができるはず。
ちと実験してみるかな。

文字コード指定可能なmbrtowc(仮にmbrtowc_encとする)を追加するってアイデアの方は
実はこれ、おいらが只今絶賛サボり中の TALE(=Thread Aware Locale Extension)実装の中にある
mbrtowc_l(3)ととっても良く似たもの。

…なんだけども、こっちはあくまでlocale_tで扱える文字コードしか指定できないので
UTF-16/32なんかのL'\0' != '\0'になる文字コードは扱えない、するとやっぱし
別インタフェースを用意する羽目になるのよな。

でもそれって

mbtowc
mbrtowc
mbtowc_l
mbrtowc_l
mbtowc_enc
mbrtowc_enc

ちゅう具合で「似てるけどちょっとだけ違う関数が大量に増える」という
最低最悪の五つ子オソマツ君なソリューションなので、おいらとしては絶対にacceptできまへん。
strcpyとstrncpyとstrlcpyとstrcpy_sの悲劇を繰り返すのはやめようぜ。

そもそもmbrtowc_l自体、TOGの Distributed I18N Frameworkのように
mbstate_tにAttrObject(≒locale_t)を埋め込むというアプローチをとってさえいれば
新たに関数追加せずとも既存のmbrtowc(3)で問題なかったんだよな。
ほんとにglibc2方面はこういう設計ヘタクソすぐる、ぐんにょり。

まぁでもMacOS XとかMSVC++はすでにTALEを(微妙な差異があるものの)実装しちゃってるので
後発組としては長いものに巻かれるしかなさげ。

メールの返事書くのめんどい…


2009/2/28(Sat)

今日

某所、「回線切って以下略」に匹敵する新しい煽り文句"send a mail to..."が生まれた瞬間を見た…

Patti Smithも ドキュメンタリー映画公開されてんのね、これは日本公開してほしいな。
NYCでは貴重なDFC、 ワキ毛も私たちのパンツ^Hク 業界ではご褒美です。
trailerの途中ででてくる娘さんかわいいね、旦那のFred "Sonic" Smith(MC5)が
亡くなったのはもう15年も前なんだけど、これ結構古い映像なのかな。

えーRon Asheton(The Stooges)って1月に亡くなってたのか、こないだ再結成したばかりなのに…
淫力魔人聴いて人生狂いました、R.I.P

クレバスアート、この前でエコバニの The Cutterごっことかしてみたい。
やってる アホ(褒め言葉)がいてワロタ。
おいらは雪みるとシャイニングごっこしたくなります。


[ホームへ] [ページトップへ]