随感録 2000年6月

2000-06-02 (Fri)

 はい,5月度の月次決算終了。

 清文社から本が3冊,アスクルからMOディスク10枚到着。なかなか早い。2000.05.31

2000-06-04 (Sun)

 夏物のスーツを注文したり。

 キーボード,マウス,ディスプレイの延長ケーブルを購入。PCを押し入れにしまう。

 ミラーサイトを立ち上げてみたり。Netsphere Laboratories

2000-06-09 (Fri)

 昨日,今日と出張。昨日は岡山,広島,今日は福岡。かなり慌ただしい。

 Cマガジンの6月号がなかなか笑える。ちゃんとC言語の規格など原典を見て書くように。一例を挙げると,errnoをグローバル変数と仮定してはならない。というか今時のシステムでグローバル変数な訳ないだろ。

2000-06-10 (Sat)

 朝から明石へ。昼食をご馳走になる。夕方芦屋でバンド練習。その後焼肉定食。

2000-06-11 (Sun)

 2000.05.28の関係で三宮でボーリングと飲み会,花火。ボーリングたぶん新記録,168。

 xterm-utf8のXIMパッチを書く。が,xtermのオリジナルが文字,バイト,カラムの区別をしてないため,[Backspace]などがかなりおかしい。

2000-06-14 (Wed)

 代休。笑っていいともを見たり。夕方から梅田へ。やや歪みが,あるいは僅かな退行か,で何が?

 うっかりWeb日記の検索ができなくなってたのを修正。

 パッチをまとめて公開するページを作成。<patches>

# Unicodeフォントの表示

Tag(s): 文字コード
#include <stdio.h>
#include <assert.h>
#include <string.h>
#include <X11/Xlib.h>

static const char* FONT_NAME_UNI
= "-misc-fixed-medium-r-normal-ja-18-*-*-*-*-*-iso10646-1";

GC gc_uni;
XFontStruct* font_uni = NULL;

void onExposed(const XExposeEvent& e)
{
    static XChar2b text_uni[2];
    memset(text_uni, 0, sizeof(text_uni));
    text_uni[0].byte1 = 0x00;
    text_uni[0].byte2 = 0x41;
    text_uni[1].byte1 = 0x30;
    text_uni[1].byte2 = 0x42; // "Aあ"

    int x = 10; int y = 30;
    for (int i = 0; i < 2; i++) {
        XDrawString16(e.display, e.window, gc_uni, x, y, text_uni, 2);
        x += XTextWidth16(font_uni, text_uni, 2);
    }
}

int main()
{
    Display* disp = XOpenDisplay(NULL);
    Window top = XCreateSimpleWindow(disp, RootWindow(disp, 0),
                                     400, 200, 400, 100, 2,
                                     BlackPixel(disp, 0),
                                     WhitePixel(disp, 0));
    XSelectInput(disp, top, ExposureMask);
    XMapWindow(disp, top);

    font_uni = XLoadQueryFont(disp, FONT_NAME_UNI);
    assert(font_uni);

    gc_uni = XCreateGC(disp, top, 0, NULL);
    XSetForeground(disp, gc_uni, BlackPixel(disp, 0));
    XSetFont(disp, gc_uni, font_uni->fid);
    
    while (true) {
        XEvent e;
        XNextEvent(disp, &e);
        if (e.type == Expose)
            onExposed(e.xexpose);
    }

    return 0;
}

 Xのフォントにはアプリケーション・プログラムから見れば,1バイトフォントと2バイトフォントがある。Unicodeフォントは2バイトフォントになっている。

 2バイトフォントでもフォントの取得,GCへの設定は同じだが,表示は違うAPIでする。

  int XDrawString16(Display* display, Drawable d, GC gc, int x, int, y,
                    const XChar2b* string, int length);

 表示自体はXChar2b型への変換とXDrawString16()関数を用いるだけで,別に難しくない。しかしUnicodeフォントが固定幅フォントの場合,ラテン文字も漢字も全部同じ幅になってしまって,見た目に違和感がある。

 UTR #11: East Asian Width によって,full-widthのものを専用のフォントで表示するのがいいだろう。

#

Unicodeライブラリには幾つかある。

  • ICU - International Components for Unicode [unicode.org に移転]
  • libunicode. [2021-09] 廃れた. はるか昔の Pango-0.6 から v0.11 まで (2000年頃) に使われていたが、現在では Pango も依存していない。

(2005.4.29) この日の内容は、加筆のうえ、ICUを使うに移動しました。

follow-up(s): 2000.06.28

2000-06-15 (Thu)

# XFree86でのjp106キーボードの設定

Tag(s): Linux

 今さらながらXFree86でのjp106キーボードの設定。

 次のようになっているのを,

   XkbKeycodes     "xfree86"
   XkbTypes        "default"
   XkbCompat       "default"
   XkbSymbols      "us(pc101)"
   XkbGeometry     "pc"
   XkbRules        "xfree86"
   XkbModel        "pc101"
   XkbLayout       "us"

 次のように変更する:

   XkbKeycodes     "xfree86"
   XkbTypes        "default"
   XkbCompat       "default"
   XkbSymbols      "jp(jp106)"
   XkbGeometry     "pc"
   XkbRules        "xfree86"
   XkbModel        "jp106"
   XkbLayout       "jp"
  • /usr/X11R6/lib/X11/xkb/rules/xfree86.lst
  • /usr/X11R6/lib/X11/xkb/symbols.dir
ぐらいが参考になる。

2000-06-16 (Fri)

 なぜまだ続く,fj.comp.lang.c,fj.comp.lang.c++ の malloc & free話。

2000-06-17 (Sat)

 須磨水族園。ハーバーランド。芦屋の居酒屋。2x2。4人でワインを3本空ける。ふむ,ワイン1本ぐらいなら大したことない。

follow-up(s): 2000.06.18

2000-06-18 (Sun)

 爆睡して45分遅刻。大したことあるやん。2000.06.17

# CGI検索サイト

Tag(s): 今日のリンク CGI Webデザイン

CGI検索サイト。次の二つぐらい:

# Emacsでruby-modeを追加

Tag(s): Ruby Linux

Emacs 20にruby-modeを追加。

  # cp ruby-mode.el /usr/local/share/emacs/site-lisp
;; ruby-mode
(autoload 'ruby-mode "ruby-mode" "Major mode to edit ruby files." t)

(setq auto-mode-alist
  (append '(("\\.rb$" . ruby-mode)) auto-mode-alist))

自動色付けなどをしてくれる。

2000-06-20 (Tue)

 定期券をなくす。昨日改札で取り忘れたらしい。仕方ないので切符を買って会社へ。帰り,駅で聞いてみる。お,届いてるやん。

2000-06-21 (Wed)

 午前中奈良,午後京都へ出張。

 京都に予定より早く着いたので,ちょっとぶらぶら。京都大丸でなかなかのティーを楽しんだり。

2000-06-23 (Fri)

 会社の飲み会でしゃぶしゃぶ。うちの部署って飲み会多いよね。まぁ,経理・財務はストレス強いから。

 二次会でホモ的なバーへ10人ぐらいで雪崩れ込む。男二人で愛を語り合う世界。うひょー。

2000-06-25 (Sun)

昼からバンド練習。ロイホでカレーを食べる。1/144 Qubeleyを買う。

follow-up(s): 2000.07.22

#

トップページにInfoseekとYahoo! JAPANの検索機能を付けてみる。といっても大したことなく,HTTPリクエストを転送してるだけ。

# 例外の捕捉

Tag(s): C/C++

(2005.4.3) この日の内容は、加筆の上、C++での例外処理について に移動しました。