2007年02月07日(Wed) まだまだ白い空 [長年日記]
● gettextで得られる文字列を入れるバッファの大きさはどうやって決めるんだろう?
@ITに、「ロケールの問題でプログラムが正常に動作しない場合には」という記事が載っていた。gripというプログラムを例に採って、LANG=Cで使えるプログラムが日本語ロケール(ってFC6ならja_JP.UTF-8なのかな?)で使えない場合にどうやって修正するのか解説してある。曰く、char versionbuf[20];
をchar versionbuf[22];
にしろ、とのこと。えぇーっ?「ここで挙げた対処方法は、あくまで暫定的な措置なので自己責任の下で作業していただきたい」と断り書きがあるにせよ、これはさすがにまずそうだと感じる。きっと他のロケールで落ちる。
興味が湧いてきたのでコードを覗いてみることにした*1。grip-3.2.0のsrc/grip.cに下記のようなコードがあった。
VERSIONはconfig.hで定義されるマクロだろう。
この場合、versionbufに必要な大きさは実行時まで不明ということになるのかな。なら、malloc(3)でメモリ領域を確保するべきなんだろう。C99ならsnprintf(3)で必要なバイト数を測るか、C99が仮定できない場合にはprintf(3)のmanページにあるコードでメモリ領域を確保しつつ文字列を作ることになりそう。
さて、こうやってmalloc(3)で確保された領域の文字列をgtk_label_new()に渡した場合はこの領域はいつまで確保しとかないといけないか…ちょっと探しただけではわかませんでした。GUIは難しいね…結論はそれか?
*1 そんなことしてる時間がないのは自明の事実なのだけれど。
● [memo] Debian:i18n (ukai.org)
gettextについていろいろ探している過程で、「i18nについて世界のdeveloperにたいして言わなければいけない時に忘れてはいけないポイント」の書いてあるページをみつけました。もし国際化するべきプログラムを書く時があれば参考になりそうだ。i18nについて自分にたいして言わなければならないポイント。
● Citrixのウインドウを画面の端にドラッグして離したらメニューバーにアクセスできなくなった。もう用済みなので閉じたいのですが。ローカルのWindowsからはウインドウが選択されていないように見えるようで、Alt+F4でも閉じられないし、Alt+Space-Mでも移動できない。ネットワークが切れる(そのうち必ず切れる)のを待とうかとも思ったけれど、スタートメニューの横にならんでるアイコンを右クリックしてCloseを選んだら閉じられた。しかしデータベースとやりとりするのにデータベースサーバのウインドウを持って来ちゃうってのは斬新な発想だよねえ…。
● オモコンマシン死亡
ハードディスクの問題じゃなかったか…。 フリーズ時のtopは下記のような感じ。gccを作り中でした。 やっぱりファイルの操作時に不安定になるみたい。
kernel-2.6.20に行ってみるか?ハードウェアの問題か?泥沼か?うーん…
(追記) 8日に古い方のハードディスクを物理的にはずして再挑戦。
で目の前で止まってしまいました T_T マザーボードか電源か…。嗚呼。
● parse error, unexpected $, expecting kEND (SyntaxError)
そういえば昨日職場でPythonのスクリプトを書いていた。
gtk_label_new()だと,中でg_strdup()しているので,すぐに開放してかまいません.<br>たぶん,ふつうのまともなライブラリはそうなっていると思います.(そうなっていて欲しい.)
Momongaのgripではちゃんと日本語出てるなぁ、と思ったら<br>char versionbuf[30];にするというadd hocなパッチがあたってるようでした。<br>http://sourceforge.net/tracker/index.php?func=detail&aid=1233171&group_id=3714&atid=103714<br>なんてのが結構前に出てるのに変更されてない、ってことは本家では修正予定はないのでしょうかねぇ...
なるほど。kouさん、h_nakamuraさんありがとうございます。BTSを見てもgtkの関数には便利そうなのがありますよね。富豪的だけど。やっぱりちゃんと使えるようになりたいかなあ。
最近のツッコまれどころ