優雅な生活の設計と実装

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 から取得することが可能です。

June 2000

Wednesday, June 28

sed script

うーん、SED の使い方を覚えようと思って起動設定スクリプト用に

whereis $COMMAND_NAME | sed '/^[a-z]*:/{
      s/ /¥
/g
      s/^[^¥n]*¥n//
'
:start
    #p
    /^[-¥/.A-Za-z0-9_]*¥/ucb¥/[-¥/.A-Za-z0-9_]*/b print
    /^[^¥n]*$/b end
    s/^[^¥n]*¥n//
    b start
:print
    P
:end
    s/^.*$//
    N
}'
     

というの(whereis の出力から ucb を含むものだけ切り出すやつ)をつくったけど、 FreeBSD ではちゃんと動くのに、Solaris では動かないみたい‥‥。 単に行分割して grep | head ってのは fork が増えるので、 なんとか sed だけでできないものか...

Monday, June 26

〆切まで 24 時間

ゼミの準備。なんか中途半端になってるけど、 時間がないので仕方がないとあきらめる。

投票

行ってません。 総理が直々寝てて良いと言われたので寝てました。 というか、そんな余裕がないくらい忙しいだけなんですけど。

某番組

アルファルファはいまいちかなぁ。 陣内は面白い‥‥けど、 一人芸は一歩間違うとふかわりょうの世界なので、どこまで続くか楽しみ。

Saturday, June 24

環境設定スクリプト

少ないファイルにまとめる形は、後から見直すと扱いづらいと感じたので、 archdepend と hostdepend を独立したディレクトリに分離。

もう一つ、alias の扱いがプラットフォームで結構違っているという問題。 Solaris の sh は /bin/alias 依存、HP-UX も一緒。 機能的には無くしてしまっても良いのだけど、 .alias ファイルを独自フォーマットにして read で読むことにする。 あとは、ユーザのカスタマイズがまだめんどうなので、そこらへんを改良しなければ。

Tuesday, June 20

from FreeBSD doc-jp

doc-jp で指摘された FAQ の直し + 1.45 から 1.51 の merge を行ないました。

02:21AM

今週はほとんど寝る暇なし。眠くてしかたがないぞ。

cvsup.jp.FreeBSD.org

ここ二・三日、CVSup サーバが limit exceeded でつながらない。 混んでいるのかなぁ。リリース時期はまだのはずなんだけど‥‥

Monday, June 19

from FreeBSD doc-jp

翻訳の査読をぼちぼち。 handbook の merge from the English version と www/ja/conspectus を追加。

回路シミュレータ on FreeBSD

Berkeley の SPICE3f5 と mosis の MOS モデルパラメータを組み合わせてシミュレーション自体はできる。 cad/cider は SPICE3 + ディジタル? マニュアル読んでないので良くわからないけど‥‥

まあ、Star HSPICE や PSpice に比べて解析命令に制限があるのがちょっときついけど、 出力結果を二次的に処理すれば FFT みたいなものは同等の機能が実現できるのではないかなぁと思う。 ただ、MOS モデルパラメータが LEVEL 6 までという解析エンジンの制限はどうしようもない。

Gnuplot と Perl, Emacs-lisp で統合環境を書いてみるのも面白いかも知れない。 あとは、ネットリストがきちんと出力できる回路図エディタが必要か。

Friday, June 17

産業用バーチャルリアリティ展

お勉強のため、IVR2000 を見に行く。 午前中はごろごろしていて出発が遅れたものの、12:30 頃会場に到着。

PHANTOM という 6 軸制御のフォースフィードバックインターフェイスを体験してみる。 画面上のオブジェクトをつつくと、感触が伝わってくるというデモだったけど、 さすが業界標準と呼ばれるくらいで、なかなか良くできていると思った。 ただ、装置の可動範囲が狭いので、それが気になる。

サミーという企業が出している三次元立体映像装置に感動。 構造は、単なる穴の中にものを入れると、 穴の開口部にその物体の映像が浮かび上がるというもので、 聞くところによると、光学系だけで実現しているとのこと。

東工大の佐藤研が出しているブースでは、マウスの代わりになるような、 弦張力を使った三次元入力インターフェイスを展示していた。

研究つづき

積和型ニューロンをカレントミラー主体で構成するための電流モードのしきい値回路を考える。 CVC の出力を差動段に入れて電流差として出力する回路が良く使われるらしいので、 それの縦積み構成をなんとか少なくできないかと思い中。 シミュレーション結果はかなり良好。

Wednesday, June 14

おやすみ

有明に行ってこようかと思いつつ、 天候と疲れていることを理由に中止。 ひさびさにゆっくりする。

環境設定スクリプト

前回のやつは、Solaris の sh で動かないことが判明。原因は、シェルに組み込み alias コマンドがなく、 /bin/alias の一覧表示と FreeBSD の ash の一覧表示に食い違いがあったため。

alias の一覧表示ルーチンを以下のように変更。

IFS=' '; alias | while read IN;
do
    IFS='= '; set $IN; IFS=' ';

    ### for Solaris's /bin/alias
    if [ "x$1" = "xalias" ]; then
        shift;
    fi
    key=`echo $1 | sed -e "y/'/ /" `;
    shift;
    value=`echo $* | sed -e "s/'//g" `;
    echo "alias $key=¥"$value¥";" >> $CACHE
done

また、local 宣言が使えないようなので、これも修正する必要アリ。

Monday, June 12

スピーカ

PC につないでいる小さいアクティブスピーカを買い替える。 GATEWAY2000 のやつ(製造元は ALTEC LANSING MULTIMEDIA)を 使っていたのだけど、ちょっと前から AC アダプタから異音が出るようになったので、どうにかしたい と思っていたところ、オーディオテクニカの定価 15,000yen のやつが 3000yen で投げ売りされていたので衝動買い。妙に高いなぁ、スピーカって。

うーん、サテライトスピーカも良いんだよなーとか思っているけど、 お金ないので今のところはパス。 オーディオ周りがごちゃごちゃしてきているので、 それよりもマトリクススイッチが欲しいかな。

Saturday, June 10

今週買った本

Friday, June 9

眠い‥‥

うーむ、日付が変わってしまった。 ゼミ資料の最終チェックを行なう。

Thursday, June 8

ゼミ

結局、シミュレータをメインにする。 回路はきちんと検証していないのでボツ。

Tuesday, June 6

gnuplot

Solaris7 に gnuplot を入れる。 ./configure すると、 -lpng や -lgd でファイルが見つからないと(ファイルはあるのに)怒られたので、 --with-png=no --with-gd=no とする。どうせ使わないし。 原因究明している暇もないので、とにかく動けば良し。

from FreeBSD-doc <20000605221314.B4925@kilt.nothing-going-on.org>

なに〜。&ldquo; ってわざとやっていたんじゃないの? ぐー、日本語版は全部 quote タグに直せばよかった。こういうのは早めに言ってくれないとねぇ。 翻訳チームは、みんな英語の書式が正しいと思っているのよ。

Monday, June 5

研究つづき

ゼミが近いので研究の続き。n-layer perceptron のシミュレータを実装する。五月の連休につくったものを改良して、 訓練係数とモーメントパラメータを追加し、学習データを標準入力からとるようにした。

非線形関数はシグモイドロジスティックで、ユニットのバイアスは省略。 学習法はバックプロパゲーションで、訓練係数とモーメントパラメータを使っている。 三層でユニット数が 1 2 1 の密結合ニューラルネットワークに線形な関数 y=x を学習させると、二乗誤差が約 0.25 となった。 学習データは 0.1, 0.2, ..., 0.9 という 0.1 きざみの点列。 妙な勘違いからコーディングミスしていて、なかなか収束しなかったけど、 一点のときに任意の精度で収束しているので、アルゴリズム的には OK のもよう。

ニューロン MOS トランジスタで実装することを考えると、 負の重み行列をどうするかという深刻な問題がある。 うーむ、どうしよう。

Sunday, June 4

環境設定の一元化計画(つづき)

ホスト、OS でキャッシュを分離して、きちんと更新されるように修正。 さらに、ユーザカスタマイズ用に .setenv.mine と .xinitrc.mine を増設。

これで、ユーザが書き換えるのは *.mine だけになったはず。 実際には $PREFIX/homerc あたりにおいて、 ユーザの $HOME には、それを呼び出すスケルトンと *.mine をおいてもらう。 管理者が $PREFIX/homerc をきっちり面倒を見てやれば、 アーキテクチャ混在のネットワーク環境でも、 一貫性のある設定ができる‥‥と思う。

うーむ、考えてみれば OS とアーキテクチャの分離はできてないので、 .archdepend というのは用語的に変だったり。 でも、同一 OS、異なるアーキテクチャの構成を共有するとして、 環境変数レベルで設定に差をつくることはあんまり考えられないと思う。

まあ、とりあえず気にしないでおく。真面目にサポートすると キャッシュの切り分けも、もう一段階しなくちゃならない。 今は .setenv.cache.$OSTYPE.$OSVERSION.$HOST.$SHELL という分け方なので、alph というホストで FreeBSD 4.0-STABLE を使っていれば .setenv.cache.FreeBSD.4.alph.sh というキャッシュに保存される。

アーキテクチャを追加すると、 .setenv.cache.FreeBSD.4.i386.alph.sh あたりになるかな‥‥。判断基準は uname -m-p。 んー、あとは .osdepend.archdepend に分離すれば実現できそう。 でも、同一 OS で異なるプラットフォームって、 環境変数レベルで設定が変わったりしないような気がする。 プラットフォーム依存の path ってなくはないけど、 明示的に指定しなければならないようなものでもないだろうし。

とりあえず、この構成で使い続ける予定。

CVSup

メインマシンの CVSup が 16.0 のままだったので、 16.1 に更新。まともに build するのは大変そうなので FreeBSD の package から。 C 版があれば、幸せになれる人がもっと多いんじゃないかと思うのだけれど‥‥。

今週買った本

cvs book を買おうかなと思った矢先に発見したので購入。 既存 repository の操作はだいたいできるけど、 新規の立ち上げとか、 タグやブランチのあたりは良くわかっていないのでお勉強。

ウナクール

CM が耳につく‥‥。連続で流すなよ > 某民放

NHK 総合

むー、録画予約しておいたらハリガネロックしか録れていないし。 ドランクドラゴンが観られなかったのはつらい(いや、つらいほどでは)。

Saturday, June 3

環境設定の一元化計画

前につくったスクリプトを改良。 まず、名前を $HOME/.sh/.setenv にして、 .setenv + .setenv.inc + .archdepend + .hostdepend + .aliases の五つに分離。 .archdepend では、アーキテクチャ依存の変数、 .hostdepend では、ホストマシン依存の変数を定義する。

全部 .setenv から include するので、 $HOME/.cshrc$HOME/.profile からの呼び出しは前のものと同じです。

ファイル数を増やしたことと、 重複チェックなどの処理に負担がかかることを考えて、 キャッシュファイルを作成するようにしてあります。 設定ファイルに変更がなければ、キャッシュの内容を cat するだけなので、速度的にも問題はないでしょう。

実際の構成ファイルは以下のとおりです。 まだ FreeBSD でしか試していないので、 他のアーキテクチャの設定は適当なままです。

流れとしては、まず .setenv の呼び出し、 次にキャッシュ $CACHE_* をチェックして、 古ければ .setenv.inc にある create_cache 関数を実行。 create_cache では .archdepend, .hostdepend. .aliases を読み込んで、 各種環境変数の定義をキャッシュファイルに記録する。 最後に、このキャッシュファイルを cat しておしまい。 使う場合は、.cshrc, .profile の先頭で実行し、 結果を eval すれば OK。

まだキャッシュが手抜きなので、ホストやアーキテクチャが異なっていて、 ホームディレクトリが共有されているような環境では、 キャッシュ情報がうまく反映されない。 とりあえず、これをきちんとしようと考え中。

Friday, June 2

研究室環境(6)

研究室の gateway マシンに ipfilter を入れて NAPT box をつくる。いくつかのマシンの /etc/defaultrouter 設定も終了。 やっとシームレスに外へ出られるようになったぞ。