アクマくんにお願い:2000年04月下旬

Last-modified: Wed, 03 May 2000 03:17:40 JST

[static,style:furuta,jconv:jcode,cache:on]
powered by tds-Tomsoft Diary System 1.01-beta0


[トップ(一覧)] [最新版] [<<前月] [今月] [翌月>>]

2000年04月20日(木)

謎作業

_ emacs lisp

しばらく書いててだんだん慣れてきてるんだろうか。 うーん、何がいやかって、emacs lisp の loop 構造が 基本的に while しかないことなんだろうな。 Common Lisp の do とか prog とかまでは言わないが、C などの break や return のような無名の局所脱出が欲しいなぁ。 要するに、sequence 構造を scan しつつ、何かを見つけるというコードって 極めてよくあるんだけど、C なら

while (sequence がある) {
    ...
    if (発見) {
        発見の処理;
        break;
    }
    ...
}

というのは定石中の定石だと思うけど、これが書きづらい。

(while (and sequence がある (not found))
    ...
    (if 発見
	(progn
          発見の処理
          (setq found t)))
    (if (not found)
        ...))

てな形なんでしょうかねぇ。 いや、(require 'cl) で do やら return やらを使えば良いのは承知の上で、 cl には依存したくないですし。 かと言って throw と catch をこんなケースで使うのは大げさだし、 第一名前を考えないといけない。

_ diff -n

diff(1) の rcsfile(5) 専用 output "-n" だけども、 眠い頭で解釈コードを組んでいて訳わかんなくなってしまった。 通常の diff の "c" 相当、例えば 10 行目から 13 行目までを "hoge hoge" という1行で置き換える場合、

d10 4
a10 1
hoge hoge

となる。 ここで、「d10 4」は 10 行目の先頭から、4 行分を削除という解釈で 良いのだが、「a10 1」は 10 行目の 、すなわち 11 行目の先頭から 1 行挿入、という意味なのだな。 「d10 4」と言った時の "10" の指す場所とは違っていて、 すでに削除されてしまった領域内の行を指していることになる。 なまじ同じ数字なので思いっきり混乱してしまった。 本当は挿入するべき本来の場所を指して(つまり「a9 1」とする)ほしいものだけども。 このせいで、"a" の処理に、指された行は削除されていないかどうかを 判別する必要が出てしまった。 面倒くさい。


2000年04月21日(金)

Java

Java の疑問ですが、String と StringBuffer が貧弱というのは一部同感。 ただ、そういう機能が必要なら新しくクラスを書いてしまえば良いだけの話だと 思います。String からと String への変換関数を用意しておけば、 実用上ほとんど問題ないです。

Interger や Character は「ラッパークラス」と言いますね。 int型 や char型がクラスでなくなっているのは、 ひとえに効率のためでしょう。 クラスであるには、最低 Object を継承してなくちゃなんないわけです。 で、その手の継承を実装したりするには *1オブジェクトの内部の実装では、 オブジェクト毎の情報の他に クラスへのポインター領域がどうしても必要になってくるのです。 しかして、char 型なんて Unicode なら 16bit で十分 *2なわけで、かなり余計なオーバヘッドなんですね。 だから、必要な場所だけに限定する目的でクラスになってないんだと思います。


*1:クラス毎に hashCode() とか toString() の実体は違うので、 クラスはその情報を知っていないといけません。 各々のインスタンスは属するクラスによって実行する hashCode() とか toString() の実体が違うので、 各オブジェクトは自分が属するクラスが何かわかるための情報を 必ず持たねばなりません。 それは普通はポインターで実装されます。
*2:UCS4 使えよと思うけど。

emacs lisp

どうも ご意見ありがとうございます。 某chatでもつっこみをいただきました。 まず、loop 変数に終了を示す値をぶち混んでしまえ、というのは当然考えました。 (これは 某 chat でも指摘された) ただ私の考えている「sequence 構造」というのは lisp の sequence に限らず、 もっと一般的な列をなすもので、(例えば、file read とか) 一般的にその状態を変更して良いものとは限らない、 というのもあります。また、終了時の sequence 状態を loop を抜けてから 参照したい時もあるでしょうし、 ケースバイケースですが、一般的に使えるテクニックとは言えないと思います。 ちょっとトリッキーですよね。

次のは、某chat でのつっこみ。

(while (and sequence (or (not (ok-p (car sequence)))
                         (progn (do-something (car seqence)) nil)))
   (setq sequence (cdr sequence)))

つまり、主たる処理を while 本体で実行するのではなくて 条件中で実行してしまうという方法。 たぶん、こっちが正統(伝統的?)な方法なんだろうなあと思います。 というか、「cl.el 使いたくねー」なんてダダをこねるんだったら、 これくらい書けるリテラシーを身につけるべきなんでしょうな。

という訳で、もうちっと cl.el 使わない方向でがんばってみます、です。


2000年04月22日(土)

引用

む、むむむむ、ちょっと待って下さい。 確かにある一定の条件が満されれば引用は可能ですが、 この場合 それが満されていないように思えます。

以下、「著作権法 第32条(引用)」を引用します。

公表された著作物は、引用して利用することができる。この場合において、 その引用は、公正な慣行に合致するものであり、かつ、報道、批評、研究その 他の引用の目的上正当な範囲内で行なわれるものでなければならない。

(以下略)

miwada さんのおっしゃる「引用」が具体的に cdplay のソースコードを どうすることか日記を読んで詳しくはわかりませんでしたが、 CD-DA の演奏部分の実装のために cdplay のコードの一部を 複製するのであれば、 それは「報道、批判、研究、 その他の引用の目的上正当な範囲内」からは 逸脱しているのではないかと思います。 (少くとも、報道、批判、研究、あるいはそれらに並べられるような 範疇には入らないでしょう。 もし逸脱していないとすると、 かなりすごいことができちゃう気がします。 私の知る限り、そういうことしている「慣行」は存じません。)

miwada さんは引用という言葉を使われていますが、 コードの一部あるいは全部を、 (報道、批判、研究等の目的のためではなく、その コード本来の動作をさせるために) 複製することは、一般には「引用」とは言わないと思います。

もちろん、cdplay の著作者は(一定条件付きで)コードの 使用を認めているので、その条件に従ってコードを「使用」すれば 良いのだと思います。 もちろん、「使用」には「一部複製」も含まれます。

フリーソフトウェアでよく出会う「引用」は、 コードの patch でしょう。 context diff などは patch 適用元のコードの一部を含んでいますが、 「このコードのこの部分をこう変更すると、 さらに良くなる」という批評に相当しますから、 引用として適切です。

ところで、著作権法などは LEC の 日本の法令のページで読めるので、必要ならどうぞ。 まあ、世の中にはプログラマさん向けや、 最近は web page の作者向けの著作権法の 本っていくつか出てますので、 一冊買っておいて損はないと思いますけど。


2000年04月23日()

火祭

深夜になにげなく NHK を見たら、 日本の祭「岐阜手力雄神社火祭」という番組を放送していたので 思わず見てしまった。 全然チェックしてなくて、何だか見覚えある光景が出てきて驚いたのである。 実家はここの氏子じゃない(地区が違っていて別の神社の氏子なのである) ので、家族やらご近所が出演しているわけではないけども、 御輿を担いだり半鐘を鳴らしている連中のほぼ全員は 私と同じ中学を卒業しているはずなのである。 誰か知人がいないか見てたけど、結局発見できなかった。

まあ例年祭の日は 東海地方の夕方のニュースで取り上げられる程度には有名なのだが、 そんな規模の大きい祭じゃない (第一、境内が狭いから国府宮みたいに観客が訪れると困る) し、全国放送で見られるとは思わなかった。 どうやらハイビジョンの方が本放送で、 そっちは生放送だったらしい。 多量の火の粉を浴びながら御輿を担いだり半鐘を鳴らしてるので、 初めて見る人は驚くかも。 NHK もなかなか目のつけどころがよい。

って言うか、地元というか近所にありがちというか、 20年も住んでいたくせして通して全部見たことがなかったし、(^^; 解説付きだったりして、いろいろ新鮮な発見があったりする。 しかし、最近の御輿はアレ、というか、 ドラえもんやらたれぱんだが火を吹き上げる様はかなりシュールだ。


2000年04月24日(月)

スーツ

ほぼ一年ぶりくらいに着たら、 見事にきつくなっていたので、(^^;; 急拠ボタンを縫い直してもらってから家を出る。 っていうか、 最近カロリー高すぎるイベントに出すぎかも。(^^;

「っ!!! ゛〜〜〜」 <- 心の叫び マジで驚いた。(滝汗出まくり)


2000年04月29日()

distfiles

私も同感ですが、distfiles を CD-ROM に収めるのはなかなか大変だと思います。

$ cd distfiles
$ du -sk
4952128 .
$ 

5GB だから、8 枚組になりますね。 (unlink してないファイルがあるので、 もう少し少くて済むかも) 必要なものを選ぶのも必ずしも簡単じゃないですし。

ちなみに、私は 56Kbps modem でテレホーダイ時間帯に FreeBSD の distfiles をフルミラーしてます。 最初に何とか distfiles をコピーしてしまえば、 不可能じゃないっす。


[トップ(一覧)] [最新版] [<<前月] [今月] [翌月>>]

このページは、

Copyright(C) 1999,2000 Atsushi Furuta <furuta@bsdclub.org> All rights reserved.