Rubyist Hotlinks 【第 15 回】 arton さん

はじめに

著名な Rubyist にインタビューを行う企画「Rubyist Hotlinks」。今回は、ActiveScriptRuby の開発者として有名な arton さんにお話を伺いました。

プロフィール

arton0.jpg 東京生まれ。ご家族は奥様と娘さんの 3 人家族。ActiveScriptRuby の開発者として Ruby 界隈では有名だが、Java 関連書籍なども多く執筆しており、arton さんの著作はあわせて 10 冊を数える。

好きな言葉
"Chacun fait fait fait, C'qu'il lui plaît plaît plaît"
尊敬する人
リチャードストールマンとか?
ご本人のサイト
L'eclat des jours

インタビュー

聞き手
ささだ
語り手
arton さん
野次馬
青木さん、卜部さん、助田さん
日にち
2006 年 5 月 27 日
場 所
秋葉原

目次

プロフィール

年齢話

arton 最初はプロフィールか*1。生まれたのは 1961 年ですね。だからもうなんと今年 45 歳。

ささだ 45 って、Rubyist 的にはどうなんですかね? どうっていうのは、年齢層はどういう割合なのかな、と。

arton わかんないけど、中田さんなんかと同年輩じゃない?

ささだ なんか前、RWiki かなんかに一覧ありましたよね。*2

arton 一番たぶん年上なのはたけ (Tk) さんか、大阪の方の高西さんじゃないかな。たぶんそれに続いて僕や中田さんとかじゃないかな。

ささだ まつもとさんがどの辺りでしたっけ。

arton まつもとさんは 39 歳かな*3。今一番いっぱい目立つ人たちって、今 35、6 だよね。Seasar Foundation の中心になって活躍されている方たちはみんな 35、6 だっていうことだし。

ささだ そうですよね。Ruby は一番下がたぶん、成瀬さんとかかな。

arton あれ、まだ yuya さんはもっと……

ささだ もう 20 超えてるはず。

arton あと、最近あんまりお見かけしないんだけど、小林さんはけっこうご年配だったと思うけど。

そういう意味じゃたぶん、35、6 歳の人がメインストリームで、オープンソースの中心的な人達。それよりは上のほうだから、たぶん第 1.5 世代か第 2 世代ぐらい。えっと、何で数えるかっていうと、PDS とか PC-VAN とか NIFTY とかでその人たちがなんとなくそういうフリーのソフトウェアっていうのが世の中にあるんだよねっていうのを言い出した人たちを第 1 世代として。もちろん 1960 年代からそんなの当たり前だって人たちも居るんだよな。

出身地と家族構成 (奥さんは一人)

arton で、出身地は東京です。現住所も東京。

ささだ ずっと東京?

arton ずっと東京。幸いに。幸いとか言うとほかの出身の人が悪口を言われたとか思うかもしれないけど (笑)、でも俺は東京が好きなんだからしょうがないか。それから家族構成は差し支えは別に無いな。えーっと、奥さんと娘。どっちも一人。

助田 奥さん二人なのかと (笑)

arton 俺もそう言われると思ったんだけどさ、でもいちおう。やっぱり北アフリカの人とかと話していると、彼女が第二婦人で、これが第三婦人で、ってべつに普通のことらしいから。

ささだ そういう人と話す機会がある?

arton 無いよ。

一同 (笑)

arton ただまぁ、そういうこともあるかもしれないから、動じないようにしておかないと駄目だなと。

好きな言葉、座右の銘

ささだ なるほど。好きな言葉、座右の銘。なんかたくさんありそうですね。

arton いっぱいあるからあんま意味が無いんだなぁ。一応、さっき電車の中でこれにしておこうかなって考えたのがあるんだけど忘れちゃったし、とりあえず日記の、日記じゃないな、いまはトップページのタイトルにしているから、"Chacun fait fait fait, C'qu'il lui plaît plaît plaît" かな。Chacun ってのは、everyone make that they like かな。要するにみんな自分のしたいことをしているのさ。つまり*4、やりたいことをやればいいじゃん、ていうか、あのどうでもいいですな、とか、そういう感じかな。とにかくやりたいことやりましょう。

ささだ なるほど。それは何の言葉なんですか?

arton フレンチラップ*5

ささだ それは何だろう、私はそういうところには全然突っ込みを入れられないので (笑)、ぜひ、皆さんからのツッコミを。

arton1.jpg

青木 誰が居れば突っ込めるんだろうね。

arton ラップがどうこうじゃなくて、その言葉が好きだなっていうだけの話でさ。

助田 ああ、あれね、とか言いたい。

arton こいつ何者だ? という感じなのかな。そんな流行ってたわけでもないしな。でもちゃんと YouTube にあったからね。

ささだ へー。

卜部 YouTube には最近なんでもありますからね。

arton 座右の銘もそういう意味じゃなんか、まぁ、「?で、ありたいな」とか「?じゃだめだよね」とかいうのがそれにくっつくと考えれば、たとえば「遠見明察でありたいな」とか。遠見明察ってのはいい言葉だなぁ。好きな言葉だね。そういう意味では「以って他山の石とせよ」というのも好きだな。でもね、「人生至るところに青山あり」とは思ってないんだなぁ。

死に方

卜部 死ぬときはどこがいいですか?

arton それは楽に死ねればそれが一番。

一同 (笑)

卜部 場所よりはシチュエーションの話ですか?

arton そうだね。気がついたら死んでいたぐらいがいいんじゃないのかな。ドクトル・ジバゴ ({{isbn('410228401X', '上巻')}}Net::HTTPFatalError (503 "Service Unavailable"): inline plugin
) ({{isbn('4102284028', '下巻')}}Net::HTTPFatalError (503 "Service Unavailable"): inline plugin
) がいいな。ドクトル・ジバゴってのは読んだことない? パステルナーク*6って人が作った大河メロドラマ小説なんだけど、映画にもなってさ。ドクトルジバゴはお医者さんなわけ。で革命に巻き込まれて波乱万丈の生涯を過ごしてさ、で、50ぐらいかな? いろんな過去を含みながらも心臓外科医として活躍している毎日。である日モスクワ駅を出て歩いているとさ、「ッーーー」と胸を押さえて雑踏の中で倒れて死ぬんだよ。あー、これはいい死に方だなぁ。

ささだ いい死に方なんだ。それが。

arton だってさ、ベッドの上でさ、「もうすぐお迎えが来るのでございましょうか」って死ぬのはやじゃんそんなの。普通にさ、ある日ザッと死ぬっていいよな。

ささだ なるほど。

卜部 ある日、パソコンの前でバタッとか?

一同 (笑)

arton それは……*7、メシ食いながらも嫌かな。そういうのはさ、トイレと風呂はちょっとヤだよね。トイレはかっこわるいしさ、風呂ってほらあの、スープになってるやついるよなたまに。ぜったいにやだよな。絶対。

ささだ 怖い怖い。

卜部 あまり怖いネタは乗せられないので、その……。

一同 (笑)

arton まぁいいや。

尊敬する人

ささだ じゃぁ、尊敬する人。

arton これが難しくてなぁ。昔は「そんな人居るはず無いでしょ」って言ってたんだけど。やっぱり考えてみればさ、部分部分で尊敬できる人は山ほど居るわけでさ。

ささだ いるいる。

arton でそんなの一々さ、この人のこの部分はすごい尊敬している、この人のこの業績はすごい尊敬しているって言っててもあんまり意味ないし、じゃぁ、誰か一人絞れるかって言うと、あんまり絞れないと思ってるしなぁ。とりあえずやっぱり、ま、いろんな人。いろんな人のいろんないい点。特に尊敬できる人って特定するのは難しいな。

ささだ たとえばっていうのはあります?

arton たとえば? そうだ、リチャードストールマンの堅物っぷりって言うか、あれはやっぱりスゲーと思う。

ライセンスっていう格好で、フリーなソフトウェアっていうのをまとめるっていうか、これこれこういうライセンス*8を取ることで、フリーなソフトウェアっていうのを守ることが出来る、っていう発想をそもそもしたところって、スゲーよな。だってそういう考えは誰もなかったでしょ。なおかつそれで、「馬鹿じゃないか」って言われても、愚直にそれを守ってやってるよね。で、本人が実際の生活で何をやっているかはよく知らないけどさ、DRM が出てくればこれはおかしいって言うしさ、ようするにその方向でもって筋を通しているのが、それはすごい。立派だなと思うし。

じゃぁ、その筋を通す人たちだけが立派かと思っているかというと、まったくそんなことは無くて、翌日には昨日までの私は間違ってました、てな人も尊敬できるんだけど。そういうのってあんまり例がぱっと出てこない。あの、変節漢ってのは例が出てくるけど、節を変えるってのと間違えを改めようってのは違うことだから。

ささだ ストールマンが 20 年ぐらいですかね。最近だとソフトウェアは、逆に無料だとかそういう感じで捉えられているところがあると思うんですけど、あの思想を貫いているというのはすごいですよね。

arton なんとなく昔に戻ったっていう気がするんだよね、サービスって言う考え方っていうのはね。

ささだ クローズドになってるから?

arton プログラムっていうのはインターネットの向こう側にあって、タダでくっついてきて、それを利用するためにお金を頂戴する。それってあの、昔々のよく聞かされるメインフレームのハードウェアでお金を取って、ソフトウェアはそれについているっていうタダのおまけっていうか。

ささだ メインフレームの時間貸しの話?

arton いや、課金だけの話じゃなくて、昔は IBM はメインフレームを売るときのビジネスのモデルとしては、ソフトウェアはおまけだったらしい。S/360 の OS*9 で金を取ったかというと、OS のお金なんていうのは無くて、それはハードウェアにこみこみだったっていうやつ。

……話がなんか、全然尊敬する人じゃないな。

一同 (笑)

ささだ いつもこんな感じなので。

代表作

arton 代表作っていうのは、やっぱり ActiveScriptRuby になんのかなぁ。個人的にはソースがきれいな Rjb のほうが好きなんだけど。でもあのソースも途中で変節したから変なんだけど*10

ささだ Rjb は何か反響がありました?

arton 結構向こうからの問い合わせはあるんだ。

ささだ 海外ですか?

arton うん。たとえば例の Enterprise Integration with Ruby の人から Rjb について書くから、よくわかんないところを教えてっていうやつなんかもそうだけど。(その記事は) 読んでないからわかんない*11

ささだ 日本ではあんまり?

arton 桑島さんが一時期いじくってくれたってことは、なんか使い道があるのかな。ただほら、俺も最初はこれこういう風に使おうと思ってて見事に外れたから失敗した。GUI、ようするに Swing を使おうって目的にはまったく使えないからさ。そこでちょっと期待はずれな面はあったな。ただ、自分の使い道*12では十分元取れてるんじゃないかな。

ささだ Swing で使えないって、何ででしたっけ。

arton マルチスレッド。

ささだ ああ、はいはい。Java のマルチスレッドと合わなかった。

arton 合わないって言うか、合うはずというのがありえない。ちなみに……興味がある?

ささだ 興味ある。

一同 (笑)

Java のスレッドモデル

arton Java のスレッディングモデルがめんどくさくてさ。ていうか、Java のプログラマでちゃんと分かっているやつ居ないんじゃないかって気がするなー。

一同 (笑)

arton いや分かっている人は山ほど居るんだけど、分かっていないほうがいっぱい居ると思う。

0015fig1.png

arton (ホワイトボードに書きながら) [A] がメインスレッド。ここでメインスレッドの中から黙ってウィンドウを作ると、隣に Swing のスレッド [B] が生成されて、Swing のフォームはそっちで動くと。んで [A] のスレッドの中でなんか処理してこの辺でぐにゃぐにゃしているときに、 ユーザーインターフェースのボタンをクリックするとどうなるかっていうのは。

ささだ ここでスレッドって言うのは Java のスレッド?

arton Java の話ね、もちろん。当然メインで作ったやつじゃん。ここをクリックすると [B] が。

ささだ まあ自然ですよね。

arton まぁ、当たり前だよね。[A] は他のことしてるんだから。で、COM で Win32 ってのはこの場合は、[A] のスレッドでメッセージポンプでくるくる回すって言うのがあるから、メッセージも [A] で発生するっていうのがあるんだけど、Java のスレッディングモデルだと、[B] で「来たよーん」ってイベントがいきなり動くわけ。[B] のなかでイベントハンドラが動くわけ。すると [A] でぐにゃぐにゃしているときに、[B] でイベントハンドラが動くから、[A] の人はおかしくなるし*13、逆に Rjb の世界だと、Ruby のスレッド、まぁ、メインスレッドが動いてるわけなのに、別のスレッド [B] でコールバックされて、JBoutton なんとかが動き出すわけ。この処理と平行して GC なんかが走ってるかも知れないし、これがどこで止まっているかってさ、そういうのに全部影響されてくるわけ。

ささだ はいはいはい。

0015fig2.png

arton たとえば [A] が setjmp(3) したところで [B] 側で例外おきて longjmp(3) したら、めちゃくちゃなことが起こる。それからもちろん、GC が [B] で走ったらどうするよ、ってのも。[B] のスタックずーっと眺めても、ここに ruby_init のときに作ったスタックの、ここが始まりってのがあって、[A] のスレッド用にここにこう来て、[B] のスレッド用にこれだけ割り当てて、このスレッドにこれだけ割り当てられているときに、こっからここ、こういう風に見て……なんか GC のときひっかかるんだよな。こういう取り方されているときにさ、こっからこう見てるから、こっちの部分が、これは余分に解放されないから問題ないな (#1)。

ささだ そもそも Ruby レベルではシングルスレッドとしてみてるから、コールバックしたときに、スタックがどこから使うか分からないから、メインスレッドのスタックがつぶされる可能性がある。そういうのも。あ、違う違う。子供のスレッドのマシンスタックが、GC されない。マークされない (#2)。

arton そっちだったらいいんだけど*14。ああ、そうかだから、スタックがこう伸びるんだったら、メインのほうのスレッドも眺められるから平気だよな (#1)。OS がどうプロセスのスレッド上のスタックを割り当てられるかっていうのが配置によって変わるわけか。子供でこう (#3) 伸びちゃったら SEGV だ。

ささだ 違う違う、そもそも子供を見ないんですよ。

arton だって子供って分かってないから。

ささだ そうか。そういうことがごめんごめん。

arton まぁそういうふうに山ほどおかしくなる可能性があるんですよ。

そこでたとえば Rjb とか ActiveScriptRuby のために、ここのところをこうネイティブスレッド変わってるから、mark する際にスレッドの切れ目を detect してこういうふうにもっていって子スレッドも全部見ていくと。そういうパッチ作っても、そういうのって全然ポータブルじゃないよね (笑) 俺の役には立つかもしれないけど。そう考えていくと、うーん、そこは触んないほうがいいな、って話になる。

で、COM の場合は Lightweight RPC*15 っていう、Windows のメッセージングを使ったスレッド間の同期の調整なんだけどさ。それを使って全部メインスレッドでまとめるようにしてるんだけど、Java の場合は特にそんな機構があるわけでもなんでもないからさ。もうめんどくさいから、そっちで動いて死んでも俺の知ったこっちゃないって、そういう風になってるもんで、Swing のアプリケーションはまともに動かない。

それだけならまだいいが、Macintosh の OS X の Swing の実装ってのが、もう、やばいのが分かりきってるから、UI スレッドを絶対 [B] じゃないと作れないようになってる。つまり、[A] でもうメインのフォームを出す、そういうのが駄目で、[B] で自分でやりなさい。実際そのために、Swing にそういうメソッドが用意されてるんだけどね*16、つまり、ユーザーインターフェーススレッドを作ってそこで、フォームを作らせる。で、知らないで普通に書いちゃうと、Macintosh は怒るわけ (笑) で、そうすると Ruby でちゃんと Swing 側のやつを読み取りするためには、Rjb の中でワーカースレッドを作って、そっちで initialize してやってくと。そんなポータブルじゃないものをここにわざわざ入れるのもアホくさいよなぁ、という感じがしてくるから、まぁそれはいいや、Macintosh で動かなくても。さらに、Linux の場合は、こことここのやり取りでシグナルをやたらめったら使うもんで、Ruby とどうしても競合しちゃって駄目なんだよね。白いのがぱっと出てそれでハングしちゃうんだ (笑) Linux も駄目だ、もういいや (笑)

青木 シグナルでそこをやるんですか?

arton Java の実装はシグナルを使ってる。で、Solaris も同じなんだけど、それはどうやれば抑制できるってのは、JVM の仕様に書いてあって、使い方のコマンド一覧が書いてあって、そのオプションをセットするとシグナルの使用量すごく減るらしくて、仲良く動くんだよね。GC さえ気をつければ、結構 Solaris は動くんだ。そのシグナルを使わないオプションって言うのが、Linux の JVM でも同じだから試してみたんだけど、Linux のほうはぜんぜん駄目なんだよな。

青木 Linux のほうは、それは新しいスレッドですか? NPTL*17

arton ああ、そっかそっか。ありうるな。僕は (glibc) 2.2 か。それでしかやってないから。

卜部 LinuxThreads だと、確かに Realtime signal*18 をがんがん飛ばしている。

arton ありうるな。それは人によっては実は動いてるかもしれない。なんで動くのに動かないって言ってるんだろうとか思われてるかも知れないな。

ささだ 根本的な問題はスレッドモデルとの相違ということで。

arton そうだね。

ささだ Ruby のコールバック側は別のスレッドで動かされていることを知らないので。

arton それを説明するのも面倒だし。

ささだ あと、最近の Ruby だと、GC を開始するときに、OS のメインスレッドじゃなかったら怒るんですよ*19

arton あっ、すばらしい。

ささだ 怒るっていうかそこで [BUG]*20 になって、落ちるので。たぶんそんな感じで動かない。

arton 1.9?

ささだ 1.9 かもしれない。自分で見てるソースしかわからないんで。

arton いや まぁ、変に動いてさ、OK と思って実践投入して、あるとき GC 動いたら死にました (笑) ってより、最初から動かないほうがよっぽどいいと思うよ。

arton2.jpg

ささだ えーっと、代表作からずいぶんずれましたけど。初めての講義形式で。

arton まぁ、ASR かな。

著作

ささだ 著作はたくさんありますね。

arton 著作はおかげさまで、共著をあわせると、10 冊かな。二桁になってる。ところが代表作って言うのが、部数って言うんだったら、今になっても{{isbn('4756136036', '邪道編')}}Net::HTTPFatalError (503 "Service Unavailable"): inline plugin

助田 やっぱり、Windows でユーザーさんが多いから?

arton 違う違う。それだけだったら C# でもいいんだけど。ビジネスがらみのプログラミングの本って言うのはもう、ある部数しか出ないって事になっているみたい。ようするに、それぐらいしかお金を出す層が居ないっていう。邪道編って、そういう意味じゃ別に、あれはエッセイみたいなもんじゃん (笑) そういうのもあって、あれは一番そういう意味で、読者層がもともと広かったって言うのもある。

ささだ これからもまだ、そっちのご予定が……さっきも言ったように。

arton 代表作って言うのが、投入した……ちょっと訳が分からなくなるからやめとこう。部数だけで見て邪道編ということで。

ささだ Java の本よりも売れてるんですね。

arton あ、それはもう全然。

卜部 Java で本を書いても儲からないのか。

arton いやー、人と種類によるんじゃないかなぁ。「やさしい Java」みたいなものは需要は絶対的にあるし。あと、林晴比古さんみたいに専門学校の教科書に使われるようなやつも。あと結城さんのもそうだよね。逆に言うと、もうそういう定番があるとさ、たぶん新参でそれを覆すってのはなかなか難しいんじゃないかな。もともとそういう覆すような教科書を書いてないしな。書けるとも思えないし (笑)*21。間違いなく結城さんみたいには書けないな*22

メソッドの好き嫌い

arton 「好きなメソッド、嫌いなメソッド」――これが難しいんだよな。大体使うメソッドは限られてるし、好きも嫌いも無いような気がするな。

無理やり言うと……好きなメソッド……やっぱ Kernel#send かなぁ。アンダースコアが付くか付かないかはどっちでもよくて send。

ささだ send のどの辺が?

arton それはやっぱり、何でも呼べるから (笑)

ささだ 最近は funcall じゃないと呼べなくなった。

arton そうなんだ。あれ?

ささだ 1.9 からプライベートメソッドが呼べなくなった。

arton そうなんだ。その場合はアンダースコアつきの send のほうは OK とかそういうのはない?

ささだ ないです。

arton private_send とかそういうのはない?

ささだ それは funcall。

arton それが funcall。

青木 常に funcall を使っていけば、何でも呼べる。

arton それはなぜ?

卜部 method_missing とのからみ。

arton あ、そういうことなんだ。

青木 そうなの?

arton send は method_missing をチェック……いや違うな。

青木 普通にオブジェクトに対してメソッドを呼ぶときの挙動を再現したことにしようという。

arton なるほど。で、それとは別に funcall というスペシャルなやつを用意しとくよと。そういう場合スペシャルな方はあんま多用しないほうがいいだろうな。じゃあ、相変わらず send。

青木 ああ、そうそう。dRuby ですよ。dRuby とかで普通に send しちゃうと private メソッドを呼べてしまうので、挙動が変わってあまりうれしくない。

arton むしろ method_missing になって欲しいとかそういうこと?

青木 そう。

arton あー、そっかそっか。あいつは proxy オブジェクトだからか。to_s とか呼ばれても全然違う to_s*23 が呼ばれちゃうとか。

「嫌いなメソッド」――嫌いって……自分の理解できないものはすべて嫌い。

一同 (笑)

arton 知らないものは嫌い。それで行くと、相変わらず Continuation がらみってのはまったく。だいたいそもそもそれがなんの役に立つのかって言うところから知らないし、知る気も起きないところをみると、嫌いなんだろうきっと。

一同 (笑)

ささだ いいですね。Continuation 嫌いな人増やしましょう。

一同 (笑)

助田 それは実装とか。

青木 いいよあれは無くて。

一同 (笑)

arton 嫌いなんじゃなくて、興味が持てないなのかなぁ。でも何で興味が持てないって、嫌いなんだよ (笑)

青木 Scheme*24 とかはやんないんですか?

arton うん。うんってことはなくて、別に機会が無いから。てのかなぁ。モチベーションも無いっていうのもある。そのくせ、元吉さんが訳した最初の翻訳の本*25もってたりするんだけどね。あれはすごいガチガチの翻訳になっていてさ。

青木 二版もそうですよ。

一同 (笑)

arton 二版もそうなの? あれは非常に逐語的な、コンピュータに読ませたら非常にはっきり何が書いてあるか読んでくれると思うけれど (笑) 人間にはつらいよねあれは。遊びがないって言うか*26

青木 嫌いなほうは?

arton 嫌いなほうは……使わないのはみんな嫌い、にしておこう。別に単に出会ってないだけかもしれないけどな。出会えばこんなもんがあんのかって、そのまま忘れたりするけどさ。collect も map も使ったことが無いし。

ささだ えっ!?

arton 無いよ。全然無いよ。

卜部 どうやってプログラムを書いているのか。

arton 俺も良くわかんないけど、結局逐語的に書いてるんじゃない? そういう意味では。あるいは、そういう処理を一切、今まで書いたことが無いのかもしれない。

ていうかさ、ほら、ちゃんと書かなくても書けるっていうのがあるよね。一昨日あたりの日記*27に、ちょっと色々あって、イルカのプログラムをいい加減に書いて置いておいたんだけど、これが JavaScript で途中まで書いていたもんで、空かっこやセミコロンが付いてたりするけど、えいしょっと張っておいたら、なんか紹介されたもんでいっぱいアクセスされたわけ。でも、こんなコードはちょっと真似されたら困るなってんで、ちゃんと展開しましょうなんて追記したけどさ。ああも書けるわけじゃん。配列の配列の、上のレベルでくるくる回してるから、下のやつ展開して取ればさ、その方がきれいに書けるんだけど、配列として、要素に一々インデックス指定して。たぶんそういうような感じでラフに書いているのが多いかもしれない*28。ただ言えるのは map も collect も使わないよなあ。

ささだ じゃあ、map か collect かっていうのはどうでもいい?

arton 全然いいね*29

一同 (笑)

ささだ なるほど。

Ruby とのかかわり

Rubyist になったきっかけ

arton 「Rubyist になったきっかけはいつから?」――これはー……。

ささだ (arton さんが勝手に進めてくれるのを見て) このインタビューは楽ですねぇ。

一同 (笑)

助田 自問自答っていうか。

arton ささださんから質問をまとめてもらってるから。

ささだ この質問集は過去のるびまの蓄積ですね。一回目に集めたのをずっと使いまわしている。

arton 回りからツッコミが入るからメールでただ書いて送り返すのと違って、その後の反応が変わってくるのがミソみたいだな。えーっと、「きっかけはいつから?」――1999 年の冬ぐらいからかな。

ささだ その時に何が?

arton たまたま掲示板みてたら、そこで「Ruby 本買ってきて紹介スレ」みたいなやってくれる人がいてさ、それじゃこれ使うか。

ささだ 掲示板って、何の掲示板ですか。

arton えーっとね、mm さん*30っていう人がいて、今でもたぶんやってると思うんだけど、荒らし対策掲示板*31みたいなのを作ってる人が居てさ。その人の掲示板のところで、逐次紹介スレみたいなことをする人が居て、おお、なるほどそうですかといって、使うようになった。元々は、仕事柄ソケットを簡単に叩きたいというのと、正規表現使ってこれだったらこれ、というのをとにかくシャカシャカやりたかったんだ。で、それまではしょうがないから C で書いてたりしたんだけど、バカバカしいじゃんそんなの。

ささだ Perl は?

arton 使ったことが無かったんだよ。そのときの仕事は Windows だからさ。Visual C や VB や、 JavaScript ……はその時は使い物にならないから置いといて、ようするに、C と VB や C++ は自由自在なんだけど、それ以外のものって不自由じゃん。不自由だからわざわざインストールしてやるんだから、どうせ使うんだったら使いやすいのがいいなぁと考えてたんだよね。もちろん最初は Perl が候補だったんだけど、Ruby について書いてるのを見て、なんか面白そうだし*32、こいつが色々解説してくれるから Ruby にするか、ってんで Ruby 使った。そしたらおお、使いやすいじゃないじゃないですか。Win32OLE もあるし、なんだこれは便利じゃないですか。で、そのまま。

ささだ その頃は Win32OLE はもう十分動いていたんですか? 99 年だと。

arton いや、細かいことを言い出すと、動いてなかった。でも、十分使い物になっていた。

ささだ なるほど。

arton 同期処理でソケットを叩く分にはね。それをたぶんスレッドを山ほど作ってたらうまく切り替わらないよ、っていうのはあったかもしれない。

ささだ あの、構造化例外がどうのとか、そういう問題?

arton まぁ、それもあったろうし*33

卜部 シグナルも使わない。使えないシグナルは。

arton そこでやりたかったことはソケットを開いて、送って受け取ったデータに正規表現かけて、これだったらこういうパケットを作って、送り返すとか、本当にそういう会話的な処理のスクリプトを書いたんだったと思う。

ささだ C で書くのだと。

arton めんどくさいし、大体正規表現ライブラリなんてないじゃん。かといって VB で書くったって、ますます書きにくいしな。

ささだ 今でも、JavaScript は、あんまりないですよね、よくわかんないけど。

arton いや、いや、いや、そんなことない、そんなことない。C# も使えるけど、今だったらある。JScript の正規表現ライブラリをみんなが使えるようになってるから。

ささだ でもソケットって叩けない。

arton ああ、それは、ソケットはね。ソケットは叩けないけど、それはちょっと探せば VB 用の OCX はあるし*34

ささだ ああ、なるほど。そういう意味ではあるんだ。その頃に JScript があんまり出来て無くてよかったっていうんですかね。

arton うーん、いや、たぶん JScript だとかったるくて、やってられなかったと思う。やっぱり Ruby は書きやすいよ。それは本当にそうおもった。

ささだ (るびまとして) いい感じになってきましたね。

一同 (笑)

ささだ ではその頃は普通に業務に使っていた?

arton その頃はまだ業務っていうよりも、業務のための下準備やら、テストやら、ま、自分のためのことにやる。しかも Win32OLE もあったから。VB で一々フォーム作ってやってたのを、これチャカチャカ書けばいいやっていう風になったのはいいことだと思う。その辺の成果のいくつかが、例*35のあの Word の grep とかだったりするわけだ。

ささだ あー。

arton まぁ、それで使うのはいいんだけど、コンソールから打つのってかったるいじゃん。マウスだけで済むならマウスだけでやりたいわけ。たとえばこう、ファイル選んで、ふむふむふむ、みたいな形で。そういうときに HTA が使えるのはもう知っていたから、HTA で Ruby を使いたいなぁ。そしたら何をしたらいいかってのはもう分かっていて、それは ActiveScript のインターフェースを作ってやればいいっていうのを分かっているから、じゃあ付けますか。で一回 ruby-list で訊いたような気がする (ruby-list:20733)。誰か作っている人居ますかって。あ、違うかな? 調べていなかったから、俺が作るかと思ったのかな。で、ま、作って。

ささだ その辺のインターフェースをきちんと知っている人って、ほとんど居ないですよね。

arton うん、それはねぇ、使う人も使ってないし、作る人もあんまり居ないし……。こないだ arino さんが一個増やして、世界で 24 個ぐらい出来たのかな。

ささだ へー。

arton 直接は知らないけどね、arino さんって。

ささだ 何を作ったんですか?

arton ASL っていったかな。ActiveScriptLisp か*36

ささだ なんかその辺の細かい話は RHG で*37一度話していただいて。

arton そうだね。

ささだ あんまり細かいことは覚えていないんですけど (笑)

arton うん、いいんじゃないの。

ささだ なんか、仕様が大変だなってことだけしか。

arton ああいうのは、そのときに面白ければいい話だからね。自分が使うときになるとまた話は別になるんだ。

一同 (笑)

arton そういうわけで、HTA さえつかえれば、html で input type="button" って書いてボタンになるしだし、 input type="file" って書いてファイルダイアログ出るし、楽なわけじゃん。そういうわけで、ASR が出来たと。

ささだ なるほど。それってもう、Ruby 始めてすぐでした?

arton すぐ。だって、すぐ使いたかった。これはもう使えると分かったら、使えるものを使いやすくしましょうと。そのためには、HTA で動かないと不便ですな。そのためには、ActiveScript のインターフェースが要る。

ASR のリリース

ささだ 最初のリリース (?) っていつごろでしたっけ?

arton あれはたぶんね、ruby-list に真面目にちゃんとアナウンスしたから、あそこで探せば出てるんじゃないかな (ruby-list:20865)。2000 年の 3 月ぐらいか? あれ、違うね。邪道編が出版されたのが 2000 年の 7 月だったのがすごい印象に残っているから、そんな早いとは思えないな。

ささだ ChangeLog に載ってるかなと思ったんですけど、見つからない*38ですね。

arton そっか。当時は ASR っていう略称は絶対使っていないはずだから、「ActiveScript arton」で探すといいかも。

ささだ 2001 年に使っているという人もいるな。

arton まだ 1.4 のときじゃないかな。

ささだ 1.4?

arton そうだ、1.4 結構やっぱつらかったな。思い出してきた。それでもやっぱりこれは使いやすいと思ったんだから、よっぽどそれまでひどかったんだな (Ruby じゃなくて使ってた言語が)。

一同 (笑)

arton だから逆に言うと、そのとき Perl でも Python でも出会っていたら、おおー、すばらしいって、そこできっとやってたんだよな (笑)

ささだ 2000 年の 2 月に質問をしてますね (ruby-list:20733)。

arton やっぱそんなもんだな。

ささだ はじめましてって書いてある。

arton それははじめましてだから。そこで ASR?

ささだ 質問で、「すでにそういうのをやっている人居ますか」

arton あ、やっぱり訊いてるんだ。自分でやる前に (笑)

ささだ 「Ruby の ActiveScriptEngine 化プロジェクトを勝手に開始しました。」と書いてある。

arton ふんふん、なるほど。

ささだ これはまだ出来てなかったんですかね。開始しましたって言う内容だから。

arton そうだね。(メールを読んで) ああ、じゃぁ、少しは動いているんじゃないかな。

ささだ なるほど。

arton たぶんそれが最初のリリースなんだ。調べて誰もやってなさそうだから、とりあえず作ったやつを。そこでね、たぶん一回めんどくさくなったんだな (笑)

一同 (笑)

arton そこで誰かやっている人が居たらそれに合流するか、自分の捨てようと思ってメール出したんじゃないかな。

ささだ なるほど。でも、99 年の冬ってことは、一ヶ月か三ヶ月くらいで、もうそれが出来てるってことことですね。

arton だってあれほら、ラッパーだもんね。

ささだ  あー。

arton 自分では何もしなくて、ただ右から左へつないでやる問屋さんみたいな仕事じゃん。

ささだ うーん。仕様をきちんと抑えて、そこが大変だと思うんだけど。

卜部 2000 年 3 月にベータ版が出てる。「HTA としてなら、IE の制御が可能になりました」

arton ああ、じゃあ結局スレッドのところに引っかかって、それでいやになって投げようとして最初のアナウンスがでたんだな。

一同 (笑)

arton そんで、しょうがないからもうちょっとやるかっていって、たぶんそれでベータ版まで持っていって IE が出てくる。

ささだ なるほど。

arton ん、すると金光さんって、やたら青田買いしたわけだな。2000 年の 7 月に出版されてるってことは、どういうことだ。

一同 (笑)

卜部 いつごろ話がきたんですか?

arton 覚えてないんだけど。

青木 かなり前に出てましたよね。

助田 2000 年より前?

青木 2000 年か、書いてたのは。

助田 ゴールデンウィークであったことは覚えているんですよ。その前ぐらいに話があって僕のところに来たんですよ。

arton で、僕は助田さんより後なんだよね。

助田 ですよね。

arton ということは一ヵ月半ぐらいであれ書いたのか。

助田 書くのは速かったですよね。どれくらいで書き終わったのかっていうのは覚えてないですけど。

arton あの頃は暇だったんだね、きっと。

助田 私が書き始めたのが早かったんだけど、すぐに追い抜かれて、そのまま出版も arton さんのほうが早かった。

arton あのね、あの頃はやっぱ金光さんはうまかったよ。持ってきかたが。とりあえず書いた先からどんどん出して、そこはこうで、ここは乗りは悪い、ここはいいぞもっとやれ、みたいな感じ。あのリズムは良かったんだよ、すごく。

Ruby との付き合い

ささだ 現在は。現在の付き合い。あまり使ってないですか?

arton え、Ruby? いや、普通に使ってるよ。いやまぁ、Rails 本のためにまた特に使ったというのはあるけれど、普通に使ってるなぁ。職場では完全に、普通に使うようになっちゃったしね。

ささだ 他の人はなんだろう、前処理とか、簡単な処理をするときにはそれを使うような。

arton んー、というかまぁ、普通に仕事で動いているやつの、shell 系はみんなそれにしちゃったしね。

ささだ あー、なるほど。

arton 元々、元々ってことはないか。Windows 系の開発者と UNIX 上の開発者と居るわけじゃん。そして全てが全てオンラインで動くようなアプリケーションばかりじゃなくて、中にはほんととにくだらない、って言っちゃだめか。バックアップ取るようなやつもあれば、ログのサイズ見て切り詰めたり、ローテートしたりするスペシャルなやつを書いたりとか、そういうのがいっぱいあるわけじゃん。そういう UNIX のほうを元々やってた人はシェルでへーって書くわけだけど、Windows の開発者から見ると、なに使うか、その人達にさ、いまさら ksh*39 だのなんだのを覚えさせるのもなんだかバカバカしいじゃん。だったら両方で使える Ruby でしょ、ってんで Ruby にした。

ささだ へぇー。

arton ksh のバグがあったら直せないけど、Ruby だったら何とかなるしな (笑)

ささだ なるほど。それは arton さんが居ないと無理だったんですかね?

arton だって別に、そこに無いものをわざわざ使うやつは居ないじゃん。

ささだ ああ、なるほど。

arton その意味では、はいインストールして使いましょうっていう意味ではまぁ。でもだれか代わりになるやつがいるはずだし、もしかしたら中には、俺は ksh で書いたほうが絶対に効率がいいと思うんだけどなぁとか色々あるかもしれないからなんとも言えないんけど。

ささだ arton さんぐらいスペシャルな人が居ると、たとえばバグがあっても arton さんがやってくれるという安心感があると思うんですけど。

arton それは関係ないんじゃない?

ささだ 関係ない。

arton うん。ていうか、Ruby わざわざ見ているやつは、たまたま僕しか居なかったけどさ、やっぱ仕事だから仕事に関連するものに関してはみんなちゃんと知ってるから。それはやっぱり、仕事は仕事。

ささだ 仕事でも Ruby を使い続けていると。

arton 今はちょっとまた Windows では使わなくなっちゃったな。

ささだ Windows だと何を使うんですか?

arton 今はあんま使わない仕事をしてるんだよ。Windows なんだけど、ちょっと特殊なことをやってる。むにゃむにゃむにゃ。

一同 (笑)

ささだ わかりました。

好きなところ嫌いなところ

ささだ Ruby の好きなところと嫌いなところ。

arton 好きなところ…… (しばし考える) ……あんま困らないところかな。

ささだ 見れば分かる?

arton 見れば分かるね。いや、見ても分かんないところがいくつかあって、あそっか。嫌いなところを先にやる。嫌いなところは Syntax Error で、end の抜けで、ファイルの最後まで言っちゃうときな。あれはたまんないよな。でもあれはしょうがないよな (笑) インデント見るわけじゃないからな。

ささだ 確かにそれは良くありますね、私も。

arton 長いファイルで、end がたまたまなんか、編集ミスって消えちゃったりしたときって、あれってほんと致命的だよなあれ。

ささだ C とかブラケットが抜けると同じようなことに。でもまぁ、そもそもクラスの中でインデント、ええっと、なんだろうな、C はそうなのか。Java とかだと、同じような問題がある。

arton Java はもう少し賢く見てるんじゃないかな。なんでだろう。

卜部 if の中に、def とか書けないからですよ、C とか。Ruby は書けちゃうから。自由度が高すぎるので、end がでるまで、こいつもここから、こいつもここから、とかと思って、ガーっと最後までいっちゃうんだけど、C とかだと、途中で「ここに function の定義がくるのがおかしいじゃん?」っとか思って、途中でエラーになるから。そこより前にあるっていうのは分かる。

青木 文字列の後ろのクォートを消しちゃったときもさ、パースエラーにはなるんだけど、なんか変なところでエラーが出てくるからやだなあ。

arton インデントはちゃんとしてたりするからよくわかんないんだよねきっと。ぐしゃぐしゃぐしゃってなるとき、end が抜けてても、インデントがちゃんとしてると見えちゃう、ってそういう感じかなぁ。なんかね、編集ミスって、end の行をなくして苦しむときがたまにある。それはねぇ、嫌いだって言ったって、それで面白くない思いをするって言えば確かに嫌いなんだけど、じゃぁ、そこでこれこれこういう風に方法を変えたので大丈夫になりましたって言われてたときに、幸せかっていうと、きっと幸せじゃないだろな、って気がする。

卜部 end if とか end while。

一同 (笑)

arton (笑) そうか、それが VB の仕組みかぁ。

青木 これってチェックできそうな気がしますね。インデントのほうを正しいとみなして、こう、end をチェックしていけば、どこかで対応が利いているかは分かりますね。

ささだ warning かなんか出せそうだね。

arton ああ、そうか、付加情報でいいわけだね。インデントが must じゃなくて。でもインデント付けてると、おかげでいいことがありますよみたいな。

青木 def だけチェックすればいい。

arton class と module も。module はたぶん……。

質問。module とさ、class のときにインデントってどうしてる? module って書いてからインデントして class って書く人

module Foo
   class Bar
      ...
   end
end

と、module で class も我慢してこう、えいって書く人

module Foo
class Foo
   ...
end
end

と居るじゃない。class が浮いているの嫌だから↑こう書くんだけどさ、二つならんで end; end って書いてあるのを見るたびに嫌な気持ちがするんだよね (笑)

一同 (笑)

ささだ 私はインデントしますね。

arton するんだ。

青木 僕も

助田 私もインデントしますね。

arton あ、皆するんだ。じゃやっぱりするほうが良いんだ。

卜部 あまり。module の中に class があったときには、module をいったん閉じて、:: 演算子で。

module Foo; end
class Foo::Bar
   ...
end

一同 ああー。

arton それはちょっと…… (笑)

卜部 end は重ならない。

ささだ 確かに居るんだよね。

……それのために (その構文を YARV で) 対応しなけきゃいけない。

一同 (笑)

ささだ そんなことする人居ないだろうって思ったんだけど、そういわれると確かに、そういう用途があるんだなぁとか。あの、class の名前にプレフィックスをつけられて、そこには任意の式が書けて、というのがあって。

卜部 :: は演算子だからね。演算子だから、そこに任意の式が書けそうなのは明らかだよね。

ささだ 嫌ですね Ruby。

一同 (笑)

助田 そこが嫌なんだ、ささださんは (笑)

ささだ で、好きなところ。

arton やっぱブロック使うのが楽だからかなぁ。あれ楽だよね、絶対。

ささだ C# で delegate とかできますけど。

arton ああ、inner class ……ああ、C# の場合は anonymous class だけど、やっぱ結構違うんだよなぁ。

ささだ あまり対応する気持ちは無い? いや確か sort とかに渡せますし。

arton いや、使い道があればいくらでも使うんだけど。何が違うんだろな。

ささだ とにかくたくさん使っているというか。

arton あそうか、わかった。あのね、書き間違えってのはあるのが当たり前でさ、それを一々 Compile Error でございますって言われるのが嫌なのかもしれないなぁ。たとえばさ、100 行あるうちの 80 行まで走ってさ、見えてればまあ良いやっていう処理もあるわけだよね、世の中にはたくさん。そうするとさ、残り 20 のところだけ引っかかってさ、駄目でーすって途中死なれてもさ、まぁ、ここまで分かってるからまあいいや。コンパイルしなきゃならないとね、全部終わらないと動かないじゃん。それが嫌なのかもしれない。

青木 最近 Haskell ばっか書いてるんですが、やっぱりうんざりしてます*40

一同 (笑)

青木 とっとと動けよ!みたいな。

ささだ そんなにエディットと実行までの turn-around time が長いという。

arton んー、そんな長くないからさ、それは不思議なんだけど。あんなの IDE 使ってガラガラガラポンで済むんだけど。要するに Compile Error がうるさいんだよな。

ささだ でも、Ruby でも Syntax Error が。

arton でもそれは走った結果じゃん。Compile Error って走る前から言ってるわけじゃん。

ささだ Syntax Error は Ruby でも走る前じゃない。

arton ああ。

青木 でも頻度が違うじゃん。両方とも Syntax Error があるけど、その上さらに Compile Error がいっぱいある。

arton 言っている意味は分かって、Syntax Error は確かに Parsing のときは実行する前だから確かにそのとおりだけど*41

青木 Syntax が違ってても……

arton いやまぁ、確かに最初にコンパイルしているのは事実だから、言っている意味はその通り。でも気分が違うわなぁ。どうせ編集に戻るのも同じだし、何が違うのかなぁ。

卜部 やっぱ頻度が違うんじゃないですか。

arton 頻度が違うのかなぁ。

助田 SyntaxError が起こる頻度?

青木 SyntaxError よりは、コンパイルエラーのほうが起きやすいでしょ。型が違うとか。

arton ああ、確かにね。型違いはあんまないんだけど、変数名の書き間違いも最近無いし。あんまりエラーになんないからそういうのが出ると Ruby の場合手痛いのか。なんだろうね。C# じゃできないか? できますよね。たぶん Ruby のほうが大雑把なんだよな。何でもかんでも map*42 と配列があれば良いやとかなっちゃう。C# だとどんなくだらないプログラム作るときにも考えるんだよね、きっと。ここは String なんとかを使うとか、ここはこう Template を使って…… Generics か。何でも中に入れるものに合わせて何々しようとかさ。いろんな余分なことを考える。どうせ使い捨てなんだからシャカシャカやればいいのにさ、そういうことをきっと意識しちゃうんだよ。

ささだ 型をきちんと考えるのが。

arton たぶん考えちゃうんだよな。それは逆に、そのものを作るときは良いんだけど、普段ははっきり言って余分な考えだよね。Ruby で作るときにはそういうことを全然考えないで作ってますな。もう効率なんか全然無視だからね。

ささだ とりあえず push しとけとか。

arton うん。逆に言うと、不幸なのかもしれないね。

成功事例

ささだ えーっと、では次に行きますか。成功だったとかそういう事例は? お仕事では良く使っているということですが。

arton 成功って、無理やり言うとね、邪道編が売れたおかげでね (笑)、色々知り合いが増えたのが*43一番のめっけもんだった気がしてならない。

ささだ なるほど。

arton いやほんとマジな話。

ささだ そういう意味ではほんと、いろんな人というか、ハッカーがたくさんいて楽しいですよね。

キラーアプリ

arton 「キラーアプリ」――Win32OLE が無かったら端からつかってないから。それは当然そうだな。

助田 なんか嬉しいですね。

一同 (笑)

ささだ Win32OLE のほうは、どのくらい前から作ってるんですか?

助田 どのくらい前でしょうね? いつ頃だろうな。あれはたぶん、ruby-list で、一回訊いたことがあるんですよ。そういうものがありますかって。Perl に OLE なんとかっていうのがあるんですけど、Ruby には似たようなものがありますかって訊いたことがあって。それいつ頃かな。

ささだ バージョンはいくつぐらいでした? Ruby は。

青木 まだ Windows 版を木村さんがやってたとき?

助田 そうですね。まだ Windows 版を木村さんがやってて、木村さんが「がんばって」って言ってくれたっていう。

一同 (笑)

卜部 あったあった。「ruby で、OLE オートメーションの拡張モジュール作った方いらっしゃいますか?」 (ruby-list:9716)。 98 年。

助田 それよりもうちょっと後ですね、たぶん。で、その辺で反応が無くて、って感じかな。で、その後また……。

arton4.jpg

卜部 「ちょっと動くものができました」というとこが、98 年。

助田 ああ、なるほど。この辺が最初ですね。これが最初だな。98 年なんだ。そうだ。そうそう。木村さんがやってて、その辺の人には無理やり送りつけたって言う。

一同 (笑)

助田 とりあえず、みたいな。こんなの作りましたって。

ささだ なるほど。キラーライブラリ。でも、便利なんだけど中々使われないところはあると思うんだけど、知られていない?

助田 知られていない。

卜部 そんなことはないと思うけど。

ささだ だって私知ったの、こんなことできるのか、ってのは cuzic さんの記事で。

青木 るびまで?

卜部 Win32OLE というのがあるらしいというのは分かるんだけど、それを具体的にどう使えば良いのかということに関してはあんまり分からない。

ささだ 使ったらどう嬉しいのかというのが。まあ本を買えばよかったんですが

一同 (笑)

助田 どうなんですかね。私も欲しくて作ったわけじゃないから。

一同 (笑)

助田 自分で欲しくて作ったわけじゃ、実はなくて。

ささだ 作ったら面白そうだからって。

助田 いや、えーっと。

arton それは石井さん。

助田 そう、石井君が言ったっていうのはあるんですけど。あと、昔、そのちょっと前ぐらいに、うちの当時の会社の社長が、「これからは OLE の時代だ」って言ったことがあって。

一同 (笑)

助田 その頃、OLE という技術があるというのは知ってたんですけど、でも、自分で全然分かってなくて。で、ちょうどたまたまそういう巡り会わせで、作りませんか、みたいな。木村さんから応援されたりとかなんかそういうのがあって。じゃあ、勉強がてらちょっとやってみようていうのが初めなんで、欲しくて作ったわけじゃないんですよ。なので、あんまり自分で使ってなかったりするんですよ。逆に。

arton だって、あの頃一番詳しい解説が書かれていたのって、石井さんのページだったよね。助田さんのじゃなくて。

一同 (笑)

助田 使い方で。

arton 助田さんのところは実装が書いてあった。

一同 (笑)

青木 最近すごく作りたいなと思っているのは、RHG のフォーマットを Word に変換するツール。

arton それはあのー、{{isbn('4756138098', '場外乱闘編')}}Net::HTTPFatalError (503 "Service Unavailable"): inline plugin
だかのバカでっかい本のやつだね。RD 編集するやつ。

青木 あー。

arton あれは完全にアドホックなんだけど、こういうこともできるから、ちゃんとやる人が居たらやって欲しいなぁ、っていう願いを込めて書いたんだけど、誰もやってくんなかったな。

一同 (笑)

ささだ なんで Word にしたいの?

青木 え? レポートを書くため。

ささだ えっ?

助田 Word で提出なんですか?

青木 印刷するため (に Word にする)。

ささだ え、RHG を?

青木 いやいや、あのフォーマットで大学のレポートを書くんだよ。

ささだ RHG を提出するのかと思った。誰が分かるんだよ*44とか思った。

一同 (笑)

助田 卒業論文で (笑) 本を一冊出して (笑)

ささだ さすがにあの大学だと、あれで通るとはねぇ。

卜部 懐の広い先生が居るんだなみたいな感じが。

ささだ 逆に訳が分からなくてこう、すごそうだといって。

卜部 自分には理解できないから、すごいに違いないとか言われて。

青木 哲学の本ですとか言って提出しようか。

一同 (笑)

ささだ なるほど。まぁ、でもすぐに出来そうだよねそれは。

青木 じゃぁ、ささださんが作ってください。

arton 一番のね、障壁はね、Word を買わなければいけない。

一同 (笑)

arton ヘルプファイルも欲しかったら、Office の Developer Edition を買わなければいけない。それは 8 万ぐらいするからね。

ささだ まえ cuzic さんに言ったんですけど、Web サーバーに置いといて、ぱっと Word ファイルが出てくるっていう風に Web サービスにしちゃって。Windows サーバー一個置いておいて、皆でそれを Word に変換するだけとかいう。なんか Wiki みたいに書いておいて、それでパッて Word ファイルが出てくる。

青木 あー、Wiki が Word 化するんだ。それは便利そう。

arton たぶんねそれ、ライセンスが引っかかるね。

ささだ 確かにそこが気になってたんですよ。

arton まず、Windows 200X Server じゃないとだめだし、それ Office の使い方として許されるかって言うと、たぶん許されないだろうな。

ささだ 自動的にそういう風にサービスを……。

arton それ、ユーザーが一人じゃないじゃない。

ささだ ああ、なるほど。

arton Word を使っているユーザー分のライセンスを買わないと駄目なんじゃないかな。

卜部 それは Web サービスとしては実質的に不可能って話ですよね。

arton うん。そういうのを無視してやっちゃうのもありかもしれないけど、そうは言えないでしょう。

ささだ 代わりに OpenOffice.org で。

arton それが例の XML 化されて、このスキーマで皆書いてもいいよ、ってなったらまた話は別だろうけど。

ささだ Word も XML 化する?

arton うん。もしかしたら、そういうことに使いたいというような要望があったのかも知れないし……わかんないけどね。でもまぁ、なんかあるのかもしれないな。

習得

ささだ じゃあ次行きましょう。Ruby の習得は簡単でしたか?

arton 簡単だった。引っかかったこと、引っかかったこと……。1.4 の頃は、実は IO 周りで引っかかったような気がするなぁ。

ささだ 使い方に引っかかるんじゃなくて、処理系が駄目で引っかかったということ?

arton うん。

ささだ スレッドと混ぜたら駄目とか。

arton まぁ、ネイティブスレッドが駄目だというのは分かったからね。それとは別に 1.4 のときは結構色々あった。1.6 になって、その辺は格段に良くなったんだよね。あれはあの、小松さんががんばって。そのあとうささんや中田さんがやってくれて、1.8 だとほとんど問題ないんじゃないかな*45

ささだ Windows 周り?

arton うん。イメージとしては、1.4 はとりあえずそのソケット叩く、正規表現する、っていうのをこう、上から下に流す分には使いやすかったけど、まともに使おうとするとちょっとやっぱり引っかかるかな。1.6 になって、すごく改善されました。で、1.8 になって、ライブラリが何でも入るようになって、すげえ楽になりました。そんな感じかな。

ささだ 2.0 でですね、かなりまた Windows 周りは変わる予定があって。

一同 (笑)

ささだ あの、非同期 I/O があって、全部書き直したい、というのが。

arton あれ、今一応使ってるんじゃなかったっけ。MsgWait?*46

ささだ えっと、使っているは使っているんだけど、read とかはそのまま発行しちゃっていて。

arton え、あの辺まで非ブロッキングにしちゃうの?

ささだ ええ。

arton 難しいよ?

ささだ 難しい?

arton マルチスレッドでやるのすげえ難しいぜ。あの、うん、それでちょっと、やっぱり悲惨なプログラムを何度も作ったことがあるから。もっとも俺のやり方がへぼだからだけかもしれないけど、難しいことをやればやるほど、MS の触って欲しくないところを触っちゃって (笑)

一同 (笑)

arton ええっ、そういう使い方するんですかっ……とは言わないけど、そういうのになることが、やっぱりあるよ。と、脅しとくけど、まあいいんじゃない。

卜部 まぁ、適当に書いておくと、後からガンガン鉈振るって、高速道路整理してくれる人達がいるので。

ささだ たぶん中田さんが直してくれる。

一同 (笑)

arton 今でもそれなりに、めんどくさいから汚く書いて、なんで端からこれを使わないのか、みたいなところはあるんじゃない? Ruby のプログラムで言うと map 使えば一行で済むのに「おまえ馬鹿ですか?」みたいな書き方をしているような気がする。だから、そういうところが引っかかっているって言うか、自分では引っかかって無くても、他人を引っ掛けてるよね。

ささだ ああ、arton さんのコードを読む人は。うーん、なんでしょうねそういうのって。イディオム集? それこそ、レシピブックみたいなのがもっとあれば良いんでしょうか。

arton いや、{{isbn('4797324295', 'レシピブック')}}Net::HTTPFatalError (503 "Service Unavailable"): inline plugin
を俺が読んでないのがいけないんだな。

ささだ レシピブックにその辺は書いてないよね? 書いてあったっけ?

青木 書いてます。

ささだ 細かい話。

青木 書いた……書いたと思います。

arton それって難しいよね。習得簡単だと、そういうことあるよね。つまり、普通にしゃべってるときにはさ、「これはペンです」「これは、缶コーヒーです」「私はこれから缶コーヒーが飲みたいです」「私は缶コーヒーのふたを開けます」なんて言うヤツは世の中には居ないわけでさ。でも、たとえば日本語の習得がすごい簡単だったらさ、そこら中にそういう風にしゃべる外人がいっぱい居るかもしれない。お前らそれは日本語が違うんだよ!(笑) それは変だよ!(笑) っていう。逆に言うと、習得が簡単だから、一々主語と述語つけて、あなたは馬鹿ですか、みたいな書き方を、Ruby のプログラムできっとしているところはあるかもしれないし、きっとあるだろう*47

プログラミング全般

ささだ では、プログラミング全般の話を。

初めてのプログラミング

arton 「初めてコードを書いたのはいつですか」……大学生のときに Fortran でなんか実習とったのが初めてかな。

一同 へぇー。

ささだ じゃ、それ以前はまだ。

arton うん。やってないね。無いって言うか、そもそもあんな馬鹿高いものは誰が買うんですか、としか。

ささだ 大学に行かないとやっぱ無い?

arton うん。大学にはメインフレーム置いてあったし。パソコンがやっとでてきました、とかそういう世界じゃない?

ささだ なるほど。

arton 85 年が Macintosh の誕生*48。Apple ][ ってのがあって、すごい使えるらしいね、でも何が出来るの、ゲームだよ、いくらぐらいするの、50 万ですよ、誰がそんなもん買うの?とか、そういうような感じね。

Ruby 以外のプログラミング言語

ささだ そこらへんの話は後で聞くとして、えっと、Ruby 以外のプログラミング言語、何を使いますか?

arton 仕事で使うんだったら、Java, C++, VB6。VB.NET と C# は、実際には使わないね。

ささだ 仕事では使わない?

arton うん。使わせるってことはあったけど。あとは当然のように JavaScript も使うし、VBScript も使うし。あと……あとそんなもんか。

ささだ 何が好きですか。

arton 最近、OCaml を使おうと思って勉強し始めたけれども、時間が無くてやめちゃったてのがあるな。何が好きか? 好きかってのは別に……

尊敬する人みたいなもんだよね。ここは好きだけど、ここは嫌いって、たとえば VB って糞みたいな言語だとは思うけど、でも、ちょっとボタンを押したらなんかちゃらちゃらっとやるのが作りたいとなったら、エディタ開いて HTA 書くよりももっと楽だからさ、速いマシンが手元にあれば。そういう意味じゃ別に VB 嫌いじゃないしさ。そんなわけで、別に何が好きって言うのも無いな。それぞれ好きなところもあるし、嫌いなところもある。

美しいコード

arton 「最も美しいソースコードは何ですか?」―― 俺が作ったやつじゃなくてだよね。

卜部 べつに自分でも良いですよ (笑) 「これを読め、おまえら!」みたいな (笑)

arton そういうのはないけど、でもね、おお、スゲーかっこよくできたな、って思うときってたまにあるよね。思わず幸せな気分になれるような。ま、それは別だよな。今まで読んだ中で一番、あなたが何をしているのか理解できなかった、というのは何かといわれると、それなら答えられるな。

ささだ それは?

arton XAuth のソース。の、あの DES のところのソースなんて、全然分からない。やたら配列がいっぱいあってさ、定数がこう入るじゃん。なんだかさっぱりわかんないんだよね。どうやって暗号化してるのかなぁって見たんだけどね。あれはなんだかさっぱり分かりませんでした。

……最も美しいのは、美しいというのはやっぱり簡潔じゃなきゃやだよな。でも簡潔だからって何もしてないのは駄目だよな。何かするんだよな。……ありそうだけど、それは良くわかんないな。その、まぁ、色々だな。

ささだ ソースはよく読む?

arton 必要となれば読むし。ああー、他の人のソースを去年の夏ごろ仕事で読んで、少しノイローゼ気味になりました*49

一同 (笑)

arton あれは一番今まで仕事していて一番つらい経験だった。二度とやりたくないな。

ささだ それはよっぽとひどかったんですか?

arton ああ (即答)

一同 (笑)

arton ほんっとに、あんな不愉快な思いをしたことはないな。

一同 (笑)

arton ほんとに信じられないよなあれ。

ささだ 何で書いてあったの?

arton それはもちろん Java だった。

ささだ Java のひどいソースを。

arton ああ、ひでえひでえ。もうねぇ、ほんとに吐き気がするってほんとだよな。

ささだ それはなんだろう、メンテしなきゃいけないとかそういう仕事?

arton メンテっていうか、チェックしてさ。

ささだ えっと、レビューとかそういう?

arton まぁ、それだって考えてくれれば良いかな。

ささだ バツつけて、全部突っ返すとかそういう。

arton もちろん当然なんだけどさ。それだとまわらなくなっちゃうから途中から三角ぐらいにしたけど。

一同 (笑)

arton へんな屁理屈こいてくるんだよな、駄目なヤツって*50

一同 (笑)

arton 駄目じゃないヤツは分かりましたって、ちゃんと言われた通り直してちゃんときれいになるんだよな。あのね、最悪なヤツってやっぱりね、直さないんだな。

一同 へぇー。

arton あのね、やっぱ頭悪いんじゃないかな*51

一同 (笑)

ささだ コピペとかそういうことですか?

arton いやいや、そんな生易しいものじゃないよ。あのね、やっぱ一番まずいのは半可通だなってのが良く分かった。コピペ多すぎるからもう少しこれまとめなさいよ、って言うのに対して、屁理屈こねるヤツは居ないわけ。ああ、そうですねって普通直すでしょ。でも屁理屈こねるのって、たとえば class の階層が深すぎるからもう少し平たくしろとかさ、お前のこの書き方だと効率が悪いからスレッドのこと意識してこういう風にロックしろとかさ、そういうような所でね、なんかへんな反論をしてくるヤツっているわけ。そういうヤツのソースって、ほんっと許しがたいほど、汚ったないんだよね*52。もっともこういうことを言ってる脇から、端から他山の石、他山の石って言葉が耳に聞こえてくるからさ、辛いところなんだけど。

ささだ 俺に書かせろとか言えないわけですよね。仕事だから。

arton うん、それに書けないしね物理的に。

ささだ なるほど。

arton その辺からやっぱり、こういうビジネスプログラムみたいなものは、機械にやらせるのがやっぱり正しいなって確信したね*53。人間にやらせたら駄目だな。人間の作業じゃないよね。

ささだ なるほど。では、興味を持っているテーマ。

arton うーん、ちょっと今現在は……。

卜部 あんまり言えない?

arton 仕事の話は言えないな。仕事以外だったら。その辺、ソフトウェアファクトリーは興味あるんだが、今はちょっと忙しくて、ああいう腰を据えてちゃんと見ないと駄目なものを見る時間が無いから。残念なことは、それに逆にそういってやっていないってことは、そんな興味ないんだろうなって思うわけさ。そうすっと今はあんまり実は無いのかな。

それと、本を書くので山ほど Rails 見たり色々遊んでいるうちに、やっぱり Web アプリケーションの世界はおもしれーなとか。そういう風に思いだしたっていうのはあるな。でもそれはテーマかって言われると、やっぱりサービスそのものよりも、そのサービスの下に居るミドルウェアみたいなものの方が興味があるんだよな。ここにねぇ、微妙な葛藤があって、今ちょっと、あのー、モラトリアムしてるような感じがする。プログラム的に面白いのは下の部分なんだけど、何となくもう少し上のほうに興味が出て来たもんで、ちょっと今迷っているんだよな。そういうわけで、テーマってのは今は無いな。ま、「Web 2.0? えっ今更?」という所かな。「生い立ち……」。

ささだ あっ、次に行ってる

一同 (笑)

arton 今興味を持っているテーマは、一年遅れ……二年遅れにすっかな。二年遅れで Web 2.0 ですと。

ささだ なるほど。では、生い立ち。

生い立ち

小中高校

arton 生い立ちって何だっけ。

ささだ 生い立ちはですね、一応小学校のときに何に興味があったとか、そういう話を。どういう少年でしたか?

arton それはやっぱりあれだよな。まず小学生のときは、当たり前に、小学校一年の時にやってたならウルトラマンセブンなら、ウルトラマンセブンで、小学校二年のときにやってるなら、何とかマンなら、何とかマンで、小学校四年のときは、何とかマンで、小学校五年の頃は仮面ライダーならみんなで仮面ライダー観てたし、っていう。普通にテレビを観ながら育っていましたよ。

ささだ なるほど。その頃に……ああそうか、そもそも計算機とか無いんだ。

arton 無いね。で、中学になって、だんだんもうちょっと文学のほうに目覚めてくる。小説とか読み始める。

ささだ 小学校の頃はあんまり本は読まなかった?

arton 小学校の五年ぐらいの頃に読み始めたのかな。四年ぐらいかな? 本は読んでたんだけどね、意識的に読むようになったのは、たぶん小学校四年か五年ぐらいに、図書館で筒井康隆の SF 入門ってのを借りちゃったのがね、たぶん、入門でそういうのがあるとね、書いてあるわけそういう、オールディス*54の何とかがどうしたとか、ハインライン*55の何とかがどうしたとか。書いてあるとさ、読みたくなるじゃん、普通に。で、次から次へと読んでいったのが、あの辺から読書の習慣が付いちゃった気がする。

ささだ どれぐらい読んでたんですか?

arton わかんないけどね、記憶が残ってるのは、高校のときの図書の貸し出し票みたいなのがあるじゃん、あれを一年間やると先生がプレゼントしてくれたのが高校の二年ぐらいにあって。そうすると 200 冊ぐらいかな。

卜部 SF ばかりっていうわけですか?

arton いやもちろん、さすがに高校だから色々だけどさ*56。そっから逆算していくと、やっぱり年間 100 冊ぐらい読んでたんじゃないかな。

ささだ へー、なるほど。中学校のときからそういう風に本を読んでばっかり?

arton さすがに中学校のときは、受験勉強してたから、もっと読んでない。

ささだ 部活とかは?

arton 全然。いや、入んないと駄目だったから、入ってたはず。たぶん、あんまりいい思い出が無いから覚えてないんだと思う。ああ、将棋クラブって入ったらボコスコにやられてたな。もともとああいうね、根詰めて細かく考えるのって駄目なんだよ。それもプログラムの書き方にも言えてるんですよ。だらだらだらだらって、上から下に流れるように書く。で、書き終わったらリファクタリングするときもある。

ささだ 運動とかそのあたりは?

arton 全然しなかったね。

ささだ インタビューやってて、運動たくさんやってました、って人はあんまり居ないんですけど (笑) 高校では文学を。

arton 高校のときはもっとふざけてたから。高校のときは実は本は読んでたけど、何もしなかったね。

ささだ 何もしなかった?

arton 自慢じゃないけどね*57、俺ぐらい高校のときに勉強しなかったヤツは居ないんじゃないかって言うくらい、何もしなかった。

卜部 代わりに何かやったとか。

arton 何もしてないんだよな。

卜部 遊んでいたとか。

arton 遊んでいたって言うほどね遊んでもいないんだよね。俺ほんと高校のときに何したのかさっぱりわかんないんだよね。でもね、面白かったな。

ささだ 面白かった。

arton うーん、それはやっぱりいい高校だったと思うよ。

ささだ ちょっとよくわかんないですけど (笑)

一同 (笑)

arton だから、学校行くじゃん、まず。8 時半とかさ。で、友達とかクラスの子いるじゃん。で、これからみんなで遊びに行くかって、みんなで新宿か何かに行くじゃん。

卜部 ……え?

一同 (笑)

arton 学校に何しにいくのかったら、あの、みんなで集まるために行ってるんだな、あれは。

助田 集合場所 (笑)

arton そう。ほんとに馬鹿みたいだよな。何やってんだって思うんだよね。もうちょっと真面目に勉強してればその辺面白そうだなって。結局真面目に授業来てちゃんと聞いたのって、作文の時間だけだもんな。

ささだ 作文の時間 (笑)

arton あと美術と音楽がおもしろかったな。ちゃんと聞いてたのって。ああ、あとはフランス語の教師が好きだったから、フランス語は真面目に取ってた。あんま高校のときって記憶に無いんだよね*58

助田 高校でフランス語をやってたんですか?

arton うん。フランス語ってのはすごい合理的でさ。字面から発音が決まってるわけ。こう書いてあればこうなんだよ。ちょっと不規則なもんもいくつかあるんだけどね。それももう数が制限されてるわけ。スペシャルフォームみたいなもんで、それだけ覚えておけば後は絶対 OK なわけ。あと、確実に決まりどおりに動くからさ。すごく合理的でさ。すごい現実的でさ。英語ってすごい馬鹿みたいじゃん。

一同 (笑)

arton あれ嫌いなんだよね。意味がわかんなくなって。その分だけ、やっぱり海外の言葉の一つや二つは知っとかないといかんなぁと言われてて。よし、英語はこんなくだらないものは使うのやめた、って捨てて、代わりにフランス語だけ真面目にやった。

卜部 フランス語は、確かに字面と発音ははっきりしてるんで、意味はわかんなくても発音だけは出来るんだけど。逆に、声を聞いてもそれから文字を起こすの*59がスゲー難しいので。僕は何を言っているのか全然分からない。

青木 結構あれは分かりやすいよ。

arton 今でもね、ヒアリングするとフランス語のほうが何を言っているのか分かる。ただし、語彙がまったく無いからさ (笑)、言ってるのは分かるんだけど、何を言っているのかは分からない。で、英語の方がまだましになっちゃう。

青木 なんか、単語が長くないですか?

arton そうだよね、そういう傾向もある気がするね。

ささだ 単語って長いほうが分かりやすくない?

卜部 ささださんはドイツで暮らせばいいと思うよ。

一同 (笑)

青木 (ドイツ語は) 単語がどんどん長くなるからね。

ささだ いや、英語で変に短い単語をわーっとしゃべられると、切れ目がわかんないし。

卜部 あー。

大学時代

ささだ えーっと、そういう高校生活で、次の大学ですね。大学では。

arton そのまま大学行って。

ささだ 何系の大学行った?

arton 何系って?

ささだ まぁ、大雑把にいうと理系、文系。

arton ああ、そっか。そういう意味では文系なのかな。

ささだ 文系で。学部とかは?

arton 学部? 商学部。大体あの、俺の高校で勉強しなかったら、商学部か理工のどっかに入るとなって。

卜部 商学部なのに Fortran だった?

arton それは一般教養だった。

ささだ 一般教養で Fortran?

arton 計算機っていう授業が一個あった。で、商学部に行って。大体商学部ってのはさ、会計か、経営か、マーケティングか、……五個あったよな。会計にマーケティング……なんだろう? 忘れた。もしかしたら三個の間違いかもしれない。んで、一番面白そうだったのは経営だったんだよね。でもう、教師がすごいつまんなかったから。

一番面白かったのは数学の教師でさ。んで、集合論やって。2 コマあるんだよね。一年生用の教養のやつと二年生用のやつと。で、それは一年のやつがすげー面白かったから、それで初めてラッセル*60だのあの辺の……ヒルベルト*61とか。おお、そうか。集合論ってのはこういうのだったのか、ってのが分かってさ。そういうの面白いじゃん。で、当然のように二年のときも取って、そしたら俺一人しか生徒が居なくってさ。で教師もさ、一人しか居ないんだったら講義するのもめんどくさいと思ったのかさ、ゲーデル*62についての本のうち、どれか一冊、名前は忘れちゃったけど、背中の青いやつだった ({{isbn('4826920326', '数学から超数学へ―ゲーデルの証明')}}Net::HTTPFatalError (503 "Service Unavailable"): inline plugin
) と思ったけどさ、それくれて。それを勉強してきなさいって。

一同 (笑)

ささだ それで終わり?

arton それで終わり。

ささだ 毎週出る、とかはしなかった?

arton 確かしなかった。いや、したかな? で、出るとなんか雑談してたよ。

ささだ 数学ばっかやってたんですか?

arton いや、その 2 コマだけ。で、その時、しまった高校のとき数学ちゃんとやっとけばよかった、って思ったけどもう遅いな。

ささだ なるほど。

arton でまぁ、それでもまぁ、経営のほうが、面白くなくは無いんだけど、そのー、あれってほら、人をいかに騙くらかすか、って言う学問じゃない。いかに人参をうまくぶら下げるか。要するに考え方は二つしかなくって、どう鞭でたたくと効果的かか、どう人参をぶら下げると効果的かで。最初はいかに鞭を使うか、っていうのが、だんだん人参に話が変わってくるわけ。よく段階説とかもっともらしい説がいっぱい出てくるんだけど、でも、衣食足りて礼節を知ると三千年前の人({{isbn('4198605696', '管子')}}Net::HTTPFatalError (503 "Service Unavailable"): inline plugin
)も言ってるから、きっと正しいんだよね。でまぁ、そういうのを読みながらさ、くっだらねぇ (笑) と思ったんだけど。そんなわけで大学でもあんまり勉強しなかった。

ささだ まぁ、それで順調に卒業されて。

arton うーん、順調でもなかったけど、英語を全然知らなかったのが裏目に出てね。当たり前だけど、なにしろ英語をまったく読み書きできないから。フランス語のほうは良かったんだけどな。英語は出来ないんで、留年して、結局出ましたと。で、適当な会社に適当に入って。

ささだ 計算機系ではなかった?

arton 計算機系。

ささだ なんでそっちを選んだんですか?

arton あの、他に仕事が無かったから。紹介してくれる人が居たんだよ。

ささだ なるほど。

arton でまぁ、入って。だらだらだらだらやってるうちに、こうなりました。

一同 (笑)

ささだ 今の会社に入ったわけですか?

arton うん。入ってその、なんだっけ。適正検査みたいなのを受けて。で、開発のほうに回されて。最初、OJT で普通のアプリケーションを書いて*63。であの、すぐミドルウェア側に行って、で、ずっと書いてたのかな。で、最後のデータベースとかの最後のお守りをするとかでさ。途中であのー、パラレルコンピュータのデータベースみたいなものをやらされたんだけど、今考えるとすげえんだ。あれはおもしろかったな。

ささだ それはミドルウェアなんですか?

arton まぁ、何しろ特殊なコンピュータの特殊な世界だからね。で、まぁ、そういう特殊なハードウェアと特殊なソフトウェアを使うような時代ではなくなって。だんだん Intel のコンピュータを使うようになって。それで初めて、おー、世の中には C というものがあるんですか (笑)、というのは少し嘘で。そういう仕事やっててまぁ、途中で気が付いてくるわけ。どうも俺の使わされているこのコンピュータは普通のコンピュータでなくて変なコンピュータらしい。

一同 (笑)

arton どうもこの俺が仕事で作らされているソフトウェアは普通と違って変なみたいだ。じゃ、変じゃないのはいったいどういうものだろうという疑問は常にあるわけだ。

で、それとは別に、そういう考えがあるのと平行して、ある日夜中奥さんとテレビを見てたら、例の80年代のバブルの時代だから、くだらない番組がいっぱいあるわけだな。テレビゲームのね、シーンをね、一時間半ぐらい延々と流すっていうアホみたいな番組があったわけ。もうそれを見てたら、なんかね全然違う世界が、なんかが出てくるわけ。そうするとあの、よく知ってるゲームセンターで見るようなゲーム、ギャラクシアンみたいな、ギャラクシアンってその時代ではありえないけどまあいいや、とにかくまあ、ある。というか、全然違うな、なんか変な……なんと言ったら良いかわかんない。不思議な……それが今考えたらマインド……マインドなんとかっていうゲーム*64なんだけど、時々でてくるわけ。で、その題名を覚えて、これはいったいなんだろなってずっと思ってて。ある日会社のライブラリみたいなところで、パソコンワールドって雑誌を読んでたら、それが出てたんだよな、そのゲームの広告というか、それを売っているところ――御茶ノ水のパイナップル 68000*65 って店の広告が。で、Amiga っていう聞いたこと無いコンピュータなわけ。聞いたことの無いコンピュータの聞いたことの無いゲームだから、あれだけ変なのかって。その頃ちょっとお金もあったから、このパーソナルコンピュータを買ってみようかと思って買いに行ったね。そっから怪しい世界に入ってきたんだよなぁ (笑)

一同 (笑)

arton3.jpg

卜部 Amiga からってのがすごいね。

arton で、買ってさぁ、そのゲームはすごい面白かったんだけど、持て余しちゃうんだよな。つまりさ、何かソフト買いたいって思っても、パイナップル行かないと売ってないわけ (笑) まぁ別にその、あこぎな商売をしていたとか少しも思ってなくて、そんなもんだろうと思うんだけど、結局、次から次へとは、やりたいものは買えないじゃん。そうすっと気が付いたんだよね。考えたら俺プログラマだから、自分でプログラム作ればいいんだなって。

Amiga って ROM のルーチンの全ソースがみんな書いてあるそういう五分冊の、こんな大全みたいな本があってさ。で、それを買って*66。それからパブリックドメインのソフトウェアのコピーサービスみたいなのをしてたからそれも買って。で、中見てって、自分で色々いじくって。その過程で C 覚えるわけか。C コンパイラを買って、であの、自分でプログラムを作ってみたりして。でも、C でポインタで引っかかったわけ。よくみると、68000 って簡単じゃん。だからさ、それとは別に……名前忘れちゃった……何とかって会社のアセンブラ売ってて、その方が、C コンパイラのやつよりも安いしさ、開発環境もちゃんとしたエディタが付いていて良かったんでそっちに乗り換えた。

で、こっちの方が良いなってんで、アセンブラでずっと書いていたわけだよね。で、ふと気が付いてさ、C のポインタの所をアセンブラリスト出してみたら、なんだこれこんな風になるのかとわかってさ (笑) それから C で書くと少しは楽だなということが分かってさ。それで C も使えるようになって。

ささだ なるほど。本業のほうでは何を使ってたんですか?

arton えっと、特殊なコンピュータ用の特殊なアセンブラ。

ささだ 特殊なアセンブラ。はいはい。

arton そのハードウェアの、昔ほんとにハードウェアだった頃の機械語。今となっては当然そんなのエミュレートしてるから、えっと、なんだろね。仮想マシンってことかな。変なアセンブラ。

で、まぁそうやって C も何だこういうことかって分かってきて、分かってしまうとソースも見れるようになるから、何でもまぁ別に問題なくなった。で、色々みてくうちに、一番その中でパブリックドメインのソフトの中で、一番興味を抱いたのは、xlisp っていう、lisp の処理系で。で見ているうちに、自分も言語処理系を作ってみたいなと思ったわけ。

でも俺 Lisp ってその頃知らなかったから。本屋に言ったらちょうど {{isbn('4320022718', 'Common Lisp の第一版の仕様書')}}Net::HTTPFatalError (503 "Service Unavailable"): inline plugin
が売ってて。共立出版からでてて。で、それ買って帰って、ふむふむ、作った結果こうなれば良いのかって、わかったんだけど、その過程で xlisp ってのはダイナミックバインディングというもので、ダイナミックバインディングとはこうだけど、今の流行はスタティックバインディングなんだなっとかさ。クロージャーってのが出てくるけどこれはいったいなんですかっていうと、無限の extent で、スコープはレキシカルでって。何のことやらさっぱり分かりませんなってとこから、しょうがないからそういうのを調べていって。そっか大体分かったぞ。じゃ、スタックをこう作っていったやつをヒープにこう一回入れて、それをこう覚えてペアにしてもってればいいんだな。

で、実装の仕方は分かって、どんどん実装していくわけ。ところがね、シグナルのところで引っかかっちゃってさ。break すると、トップレベルへ戻るじゃん。ここでどうしても理解できなかったのは、循環リスト作って cdr かなんかでぐるぐる回すとさ、シグナルが来てシグナルハンドラでやめろってフラグ立てたって、見られないよねそんなもん。ところがこれトップレベルに戻るべきだろ。今だったら、一個の、Lisp のレベルの命令で一個だったらそこを見に行くとかすればいいのに、そういう発想が無かったからさ*67、全部アセンブラで組み込み関数を書いちゃえば良いと思ってたからさ。これがわかんなくて。うーん、わかんないのが出てきちゃったなぁ、ってんで、そんで嫌になってきた。

それとは別に pretty-print-length ってのがあってさ*68。pretty-print した結果の桁数が返ってくるのね。それを作るところでどうやればいいのかなぁって考えて。pretty-print をするのはもちろん良いんだけど、pretty-print しないと長さが分かんない気がするんだよ。ところが Amiga ってマシンはあんまりメモリを自由に使えないから。やりたいことは、その幅が分かりたいことってことは pretty-print すると時間がかかるから先に最大の桁数をとってきて、それに合わせてこう何かしようという処理になると思うから、pretty-print そのものしちゃったら無意味なわけじゃん。でも、どう考えても一回 pretty-print をしない限り桁数が求められないわけ。どうやってこれを実装するんだろうなぁ、ってところでさ。難しいなぁって考えていくうちにね、そのまま他のことが忙しくなって終わっちゃった。

一同 (笑)

arton 今でもそれを覚えてるんだよな。pretty-print で引っかかったんだよ。それから、どうやってここで break みんなするんだろう。何でトップレベルに戻れるんだろう。すげー不思議だったなあれ。どうやってやったか、一個一個見なきゃ駄目なんだよね、結局。

ささだ まぁ、言語レベルの設計ではそうやってる。

arton そうだよね。byte-compile しちゃってもそうならざるを得ないよね。あるいはループしてもう知らなーいってやるしかないんだよな。-9 投げればいいんだよね。別のターミナルでさ。で、あの頃の Amiga って kill -9 が無かったわけ。無いだけに、自分でちゃんと知らなきゃいけない。自分で知らなきゃいけないのに、自分で知るため方法がわかんないから。一回一回調べたら死ぬほど遅いんじゃないかってやってみたらやっぱり死ぬほど遅いわけ。どう考えても組み込みで書いた関数なんてのはさ、最初は Lisp で書いたりしたって、アセンブラに落とすときは当然くるくる回したい*69からさ。でも組み込み関数に無限循環リストを渡しちゃったら本当にくるくる回っちゃうわけでさ。その辺がね。あの頃 kill -9 みたいな世界を知ってたら、そういうのはもうさすがにしょうがないでしょって考えるところを考えなかったのが運のつきだったな。その二つではまったんだよ。でもそれをやったのが、結局すごく勉強になりました。あれのおかげで結局知らない用語は全部調べたしな。浮動小数点演算のやり方までね、本買って調べちゃった。でももう忘れちゃったけどね。

そうやってなんかやってるうちに、会社のほうもハードウェアなんかの独自の路線はやめて、普通の世界になってきて。要するにいわゆるオープンシステム、UNIX とかに変わってきた。その頃たぶん社内で、するする普通に C でプログラムが書ける唯一の人だった。嘘だけどな (笑) でもある年齢ではそうなわけ。つまり僕より上の人が C で UNIX なんてのは無かったし、下の人はもちろんまだそれから学ぶわけ。そうすっと、世代的にちょうど、なんかうまいポジションに居たのか、なんかへぇーってそっち側の仕事したり。で途中から COM のプログラミングになったり、で、現在に至ると。

ささだ 普段仕事では何をしてるんですか?

arton えーっと、今はちょっとなんとも言えないけど。

ささだ 内緒?

arton 内緒。というのは、海のものとも知れない部分をやらされてるっていうか、逆にこういうことをしているってのは、やっぱりあれなんでしょ。

生活

arton 生活スタイル……。会社行って帰ってきて、Web 見たりして。

ささだ 何時頃に出社してるんですか?

arton えっとね、大体 9 時から 10 時の間かな。

ささだ 早いですね。

arton 早いんだよ。

一同 (笑)

arton あれね、違うんだよ。俺ね、20 代のときにそんな時間に来たこと無かったんだけどね。子供が出来たりして、あと年取ってくるとだんだん目が覚めるのが早くなるからね、いまはなんとなく 9 時ぐらいに起きられるようになったんだよ。たぶん、『{{isbn('4121010876', 'ゾウの時間、ネズミの時間')}}Net::HTTPFatalError (503 "Service Unavailable"): inline plugin
』じゃないけど、今から 20 年後ぐらいには、9 時ぐらいは遅えなって思うようになる (笑)

一同 (笑)

ささだ なるほど。

arton 「仕事とプライベートの両立は?」―― 仕事とプライベートは両立してるが、問題はプライベートが、半分仕事みたいになっちゃってるところじゃないかって気がするな。

ささだ なるほど。仕事の調査とかも、プライベートでやっちゃうとか。

arton 今はね、あんま重なってないからその辺は大丈夫だけどさ*70

ささだ 普段家では何をしているんですか?

arton 何をしているか?

ささだ 本とか映画とか。

arton 本は……映画は月にいっぺんぐらい観てるな。

ささだ その話を聞くとまた長くなりそう。

arton いや別に、はまってるもんはないから。

ささだ 本は?

arton 本はね、最近読まないな。そっか。そういう意味じゃ本はね、ほんとに読まなくなったね。

卜部 それはどういった心境の変化が?

arton 単にね、やっぱり、時間取られるがめんどくさいっていう、その一点だね。もともとテレビとかさ時間がもったいないから見ないわけさ。だって本だったら 5 行ですむことを 15 分ぐらいかけてやってんじゃん。最近は本もね、そういう意味じゃ、最後に読んだまともな、漫画は別だね。漫画は読むの 10 分ぐらいあればいいし。最後に読んだ一番分厚いのはたぶんあの、ソウヤーのやつだ。名前忘れた。原人……、『{{isbn('4150115001', '原人')}}Net::HTTPFatalError (503 "Service Unavailable"): inline plugin
』とかって三部作。それが去年の話だから、今年になって本って、漫画を除けば全然読んでない。 あ、それは嘘だな。なんかたまに読むけど思い出せない。

ささだ 使ってるマシンのスペックとか。

arton 今使ってるのは、Xeon 2.8GHz のデュアルコンピュータ。それがメイン。

ささだ この間日記に書いてましたね。

arton そう。それと平行してこいつ (ThinkPad) と、あと PowerBook の 15 インチか。サーバーもある。

arton 「好きな女性のタイプ」――なんだろうな。今から 20 年ぐらい前だったらそれは簡単だけどね。今となっちゃ違うんじゃないかな。

卜部 なんか意味深なんですけど。

一同 (笑)

助田 ここみんな、パターンで奥さんって答えるんですけど。

arton だから今から 20 年前だったらそうなんだろうなって。

助田 今は? (笑)

arton 今はね……嫌いだな (笑)

一同 (笑)

arton 話あわねぇしなぁ。

一同 (笑)

卜部 じゃあ、今はどういうタイプなんですか?

arton うーん、よくわかんないな。タイプという意味じゃ変わんないのか。奥さんだな。やっぱ自分勝手な人間が好きだな。ああ、見た目はまた別の話。自分の好きなことを、ストレス感じずにやってる人が一番素敵なんじゃないか。輝いている風な人が。輝いてなくても良いんだけど (笑) なんかあのー、世の中に対して恨み辛み持ってる人はあんま好きじゃないな。

今後

卜部 今後の展望、将来の夢。今、特に何をやりたいと思っているとか。

arton うーん、そうだねぇ。何でも良いから適当なプログラムを作りてえなぁ。ちょっと長めのね。そんなもん、やればいいんだよな。やればいいんだが、やんないのはなぜかっていうと、何を作りたいのかがいまいちよくわからない。完全にもう目的化しちゃってるよね。プログラムを作りたいんであって、何を作りたいかっていうのはどうでも良いよ。

卜部 さっきの Web 2.0 っていうは。

arton そうだね (笑) まさにその通りだね。

助田 言語は何を使いたい?

arton 言語は何でも良いな。とりあえず Rails がいいな。使いたくないやつは……。

ささだ Ruby のコミッターになったりとかはしないんですか?

arton 俺コミッターさぁ、たぶん貰うのはうれしいんだが、今まで俺が投げたパッチ見ると分かると思うんだけどさ、全体を見るのはめんどくせえからさ、そのそこの問題点だけを直すって、これたぶん職業病的な理由もあるんだろうと思うんだけど、ピンポイントのパッチが多いんだよ。そうするとたぶん全体に合わないから駄目なんじゃないかと思う。

ささだ いや、それでもいいんじゃないですか?

arton そうなの?

ささだ ピンポイントで直す人。

arton それとね、実際自分でつつかないんだよね、全然。ほとんど。まぁ、そのー、パッチを投げるモチベーションって全然無いんだ。つまり、ほとんどそういうのにぶつかんないから。コミッターになっていったい俺は何をするの?というのはあるよ。名誉として貰えるんだったら嬉しいけど。

一同 (笑)

ささだ 名誉コミッター。

助田 生活として。

青木 それはコミッターになって何をして欲しい、ということですか。

arton Win32 系の修正をパカパカして欲しいっていうと、たぶんそういう時間は取れないから。あのー、もっと相応しい人にどうぞ、って話になるよ。

ささだ 何だろう、ASR を本流に混ぜる。

arton (笑) ASR はだって、本気で Win32 だけにしか使えないってのがある。それはそれで良いんだったら。……でも、あれ、またそろそろヤバくなってきてさ、XP でちゃんと動かなくなってきて。

ささだ ええ、そうなんですか。

arton サンプルでね、スレッドまたがって飛ばすためのテストなんだけど、動かなくなった。IE を複数枚立ち上げるやつ。Ruby で書いたのが DHTML でパカパカ動くサンプルなんだけど。一個は動くわけ。Windows 9x, 2000 までは、少なくても、新しいウィンドウを開くと、二個か三個くらいまでは動いてたんだよ。そこにすごい無理がかかってるんだよ。それがね、XP になってからね、あのー、新しいウィンドウを開くってやった瞬間にフリーズしちゃうんだよ。なんかあのー、XP 側でその辺のスレッドをまたがった LRPC の値かなにかを変えたらしくって。

卜部 もっと長期的な将来の夢みないなのは。

arton うーん、無いんだよな。昔から無いんだよね。何で無いんでしょう。あんますごい期待が無いんだなきっと。世の中に恨み辛みがあるわけでもなんでもないし、かと言って……。夢ってさ、ほら、何となくその人類があの、進歩と調和がいいなぁってこう 1970 年代みたいな子供時代を過ごして万博見ちゃったからそう思うわけでさ。テクノロジーを使って進歩していくのが人類っていうものだよなって、思うんだけど、それってべつにさ、自分自身とは特に関係ないよね*71。自分に出来る範囲ではそういうのがあるとしたってさ*72。将来ってのは*73、金はあったらあったほうがいいなぁって思うけどでも、仕事が忙しいのってやだなぁって思うと。たとえばホリエモンみたいになったら忙しそうだし、そういうのは嫌だなぁと思ったり*74。金だけは欲しいけど (笑) だからその、幸せに暮らせればいいなぁと思うんだけど、あとは幸せって何、そうやって考えると、せこく何でも良いからとにかくプログラム作りてえなぁ。100 万行ぐらいあればとりあえずいいかなぁ。とか。

卜部 100 万行ってのはすごいですね。

青木 何の言語で 100 万行ですか?

arton いや別に、特になんとも考えてないんだけど。

青木 Ruby で100 万行だったらえらいことになりますよ。

arton 全部空行だったりしてな (笑)

一同 (笑)

arton 100 万行って、そんなすごいかな? すごいね。

卜部 すごいですよ。

Rubyist の輪

卜部 その他。前のインタビューイの角谷さんとはどういう関係で?

arton お友達。

卜部 お友達。どういう経緯で知り合ったんですか?

arton もともとは Seasar Foundation の第一回目のカンファレンスみたいなところで知り合った。知り合ったっていうか、角谷さんが僕のことを知っていて。

卜部 なるほど。では次のインタビューイは?

arton これも難しいんだよな。自分の知り合いっていう意味でいっちゃうと、やっぱり面識があるって言うんだと、青木さんとか。意外と編集長の巻頭言を読んでるけど、全然インタビューレベルで知らないから、高橋さんとか面白いんじゃないかっていうか。

卜部 高橋さんは最終回にするという話とかあったけど。

助田 最終回はささださん?

ささだ なんでるびまの編集者はやらないのかっていうと、いつでも頼めるからなんで。

arton よし、次は essa さんで行こう。年齢も近いし、40代シリーズだ。

一言

卜部 若手に一言。

arton 若手に一言? 機会があったら何でもやってみると良いと思います。というか、やらないと絶対損したと思うから、やったほうが良いですよ。いや、ほんとにね、時は後ろへは戻んないって言うのは、すごい重要なことだよな。特に勉強ね。先生がいる間にすべきです、本当。

ささだ Rubyist へ一言。

arton Rubyist へ一言? 若手以外の Rubyist か。

一同 (笑)

arton バグがあったら直してもらいましょう。使いにくいと思ったところは直してもらいましょう。それが俺の好みと違うことがなされそうなことがたまにあって、見ると怖いんだよな (笑) Rubyist に一言って別に無いな。良いライブラリを作ったら提供しなさい。

ささだ 一応インタビューでほかの質問でですね、うささんとかからなんですけど、Windows のランタイムの互換性問題について一言。

一同 (笑)

arton5.jpg

arton それは俺もすごい知りたいよ。

一同 (笑)

助田 私も知りたい。

卜部 「なんでうささんが聞くの?」みたいな感じだよね。

arton うささんがこうするって決めてくれればそれでいいんじゃないかってことで。どうして欲しいのかっていうことになるのかな*75

ささだ 何か他にいいたいことは?

arton {{isbn('4798111570', '次に出る本')}}Net::HTTPFatalError (503 "Service Unavailable"): inline plugin
買ってください (笑)

一同 (笑)

ささだ はい。分かりました。どうもありがとうございました。

おわりに

今回は多方面で活躍されている arton さんにお話を伺いました。お忙しい中本当にありがとうございました。 次回は Amrita の開発者として、そしてブロガーとして有名な essa さんにお話を伺います。お楽しみに。

(インタビュー:ささだ、編集:卜部)

Rubyist Hotlinks 連載一覧


*1 ささださんから手渡された質問表を見ながら。以降突然自分で質問しているのはこの表を読んでいる。

*2 昔、RRRWiki に「年表」というページに一覧があった。現在は RRRWiki 自体がなくなっているので、見ることは出来ない。

*3 編集注:RRRWiki の年表では 1965 になっていたので実際は 41?

*4 全然つまりじゃない。元は「みんな自分のしたいことをしている」から都会に暮らす人間の無関心とか孤独とかを殺人者と殺された娼婦の物語にした歌なのだが、それをひねって別の意味に変えている。

*5 シャグラン・ダムール

*6 ソ連の詩人、作家、音楽家。スターリン主義下のソ連で弾圧されたり雪解けかと思って批判したら弾圧されたり (そこにノーベル文学賞がからむ) とても苦労したらしい。何よりも音楽の師匠がスクリアビンだというところが琴線に触れる。

*7 キーボードが押しっぱなしになっているところを想像して嫌だなと感じている。

*8 GPL

*9 OS/360: S/360 の OS である OS/360 のジョブコントロール言語こそが、後にいろんな意味で非常に有名になる JCL である。

*10 直接スタックサイズを変えることで引数の型をまったく見ないで処理できるようにしようとしたが、VC++ と gcc でスタックへの積み方が異なるのでうまくいかなかった。

*11 Java から Rails への移行というシナリオでの使い道かな? と想像している。

*12 ビジネスクラス (main を持たない) のテストやシェルからの実行。

*13 もちろん、それを解決するために本来のスレッドに処理させる API も用意されている。javax.swing.SwingUtilities 参照。

*14 コールバックの間は GC を停止させればよいので。

*15 http://msdn.microsoft.com/library/default.asp?url=/archive/en-us/dnarolegen/html/msdn_devwole2.asp

*16 ここはネイティブ側からの呼び出しと JVM 上のプログラミング方法が混乱している。Swing のメソッドは無関係。

*17 Native POSIX Thread Library

*18 Realtime signal: シグナル番号 SIGRTMIN から SIGRTMAX はリアルタイムシグナルと呼ばれ、それ以外のシグナルとはシグナルキューの中での振る舞いが違う。 Linux の場合は signal(7) などを参照のこと。

*19 YARV ではネイティブスレッド対応をしているので、この制限は外した。

*20 [BUG]: Ruby インタプリタ内で致命的な問題が発生して処理が強制的に中断されたときに "[BUG]" と表示されることから、Rubyist が「[BUG] になる」と言った場合はたいてい「Ruby インタプリタが止まる」という意味である。

*21 劣化コピーではしょうがないわけで、異なる視点を提供すべきだしね。

*22 結城さんみたいに、著述者として尊敬している人もいるじゃん。

*23 全然違う to_s: Object#to_s というものがあるため、funcall ができる前には to_s を method_missing で処理することが難しかった。

*24 プログラミング言語 Scheme

*25 SICP 初版 (マグロウヒル、1989) ってまだ売ってるのか? → 売ってないらしい。

*26 教科書なんだから当然。でもなぜ当然なんだ?

*27 http://arton.no-ip.info/diary/20060525.html#p01

*28 [[a,b],[c,d]].each (x,y) と書かずに [[a,b],[c,d]].each (x) x[0]... みたいな書き方をしているということを指している。

*29 と言った 12 時間後くらいにまさにそのタイプの処理が必要になってリファレンスの最初に出てきた Array#collect! を使うことになった。

*30 arton より:URL 忘れた。済みません。

*31 非常に早い時期に投稿時の captcha による検証を使った掲示板を開発されていた。

*32 このインタビュー時には失念していたが、邪道編を読むとイテレータ (当時ブロックはなんでもイテレータと呼んでいた) にピピピと来たらしい。

*33 構造化例外のために特殊な情報がスタックに埋め込まれる。この問題は Tietew さんが原因の発見と修正をした。これはメッセージポンプの先で影響するため、SWin や WIN32OLE_EVENT は引っかかるが、ASR では問題にならなかった。Win32OLE を使いまくると拡張ライブラリでアロケートしたメモリーブロックを Ruby 本体で解放というパターンが生じることが主な問題点。

*34 作っても大した話ではない、というか作って持っていた。とは言え VB でバイナリーデータを扱うのは面倒だし、機能的にはソケット、pack/unpack、正規表現が揃っていたということかな。

*35 邪道編の第 1 章

*36 http://mymble.denpa.org/2005/12/20051231/src.zip

*37 RHG: ここで指しているのは東京周辺で毎月開催されている「RHG 読書会」のこと。

*38 良く考えてみれば ASR は Ruby 本体とは関係ないから ChangeLog 見ても出ていない。

*39 ksh: Ruby 最大にして最強のライバル (と、Rubyist たちが勝手に敵視している。残念ながら向こうからは何とも思われてない可能性が濃厚)。ruby-list:16614 あたりの話。

*40 Haskell ばかり : このころ青木さんは「ふつうの Haskell プログラミング」を執筆中だった。

*41 Name Error のことを思い出していない。100 書いたうちの 80 動いてというのは NameError になる場合と思われる。

*42 map: ここでいう map はいわゆる STL などでいうところの map で、Ruby の Hash。arton さんは Ruby では {} として記憶していたため、この時点では Hash というクラス名が出て来なかった。

*43 Ruby コミュニティだけを指しているのではない。

*44 青木さんの専攻は哲学である。

*45 MSVCRT は DLL とスタティックライブラリとに IO 関数の実装の微妙な差があって、Ruby は DLL をリンクできなかった。ところが MSVCRT をスタティックリンクさせると拡張ライブラリが確保したメモリーをメインで解放するため死んでしまう。小松さんは独自の MSVCRT の DLL を作ることで解決させて、その後、古い MSVCRT.dll をサポートしないという決断によって独自の DLL も不要になった。

*46 MsgWait: MsgWaitForMultipleObjects のことを言おうとしている。

*47 という自覚があるので、「かんたん Rails」ではそのへんも意識して書いている。

*48 85 年: と arton さんは言っているが、実際には有名な "1984" の TVCM にもあるように Macintosh の誕生は 1984 年 1 月 24 日。

*49 読者の参考になるソースを挙げろと質問されているのに斜め上のほうへ飛んでいってしまっている。仕事で直接見たものを別にすれば、本で読んだものではスティーブンスの TFTP のサンプルコードとかをとりあえず挙げておこうかな。

*50 ソースの汚さから設計の駄目さに話が飛んでいる。

*51 自分が正しいと思っていれば、直せと言われても直さないということはありえる。でも誤りを指摘されているのにそれを直さないというのは賢明とは言えない。単に問題を引き伸ばすだけだ。

*52 現場と管理の場の分離問題ともいえる。こっちが前提としている知識をそもそも向こうが持っていないのであればそこから説明が必要なわけだが、そういったコンテキストが無いためにお互いに不毛な時間を使っているというのが正解だろう。その意味では業務知識に起因する問題とも考えられる。

*53 ここはアンビバレンツ。上で散々けなしているけど、逆に言えば自分なりの考えでコードしてるんだからその意味ではすばらしい。問題は経験不足とか業務知識の不足とかだ。またソフトウェア的に独自判断で付け加えられた追加フレームワークがミスマッチということもあったりする (マッチしてれば良いわけだが、スレッディングモデルの無理解とか、問題が多い)。ようするに、ここで問題にしているようなプログラムが求めるものと開発者の考えるプログラムのミスマッチが真の問題だと思った。業務知識とここで書いたような点からプログラムに落とすのはパターン化できるという点もあって、結局、機械的に作るべきプログラムを人間が作業するからお互いに不幸になっているというようにつながっている。ただ、言われた仕様を満たすだけの処理的にはつまらないプログラムとは言えども、それをきちんと作れずに、妙に仕掛けにばっかり凝るというのは間違っていると思うよ。

*54 オールディス: バラードと並んでニューウェーブを牽引した作家。『地球の長い午後』が紹介されていたが当時絶版で実際に読んだのはもっと後になる。

*55 ハインライン: ハインラインで SF に入門する人は多いと思われる。代表作はたくさんあるけど「夏への扉」「月は無慈悲な夜の女王」など。

*56 ギリシャ古典悲劇全集とか読んだりしてた。と突然思い出す。

*57 なるはずないのに、どうしてこういう枕詞を付けるのかね?

*58 さすがに誇張が過ぎるような気もするが、あとはエラスムスとデカルトとベーコンを学んだのは記憶に残っている。それと古代ギリシャ史。

*59 liaison と enchaînement のせいで、卜部は何回聞いても単語がどこで区切れてるかわからない部分の方が多い。いや、文脈から分かるんですけどね、本来は。あと単語の抑揚が画一的というか、どこを強く発音するかまでシステマディックなので、逆に平坦に感じてしまうのも切れ目がわからない理由かも。いや、これもむしろ積極的に聞き取りに貢献するシステムなのでしょうね、本来は。

*60 ラッセル: 集合論におけるラッセルのパラドクスは主張自体はわかりやすいので検索してみよう。

*61 ヒルベルト: ラッセルのパラドクスなどを受け、「数学を矛盾なく構築できるか?」と考えた人。

*62 ゲーデル: ヒルベルトの問いに対して「それは無理」と言った人。

*63 COBOL 時代

*64 マインドウォーカー

*65 パイナップル: 資料が散逸してしまっているのか、お茶の水にあったらしい、という程度しか分からないが、ともかく Amiga を売ってたらしい。経営していたのは桃園さんという方で Amiga パラダイスという本も上梓されていたと思う。他に『TV ゲーム』の執筆者の一人がバイトしてた。

*66 以後、英語が読めるようになった。

*67 無いわけじゃないが、インタプリタで動作しているときと組み込み関数にしたときの動作の不一致にどう折り合いを付ければ良いか思い至らなかった。

*68 そんなものは無い。多分 *print-length* による ... による省略の制御のことらしい。

*69 くるくる回したい: 正直、Ruby も tail call optimization くらいやってほしい (卜部)

*70 仕事に 2 種類あることに注意。昼の仕事と本書いたりする仕事。

*71 人類全体の蓄積と個人でできることの差を言っている。存在してればいやでも人類全体の蓄積に貢献できるわけでそれは夢とかとは異なるな、と考えている。

*72 どうして、おれの書いた本を読んだ人の中から、それまでの概念を引っくり返すようなすごいソフトウェアを作り出す人を生み出すことだ、とか言わないのかな?

*73 リアリズムに転換して生活をどうするかについて言い始めている。

*74 結局、だらだらしているのが好きらしい。

*75 時間がなくて先に進められてしまったけど、MSVCR80.DLL を標準にしたいというのが希望。VC6 は期限切れ、VC7 はライセンスが GPL 化不能に読めるということから、VC8 へ移行したい。Express 版があるから拡張ライブラリをコンパイルする人もリンクしやすいと思うし。