history

青木日記 RSS

<前月 | 最新 | 次月>

2003-09-08

RHG errata

ここに来て連続三つ報告があった。 増える一方だ……。しくしく。

もっとも間違いの数が減ったりしたらそれはそれで恐い。

setup.rb

また悲惨なバグ。今度は metaconfig を使うと動かないらしい。

metaconfig で思い出した。 誰の要望かすっかり忘れたけど 「setup.rb (マルチパッケージ) で、処理するパッケージの順番を指定したい」 っていう要望がありました。 自分では解決した記憶がないんですが、いつのまにか解決されていました。 metaconfig の中で declare_packages(%w( a b c )) とすると a b c の順番で処理されるようになります。

お買いもの

『ANSI Common Lisp』 Paul Graham 著, 久野雅樹・須賀哲夫共訳、 ピアソンエデュケーション, 2002。

だってさー、『Common Lisp 入門』を見ながら Allegro CL で試すと片っ端から仕様が変わってるんだもん。

そういえば Squark の絵本ってやつも見てきました。 あれは……アレは……何?

こないだ買った HDD × 2

見事に玉砕。 久しぶりにジャンクという言葉の意味を思い知った。

ほん

そういえば『C プログラミング診断室』再版になったんだね。 小さくなってコンパクト (同義反復)。


2003-09-10

Lisp と言語の読みやすさ

「Lispのわかりやすさ」from Matz日記
http://www.rubyist.net/~matz/?date=20030909#p01

この話題に関連していいフレーズを思いついたんですが、 微妙に話がずれてるのでここに書いておきます。

  • Lisp は他のプログラミング言語よりも直接的に脳内イメージを表現できる。 しかし脳内イメージはプログラマごとに違う。

それゆえ、Lisp は強力で、簡潔に書ける。 しかし、読みやすいとは限らない。 のではないかと思うのです。

e

tmpdir.rb と tempfile.rb の「e」の違いが気になって気になってしかたがない。

.zsh-history

~ % wc .zsh-history
 153258  490715 4606705 .zsh-history

4MB、15 万行ですか。我ながら凄い量だ。

Ruby / max_by, min_by

こういう感じの働きをする Enumerable#max_by, min_by が欲しくなった。

module Enumerable
  def max_by
    max {|a,b| yield(a) <=> yield(b) }
  end
 
  def min_by
    min {|a,b| yield(a) <=> yield(b) }
  end
end

ちなみに Haskell には Data.List.maximumBy, minimumBy があるが、 これは Ruby のブロック付き max/min と同じような領域をカバーする。

~ % href maximumBy
Data.List,maximumBy
maximumBy :: (a -> a -> Ordering) -> [a] -> a
maximumBy f xs
 
    リスト xs の要素の中で最大のものを返す。
    大小の比較に f を使う。
 
    see also: maximum, minimumBy, compare
 
        maximumBy (compare) [1,2,3,4] = maximum [1,2,3,4] = 4
 

最近の萌えましーん

もうパソコンなんてどうでもよくなってきた最近ですが、 G5 2GHz dual はちょっと欲しくなりました。なんかイイよアレ。 いま 50 万あったら AlphaServer ES40 とどっちを買うかかなり悩むな。

そう、ES40 が 25 万で売ってるんですよ。 ES40……Alpha 21264 500MHz × 4、メモリ 2GB に冗長電源三つ、 匡体の大きさは巨大冷蔵庫並。強いて欠点を挙げるならば、 電気代が正視できない額になるであろうことと、 Compaq 時代のマシンなので [d|i|g|i|t|a|l] ロゴが付いてないことか。

ところで「ましーん」という響きで Love Machine を思い出した。 懐かしすぎる。

本日のツッコミ (全2件) [ツッコミを入れる]

なかだ [collect{|x|[yield(x), x]}.max[1]
ならyieldが半分で済むかも。]

あおき [それだと empty? のときに落ちるですよ。
かと言って to_a 付け始めたりすると美しくないし。]


2003-09-12

ATAPI CD-R on Alpha

いまは CD-R 焼きのためだけに P2 300MHz のマシンを 使っているのだけども、こいつがなんとなく邪魔になってきた。 しかも 4 倍速ドライブなのでとても遅い。 Libretto L1 の外付け CD-R ドライブにすら負けてしまう。

そこで新しい CD-R ドライブを買って、 ついでにマシンも dPW600au を使ってみることにする。 なんでわざわざ Alpha を使うのかと言うと特に全然意味はない。

でも改めて考えてみると、そもそもマシンを分ける必要ってないのかな。 今のマシン (P4 2.4GHz) の力をもってすれば、 バックグラウンドの CD-R 焼きなんて余裕かもしれない。

いや待て、IDE バスに空きがないんじゃなかったか?

CD-ROM ドライブと入れ換えればいいのか。

困ったな。メインマシンでも大丈夫なのか。 でももうドライブ付けちゃったから Alpha でやろう。

さて用意したドライブはどこぞのものとも知れない ATAPI 48 倍速の CD-R ドライブだ。 秋葉原でできるだけ安いのを買ってきた。 これを付けて起動してみる。

何事もなくブートした。dmesg で確認すると、ちゃんと認識されている模様。 とりあえず普通の CD-ROM を読ませると、ちゃんとマウントできた。 まあこのへんは当然だろうな。

さて CD-R を焼くにはどうすればいいんだっけ。 えーと、Linux の場合 ATAPI CD-R だと SCSI エミュレーションを入れないといけないのかな。 lilo.conf に append="hdc=ide-scsi" と書いて lilo してリブートすればいいらしい。 でも Alpha には lilo なんてありません。 aboot というのを使います。

あれ? aboot の設定ってどこでやるんだっけ……

つづく

Hugsのガベージコレクタが文句を言う問題

http://page.freett.com/shelarcy/diary2003-08.html#haskell_heapsize

8/16 に書いた Hugs の件について。 Hugs が「ヒープが足りない」とかなんとか言ってきたら、 +h オプションでヒープを増やせばいいそうです。 うわあ、これは恥ずい……。

いちおう言い訳するとですね、 まさかいまどきメモリを固定サイズで割り当ててそれ使い切ったら終わり、 なんてことがあるとは思わなかったんですよ。


2003-09-15

ATAPI CD-R on Alpha (2)

続き。

Linux で ATAPI の CD-R ドライブを使うには まず IDE の SCSI エミュレーションレイヤを動作させる必要がある。

で、そのためにはカーネルにコマンドラインパラメータを渡さなければならない。 カーネルのパラメータは x86 マシンだと lilo.conf などに書くが、 Alpha は lilo でなく aboot なので /etc/aboot.conf に書く。

dpw600au % cat /etc/aboot.conf
0:1/vmlinuz ro root=/dev/sda1 console=ttyS0 hdc=ide-scsi

そんでリブートすると dmesg がこんなふうになる。

            :
            :
            :
ide_setup: hdc=ide-scsi
            :
            :
            :
hdc: AOPEN CD-RW CRW4852 1.00 20030123, ATAPI CDROM drive
ide1 at 0x170-0x177,0x376 on irq 15
Floppy drive(s): fd0 is 2.88M
FDC 0 is a post-1991 82077
            :
            :
            :

このように hdc が検出されるが ide1 の上には出てこない。

でもって次に ide-scsi モジュールをオンにしてみると、

dpw600au % sudo modprobe ide-scsi
scsi1 : SCSI host adapter emulation for IDE ATAPI devices
scsi : 2 hosts.
  Vendor: AOPEN     Model: CD-RW CRW4852     Rev: 1.00
  Type:   CD-ROM                             ANSI SCSI revision: 02
Detected scsi CD-ROM sr0 at scsi1, channel 0, id 0, lun 0
sr0: scsi3-mmc drive: 40x/40x writer cd/rw xa/form2 cdda tray
Uniform CD-ROM driver Revision: 3.11

という具合に SCSI ドライブとして検出された。 cdrecord -scanbus を実行してちゃんと見えるか確かめてみる。

dpw600au % sudo cdrecord -scanbus
Cdrecord 1.10 (alphaev67-unknown-linux-gnu) Copyright (C) 1995-2001 Jg Schilling
Linux sg driver version: 2.1.40
Using libscg version 'schily-0.5'
scsibus0:
        0,0,0     0) 'DEC     ' 'RZ2CC-KA (C) DEC' '5520' Disk
        0,1,0     1) 'DEC     ' 'RZ2DC-KA (C) DEC' '5520' Disk
        0,2,0     2) *
        0,3,0     3) *
        0,4,0     4) *
        0,5,0     5) *
        0,6,0     6) *
        0,7,0     7) *
scsibus1:
        1,0,0   100) 'AOPEN   ' 'CD-RW CRW4852   ' '1.00' Removable CD-ROM
        1,1,0   101) *
        1,2,0   102) *
        1,3,0   103) *
        1,4,0   104) *
        1,5,0   105) *
        1,6,0   106) *
        1,7,0   107) *

このように、1,0,0 としてちゃんと見えている。あとは読んで書くだけ。

dpw600au % cdda2wav -D 1,0,0 -x -B
   :
   :
dpw600au % cdrecord dev=1,0,0 speed=48 -audio -useinfo -eject -v *.wav
Cdrecord 1.10 (alphaev67-unknown-linux-gnu) Copyright (C) 1995-2001 Jg Schilling
TOC Type: 0 = CD-DA
cdrecord: Invalid argument. shmget failed
dpw600au %

……はい?

Google してみたところ、環境変数で CDR_FIFOSIZE=4000k とすればいいらしい。 正確に言うと、シェアードメモリの最大量を超えないように設定すればいいらしい。 シェアードメモリの最大量は /proc/sys/kernel/shmmax で見られる。 デフォルトだとこれが 4MB になっているから、 4MB 以下にすれば大丈夫というわけだな。 だから逆に shmmax のほうを増やしても解決できる (実験済)。 axp-list で見付かるということは Alpha 特有なのかな?

dpw600au % CDR_FIFOSIZE=4000k sudo cdrecord dev=1,0,0 speed=48 -audio -useinfo -eject -v *.wav
Cdrecord 1.10 (alphaev67-unknown-linux-gnu) Copyright (C) 1995-2001 Jg Schilling
TOC Type: 0 = CD-DA
scsidev: '1,0,0'
scsibus: 1 target: 0 lun: 0
Linux sg driver version: 2.1.40
Using libscg version 'schily-0.5'
atapi: 1
Device type    : Removable CD-ROM
Version        : 0
Response Format: 1
Vendor_info    : 'AOPEN   '
Identifikation : 'CD-RW CRW4852   '
Revision       : '1.00'
Device seems to be: Generic mmc CD-RW.
Using generic SCSI-3/mmc CD-R driver (mmc_cdr).
Driver flags   : SWABAUDIO
Drive buf size : 1359872 = 1328 KB
FIFO size      : 4096000 = 4000 KB
Track 01: audio  54 MB (05:24.62) no preemp
Track 02: audio  18 MB (01:51.70) no preemp
           :
           :
Performing OPC...
Starting new track at sector: 0
Track 01:  54 of  54 MB written (fifo 100%).
Track 01: Total bytes read/written: 57264144/57264144 (24347 sectors).
           :
           :

7 分で焼き終わった。さすがに 48 倍速は速い。


2003-09-16

ゲームで学ぶ C 言語

http://edu.stackart.net/c/c_seihin.html

うわあぁぁあぁああぁ!

本日のツッコミ (全3件) [ツッコミを入れる]

arton [AdaでCの教育?]

たかはし [きっとAdaでCのコンパイラを実装するんでしょう :)]

2832 [宍軸識漆
よろしく・・]


2003-09-17

test/strscan, fileutils

strscan と fileutils のテストをインポートした。 net 以下は諸事情により後回し。

本日のツッコミ (全1件) [ツッコミを入れる]

ささだ [Net 以下は、と空目。]


2003-09-18

萌えもの

http://book.mycom.co.jp/user/preview/4-8399-0986-5/index.shtml

今度は燃える…萌えるCPU作成本。

from カトゆー家断絶

Windows 2000 がクラッシュ

初めて Win2000 がクラッシュした。 エクスプローラでふらふらディレクトリを渡り歩いてたら Alt + ← したとたんに IE が SEGV して OS ごと停止。 ちょっとびっくりした。 ファイルの被害はないようだ。

RHG 読書会

明後日 9/20 (土) は RHG 読書会です。 RHG 二周目の第一回をやります。 場所とか書くのが面倒なので詳しいことはこのへん↓からどうぞ。

http://i.loveruby.net/ja/rhg/

とりあえずぼくとしては今回こそ読書会のタイミングで オンライン版を同時更新したいと!


2003-09-20

RHG 読書会 reloaded #1

いやいやいや。今回も楽しかったです。 なんか特に今回は (余談が) 白熱していたような気がしますです、はい。 ログはいつも通り RWiki に載ってますのでどうぞ。

http://rwiki.jin.gr.jp/cgi-bin/rw-cgi.rb?cmd=view;name=RHG%C6%C9%BD%F1%B2%F1%3A%3A%C5%EC%B5%FE+Reloaded

どーでもいいですが RWiki 書いてて 3 回もコンフリクトしてしまいました。 こういうときは本当に CVS が欲しくなるね。

ところで今回は Gauche の Shiro さんと慶應の酒井さんに初めてお会いしました。 珍しいことに、あんまりイメージと離れていなかったように思います。

そしてまたひとつ

Tru64UNIX 5.1B げとずさー!

href 人気調査

バージョン 0.1 0.2 合わせたダウンロード数は 47 という無惨な数字が出ました!

ちなみに同じく 5/11 からの合計で Racc が 2110、 strscan が 1884、 ReFe が 1299、 TMail が 1212、 setup.rb が 612、 Ripper ですら 63 でした。

……いや、ちょっと本気で予想外?

本日のツッコミ (全1件) [ツッコミを入れる]

ささだ [日本の Haskeller は 47人?]


2003-09-22

xxx_with_index

Enumerable#with_index ってのはどうだろう。 つーか前に誰かが案を出してたような気がするけどもう覚えてらんない。

module Enumerable
  def with_index( mid )
    idx = -1
    __send__(mid) do |*args|
      idx += 1
      yield(idx, *args)
    end
  end
end
 
[2,4,6].with_index(:each) do |idx, i|
  puts "index #{idx}: #{i}"
end
{1=>5, 2=>10, 3=>15}.with_index(:each) do |idx, key, val|
  puts "index #{idx}: #{key} => #{val}"
end

あぁ、each_with_index と引数の順番が違うし。 「*」を使うためにはやむを得ない。


2003-09-25

Tru64UNIX 5.1B

Tru64UNIX をインストールしようと思ってインストールして何事もなくうまくいってリブートしたとたんに HDD がクラッシュした。

世の中の無常を感じたのでしばらく旅に出ます。 探さないでください。

本日のツッコミ (全1件) [ツッコミを入れる]

すぎむし [旅 < ruby-dev summaryはぁ (;_;)]


2003-09-27

ruby-dev summary

今週はお休み。

旅の話はちょっとした洒落です……

arcldr

今まで意識してなかったけど、 Windows 2000 の C:\ にある arcldr って、 もしかして Alpha のファームウェアの ARC のこと?

ちなみにβ版だけだけど Alpha 用の Windows 2000 もあったそうな。


2003-09-29

$RANDOMIZE

「$RANDOMIZE」という Subject で SPAM が来た。 sh?

|i|

ruby-talk とかで、イテレータの |i| を省略したいっていう意見が出ることがある。 そのくらい真面目に書けよ! と思っていたんだけども、 今日とつぜん自分でも省略したい気分になった。Haskell で

map (chr) [0,1,2,3,...]

みたく書けるのは、ちょっといいなあ、と思う。

でもちょっとだけだな。

ソース

ソース (調味料の) を買ってきた。 蓋についてるシールに「カレーにもブルドックソース」 と書いてあった。 余計なお世話だと思った。

Libretto L1

いーかげん (WinMe に) ムカついてたので Libretto L1 を売り払う。 もう純正外付け CD-R ドライブ付きでも 40000 にしかならないのか。 ヒンジ緩みと言われても、Libretto L シリーズは元々ヒンジ緩いだろ。

でも 10% 増額に引かれてうっかり Sofmap ポイントプールにしてしまった。 Sofmap ポイントなんかいくらあっても食費にできないじゃん! (切実)

パズル

そういえば、ピースが六角形をつなげて作ってあるパズルがあったなあ。 ピースを全部きっちり枠にはめこむと完成。 全部で 50 通り以上はめかたがあるらしいんだけど、 一つもわからなかった。

それと同じ系統で、テトリスのピースみたいなのを組み合わせて 直方体を作るパズルもあったな。そっちは解くのは簡単なんだけど、 はめこみかたの解を全部見付けるのが目標。 これはなんとか全部わかったような気がする。

ピースが三角形の組み合わせとか、四角形 5 つのもあったな。

てなことを、akr さんの日記を見て思い出したわけです。

さらに関係ないけど三次元版テトリスってのもあったなあ。 四角い井戸を入り口から覗いているようなビューで、底にブロックを揃えていく。 縦横どちらかが揃ったら消える。 そのかわりブロックが四角形 5 つのがあって、かなりムズい。

略称

デザインパターンが「デザパタ」なら リファクタリングは「リファクタ」でよくね?

お金がない!

ついに 1 まんえんを切った。 完全になくならないうちに From A でも買ってこよう。

賞味期限もない!

2 週間前の牛乳は飲めるのか、いや飲まねばなるまいとか (健気にも) 思ったが 匂いをかいだ瞬間捨てた。

時間だけはある!

あー、ヒマだ。

やれヒマだ。

ヒマヒマヒーマーヒーマヒマー

などとよくわからない歌を歌っていたら妹の目がかわいそうな人を見る目になっていた。

悲しい。

すとらすきゃん

そういえば strscan で ^$ が効かないバグがあったなあ。 あれを直すとほとんどソースコード総書き換えになりそうで躊躇してるんだけど。

ruby

久々に連鎖バグにはまった。

(起)

net/pop.rb で、ソケットをつないだ後、started? になる前に サーバが接続を切るとソケットが閉じられなくなるというバグレポートが来る。

(承)

pop だけでなく smtp と http も同様のバグがあることに気付き、直し始める。

(転)

ついでにテストスクリプトを足して実行してみたら、 Net::HTTP#get のブロック中からの break が動かなくなっていることを知る。

(結)

CVS HEAD の break がバグってた。

余波

ただしそれとは別に、HTTP#get から break すると入力バッファに前の レスポンスの残骸が残ってしまうのでまともに使えないということもわかった。

さらに、1.8.0 の net/smtp には 「絶対に QUIT が発行されずソケットも close されない」 というとんでもねーバグがあることがわかった。

started? の件はどうにかした。 #start の中で、!started? なのにソケットが開いてたら常に閉じるようにしただけ。

略称 (2)

略語で思い出したけど、中学校の美術の授業で

「インスタントラーメンは語呂がいいからいつまでたっても略されない」

という話があった。なんで美術でそんな話になったのかは覚えてないけど。 でもインスタントラーメンは語呂がいいというより略称が考えにくいから 略されないのではなかろうか。

というところまで (トイレで) 考えて、 インスタントラーメンと instance_eval は 「インスタン」まで同じということに気が付いた。 そう言われてみると、module_eval が mod eval と略したくなるのに比べて instance_eval は省略したい気持ちが少ないような気がする。 せいぜい inseval か。ieval でもよさそうだな。 というか eval が既に evaluate の略であることは考慮しなくていいのか?

オチなし。

それはそうと「リファク」だと李白を思い出しますね。 国破れて SAMBA あり……は杜甫か。

本日のツッコミ (全5件) [ツッコミを入れる]

MoonWolf [あの…ヒマでしたらRipperの1.8.x版をぜひ作って頂きたいのですが…]

ただただし [最近は3文字に縮めるのが流行りだから「リファク」じゃないかな]

ささだ [諦めてプログラミングの仕事受ければいいのに。]

arton [Refeをリファ。]

とおる。 [3次元版のテトリスみたいなの、名前忘れましたが、メガドライブ版をもってました。意外と面白かったです。]


2003-09-30

to do

ああ、そういえば Ripper ってものもありましたねえ。 改めて考えると結構積み残しがあるな (やる気なし)。

  • Ripper (ruby 1.8 syntax support)
  • strscan (^$)
  • ClipShare
  • ReFe (flat, sjis support)
  • Racc (reflective runtime)
  • net (refine error class tree)
  • TMail 1.0

先週休んだから今週は ruby-dev summary もあるのか……。

まあ気が向いたものからヘロヘロっとやろうかな。


<前月 | 最新 | 次月>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS