Motoyuki's Diary 2000年5月下旬

Motoyuki Konno <motoyuki@bsdclub.org>
[since Jan/22 1999] counter
Last-modified: Wed, 09 Nov 2005 04:17:28 JST


2000/5/20(Sat)

初午

周囲に影響されて :-)、はじめて馬に行ってみる。詳しくは こことか こことか ここあたりを参照。スパゲッティはファミレスのレベルを大きく越えていますね。 普通に食べに行く店と考えてもなかなか。


2000/5/22(Mon)

今日の出来事

一昨日の日記を補完。

環境再構築

昨日から延々とサーバ構築。 SCSI HDD の騒音に耐えかねて再インストール決行。 旧おうちサーバで使っていた 20GB IDE HDD を入れて IDE 10GB + 20GB 体制にする。 データの転送に時間をとられた *1ため、ほぼ二日間の間メールの読み書きができなかった。


*1:旧サーバの 20GB IDE に入っていたデータをネットワーク経由で他の複数のマシンに 一時的に待避させ、サーバ構築後に戻した。 20GB IDE を流用せずに UW-SCSI を 使おうと思っていたのはこの 2 回のコピーに手間と時間がかかるため。


2000/5/23(Tue)

Web 日記から

_ 語源

へロインの語源ですが、 Pocket Oxford Dictionary をみると

[German: related to HERO, from the effect on the user's self-esteem]

とあります。薬として製薬会社が作った名前みたいです。 Encyclopdia Britannicaあたりも参照。

_ AirStation

細川さんは AirStation も 買ったらしい。無線 LAN 関係だけでいくつ揃えているのか :-)。試した結果を詳しく Web に掲載されているのでとても参考になります。

今日の出来事

_ テープ整理

ビデオテープの整理。山梨と八王子で二重に録画していた分などを整理する。 S-VHS デッキを買う前に録画した VHS 時代のテープの大部分も整理。これらのテープは 消去して、 VHS は家族に譲渡。 S-VHS なテープは再使用へ。

これで部屋の床に置いてある荷物がなくなるはず。引っ越しから二ヶ月もかかって 荷物整理が終了か。


2000/5/24(Wed)

今日の出来事

_ 市役所

国民年金関係の手続きをしに市役所へ。

_ 買い物

ムラウチに行って買い物:

毎月予約購入していたのも今月で終わり。ちょっと寂しい。

_ 某作業

校正を出して今回はおしまい。あとは某イベントの結果のチェックがある。


2000/5/25(Thu)

Web 日記から

_ SCSI

SCSI の信頼性ですが、以下の点で IDE をかなり見直したところです。

_ 流行りもの

係うらないの結果は新聞部。志保タイプなのか?

自分の思いをストレートに表現できるので恋愛成就率は高い。

全く違うよん。というか高くなって欲しい :-)

係といえば、小学校の時はよく役員とか委員長になってましたね。 室蘭の知利別小学校は児童にいろいろやらせてくれるので非常にやりがいが ありました。小 6 の途中で八王子に転校してからは、教職員組合の申し合わせ *1とかで放課後に残って作業することが禁止されていたのでやる気が失せたのです。


*1:知利別小学校は北教組が非常に強い学校だったけど、そんな規制は全くなかった。 児童会のイベントでは暗くなるまで作業することがよくあったし。


2000/5/26(Fri)

comb sort

fj.comp.lang.c で話題になっている comb sort について某所で聞かれたので まとめてみる。出典は日経バイト 1991 年 11 月号。

_ 原理

comb sort は bubble sort の改良である。 bubble sort は単純だがかなり遅いという 欠点がある。遅い理由は

亀の移動を早くするために、 1 以上離れた要素を比較するようにしたのが comb sort である。説明するよりコード *1をみたほうが早いだろう。

void combsort (int *data, int size)
{
    int hold;
    int gap  = size;
    int done = 0;
    
    while ((gap > 1) || !done) {
        gap = (gap * 10) / 13;
        if (gap == 0)
	    gap = 1;
        done = 1;
        for (i = 0; i < size - gap; ++i) {
            if (data[i] > data[i + gap]) {
                hold = data[i];
                data[i] = data[i + gap];
                data[i + gap] = hold;
                done = 0;
            }
        }
    }
}

ソートの様子は間隔があいた櫛 (comb) ですいていくのに似ている。

という感じである。 1.3 というのは数多くのデータを sort して実験的に得た数値とのこと。

_ comb sort 11

comb sort の改良版である。 comb sort では比較する要素の間隔を 1 / 1.3 して いくが、間隔は整数値なので次のいずれかの数列になる。

このうち c では間隔が 1 になる前にすべての亀が移動するが、 a, b では約 8% の亀が残存してしまう。このため、間隔が 9, 10 の場合には強制的に 11 にする ことによって速度向上を図ったのが comb sort 11 である。

void combsort11 (int *data, int size)
{
    int hold;
    int gap  = size;
    int done = 0;
    
    while ((gap > 1) || !done) {
        gap = (gap * 10) / 13;
        if (gap == 0)
	    gap = 1;
        if (gap == 9 || gap == 10)
            gap = 11;
        done = 1;
        for (i = 0; i < size - gap; ++i) {
            if (data[i] > data[i + gap]) {
                hold = data[i];
                data[i] = data[i + gap];
                data[i + gap] = hold;
                done = 0;
            }
        }
    }
}

この comb sort 11 は、

という特徴を持つ。

私は 9 年前に日経バイトの記事を読んで衝撃をうけたのですが、その後はほとんど 話題にならなかったですね。今回 fj.comp.lang.c で話題になっているのを見て 懐かしくなってまとめて *2みました。


*1:日経バイトには true basic (って何?) で書かれた comb sort のコードと C で 書かれた comb sort 11 のコードが乗っているのだが、非常に読みにくい代物だった。 なので自分なりに書き直してみた。
*2:元記事をスクラップしてあるのだけど、こうして書いておけば後から探しやすい :-)

今日の出来事

_ 外出

八王子の町に出てみる。買い物:

駅ビルでスパゲッティを食べて帰宅。

Web 日記から

_ SCSI (続)

昨日 例に出したサーバは www.jp.FreeBSD.orgのほか、 FreeBSD の最新版のソースを提供する CVSupのサーバ、メールの配送まで担当しています。 CVSup のような HDD へのアクセスが 激しい用途にも使えています。

信頼性についてですが、秋葉原で出回っている大容量 SCSI のほとんどが 10,000 回転の ものです。きちんと冷却して使える環境ならいいですが、でなければ高熱で マシン全体の信頼性を下げる結果になりかねません。寿命が短い IDE の話は よく聞きますが、高熱で自滅した HDD も何度か経験しました。

なお CPU の負荷は SCSI より若干高い気もしますが、 CPU を高性能にして解決した ほうが割安でしょう。


2000/5/27(Sat)

FreeBSD

_ Security Advisory

FreeBSD-SA-00:19.semconfigについて、記述の一部が 間違っているらしい。もうちょっと注意して出して欲しいなぁ。

Web 日記から

_ chain mail

gorry さんとこから ここへ。そして 日本医大の公式アナウンスへ。この手の chain mail は非常に迷惑だよなぁ。当事者は善意で回しているだけに 悲惨。特に医療関係ってネット上の常識がない人が多いから。

迷惑を受けるのはメールを普段からよく受け取る人と (病院側の) 当事者に限られて しまうので、迷惑さに気づかない人が多いのだろうな。


2000/5/28(Sun)

今日の出来事

_ 洗車

久しぶりに車を洗車してワックスがけ。ワックスかけたのはたぶん去年の秋以来。 非常に汚れていてとても疲れた。

_ 暑い

天気予報では週末は天気が悪いと言っていたような記憶があるんだけど、 今日は晴天でかなり暑くなった。夜になっても部屋の温度がなかなか下がらない。 扇風機を出した。

_ 訂正

一昨日のコードを一部訂正。あー、恥ずかしい。


2000/5/29(Mon)

今日の出来事

_ 運動会

今日届いた OB 会報を見て、いつのまにか こんなのが出来てたのでびっくり。時代が変わったんだな。

_ 再インストール

Windows の再インストール。 Windows98 Second Edition Upgrade をインストール するには、 Windows98 がインストール済みでないとダメらしい。まっさらからの インストールだと二度手間なので面倒。

_ ウィルス

昨日書き忘れたこと。おうち LAN につながっている父の PC では Microsoft の Outlook を使っている。 Microsoft のメールソフトは怖いので、念のために Norton Antivirus を買ってきてチェック...。

25 個も感染しているファイルがあるよ (@_@;;。 Microsoft Word に感染するタイプで 全部同一種類のウィルス。うーむ。

幸い、うちにある他の PC は問題なし。


2000/5/30(Tue)

環境構築

_ Windows

昨日に引き続き環境構築。 Adaptec EZ-SCSI のインストールに必要な ID 番号が 記された紙をなくして非常にあせったが、バックアップしてあった Windows の registry にそれらしき番号が記録されていたので助かった。

ところが、 EZ-SCSI を入れたあたりから Windows が挙動不審状態に。 やりきれないなぁ。

_ OpenBSD, NetBSD

Windows マシンである eddieに OpenBSD 2.7 を、 asukaに NetBSD 20000527 snapshot をインストール。これで NetBSD i386 を常用できる マシンができた。 OpenBSD も必要に応じてテストできるようになる。

今日の出来事

_ 買い物

夕方、犬の散歩のついでに近所の本屋で買い物:

後者は Raise the Titanic! で有名なダークピット・シリーズのサイドストーリー 的なお話。

_ 某仕事

の最後のやつが仕上がってきた。早速読んでチェック。


2000/5/31(Wed)

今日の出来事

_ 郵便局

夕方の犬の散歩で郵便局へ。 Wnn6 の追加ライセンスが期間限定で 1,575 円 / ライセンス (通常は 4,000 円) となっているので申し込む。ちょうど追加しようと 思っていたところなので良かった :-)。

某 DVD シリーズの第 1 期と第 2 期の全巻購入特典を申し込む。 600 円の定額小為替 x 2。

_ 宴会

某 ML に welcome 宴会のアナウンスを流す。会場が狭いのがネック。

NetBSD

_ インストールメモ

  1. ftp://ftp.jp.netbsd.org/pub/NetBSD/arch/i386/snapshot/20000527/ から 5/27 版の snapshot を入手。
    • installation/floppies/boot[12].fs
    • binary/sets/*.tgz
    • binary/security/secr.tgz
    が必要。 binary/ 以下は手元のマシンの適当な場所において FTP で取れるように しておく。
  2. installation/floppies にある boot1.fs, boot2.fs から dd を使ってインストール フロッピーを作成。
  3. ブートしてインストーラの指示通りに進む。 FTP インストールを選択して 1. で binary/ を置いた場所を指定すれば OK。

_ aout 互換環境の構築

NetBSD i386 の snapshot は既に ELF 化されているので、 1.4.X の aout バイナリを 動かす場合は aout 互換環境を作成する必要がある。

  1. ftp://ftp.jp.netbsd.org/pub/NetBSD/NetBSD-1.4.2/i386/binary/sets/ から base.tgz と xbase.tgz を入手。
  2. base.tgz から ./usr/lib/lib*.so.* を取り出して /emul/aout/usr/lib に置く。
  3. base.tgz から ./usr/libexec/ld.so を取り出して /emul/aout/usr/libexec に置く。
  4. xbase.tgz から ./usr/X11R6/lib/lib*.so.* を取り出して /emul/aout/usr/lib に置く (XFree86 関係の aout バイナリを使う場合のみ)。

普通はあまり必要がないかもしれないけど、私の場合は CVSupの NetBSD i386 aout 用の native なバイナリ *1を使いたかったので必要だった。

_ ソースを準備

  1. NetBSD の最新ソースを入手して /usr/src の下に展開する。 私のところではローカルで CVSup サーバを上げて FreeBSD, NetBSD, OpenBSD とも 利用できるようにしてあるので、 CVSup を使った。
  2. 以下の symlink を張る。
    cd /usr/src/basesrc
    ln -s ../cryptosrc-intl/crypto-intl .
    ln -s ../gnusrc/gnu .
    ln -s ../sharesrc/share .
    ln -s ../syssrc/sys .
    cd usr.sbin
    ln -s ../../syssrc/usr.sbin/* .
    

_ OpenSSL ソースの展開

NetBSD の crypto-intl には現在 RSA 関係のファイルが含まれていない。 利用する場合は OpenSSL のソースを別途入手する必要がある。現在の crypto-intl の OpenSSL は openssl-0.9.4 がベースになっているのでこれを使う。最新の 0.9.5a ではダメなので要注意。

  1. http://www.openssl.org/source/openssl-0.9.4.tar.gz を入手。
  2. 適当な場所に展開する。私は tar -C /usr/src -xzf openssl-0.9.4.tar.gz した。
  3. openssl のソースのうち crypto/rc5/*, crypto/rsa/* 以外は 必要ないので適宜 rm する。
  4. /etc/mk.conf で
    PATENTEDOPENSSLSRC=	/usr/src/openssl-0.9.4
    
    を指定しておく。
  5. PATENTEDOPENSSLSRC を指定した場合、 IDEA も有効になってしまう。 OpenSSL の README によれば IDEA は日本では特許の関係で利用できないようなので、 以下のパッチをあてる。
    --- cryptosrc-intl/crypto-intl/Makefile.openssl.orig	Fri Apr  7 21:03:36 2000
    +++ cryptosrc-intl/crypto-intl/Makefile.openssl	Wed May 31 19:41:52 2000
    @@ -10,6 +10,8 @@
     
     .if !PATENTEDOPENSSLSRC
     CPPFLAGS+= -DNO_IDEA -DNO_RC5 -DNO_RSA
    +.else
    +CPPFLAGS+= -DNO_IDEA
     .endif
     
     .endif
    --- cryptosrc-intl/crypto-intl/lib/libcrypto/Makefile.orig	Fri Nov 26 09:51:45 1999
    +++ cryptosrc-intl/crypto-intl/lib/libcrypto/Makefile	Wed May 31 19:44:08 2000
    @@ -57,7 +57,7 @@
     .if PATENTEDOPENSSLSRC
     .include "psrcs.inc"
     
    -INCS+=	rsa.h rc5.h idea.h
    +INCS+=	rsa.h rc5.h
     INCS+=	rsaref.h
     
     .PATH: ${OPENSSLSRC}/rsaref
    @@ -78,7 +78,6 @@
     .if exists(${PATENTEDOPENSSLSRC}/crypto)
     	(cd ${.CURDIR}; find ${PATENTEDOPENSSLSRC}/crypto/rsa \
     	    ${PATENTEDOPENSSLSRC}/crypto/rc5 \
    -	    ${PATENTEDOPENSSLSRC}/crypto/idea \
     	    -name Makefile.ssl | \
     	    perl ../../dist/openssl/extsrcs.pl \
     		-D '$${PATENTEDOPENSSLSRC}' 2> psrcs.inc )
    --- cryptosrc-intl/crypto-intl/lib/libcrypto/psrcs.inc.orig	Fri Jul 23 10:33:00 1999
    +++ cryptosrc-intl/crypto-intl/lib/libcrypto/psrcs.inc	Wed May 31 19:42:36 2000
    @@ -1,3 +1,2 @@
     .include "rsa.inc"
     .include "rc5.inc"
    -.include "idea.inc"
    
    この処理は面倒なので、 make する時に NO_RSA, NO_IDEA とか指定すればいいように cryptosrc-intl のソースに変更を加えておくといいような気がする。 誰に言えばいいんだろう?

_ build

/usr/src/basesrc にて make build する。いま実行中 :-)

_ symlink

こんな symlinkしないで basesrc, cryptosrc, gnusrc, sharesrc, syssrc の下を同じにしちゃえば *2いい気もするが、そうすると各ファイルが CVS リポジトリのどこに対応するか わからなくなってしまうので、あえてこうしている。

_ kernel

/usr/src/syssrc/arch/i386/conf にて、 GENERIC を書き換えて config file を書く。 FreeBSD の場合と違ってきちんと把握してないのでちょっと時間がかかる :-)。 soft update を有効にする場合、

cd /usr/src/syssrc
ln -s ../gnusrc/gnu .

を行う。


*1:FreeBSD emulator を使うしかないと思ってたのだけど、いつのまにか native なのも あった。
*2:なんかうまく説明できないが :-)


以上、11日分です。