優雅な生活の設計と実装

The Design and Implementation of the Gracious Days


LAST MODIFIED: 2002/02/03 07:36:04 UTC

新しい秩序の確立は、他の何にも増して難しく、
成功する可能性が低く、危険な事業である。
改革者は旧秩序から利益を得ている
全ての者を敵にまわし、
新秩序から利益を受けるはずの者からは
及び腰の支持しか集められない。
--- Niccolo Machiavelli, The Prince

この種の「保護」は初心者を保護するかも知れないが、
熟練ユーザを窮地に追い込むことになる。
というのは、何が親切であり、何が適切でないかかという
オペレーティングシステムの考え方の裏をかくことばかりに
かなりの労力を費やさなければならないからである。
--- A.S.Tannenbaum, Modern Operating Systems


不定期更新の日記です。ディスクスペースの関係上、 あまりに古くなったものは順次消していきます。 この日記の更新は、今野さんの *BSD Diary Links から取得することが可能です。

May 2000

Wednesday, May 31

ログインスクリプト

異なる OS の間で同じログインスクリプトを使うために、 環境変数の定義などを分割してみる。 環境変数自体は、別スクリプトにしてしまうと親プロセスに変更が伝わらないので、 eval を使って import できるように、次のようなものをつくってみる。

#!/bin/sh
#
# .sh_setenv - script for environment variables.
#
# written by Hiroki Sato
# $Id$
#
# usage:
#
# from tcsh:
#    if ( -f ${HOME}/.sh_setenv ) then
#        eval `${HOME}/.sh_setenv -c`
#    endif
#
# from sh:
#    if [ -f ${HOME}/.sh_setenv ]; then
#        eval `${HOME}/.sh_setenv -s`
#    fi

### -s for sh, -c for csh/tcsh
getopts s,c OPT

### import arch-depend variables
. ${HOME}/.sh_archdepend

### configurations of mandantory variables(set in .sh_archdepend)
#PREFIX=/usr/local
#XBASE=/usr/X11R6
#PASTE=/usr/bin/paste
#SED=/usr/bin/sed
#UNIQ=/usr/bin/uniq
#GREP=/usr/bin/grep
#SORT=/usr/bin/sort
#PATH=/bin:/usr/bin

### system related variables
LANG=ja_JP.EUC
EDITOR=vi
PAGER=jless
TMPDIR=/tmp
MAIL=/var/mail/${USER}
BLOCKSIZE=K
PRINTER=lbp
JSERVER=localhost
NNTPSERVER=news
PERL_BADLANG=0

### PATH
PATH_A="/sbin /usr/sbin"
PATH_B="$PREFIX/bin $PREFIX/libexec"
PATH_C="$XBASE/bin"
PATH_D="/usr/ucb /etc /etc/libexec /usr/local/jdk1.1.8/bin"
PATH_E="${HOME}/bin ${HOME}/local/bin"
## concatnate PATH_* into PATH_Z
IFS=': '; set $PATH_A $PATH_B $PATH_C $PATH_D $PATH_E; IFS=' '; PATH_Z=$*;

### MANPATH and LD_LIBRARY_PATH
PATH_MAN="/usr/share/man /usr/X11R6/man /usr/local/man"
PATH_LD="/usr/local/lib ${HOME}/local/lib"

# If this var is defined, report odd errors.  I wonder.
#setenv SGML_CATALOG_FILES "/usr/local/share/sgml/catalog"
#setenv SGML_CATALOG_FILES "${SGML_CATALOG_FILES}:/home/hrs/doc-jp/doc/share/sgml/catalog"

### list of export variables
EXPORTS="${EXPORTS}¥
        PATH MANPATH LD_LIBRARY_PATH LANG EDITOR PAGER ¥
        TMPDIR BLOCKSIZE PRINTER JSERVER NNTPSERVER PERL_BADLANG"

### define a function to check for existence of the directory
dircheck () {
    local key value;
    ### variable name to be set
    key=$1;
    ### remains are value to be set
    shift; IFS=': '; set $*; IFS=' ';
    ### check for existence of the directory    
    for i in $*
    do
        if [ -d $i ]; then
            value=${value#:}:$i
        fi
    done
    echo "$key=$value";
}

### define a function to export a variable
defenv () {
    local key value;

    key=$1;
    value=`eval echo ¥¥$$1`;
    if [ "X${OPT}" = "Xc" ]; then
        echo "setenv $key $value;"
    else
        echo "$key=$value; export $key;"
    fi
}

### export routine ...................................................
for EXPITEM in $EXPORTS
do
    case $EXPITEM in
    PATH)
        ### check PATH multiplicity
        DOUBLLET=`echo $PATH $PATH_Z | $SED 'y/ :/¥n¥n/' | $SORT | $UNIQ -d | $PASTE -s -d '|' -`
        PATHLIST=`echo $PATH_Z | $GREP -v ¥($DOUBLLET¥)`
        eval `dircheck PATH $PATH $PATHLIST`
        ;;
    MANPATH)
        eval `dircheck MANPATH $PATH_MAN`
        ;;
    LD_LIBRARY_PATH)
        eval `dircheck LD_LIBRARY_PATH $PATH_LD`
        ;;
    esac
    defenv $EXPITEM
done

使うときは、.profile.cshrc から eval `${HOME}/.sh_setenv -s` すれば OK。 PATH は重複していると気持ち悪いので、チェックしておく。 重複チェックに時間がかかるのが難点。

とりあえず動いているけど、 時間がかかるし、処理が美しくない‥‥。 もっと勉強せねば。

Monday, May 29

研究室環境(5)

やっとこさ WindowMaker を入れるまで終了。 メインで作業している SP/20 は全然安定していなくて、コンパイル中に原因不明の panic で良く落ちる‥‥。 スタンドアロンでの環境がほぼ整ったので、 ネットワークなどの設定に移る予定。

研究の続き

MOSFET の縦積みの解析をしているのだけど、 うまい方法が見つからない‥‥。 n 段とか積み重ねると飽和領域での動作条件がわかりづらいし、 そもそも大振幅で使う場合は解析そのものがものすごく難しいと思うのだけれど。

Sunday, May 28

研究室環境(4)

文書化しておかないと後で苦労しそうなので、 Solaris 環境のインストールメモをまとめることにする。

xdm

家の FreeBSD 環境では console から login していたのを、 xdm を使ったものに変更する。/usr/local/etc/rc.d に xdm.sh を入れて、 Xservers に -dpi 100 を追加、Xsession に ssh-agent の起動を追加。 chmod 700 ${HOME}/.xinitrc; ln -s ${HOME}/.xinitrc .xsession として終了。

まあ、console でも構わないし、 xdm を使う積極的な理由があったわけでもないけど、 なんとなく。

Friday, May 26

大学院学内選考(2)

面接を受ける。

Thursday, May 25

大学院学内選考

‥‥の一日目。佐藤は関係ありませんけど。

研究室環境(3)

SP/20 で kinput2-v3 をコンパイルして入れる。 /usr/lib/locale/ja/wnn/demo/include/wnn と /usr/lib/locale/ja/wnn/demo/lib か。 なぜか JSERVER を localhost にすると落ちるので、 unsetenv JSERVER で対処。local ならうまく行くようだけど、原因は不明。

コンパイル中に panic が何度も。 この SP/20、触れないほど熱いんですけど‥‥ 空気穴を塞いでいるわけでもないし、この熱で落ちているんだろうか‥‥

WindowMaker を入れ終わったら、ネットワークの整備に移ろうっと。

Wednesday, May 24

正帰還回路

OPamp + 抵抗 2 本の逆相増幅回路の入力端子を入れ換えて正帰還にしたらどうなるか、 という問題をカリカリ解く。

まず、代数方程式で伝達関数を求める方法はダメ。 これは安定点を暗に仮定してしまっているので、負帰還と符号が違うだけの答が出る。

次に、仮想的な時間遅れ要素を追加して、 正相入力端子と出力端子の電位に対する差分方程式を出し、∞の極限をとってみる。 この方法だと集積点の存在をうまく説明できるけど、正帰還の方は AH = 1 のときに集積点が存在しないことしか説明できない。 そもそも、時間遅れ要素を入れて良いのかという根本的な部分が厳密さを欠いているので、 これもパス。

最終的に、入力インピーダンスを∞とする場合の回路方程式から、 sgn(v_o) = sgn(v_+) の拘束条件を考えて安定点を求めるという方法で説明できそう。 結局のところ、v_+ = 0 が安定点である(A → ∞として)なので、 入力の微小変位に対して、それぞれの帰還が安定点からどのように偏位するか、 という問題に帰着できる。これを解くと、 正帰還はリレーと同じでヒステリシス特性を持ち、負帰還は線形になることが得られる。 めでたし、めでたし。

いろいろな本を調べてみたけど、きちんと議論しているものはないみたい。 制御系の本では、リレーを使った非線形フィードバック系を解いているところがあるけど、 積分要素は存在しないから、そのまま適用はできなさそう。 うーん、あんまりエレガントな方法じゃないなぁ。 もっときれいな(一般的な)手法ってないのかしら‥‥。

Monday, May 22

from FreeBSD doc-jp

SA の翻訳(で、まだ提出していなかったもの)を一気に放出。 本当は、こんなに遅れてしまうとまずいものなんですが、 最近時間がありません‥‥。

Sunday, May 21

Sylpheed

Sylpheed という Gtk+ を使った mailer を試してみる。 うーん、見ためはきれいだし、初心者向けに良いかな。 研究室に入れてみようかと思い中。

Saturday, May 20

from FreeBSD announce

これって FreeBSD Handbook と同じものなんだろうか‥‥ (だとしたら、一体いつの revision なんでしょ?)

祝賀会

品川までは高々 1 時間なので余裕を持って 15:00 頃 (あんまり気が進まないけど)出発。 ‥‥んで、16:15 頃到着。誰か来ないかな〜と待っていたら、 兵庫先生と M1 の面々と合流。M1 の集合時間は 16:30 だったそうな。 B4 はとりあえず、看板を持って立ち番を 1 時間ほどやりました。

祝賀会がはじまってからは特にすることもなし、 適当に食べて、ひたすらワインを飲む。 さすがにずーっと立っているのはつらい。 関根先生のお孫さんが元気に走り回っているし。 20:00 頃、終了。記念品を渡して、持ち帰るものを分担して解散。 ‥‥のはずだったけど、B4 だけで二次会へ。

二次会は上野。参加は以外と多くて 12 人。 居酒屋なので単に飲む・食べるだけ。 終了は 23:20 くらいかな。

Friday, May 19

from FreeBSD doc-jp

日本語を使うための英文資料は、 やっぱり貴重だと思います。この湯原さんの文書を元に、目指すは books/handbook/l10n。

Tuesday, May 16

@研究室

M2 の発表を聞く。むむ。exp(x) 近似は使えそうだぞ。 問題は、電流モード or 電圧モード回路の問題か。 νMOS を使えば入力は問答無用で電圧だよなー。 点列記憶 → 関数近似のアイディアって他にありそうなんだけど、 何か見当たらないのが不思議。

Monday, May 15

from FreeBSD man-jp

。 品質に文句があるなら、自分でやれば良いのに。 T.F さんとは一度、メールのやりとりをしたことがありますが、 個人的にあんまり良い印象を持っていません。

「機械翻訳に手を加えた程度」ですか‥‥。 佐藤の翻訳だってレベルの高いものではありませんから、 こうやって思われているのかも知れませんね‥。 翻訳の専門家でもない、理系の学生ができる翻訳なんか、 たかが知れてます。理科大は英語ができない大学で有名ですし(← と開きなおってみる)。 :-P

「原文を読んだ方がよっぽどマシ」という翻訳は確かにたくさんありますが、 もし、自分のやっている作業に対して、 それなりに活躍されている方からそう言われたら、結構ショックです。

Sunday, May 14

from FreeBSD users-jp: SC-UPCI + sym のまとめ

とりあえず、FreeBSD users-jp に出たスレッドをまとめて Q and A に提出しました。ずっと sym を使っていますが、 NVRAM 機能以外は好調です。ncr って残るんでしょうかね。 その点が一番心配なのですが‥‥

FreeBSD Security Advisory

SA の翻訳続き。From がダブっているのはどうにかならんですか。 結構、翻訳が難しい部分がちらほら。

(続き)チェックが入ったので修正版を提出。 月曜日の夜には出せるかな?

Saturday, May 13

from FreeBSD doc-jp

www/ja/java と www/ja/security の更新。 SA 日本語訳のリンクを追加する。

How to update NetBSD repository with CVSup

http://www.unixmagic.org/ml/netbsd/199912/msg00141.html を参考に、CVSup で repository を更新する(元ネタは NetBSD-current)。 supfile は host を cvsup.de.freebsd.org にしてやれば良いようだ。

ところで、repository のディレクトリ配置/permission ってどうするのが適切なんでしょう? 佐藤は /home/ncvs に FreeBSD を, /home/cvs/{Net|Open}BSD にそれぞれの repository を置いています。owner/permission はそれぞれ ncvs:ncvs, cvs:cvs と 0775 です。repository を利用するユーザは cvs/ncvs group に参加させます。

もちろん、read-only な使い方しかしないので、最低限読めれば困りませんが、 CVSup で同期させるときに、一般ユーザでやってしまうと全部そのユーザが owner になってしまうのがちょっと気持ち悪いかな、と。

Thursday, May 11

from FreeBSD doc-jp

Security Advisory の翻訳をぼちぼち。 18 を提供してくれた人がいたので、それはパス。 ぶつからなくて良かった‥‥。

from FreeBSD doc <20000509143555.A1692@kilt.nothing-going-on.org>

文書に画像を入れるって? 機能を盛り込む前に、できていないものを完全にしようよ。 考え自体は悪くないけど、いろいろなものに手を出しすぎ。 できること、求められていることをもう少し考えて欲しいな。

Sunday, May 7

連休

法事のため、田舎の山形へ行って帰ってくる。 そこで n 層 perceptron シミュレータを書く。 C++ を使ったのは久しぶりだけど、 小さいプログラムなら C より楽だなーとか思い中。 Pentium 100MHz のノートでは gcc295 のコンパイルが結構辛い。 原因不明のメモリ不足のエラーが出て困る。

進学

とりあえず、学内選考で行こうかと決心する。 博士まで行くつもりだけど、いろいろ思うところあって、 学内では行かない方向で。