優雅な生活の設計と実装

The Design and Implementation of the Gracious Days


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

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

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


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

September 2000

Saturday, September 30

Free DNS Registration

IP アドレスをいちいちメモして外出するのが面倒に感じたので、 yi.org に登録してみました。 yi.org とは Flets ISDN のような IP 不定のダイヤルアップ向けの無料 DNS サービスで、グローバル IP アドレスであれば すぐに「自分の好きな名前.yi.org」のドメイン名を発行してくれるところです。 もちろん単に IP アドレスにドメイン名をふるだけでなく、 primary MX, secondary MX の設定と wildcard CNAME, NS redirect が可能とサービスは結構充実しています。 ダイヤルアップして IP アドレスを受け取ったら、 専用のクライアントを使ってそのアドレスを送信すると動的に DNS の登録アドレスが変えられるので、IP が頻繁に変わる環境で利用できます。

いろいろ見て回りましたが、他には dhs.orgeu.org がありました (eu.org は静的 DNS)。 hrs の名前は既にとられていたので使えなかったので、 hrslab.yi.org をとって試験的に使っています。

Thursday, September 28

from FreeBSD doc-jp

不具合の修正と指摘されていた articles/multi-os の refine をしました。

2nd half

学校が後期の講義期間に入ったので混む混む。 三号館は工事中。何か増設するらしいです。 クレーン車がコケてプレハブを一つ潰したとか潰してないとか。

flets ISDN

ごくたまーに遅くなる時があるんですが、 速度的には申し分ないと思います。 13 日間で 2 回ほど PPP の idle timer が timeout して落ちました。 すぐにダイヤルし直せばつながるので実質的な障害ではないのですが、 IP addr が変わってしまうので外からアクセスしようとすると問題です。 パブリック DNS サービスでも使おうかなと思う今日この頃。

Wednesday, September 27

weekly diary

最近は更新している暇がとれないくらい忙しい。

FreeBSD-SA の翻訳完了、 jp.OpenBSD.org の翻訳と PicoBSD の翻訳を (気まぐれで) 始めました。

Sunday, September 17

Flets ISDN #2

連続接続二日目。

leafnode+ をきちんと設定する。 sut.* は news.ed.noda.sut.ac.jp へ、その他は ocn のニュースサーバへ送る。 投稿は Mew+IM を使うので、config で From を切り替え。

Message-Id を付けるとちょっとまずいので、 leafnode+ を -DNOMSGID で再構築。

RS/6000

こういうことするバカがいると、 今度は研究室にまわってこなくなるかも知れない。

Saturday, September 16

Flets ISDN

Flets ISDN が開通したので常時接続環境になりました。 たまーにパケットがロストする現象が起きていますが、 佐藤の環境では、おおむね速度が出ています。 外に出るまでの hop 数が 8 と多めです。 パケットのロストはその近辺で起きるので、 ルーティングがうまく行っていないのか、 帯域が足りないのか‥‥

IP アドレスはグローバルですが、接続する度に変わっています。 ずーっと繋げっぱなしにしていますが、TA が持つかどうか微妙なような気がします。 液晶パネルがついているタイプなのですが、 長時間接続していると表示される接続時間が変なんです。 実害はないんですけどね。

trip #2

ゼミ旅行は「疲れた」の一言。 ホテルの朝食が一番まともだった気がする‥‥ 毎晩飲みに行っていたのでお金が大変。:-(

M17 #2

mozilla をメインに使おうと思ったら、 ブックマークの編集が死ぬほど遅いことが判明。 これじゃ使えないじゃないですか。 しかたがないのであきらめる。 うーむ、くやしい。M18 に期待。

Sunday, September 10

trip

今日から旅行の予定。帰ってくるまで IP unreachable です。

Saturday, September 9

from FreeBSD doc-jp

FreeBSD セキュリティ勧告の翻訳を提出。 ちょいと訳がいまいちなところがあるけれど、 賞味期限が切れる前にどんどん処理しないとダメですな。

Thursday, September 7

東武野田線

研究室に行こうとしたら、電車がストップしているらしい。 復旧まで二、三時間かかりそうなので帰宅。

RSA patent has been placed in public domain

RSA 特許が public domain に。 これで暗号関連のソフトウェアの使用制限がかなり緩和される。 FreeBSD の CVS リポジトリでも変更が入った。

Wednesday, September 6

Mozilla M17

Mozilla M17 をインストール。 ちょっと遅い感じがしますけど、結構まともに動くではないですか。

そんなわけで、 Netscape4 のスタイルシートにはいい加減嫌気がさしてていることもあり、 これ以後、ページのチェックを M17 で行なうことにします。 Netscape4 も併用するので正常にみられないページになる可能性もあまりありませんが、 見た目は汚くなってしまうでしょう。多分。

Tuesday, September 5

0:00 帰宅

研究室にいた B4 メンバと食事をして帰宅。

Monday, September 4

Rendering Engine

ふとページの構成を Internet Explorer で見たところ、 あんまりきれいに出ないことに気付く。 ちなみに手間をかけたくないので Netscape Navigator でしかチェックしてません。 スタイルシートの実装がぼろぼろなので、 今は IE の表示の方がよっぽど正しく出ます。 Mozilla も少し使えるようになってきているので、 ちゃんとチェックしようかなと思い中。

From FreeBSD doc-jp

FreeBSD-SA-00:41.elf の a sign overflow bug の意味が良くわからないのでソースを追ってみる。

${SYSSRC}/kern/imgact_elf.c の

static int
elf_load_section(struct proc *p,
        struct vmspace *vmspace,
        struct vnode *vp,
        vm_offset_t offset,
        caddr_t vmaddr,
        size_t memsz,
        size_t filsz,
        vm_prot_t prot)

で elf ヘッダにあるファイルサイズ size_t filesz と オフセット off_t offset からマップするページ数 size_t map_len を

file_addr = trunc_page(offset);
map_len = round_page(offset+filsz) - file_addr;

と求めているのがまずい感じ。これは

vm_map_insert(&vmspace->vm_map,
        object,
        file_addr,          /* file offset */
        map_addr,           /* virtual start */
        map_addr + map_len, /* virtual end */
        prot,
        VM_PROT_ALL,
        MAP_COPY_ON_WRITE | MAP_PREFAULT);

に渡されて、最終的に pmap_init_pt へ map_len が伝播。 map_len は size_t の大きさを持っていることから offset+filesz > 2^(8*^sizeof(size_t)) のときに offset+filesz は負方向にラップアラウンドしてしまい、 unsigned で考えると非常に大きな値になる -> がんばって alloc しようとして止まる、という模様。

なんとなく違う気もするんですけど‥‥ :-(

Sunday, September 3

OpenBSD

OpenBSD の CVS リポジトリを CVSup。 なんか壊れたらしくてものすごく時間がかかる。

ふとログを見ると src/usr.sbin/httpd なんてものを発見。 さすがって感じ(なにがだ)。apache をソースツリーに取り込んでいるのは OpenBSD くらい? 考えてみれば FreeBSD に入っていても不思議ではないけど、 あんまりでかいものがツリーに入っているのは抵抗がある。

www-cgi.ed.noda.sut.ac.jp

久しぶりにチェックしたら、08/14 あたりからサービスが停止してるみたいです。 カウンタや過去試験問題へのアクセスに支障が出てます。 後期が始まる頃には直ると思いますけど‥‥

Saturday, September 2

from FreeBSD announce-jp

Security Advisory がたまってきたので翻訳に手をつける。

重要な文書なのだから、typo は勘弁して欲しい‥‥。 んー、大変な作業だっていうのはわかるんですけどね。 公開前にもう一段階、誰かがチェックすれば防げるものではないかしら。

Friday, September 1

フレッツ ISDN

ようやくエリア拡大されて利用できるようになったので申し込み。 9/15 から使えるとのこと。 ISP は OCN。判断基準は口座の引き落としで代金が支払えるかどうか、 というところだったのですが、rim.or.jp は +500 円追加なのでパス。 シェルアカウントは魅力的なんですけどね。 理科大の端末もあるし、研究室の端末もあるし‥‥と、 そんなに不自由は感じなかったり。

最近、比較的重要度の低いメイリングリストをいくつか登録解除。 メール受信量は FreeBSD の cvs-all を筆頭として、現時点で平均 200 通/日くらい。SPAM もたまーに来るようになりました。

RICORA の C 言語講座

うーん‥‥。こういうこと書くのは気分の良いものではないんですが、 世間様に公表するには、説明が偏っていると思います。 自分の勉強もかねて、気になった部分を考えてみました。

まず最初に変なのは、void main() と関数定義しているところ。 RICORA ML でも指摘しましたけど、 いまどき、こんな書き方をすすめるというのは、 テキストが悪かったのではないでしょうか? ちなみに、参考文献としては

があげられています。前者は佐藤も改訂前のやつを持っていて、 C 言語の勉強にも使ったのですが、 ぼろぼろ間違っている箇所が出てきたので、とてもおすすめできません。 唯一、アスキーコード表が便利なので、そのためだけに本棚に置いてあります。

しかもこの本、刷を重ねる度にちょこちょこと文章が書き変わっていて、 ある刷では間違っていて、ほかの刷ではあっているという、 非常にわかりにくい代物になっています。 テキストとしては使いにくいことこの上ありません。

ちなみに佐藤がひっかかった間違いは、

でした。二つ目のやつは直っている版を見せてもらったことがありますけど、 一つ目のやつは最近の版では直っているんでしょうか?

‥‥というグチはさておき、気になる部分を書いてみます。

void main() という関数定義

すでに指摘してあるのでノーコメント。

#include しないときの挙動

http://www.iris.dti.ne.jp/‾yoccho/ccs/cs20.html からの引用です。

結論は間違ったものではありませんが、理由は嘘です。 コンパイルできれば、そのコンパイラではそうしても構わないように読めますが、 #include を行なわないと型検査が行なわれないという大きな違いがあります。 検査が行なわれないとコンパイル時に正しくエラーが表示されないなどの不具合があるので、 必ず入れなければなりません。もちろん、入れないのは ANSI C 規格違反です。

http://www.iris.dti.ne.jp/‾yoccho/ccs/cs30.html からの引用です。

「データ型と修飾語」とは、データ型が int, char, float... で 修飾語が unsigned, long などを指していると書かれていますが、 気持ちはわかりますが、誤った一般化の仕方だと思います。 正確には signed int で一つの型の宣言子を構成しますので、 両方を省略するとかそういう次元で一般化できる話でもありませんし、 修飾語などの造語で呼ぶのは const などの「型修飾子」と紛らわしく、誤解を招きます。 int 型に signed がついているんじゃなくて、「signed int」という型なんです。 short char とか short float とか書くことはできませんし。

嘘です。型理論の研究者に対する侮辱ですよ、これは‥‥。 型とはある集合を定義し、その要素間の演算や型同士の変換規則を持ちます。 そのため、型によって意味の抽象化やコンパイル時の型検査が可能になり、 プログラムの表現能力、正当性の向上のために役立つものです。 控え目に考えても、型はデータの表現能力や抽象化、 プログラムチェックに関わるものであって、速度や効率を高めるためではありません。 計算の効率を重視するなら、レジスタ幅の変数だけでなんとかするべきでしょう :-P

そもそも、関数型とかどうやって説明するんでしょ?

嘘です。変数に値を入れずに参照するというのは良くない傾向ですが、 初期化するかどうかとは無関係です。 そもそも、変数の宣言と定義の区別をしていないというのがおかしく、 「宣言しただけでは使えず、定義することが必要。定義されていても、 初期値が不定の自動変数は、値を代入せずに使うべからず」というのが まっとうな考え方のような気がします。 初期化式と代入は、集合型になるとまだ違ってきますし‥‥。

区別していないのは、 単に宣言と定義の違いを知らないのかも。


‥‥こういうの書くと、「いや、そんな細かいところはどうでも良いんだ、 単に Windows で簡単なプログラムが組めることを目的とした、 初心者向けのものだから‥‥」とか言われそう。 あ、誤解されると悲しいのできちんと書いておきますが、 何もいちゃもんつけようと言うわけではないですよ。 もし、文句を言うつもりなら直接、筆者に伝えますし、 そうしていないのは、いらぬお節介だろうと思っているからです。 ただ、指摘したような箇所は著しく偏っているので、 信じる人がいると思うと悲しいです。

そもそも、

を、同時に説明するのは生やさしいものではないです。 変数や手続き、左辺値式、名前空間といった用語・概念を持っていない人に、 それこそ「動くプログラム」を前提とした解説を行なうのは、 どうしてもどこか時間的に無理がきます。 そのため、複雑な部分は省略したり、 「おまじないです」と書いたりして逃げたりするわけですが、 明らかに一般性のない説明をするのはどうかな、と思うわけです。

有害な初心者向け C 言語講座は例の「なまお」事件とか、 過去に何度か fj.comp.lang.c で話題になってますけど、 ○○講座と銘打つなら、 せめて規格を調べるくらいは面倒臭がらずにやるべきでしょう。 嘘や間違いが含まれていても、読者は気付かずに信じてしまうのです。 正確さを犠牲にしてわかりやすさを追求することの意義が、 佐藤には理解できません。

09/03 追記: 掲示板にもいろいろ書いてあったので読んでいたら、 K 仲川氏のページで見つけたこれを 思い出してしまった。K 仲川氏のページから引用。

‥‥まったく同感 (でも佐藤はこの人知らない。Mac 方面では有名だったりするのかも知れませんけど)。