青木日記

<前月 | 最新 | 次月>

2003-06-05

小休止のち活動再開

ここ数日やる気が全然出なかったんでちょっとハイキングに行ったりしてました。

あとお金の無駄遣い。VisualC# その他を買いました。 ちょっと使ってみて楽しめそうなら VisualStudio.NET 2003 に グレードアップしようと思います。 VS.NET Professional MSDN デラックス。 いま買うと 2 万円キャッシュバックなんですよ?

Gauche Hacking Guide

http://openspace.timedia.co.jp/~nyama/wiliki/ghg.cgi

うわあっ、なんてことをっ! (笑)

入信の儀式は必要ありません

オープンソースコミュニティって入りづらいでしょうか?

コミュニティによるかな。

本日のツッコミ (全2件)

ただただし [古くなった何かを食べて、負けたのかと思ってましたよ]

あおき [そう毎日毎日賞味期限切れの食料を食べてるわけにもまいりません (^^;;]


2003-06-06

ブレイン?

中島さんの会社名にどうも聞き覚えがあると思ったら、 家で使ってるルータの販売元でした。ZyWall10っていうやつ。 世間は狭いですね。

日記

ウェブ日記には書いてる人の名前を書いといてほしい……。

to_ary

[ruby-talk:72927] Re: Ruby 1.8.0 net/http bug

Net::HTTPResponse に to_ary を定義しておけば

response, body = Net::HTTP.get(....)

が救済できるだろって話なんですけど、 多重代入で to_ary を使うってのは堅い (安定した) 仕様なんだっけ。 うーんと、この変更は 2000-09-12 からだな。1.6 は全部 OK か。

でも多重代入はよく仕様が変わるから あまり細かいところに依存したくないんだけどな。 それとも、多重代入には既に田中さんのツッコミが入ったから 当分大丈夫だと考えるべきだろうか。

そだな。 1.8 リリースは近そうだし、1.8.x はこれで大丈夫と期待しよう。

clipshare / Ruby

Win32 (mswin32,cygwin) / Linux 間のシンクロは達成。つかれた……。

リリースまでの ToDo

  • clipbrd.rb のライセンスを確認
  • 例外処理 (デーモンなので迂闊に落ちないように)
  • ログ

$RUBYLIB / Win32

Windows で RUBYLIB に何をセットしたらいいのかよくわからなかったが $: を見る感じ「ドライブレター付きでセパレータは "/"」のようだ。

しかし Cygwin のシンボリックリンクを使っていたのでは意味ない。悲。

酒・煙草

煙草は吸いません。 心はアスリートですから!

アスリィートですから! (強調)

酒は宴会のときだけ飲みます。
茶は緑茶です。
コーヒーはブラックで飲めます! (自慢げに)
博打は打ちません。
宝くじは基本的に買いませんが時々買って騙されます。

誰もそんなこと聞いてないって。


2003-06-08

VS.アジのひらき

賞味期限6月2日。賞味期限というものの存在すら危うくなるこの事実。明らかに匂いが違う。よく焼いてみる。醤油でごまかしてみる。一口食った瞬間、

ごめんなさいもうしません。

以上

UPS

家庭内サーバとして使っているUltra30に(やっと)UPSをつけることにした。そこで買ってみたのがAPCのCS500というタイプ。

が、

停電通知インターフェイスがUSBしかついてなかった。当然Ultraにそんなものはついてない。ちくしょう、UPSならシリアルくらいつけとけよ!と、心の叫びを発しつつビックP館に戻ってごねてみる。運良くシリアルのついたものと交換してもらえた。交換後のはOmronのBX50FXSというやつで、ウェブサーバにつけてるのと同じ型だった。

が、

あほなことに通信ケーブルなしのを選んでしまったようだ。というか、通信ソフトはいらないねーと思ってソフト無しのを選んだらケーブルまでついてなかった。

これは悔しい。かなり悔しい。悔しいのでRubyでリモートシャットダウンツールを書いて済ますことにする。ウェブサーバのほうにはちゃんとシリアルでUPSから信号が来るようになっているので、そのシャットダウンのタイミングでUltraにも信号を教えてやればいいわけだ。なんだ、簡単じゃん。5分で書けた。

しかし、こうなってみるとAPCのでもよかったわけだな…。ま、いいや。

本日のツッコミ (全2件)

ただただし [HUBにもUPSつないだ?]

あおき [そこらへんの抜かりはありません。テストしましたし。
(さすがにこれだけ連発でミスすると慎重になる)]


2003-06-09

ほん

『プログラミングWindows』上下巻。俗に言うPetzold本です。

早速クリップボードの章を読んでみる。おお、やっぱあるんじゃん、コンテンツの遅延転送。これが知りたかったんだよー。あ、でもウィンドウメッセージを受信する必要があるのか。むむ、Rubyで(拡張モジュールだけで)メッセージもらえるのかな?ちょっと関係プログラムをあたってみよう。

RubyでWindowsメッセージげとずさー

swinがほぼそのものだった。

swinがある場合は遅延転送で実装することにしよう。

あああああ

Amazonにまたやられたー!

気づいたらこんなに注文してた。バカすぎる。

"Alpha Architecture Reference Manual"

"Alpha Implementations and Architecture"

"Sparc Architecture, Assembly Language Programming, and C"

"See Mips Run"

"Linux Assembly Language Programming"

"The Little Schemer"

『アナリシスパターン』

よんまんさんぜんえん…。くそう、AlphaServerが買えるぜ!

…買うか!(やめとけ)

本の値段

5000円くらいなら買っちゃいます。

とか書いたけど、Advanced Windows は 9500 円であったか。これがOKなら何でも買えるじゃん。

でもさすがのわたしも『プログラミング Perl』第 3 版(二分冊!)は買う気がしません。もちろん、第 2 版を持ってるという点は大いに影響してますけどね。第 2 版を持ってなかったら買うかもしんない。

本日のツッコミ (全11件)

arton [買ったんですか?(失礼ですねぇ)]

あおき [買いました。なぜか Advanced Windows はもう持ってます。
あと Inside COM もほしいんですが高くて…。
薄くて安い Essencial COM は持ってるんですが。]

arton [Inside COMなら貸しますよ。しかし薄い本だからそんなに高くはないのでは……ごそごそ……たけーよ。5000円越えてるよ。なるほど。]

あおき [あれっ?すごく分厚いと思ってたんですけど。
一万円越えのやつ。あれは Inside OLE2 かな?
ぼくは本は 5000 円周辺なら買っちゃいますから。
(と思ったら在庫切れだった。何やってんだAmazon)]

arton [Inside OLE第2版(原書)なら貸せますよ(初版−邦訳版は捨ててしまってた)。興味があれば、Compiling for the .NET Common Language Runtimeもどうぞ。]

あおき [いやあ、ありがたいんですが、ぼくはどうも
書き込みながらじゃないと読めないので地道に
買うことにします。]

匿名キボンヌ [Inside OLE2なら、うちの会社のどっかに落ちてるはずだけど、探してみる? あるいはクレクレ星人になってみるのもありだな。
−なぜかわからんが、現在、退社した会社で仕事中。しかも、お泊りですわ。]

匿名キボンヌ [ああ、もううちの会社じゃなかった。こないだまで在籍してた会社の間違いです。
やーね、帰属意識が抜けないって。]

arton [メイヤー本は次回に返しますです。]

arton [そう言えば、メールアドレスはいつまで使えるんでしょうか?(と青木さんの日記の上で業務連絡スマソ)]

匿名キボンヌ [元の会社のメールアドレスはすでに使えないと思います。
なので、今度ping代わりにメールを出しておきますです。
メイヤー本はいつでもよいですよ。今後も会う機会はいくらでも
あると思ってますし。]


2003-06-10

LL Saturday

うーん、いつもなら「当然行くでしょ!」と叫んでるところだが、 今回はどうだろう。ちょっと時期的に微妙なんだよな。

でも申し込んじゃった。へへへ。


2003-06-12

URL占い

http://www.yk.rim.or.jp/~hmatsu/office/url.html

http://i.loveruby.net/~aamine/ja/tdiary/
 
このサイトの持つ性格は、情(なさけ)という言葉で象徴されます。
あつかう情報として不向きな分野といったものはあまりありませんが、特に男女交際やその方面の情報をあつかうのに向いています。
 
このURLの総合的な吉凶は以下の通りです。
空転と消耗の意味があり凶です。努力は空回りし消耗してしまいます。かなり不安定な運勢です。

空転と消耗! 凶! キター!

本日のツッコミ (全2件)

ささだ [ドメインは '知勇と情を備えた意味があり大吉です。穏やかな実行力があり、指導的立場に立ちやすい人'らしいですよ.さすが! これからもギリギリな食品でリードしていってください.]

あおき [それはあまりリードしたくない…]


2003-06-14

やばーい

読書会寝過ごしたー! ダッシュ!


2003-06-15

第 6 回 RHG 読書会

お疲れさまでした。今回も楽しかったです。 ……いや、ぼくは寝過ごして思いきり遅刻したんですけど。

経過はいつも通り 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%FE2003%A1%C1

ウェブの RHG もアップデートしたいんですけど、 あれは初校相当なのが厄介です。つまりどういうことかと言うと、 既に直したことのある間違いをもう一回全部目で探して直さないといけないんです。 それがどうにも面倒で面倒で手をつけられずにいます。

digital HiNote Ultra II

先日、DEC の HiNote Ultra II をジャンクで買ってきました。

やばい。かっこいいよコレ。やっぱ digital だよ。

このモデルでは最速の Pentium 150MHz にメモリ 48MB、 HDD 1.44GB、AC 付き FDD ドック付きで 7000 円となかなかお買得でした。 ちょっと汚れてましたが流行りのスポンジでこすったらきれいになったので満足です。

オリジナルだと OS は Windows 95 なんですが、 それではあまりに使えないので Linux を入れることにします。

AlphaStation 500 5/400

そーいえばまだあまりいじってない AlphaStation 500 だけど これのメモリはかなり特殊らしい。なんでも、

registered ECC の 5V EDO DIMM を 4 枚一組で増設。

鬼ですかあなたは!

まあいいです。128MB 刺さってれば生活はできます。 どうせ何したってこの程度も使いきれないんですから! ていうか今のメインマシンだってこんな状況ですから!

~ % free                                                   aamine@harmony
             total       used       free     shared    buffers     cached
Mem:       1033676     124460     909216          0       6640      68140
-/+ buffers/cache:      49680     983996
Swap:       130748          0     130748

983MB 空き。かわいそうなメモリさん。

あっ、待てよお、Alpha は 64 ビットアーキテクチャだから プロセスサイズが増えるか……? どのくらい増えるんだろ?


2003-06-18

net/http

いっそ捨てたほうが楽だろうか……。

cvs diff

ブランチ上で特定の日時間の diff って取れないのかー!

もっと具体的に言うと ruby_1_3 ブランチ上で env.h と eval.c について 1999-08-05 と 1999-08-11 の差分って取れないのかー!

しかたない、リビジョン指定しよう。

cvs diff

そうか、ブランチだと枝分かれがいくつあるかわからないから 日付の指定だけでは枝が一意に定まらないんだ。 こういう点からもやはり「開発版はメイントランクだよね」という結論になるのだな。 納得した!


2003-06-19

インポートおめ

おおっ、dRuby が 1.8 に入ったんだ。やたー!

10020 おめ

2003-05-29 のコミット (rev1.447) でめでたく eval.c が 10000 行を越えました!

めでたくないか。

AlphaStation 500

鬼ですかあなたは!

などと不満を漏らしつつも、 registered ECC 5V EDO DIMM 64MB × 4 をゲットしてきました。

……

……

認識されない……(泣)

AlphaStation 500 (2)

あ、刺しなおしたら半分 (128MB) だけ認識された。 うーむ、バンク内のメモリモジュールが同じ型じゃないとダメっぽいな。 しかしこれで残りのメモリは生きる可能性が出てきた。


2003-06-22

サーバ停止予告

明日 6/23 (月) は家が一日中停電になるので、 i.loveruby.net のサーバを停止します。

ruby-dev summary

やべっ、また忘れるところだった。 明日は一日中停電だから、今日中にやらないと……。

伝承の技

うちのノートパソコンのモニタは叩くと映るようになる。

IP アドレス

IP アドレスって 32 ビット整数でも指定できるのかー!

~ % ping -c1 `ruby -e 'p((192<<24) | (168<<16) | (1<<8) | 2)'`
PING 3232235778 (192.168.1.2) from 192.168.1.33 : 56 data bytes

内税表示で出版会社が潰れる?

「今そこにある危機」 http://www2u.biglobe.ne.jp/~palu2/kiki.htm

最近新聞を読んでないもので、 この話は全然知りませんでした。これって有名?

外税表示の義務付けを無理矢理プログラミングに例えてみると、 変数として扱うべきものを静的に評価して定数畳み込みしようというわけですね。 そりゃコンパイラのバグだろ。 いや、コンパイラ (出版社) の仕様書 (法律) が変なのか。 でもってプログラミングセンスのない厨房 SE (政府) は逝ってヨシ、と。

対策は何かあるのかね。スーパーみたいに値札シール張るとか? これは本屋が嫌がりそうだなあ。

そういえば、あのガチャコンってするやつ、 なんて名前だか知ってる人います? ずっと前から気になってしかたがありません。 ちなみに電気機器とかをくるむのに使うあのプチプチは 本当に「プチプチ」という名前らしいです。

蚊が……

本日のツッコミ (全2件)

新潟のS [その仕様書には国家権力、国家財政が関わっています。そして本音と建前もあります。仕様書変更には大変なエネルギーがいるんですね。]

川上産業 [業界最大手の製品名が「プチプチ」。一般的な製品名を強いていえば「気泡緩衝材」。包装用以外に暇つぶしやイライラしたときに鳴らす専用に使う「プッチンスカット」という製品もある。]


2003-06-23

サーバ復活

停電が終わりました。

ぷちぷち

なんと、「プチプチ」は商品名だったんですか。 しかも潰すための専用プチプチまであるとは……。

あっ、川上産業ってこれですね。

リンクをたどった瞬間、画面上に充満するプチプチ感。 時代はプチプチだ! (意味不明)

そーいえば、マウスで画面のプチプチをプチプチするソフトもあったなあ。

syck

なんで syck は ruby.h を #include していないのだろう。

本日のツッコミ (全2件)

nobsun [エアキャップとよんでましたが。
ぷちぷちだったのか。]

プチプチSHOP [http://www.rakuten.co.jp/putiputi/ はなかなか楽しい。
「お中元用にぷちのしおつけいたします」とか、
「プッチンスカット」の注意書きの「できるだけお早めにプチプチしてください」。]


2003-06-25

処理落ち

うう、おとといは Linux/Alpha NetBSD/Alpha FreeBSD/Alpha で ruby のコンパイルを通すだけで力尽きてしまった。

そのせいか、どうも何か忘れているような気がするんだよなあ……。

電気

電気が足りない。

家は古いマンションなのでそもそも基幹部分の電力容量が少ない。 従って各戸の容量も少ない。いまどき上限 30A ってなんだよ。

でもってその 30A もフルに使えるわけではなくて エアコン用の線とそれ以外が分かれており、 エアコン以外の合計で 10A しか使えない。 これは困る。とても困る。さりとて困る。 一番困るのは AlphaServer4000 が動かないかもしれないということだ。

ほん

さすがに欲しい本はほとんど買い尽くしてしまった感がある。

『最前線UNIXのカーネル』 Uresh Vahalia著、徳田英幸・中村明・戸辺義人・津田悦幸共訳、 ピアソンエデュケーション、2000

最近は OS カーネルとアセンブラが気になるお年頃。 『Solaris Internal』を読みつつ Solaris の man ページを眺め、 『詳解Linuxカーネル』の助けを借りつつ Linux のソースコードを読んで Solaris と比較。同時に『Advanced Windows』『Essencial COM』 『Inside COM』『Inside DCOM』を読む。いやもう、これはねー、

わけわかんなくなります。(あたりまえだ)

それにしても、Solaris 8 のソースコードはさっさと入手しておくべきだった。 公開しはじめてから途中で日和るなよな。

ま、それはいいとして、UNIX カーネルの本を買ってみたわけです。 SPARC と Alpha のリファレンスが届くとさらに相互作用が楽しめるのですが、 Amazon が調達にしくじりやがったらしく、配送は遅れに遅れています。

『Rubyアプリケーションプログラミング』 前田修吾・まつもとゆきひろ・やまだあきら・永井秀利共著、 オーム社、2002

『The Ruby Way』 Hal Fulton著、株式会社トップスタジオ訳、 やまだあきら・鵜飼文敏監修、翔泳社、2002

やっと買いました。

HSP

HSP、なかなかおもろいな。 けっこう見ために派手なのに簡単に書けるのはいいところだ。

しかし言語の構文は気持ち悪すぎる。

a+2

で a+=2 の略、なんてのはかなり衝撃的だ。 なんつーか、高級言語並の機構を最大限に活用して作ったアセンブラって感じだよな。

みこみこ……

メモ帳で IME オンにして「みこみこみこみこみこみこみこみこみこみこ」 を変換すると落ちるらしい。

ただし繰り返しやると OS ごと固まるみたいなので注意しましょう。

ネタ元: 巫女みこナースでコーディング

本日のツッコミ (全5件)

arton [ここ(つまり、IEの<textarea>)でも、みこみこ……でIEが落ちますた。(2度目の入力)]

nori [ひそかに詳解Linuxカーネル第2版が発売されているのは知っていますか?第2版ではカーネル2.4に対応して内容も2.4の内容になっています。僕はもう買いました。なんせカーネルに興味があるもんで。]

あおき [え、翻訳も出てるんですか。それは知りませんでした。
どうしようかなあ。]

ゆうすけ [むぅ…落ちませんでしたよ。]

sada [落ちない。]


2003-06-26

本届く

Alpha や SPARC の本が届きました。 Amazon が自分で「おすすめ」したくせに MIPS の本は届きません。 何をやってるんでしょうか。

  • "Linux Assembly Language Programming"

あっさりと先頭 1/3 をカッ飛ばす。 実習に入るまでの基礎知識部分が長すぎるんだよ。 説明も『はじめて読む 8086』のほうが絶対いい。 後半に期待しよう。

  • "Alpha Architecture Reference Manual" 3rd edition

厚い。電話帳かと思った。 まあリファレンスだから頭から読むもんじゃありませんな。

うわあっ、妙に厚いと思ったら 3 部構成なのか! そうか、日本語の『Alpha AXP アーキテクチャ概要』は、 これの第一部だけを訳したものだな。

  • "Alpha Implementations and Architecture"

薄い。21064 の内部写真が凄いきれいだ。

  • "SPARC Architecture, Assembly Language Programming, and C"

とりあえず題名がダサい。

突如 m4 が登場。マクロに m4 使うのか……。

  • "The Little Schemer"

……変な本だ。

本日のツッコミ (全5件)

nobsun [なめたらいかんぜよ。
Y で「びっくら」こいてください。]

新潟のS [ゾウさんの絵がカワイイですね。Seasonedの方はさっぱり読み進んでないです。けっこう奥が深いと思います。]

あおき [ぐえっ、本当だ、Y combinator がある!]

新潟のS [The Little MLerの表紙がなにやらゾウさんとロバ(?)さんの調印式のようなんですが、何の暗喩でしょう。前から気になってます。]

新潟のS [んっ、ラクダさんかぁ。camlから来てるんですかね。]


2003-06-27

ruby

ARGF が stdin 待ちになって止まるバグが再発してるようだ。 再現条件がよくわからない。

追記: バグではなく、EOF の後で gets しているのが原因でした。

みこみこ

「みこみこみこみこみこみこみこみこみこ」を変換すると落ちる件ですが。 みなさんそんなに「みこみこ」が気になりますか! (笑)

「らしい」とか書きましたが、メモ帳が落ちるのは確認しておりました。 ネタ元はここ。

このスレッドの情報によれば、 発生条件は「みこ」 9 回を変換すること。 こちらで追試してみたところ、8 回までは何も起きず、9 回にすると落ちました。 バグが確認されているプラットフォームは Windows 98 と 2000。 IME は MS IME 2000 ver7.0.1。

繰り返し実行すると OS ごと固まるという話もありましたが 家では 5、6 回やっても大丈夫でした。

切符の数字で 10 を作れ

ついでにもう一個 2ch ネタ。

切符に書いてある 4 つの数字を足したり引いたりして 10 にするっていう問題がありますよね。 あれをプログラムで解こうというスレです。

4 桁固定だと力技のループで解けてしまうので、 任意桁数で解くプログラムを考えました。 条件は以下の通り。

  • 0〜9 の数 n 個から 10 を作る。
  • 使ってよい演算子は + - * /
  • 数字の並び順は変えてもよい。
  • 割り算は分数を生成するものとする。
  • このとき、答えが 10 になる式をすべて表示せよ。
  • ただし出力する式が重複してはならない。重複の定義は以下の通り。
  • 文字列表現が一致する式は重複とみなす
  • 任意の可換な演算子 @ について、a@b と b@a は重複とみなす
  • 任意の可換な演算子 @ について、(a@b)@c と a@(b@c) は重複とみなす

a とか b は任意の式です。 例えば (1+2)*(3+4) と (3+4)*(1+2) は重複です。

スレにはもうちょっと詳細な条件が載ってるんですが、 実装が面倒になったのでぼくはこのへんにしときます。 意外に長い。

#
# kippu.rb
#
 
require 'mathn'
 
OPERATORS = [:+, :-, :*, :/]
 
def main
  if ARGV.empty?
    $stderr.puts "no arguments"
    exit 1
  end
  nums = ARGV.map {|a| a.to_i }
  nums.each do |n|
    unless (0..9).include?(n)
      $stderr.puts "wrong value given; use 0-9 (#{n})"
      exit 1
    end
  end
 
  results = {}
  each_valid(nums, OPERATORS, 10) do |tree|
    str = tree.to_s
    if results[str]
      $stderr.puts "\# #{tree.inspect}" if $DEBUG
      next
    end
    results[str] = true
    puts str[1..-2]
  end
end
 
def each_valid( numbers, operators, expect )
  i = 0
  precedences = (0...numbers.length-1).to_a
  each_nPn(numbers) do |nums|
    each_nPr(operators, numbers.length-1) do |ops|
      each_nPn(precedences) do |precs|
        i += 1
        begin
          tree = Tree.build(nums, ops, precs)
          yield tree if tree.evaluate == expect
        rescue NoMethodError => err
          unless /undefined method `<<'/ === err.message
            p nums
            p ops
            p precs
            p tree
            raise
          end
        rescue ZeroDivisionError
          ;
        end
      end
    end
  end
  $stderr.puts "#{i} cases tested" if $DEBUG
end
 
def each_nPn( list )
  generate_combinations(list.length, list.length) do |idxes|
    next unless idxes.length == idxes.uniq.length
    yield idxes.inject([]) {|result, idx| result.push list[idx]; result }
  end
end
 
def each_nPr( list, r )
  generate_combinations(r, list.length) do |idxes|
    yield idxes.inject([]) {|result, idx| result.push list[idx]; result }
  end
end
 
def generate_combinations( len, upper )
  cur = Array.new(len, 0)
  fin = Array.new(len, upper-1)
  while true
    yield cur
    break if cur == fin
    # Increment a set (cur)
    0.upto(cur.length - 1) do |i|
      cur[i] += 1
      break if cur[i] < upper
      cur[i] = 0
    end
  end
end
 
module Tree
  def Tree.build( nums, ops, precs )
    trees = nums.map {|n| LiteralNode.new(n) }
    ops = ops.dup
    precs = precs.dup
 
    cur_prec = precs.length - 1
    while cur_prec >= 0
      idx = precs.index(cur_prec)
      precs.delete(cur_prec)
      rhs, lhs = trees.slice(idx, 2)
      op = ops.delete_at(idx)
      trees[idx, 2] = OpNode.new(rhs, op, lhs)
      cur_prec -= 1
    end
    raise "must not happen: #{tree.inspect}" unless trees.length == 1
    trees[0]
  end
end
 
class OpNode
  def initialize( lhs, op, rhs )
    @lhs = lhs
    @op = op
    @rhs = rhs
  end
 
  def inspect
    "(#{@lhs.inspect}#{@op}#{@rhs.inspect})"
  end
 
  def evaluate
    @lhs.evaluate.__send__(@op, @rhs.evaluate)
  end
 
  COMMUTATIVE_OP = [:+, :*]
 
  def to_s
    if COMMUTATIVE_OP.include?(@op)
      l, r = sort_tree(@lhs, @rhs)
      "(#{l}#{@op}#{r})"
    else
      "(#{@lhs}#{@op}#{@rhs})"
    end
  end
 
  def sort_tree( lhs, rhs )
    if lhs.terminal? and rhs.terminal?
      [lhs, rhs].sort_by {|t| t.value }
    elsif lhs.terminal?
      [lhs, rhs]
    elsif rhs.terminal?
      [rhs, lhs]
    else
      [lhs.to_s, rhs.to_s].sort_by {|s| [-s.length, s] }
    end
  end
  private :sort_tree
 
  def terminal?
    false
  end
end
 
class LiteralNode
  def initialize( val )
    @value = val
  end
 
  attr_reader :value
 
  def inspect
    @value.to_s
  end
 
  def evaluate
    @value
  end
 
  def to_s
    @value.to_s
  end
 
  def terminal?
    true
  end
end
 
main

戦略は単純な総当たりです。 each_nPn とか generate_combinations のあたりは Haskell のほうが簡単に書けそう。

と言うか、Haskell のリストを念頭に置いてイテレータに落としました。 イテレータと遅延評価のリストは非常に感覚が似てますね。 イテレータはメソッドから値が湧いてくるけど、 Haskell だとリスト自体から値が湧いて出てくる感じがします。

本日のツッコミ (全4件)

shiro [昔書いたこれは任意桁数に容易に拡張できますが、
重複を除くのは厄介かもしれません。
http://www.lava.net/~shiro/Private/diary/0112.html (12/11)]

nobsun [なつかしい、お題だったりします。「切符問題」
そのときの発端は、http://www.lava.net/~shiro/Private/diary/0112.html
で、拡がったのは
http://namazu.org/~satoru/diary/?date=20011211#p03
からかなぁ。で、そのときのHaskell版は
http://www.sampou.org/nobsun/journal/?200112b&to=200112160#200112160]

nobsun [でも、このときは、全解ではなかったなぁ。]

あおき [2001年にもう流行って(?)たんですね…。
読書会でも話が出ましたけど、式の同値判定
まで考えるのは結構面倒ですね。]


2003-06-28

リファラ

みこみこリファラがとんでもない数になってるし…。

SICP 読書会 #5

ふー。お疲れさまでした。相変わらず面白かったです。 とか言いつつ大幅に遅刻しました。もはやデフォルトです。 朝 10 時だなんて、起きられません。

さて、真面目なまとめは掲示板にまかせて 飲み会のメモをしようかと思ったんですが 書いてみたら内容があまりにやばかったのでやめておきます。

AlphaStation 500 強化計画 #2

全然日記には書いてませんが、様々な苦難を乗りこえて AlphaStation 500 はメモリ 512MB にパワーアップしました。 このときの話は忘れたころに Alpha のページに追加されることでしょう。

さて、メモリ増設成功に気をよくしたわたしは、 今度はネットワーク接続を強化することにしました。 AlphaStation 500 のオンボードのイーサネットアダプタは digital 21040 であり、すなわち 10Base-T です。 別にギガビットイーサなんて要求しませんが (というかハブ持ってないし)、 さすがに 10Base-T はどうかと思います。 そこで 100Base-TX のイーサネットカードを載せてしまうことにします。

どうせなら DEC のボードを刺したいものです。 さっそく DEC の DE500 を入手しました。チップは digital 21140-AB。 オンボードのイーサネットアダプタは殺したほうがいいのだろうか…… などと思いつつも、とりあえず何も考えずにさしてみます。

あ、やば。OS を自動ブートにしてたんだった。

                  :
                  :
tlp0 at pci0 dev 6 function 0: DECchip 21040 Ethernet, pass 2.4
tlp0: interrupting at kn20aa irq 13
tlp0: Ethernet address 00:00:f8:22:65:eb
tlp0: 10baseT, 10baseT-FDX, 10base5, manual
tga0 at pci0 dev 7 function 0: DC21030 step C, board type T32-08
tga0: 1280 x 1024, 32bpp, Bt463 RAMDAC
tga0: interrupting at kn20aa irq 8
wsdisplay0 at tga0 (kbdmux ignored)
isp0 at pci0 dev 9 function 0: QLogic 1020 Ultra Wide SCSI HBA
isp0: interrupting at kn20aa irq 12
scsibus0 at isp0: 16 targets, 8 luns per target
pceb0 at pci0 dev 10 function 0: Intel 82375EB/SB PCI-EISA Bridge (PCEB) (rev. 0
x05)
tlp1 at pci0 dev 12 function 0: DECchip 21140 Ethernet, pass 1.2
tlp1: interrupting at kn20aa irq 4
tlp1: DEC DE500-XA, Ethernet address 00:00:f8:02:89:14
tlp1: 10baseT, 100baseTX, 100baseTX-FDX, 10baseT-FDX
                  :
                  :

イーサネットアダプタ二つは無事に認識されてるようだ。 それならそれでいいことにしよう。

あとはネットワークインターフェイスを設定すりゃいいね。 えーと、NetBSD の ifconfig の引数はどうなんのかな。 man 見た感じだとこんなとこかな?

# ifconfig tlp0 delete
# ifconfig tlp1 inet 192.168.1.38 media 100BaseTX
# ifconfig -a
tlp0: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        address: 00:**:**:**:**:**
        media: Ethernet 10baseT
        status: no carrier
        inet6 *****************%tlp0 prefixlen 64 scopeid 0x1
tlp1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        address: 00:**:**:**:**:**
        media: Ethernet 100baseTX
        status: active
        inet 192.168.1.38 netmask 0xffffff00 broadcast 192.168.1.255
                            :
                            :
# ping -c1 as500
PING as500.loveruby.net (192.168.1.38): 48 data bytes
64 bytes from 192.168.1.38: icmp_seq=0 ttl=255 time=0.153 ms
 
----as500.loveruby.net PING Statistics----
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.153/0.153/0.153/0.000 ms

あ、動いた。

なんだ、楽勝じゃん。

今夜も飲み

そういえば明日 (今日) は高校陸上部の同窓会だ。 幹事をやっていた都合上、行かざるを得ないのであった。


<前月 | 最新 | 次月>
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|