最新 追記

Matzにっき


2003年07月01日 [長年日記]

_ 星村麻衣

というアーティスト(って呼ぶの?)がいて、歌ったりピアノを弾いたりするのだが、 この人、松江出身ということで地元FM局で取り上げられたりしている。テンポのいい曲を歌っていたような気がする。

これだけなら「そういうヒトもいるのね」で終わるし、実際昨日まではそう思っていたのだが、 なんとこの人、うちの娘の通う小学校の校長先生の娘さんなのだそうだ。なんと。確かに名字が同じ。

さっそく彼女のオフィシャルホームページを見てみたのだが、

...お父さんに似てなくてよかったね(笑)。

_ [生活]散財

関空までのチケットを買ったり、コンタクトレンズを新調したり、散髪したりで お金を使う。いや、たいした額ではないのだが、貧乏症はお金使うたびにどきどきしちゃう。


2003年07月02日 [長年日記]

_ [NTT]ADSL申し込み

申し込んだ。開通は16日。

Flet's ADSLはプロバイダサービスは含まないので、どこかのプロバイダと契約する必要がある。 考えてみるとプロバイダときちんと契約するのは今回が初めてのような気がする。 以前から接続は会社につないでいたし、 PHSカードも日本通信のb-mobileだし。

ううむ、どこのプロバイダにしたものか。安いのでいいんだけどな。

_ [Ruby]1.8.0リリース前の作業

OSCONの前に1.8.0をリリースしたいなと思っているのだが、 原先生から指摘があったGC関係のバグがまだ残っている。

これが凶悪でメソッドキャッシュが指しているクラスが、 GCのタイミングでリサイクルされてしまうため、 クラスでないものをクラスとして参照して落ちるというものだ。 なぜまだ生きているはずのクラスが回収されてしまうのか。

リリース前に直したいと思っているんだけど、簡単には直りそうもない。 プレゼンの準備もしたいしなあ。

_ [OSCON]プレゼン準備

というわけで、10日に発表する資料を用意しているのだった。

しかし、英語での発表は成功したためしがないので、困っているのだった。 つい、日本語と同じつもりで準備して、英語力がなくて話題に事欠いたり(表現しきれない)、 メモを用意しても話している間にメモのどこまで話したかわからなくなったり。

何度も発表してるのに毎回同じ失敗をしているから反省がない。 今回はちょっと工夫してみようとは思っているのだが。


2003年07月03日 [長年日記]

_ [OSCON]プレゼン準備

昨日に引き続きプレゼンの内容を考えていたのだが、 うちに引きこもってまで時間を取ったはずなのに、 結局かなりの時間をRubyをいじるのに伝ってしまった。反省。

プレゼンは「言語の力」とか「バベル17」とかそういう話と、 LL2での「脳力」の話を組み合わせたようなものになるんじゃないかと。

_ [Ruby]RCR

RCRというのはRuby Change Requestの略で、www.rubygarden.orgに蓄積されている Rubyの変更提案のことだ。最近ずっと放置していたのだが、 [ruby-talk:74950]で「どうなってるの」と質問があったので、 久しぶりに見返してみた。

もうすでに採用されているもの、不採用になったものなどをチェックしていたらすっかり時間がかかってしまった。

また、いくつかは今回新たに取り込んだ。

もうpreview3も出しちゃったのであまり変更しないようにしようと思っていたのに(互換性は維持されています)。

採用したRCR

  • RCR#69 - "%p" specifier for inspect output.
  • RCR#121 - put timeout in Timeout module.
  • RCR#139 - new method MatchData#groups
  • RCR#146 - allow "undef_method" to accept multiple arguments.

2003年07月04日 [長年日記]

_ [OSCON]まだプレゼン準備

日本語で原稿用意しているのに全然進まない。 似たような話を以前にもしているはずなのに。 発表は来週なのに。

やはりプレッシャーを感じているのか。

_ [本]Perl 6 Essentials

Perl 6 Essentials(Allison Randal/Dan Sugalski/Leopold Totsch) Perl 6 Essentials』なんて本が。

買うしか。

しかし、表紙はオウム(Parrot)じゃないのね。まあ、 Parrotは単なる処理系だし、Perl6専用じゃもんなあ。

それはわからないでもないが、「バーバリーシープ」というのはどういうこと? 私の本であれだけ羊をお願いしたのにヤギにしたくせに。

_ [Ruby]移植性

IA64、x86-64, ppc64などで動かないというレポートがあり、 どうやらrb_node_newnode()がキャストなしでintの引数を受けるのがまずいらしい。 あの関数はちゃんとしたプロトタイプもないしな。

パッチを作ってくださった方も いるのだが、このパッチはあまり良くなさそうだ。ppc64では動かないみたいだし。

ということで、きちんとしたプロトタイプとキャストを行う変更を行ってみた。 さきほどコミットしたので上記アーキテクチャで試せる人は試してみてほしい。

しかし、これに限らず、自分が持っていなくて固定的なメンテナーがいないアーキテクチャの面倒は大変だ。 AIXでコンパイルが通らないというレポートも来ているんだが、どうやって直したもんだか。


2003年07月05日 [長年日記]

_ [OSS]「知的財産戦略」は、インターネット時代には似合わない

池田さんはこの文章が発表された次の日のオープンソース関連政策討論会でもまったく同じことを発言していた。

まあ、機会を捕らえて持論を展開というのは我田引水というか、強引というか、 そういう印象は否めないけれど(だから彼のことを悪く言う人を見かけるのかも)、 このコラムの発言は理解できる。

「エゴを抑えてみんなが幸せになりましょう」というのは、オープンソースの基本理念ともつながると思う。

勝ち組だけがすべてを取る社会で勝ち組に入ることを志向するのか、 大勝利はないかもしれないが、多くの人が幸せになる社会を志向するのか。

むずかしいのは「すでに勝ち組になっている人」と「もう少しで勝ち組に入れるかもという人」が この「別のやり方」に乗り換えることで、おまけにこれらの人が権力を持っていることだ。 こういう人たちにとっては(少なくとも短期的には)失うものの方が多いものなあ。

我々「持たざるもの」がまず自分の乏しい中から分け与える社会を作っていくしかないのだろうか。

_ [生活]お風呂のお湯

お風呂のお湯がいっぱいになったとアラームが鳴った。すぐに自分が動くか、子供に止めさせればよかったのだが、 「止めないとね」と口にしただけで、 つい他のことをしているうちにみんな忘れてしまった。

数十分後....、あふれたお湯にぼうぜんとした私たち家族一同。もったいない。

教訓

  • 「後で」ではなく、すぐに行動しよう
  • 「誰か」ではなく、特定の個人に責任を割り振ろう

2003年07月06日 [長年日記]

_ [教会]ホームティーチング

家庭教師ではなく、教会の人が相互に訪問して啓発しあったりする活動。

今日は一番上のお子さんが21歳という先輩家族を訪問。 うちの子はまだ10歳なので、10年後のうちを想像することもできる。 やはり子供が就職したりすると一緒の時間を過ごすことは難しいとか。 まあ、それは当然ではあるけど。

自分を振り返っても高校を卒業した18歳の時から家族と離れて生活してるわけだし。 弟なんか2歳までしか一緒にいなかったわけだしなあ。

それはともかく、子供が小さい今のうちに基礎を築いておかねばと思ったのであった。

_ [生活]デフレ

以前デフレについて書いた件で自転車小僧さんのツッコミをいただく。 紹介されたリンクにある「デフレはどうして悪いのか」も含めて考えさせられる。

書いてあったこと

  • 理不尽な値下げ圧力の結果、「安かろう悪かろう」ものが出まわっている。紹介されたのは自転車の例。
  • デフレでは借金がある人から貯蓄のある人に「所得移転」が発生する。
  • 借金(ローン)がある人は消費意欲が高いはずで、その人たちが損することでものが売れなくなる。景気が悪くなる。
  • デフレはインフレより調整が難しい。金利はゼロより小さくならないし、所得を下げる調整も難しい。

なるほど。で、思ったこと

  • 値段が安くなるのはありがたいが、品質に関しても厳しい目も持つべきだ。
  • 私は借金はないし消費意欲もさほど高くないのでデフレ向きの人間である。
  • だからデフレに問題をあまり感じなかったに違いない。
  • だけどやっぱり前みたいな成長期はもう来ない社会が来ているように思う。
  • 「今は不況(景気の波の下の部分)」ではなく、「ずっと低成長(or マイナス成長)」だと思って生きる時代では。
  • オープンソースはデフレ向き生き方、....かも。

2003年07月07日 七夕 [長年日記]

_ [OSCON]発表資料

出発前日になってやっとスライドが完成。長かった。疲れた。

しかし、今までの経験だと60枚のスライドでは、そのままだと30分ほどしか保たないので、 いろいろスライドに書いてない台詞をしこまないといけない。

一番失敗がないのは原稿を書いてしまうことだろうが、プレゼンテーションとしての質は落ちるしなあ。 まあ、木曜日までにどれだけ準備できるかだな。

とりあえずスライドはこちら

_ [OSCON]資料間違い

タイプミスが複数ありました。今spell checkしましたので、もう大丈夫です。 ただ単語のミスはispellで発見できても、文法ミスは見つけられないんですよねえ。

英語だけでいいから文法ミスや文体チェックをしてくれるソフトがあればいいのに。 昔Grammatikという商用ソフトがあったと聞いたことがあるけど。

_ [OSS]オープンソースには法的問題あり

インターネットウォッチの記事。見出しを見て「どきっ」としたけど、 どうやらこれはドイツ法でだけ成立する話。 日本の法律ではこの問題はないはず。

ところでこの記事の途中に「著作権放棄」という表現があるけど、 GPLは著作権放棄を求めている部分はないよね。 FSF管理のソフトウェア以外のオープンソースソフトウェアでは、 パッチの著作権の扱いは曖昧のままのものが多いけど、Rubyを含めて*1

それはともかく日本を含む各国の法律がオープンソースを想定していないのは確かで、 運動していく必要があるのは事実だろう。どんな運動があり得るのかなあ。 ロビイスト(lobbyist)を雇う? そのお金はどこから?

ルビイスト(rubyist)なら少々いるんだけど*2

*1 それはそれで問題だけど

*2 すいません、オヤジギャグ入ってます


2003年07月08日 [長年日記]

_ [OSCON]旅立

これからバンクーバー経由でポートランドに向けて出発します。いってきます。

無事を祈っててください(笑)。

_ [OSCON]プレゼン資料改善

ぞくぞくとツッコミありがとうございます。単純な間違いが多くて恥ずかしいです。 英語下手くそ。 しかし、いただいた提案はぜひとも反映させてください。

これぞオープンソースプレゼンテーションか。ご協力に感謝します。

_ [本]『未来の二つの顔

関西空港までの電車の中で読んだ。なんか懐かしい。

これを買ったのはどうやら高校生の時らしい。 たしか一度読み返したように思うから、20年ぶりということはないのだけれど。

「きちんと読んだ最後のSF」というような記憶があるから、大学に入ってからはろくにSFを読んでないらしい。 そういえばこれよりも古いはずの『創世記機械』も読んでない。

今読み返すと、

  • DECなくちゃっちゃいました。
  • おいおい、そんなことしたらデブリで大変なことに。
  • 宇宙服を着て格闘はできません

など気になる点もありますが、私のコンピュータ体験のベースになっていることは確かのようです。 昔の気持ちを思い出しちゃいました。

この本に登場する2028年の未来は明るい。こういう未来が来てほしいものだ。 そのころ私は65歳か。今の父親よりは若いな。

追記

さらに飛行機の中でもう一度読み返した。 ダイアー博士が今の私より若いという事実を見落としいた。 なんとなくずっと上のような気がしていた。 いや、最初に読んだ頃「ずっと上」だと思ってた年齢をいつの間にか追い越してしまったということか。

あと、ハッピーエンドですが、なんかみんな楽観的過ぎ。 スパルタクスが「成長」して友好的になったからといって、 将来に渡って人類に友好的であり続ける保証はまったくないと思うのだ。 なんといっても成長するんだし。 たとえば「影像」が他の生き物を食べるという事実を彼がどう解釈するかとか。

とはいえ、私の琴線に触れるSFであることは間違いない。 ワタシ的には傑作だな。

_ [OSCON]到着

無事到着しました。


2003年07月09日 [長年日記]

_ [OSCON]The Open Source Paradigm Shift

時差があるので、ここではまだまだ9日です(日本時間では10日朝5時)。

スラッシュドット・ジャパンでも話題になっていたTim O'Reillyのキーノートを聞いてきました。

内容は事前インタビューなどにあった通りで、 別に目新しい内容はなかったのですが、世の中の変化という点からは興味深いものでした。

差別化が独自ソフトウェアによって行われていた時代から、 ソフトウェアそのものはコモディティ(日用品、どこにでもあるもの)になって、 それの組み合わせと蓄積したデータなどによるの「サービス」によって差別化される時代になった、 あるいはなりつつあるということか。

が、それってうちの会社がはるか以前から行っていたような気がする。 まあ、うちは直接サービスを提供しないので、差別化は主に価格と技術力と知名度で行っているわけだが。

そういえば、彼はDynamic Languageの効用を強調してました。これはインタビューには載ってなかったと思います。

マイクロソフトは3年ごとにリリースしているが、Yahoo!やAmazon, eBayは毎日でもリリースしている。 そのような速いサイクルの開発にはDynamic Languageが最適だという論旨です。

確かに。注目されるのはありがたいことです。

もっとも、いくら注目されても

  • Larry Wallは現在仕事がない
  • Guido van Rossumは転職したばかり

では、Dynamic Languageのデザイナーは報われないことです。 今のところ私の立場は安泰みたいですけど。

追記

転職と無職じゃえらい違いという指摘が。でも、GuidoもZope Corporationが資金がショートしそうで転職せざるをえなかったということですから、言語デザイナー受難の時代に変わりはないようです。

_ [OSCON]Dinner with Microsoft

OSCONの昼食はMicrosoftがスポンサーでした。曰く「Free as in lunch :-)」だそうです。

サンドイッチにナノマシンが入ってて、洗脳されて.NETでしかプログラムが書けなくなったら

などと冗談をいってましたが、現時点では大丈夫のようです。

私をはじめ何人かのDynamic Language関係者たちは夕食もMicrosoftにごちそうしてもらいました。 で、そこで私はLarry Wall, Guido van Rossumをはじめとする有名人とごあいさつしました。

Larryは日本語が上手になっていました。

皿があります
有名な人です

また自作の日本語学習プログラムも見せてもらいました。部首などからも単語が引ける力作でした。 すばらしい。

しかし、アメリカの食事ってどうしてあんなに大盛りなんでしょう。 隣の人が食べてたチキンなんで鶏半分まるごと(は冗談です。腿を1本まるごとくらいかな)が皿に乗ってました。 こんなには食えない。


2003年07月10日 [長年日記]

_ [OSCON] Ruby Day in OSCON

OSCON4日目。今日は朝から

  • "The Power and Philosophy of Ruby" by わたし
  • "Ruby for Perl Programmers" by Phil Tomson
  • "Take a FreeRIDE with Ruby" by Rich Kilmer
  • "Data-Driven Classes in Ruby" by Michael Granger
  • "Understanding Ruby's Object Model" by Chris Pine
  • "What I Did on My Summer Vacation" by Dave Thomas

と一つの部屋を専有して一日Rubyトラックがあった。 ながらくOSCONとは縁がなかったので(O'Reilly的には売り上げに貢献してないし)、 今年こんなに扱ってもらえるのは嬉しい限りである。

私の話はすでにスライドを公開した通り(更新しています)。 Rubyトラックはそんなに大きな部屋ではなかったのですが、満員になって立ち見まで出ていた。 今年は原稿を用意したので、観衆の目を見て話す時間は短くはなったが(プレゼンとしては良くない)、 そのぶん以前の英語のプレゼンよりはまともな英語に近いものになったと思う。

その他の話も、RubyによるIDEであるFreeRIDEとそのベースになっているFreeBASEというソフトウェアアーキテクチャの話とか、Rubyのクラスの階層構造を特異クラスを含めて解説するとか、興味深いプログラムがたくさんであった。 割と充実していたのではないだろうか。実際には私は出席できなかったものも多いのだけど。

残念だったのは時間の関係でWard Cunninghamから誘われたドライブに行けなかったこと。 ポートランド近辺はきれいなところが多いそうなので、ぜひ見たかったなあ。 また来ることがあるかしら。

オープンソースコンベンションでは、あちこちでRubyの名前を耳にする。 なんだか有名人の父になったような気分だ。

明日にはもう帰ります。なんだか慌ただしいことです。


2003年07月11日 [長年日記]

_ [OSCON]出発

朝6時の飛行機に乗るために4時にホテルを出る。

行きにも使ったプロペラ機でまずバンクーバーへ。

そこでなぜか外に出されてしまう。普通トランジットは空港内にとどめておくものじゃないのか。 カナダの入国手続きはしてないんだけどなあ。このまま逃げちゃったらどうするつもりなんだろう。 しかも、国際線のゲートは空いてないし。いいのか、こんなおおらかなことで。

10時になってやっとゲートをくぐって出発待ち合いへ。そろそろおなかが空いてくるが、 気ままに食べていると後で体重に響くのが目に見えているのでぐっとがまん。 どうせ機内で食事は出るはずだし。 それにカナダドルを持っていないので、両替が面倒だし、食事みたいな小額でカード使いたくないし。

で、出発まで2時間以上あるのでPCを開く。ためしに無線LANカードを入れるとなんと接続するではないか。 嬉しい。インターネット接続がないと何もできないワタシ。

逆に接続さえあれば世界のどこででも同じように仕事ができるっていうのも、 ある意味ちょっとどうかしてるかも。

帰りの機種も行きと同じボーイング767。こんな小さい機体で太平洋を横断するってのもある意味すごいことだ。 空いていたので2席を占有して眠る。ぐー。


2003年07月12日 [長年日記]

_ [OSCON]帰国

カナダ経由だったので、入国審査のときに

10日以内にトロントに滞在した人はこちら

などと言われたりしてた人もいたが、なんとか無事帰国。

岡山経由松江行きの指定席も手配し、うちに電話してから、新幹線に乗り込んだ。 まもなく新幹線が発車し、アナウンスが聞こえた

東京行きのぞみに乗車いただきありがとうございます。

がーん。なんと反対方向ののぞみに乗ってしまったのだった。ばか。

慌てて次の停車駅、京都で降りて、下りのひかりに乗り換える。 しかし、すぐそばの京都で止まってよかった。これで名古屋までノンストップとかだったら、 リカバリのしようがないよ。

で、結局岡山発の次の特急で帰れたのだが、伯備線の特急は1時間に一本しかないのにもかかわらず、 時間の関係で30分遅れだけで済んだのは不幸中の幸いであったろう。

いや、連絡がつかず30分待たせてしまった妻と子供には悪いことをした。

_ [生活]アメリカで気づいたこと

やはり国が違うといろいろ細かいところが違うのだが、今回の旅行で気づいた小さなこと。

歩行者信号

ご存じの通り、日本の歩行者信号は、

青→青点滅→赤

と変化するのだが、アメリカの歩行者信号は

青→赤点滅→赤

と変化する。日本の信号が「急いで渡れ」という暗黙のメッセージを送っているのに対し、 アメリカの信号は「そろそろ危険だ」というメッセージを送っていると感じた。 いや、アメリカの信号の方がうっとうしいのだが、目的はよく果たしていると思った。

右折可

アメリカは左ハンドル右側通行なので、右折の方が曲がりやすい。 で、交差点はデフォルトで常時右折可なのだそうだ。

つまり、正面の信号が赤でも人や車が来てなければ曲がってもよいということ。 交通量が多く、危険なところでは「右折禁止」と書いてある(もちろん英語で)。

これも合理的....なのかもしれない。

公衆電話

公衆電話の受話器を取るとコインを入れなくても「ツー」と音がする。 ダイアルしてつながると課金されコインが落ちる。

これは変わってる、と思ったのだが、帰国してから使ったグレーのISDN公衆電話は同じ動作をした。 ただ単に私が遅れていただけらしい。

あと、公衆電話といえば

  • ほぼ全部の公衆電話がクレジットカードを受け付ける
  • その電話の番号が書いてある(のでときどき公衆電話が鳴る)

というのも印象的。特に後者は「ああ、映画で公衆電話が鳴るのはそういうことか」と納得だ。 古くは『ダーティハリー』、最近だと『スピード』で鳴ってたよね。

『スピード』は全然最近じゃないか。


2003年07月13日 [長年日記]

_ [教会]岡山

月に一度の岡山での会議。昨日帰国して、今日岡山まで運転はきついなあと思ってたら乗せてくれる人あり。 助かった。

すいません、会議中、うとうとしてました。時差ぼけ...というのは単なる言い訳で、 私ったらどこでも寝ちゃう人なんです。真面目な会議だったのに。

_ [Ruby]Sapir-Whorf hypothesis

10日のプレゼン後、 何人もの人から「Sapir-Whorfの仮説を知ってるか」と聞かれた。 私の話がその仮説にそったものだったかららしい。

「Sapir-Whorfの仮説」とは

Language shapes the way we think, and determines what we can think about.

というようなものらしい。 最初に議論されたのが1929年ということだから、実はずいぶん古い仮説だ。

「言語が思考を規定する」というのは私の好きな言葉であるし、実際にそう思っているので、 私自身はこの仮説は真実であると信じているのだが、今回教えてもらうまでは この仮説について全く知らなかった。

ただ、この仮説に基づいて書かれたSFである『バベル17』は、 高校時代に読んで私に深い影響を与えた本である。この本を読んで言語を好きになったのか、 言語が好きだったからこの本を読んだのかははっきり覚えていないけど。 たぶん、言語好きの方が先だったんじゃないかと思う。

で、どうやら私は、この本の印象と自分自身の経験から仮説を再発明したらしい。 車輪の再発明は私の得意技ではあるのだが、またやってしまった。


2003年07月14日 [長年日記]

_ [本]『消えた少年たち

消えた少年たち (Hayakawa Novels)(オースン・スコット カード/Orson Scott Card/小尾 芙佐)

作者のオーソン・スコット・カードはうちの教会の会員だ。 以前から知ってはいたが、実は彼のほかの著書は読んだことがない。 『エンダーのゲーム』、『死者の代弁者(上)(下)』など有名なのに。 私のSF離れはかなり深刻だったらしい。

以前に高橋(maki)さんからいただいた本を帰りの飛行機の中で読み返した。 前にも少し書いたが、この本は私にとって特別な本となった。

なにが特別かというと、まず第一に主人公の立場が私に相当近いことだ。

  • 「自分の作品」を持つプログラマ
  • 3人の子の父親
  • 末日聖徒*1
  • 前の責任は長老定員会の会長
  • たびたび引っ越している

で、物語ではその家族の日常が丹念に描かれる。

他の人がどう読むかはわからないが、私にとってはごく細かいところまで共感できる日常だ。 そこに(あまり自分の内面を出さない)私なら他人には絶対に語らないような心理描写が織り込まれる。 本質とは関係ないが1983年頃のコンピュータ事情というのも懐かしい。

だから、この本は、時間や国こそ違うものの内面的には私のコピーについて語っているように感じてしまった。 自分の内面が、まったくの第三者によって描写できるほど普遍的なものであった ということに正直驚きを感じる。

この本のほとんどの部分はそうした日常の描写だ。 「消えた少年たち」というタイトルに表現される、ごくわずかな「非日常」はラストになるまで発展しない。 この日常に共感できない人はこの本をどう読むのだろう。

読んだ後は「消えてしまった少年たち」に対する切なさ、失われてしまった家族への思いが残った。 私自身も家族を失った経験があるだけにその切なさは一層である。 「悲しさ」ではなく「切なさ」。「絶望」ではなく「喪失感」。

また会える、そう堅く信じていても喪失感と切なさは消えないものだ。

ストーリーの流れはスティーブン・キングを思い出させるような気がするが、 考えてみると私はキングの本はまだ一冊も読んでいないのだった。

*1 うちの教会(末日聖徒イエス・キリスト教会、通称モルモン教会)の会員は自分たちのことをよく「末日聖徒」と呼ぶ。

_ [家族]家庭の夕べ

教会からの勧めもあって、月曜の夜には家族全員が集まって「家庭の夕べ」と呼ばれる集まりをしている。

まだ子供は小さいと言っても、学校の宿題やら見たいテレビやら、それぞれ勝手にやりたいことがあるので、 なかなか全員揃うのは難しいので、良い機会ではある。 もっともうちの場合はそれとは別に朝食と夕食はできる限り一緒に食べるというルールもあるのだが。

今日は息子が昨日教会で聞いた話を紹介してくれた。「贖い」について勉強したのだそうだ。

それから、アメリカで買ってきた「Panda Monium」なるカードゲームで遊んだ。 対象年齢6歳以上と書いてあったのだが、息子にはちょっと難しかったようだ。 少々訓練が必要かも。


2003年07月15日 [長年日記]

_ [本]Code Readings: The Open Source Perspective

鵜飼さんの日記から。

If you make a habit of reading good code, you will write better code yourself.

というのは、私の経験からも実感できるところである。買うかな。

_ [原稿]Linux Magazine

アメリカに行ってて放っておいた間にとっくに〆切は過ぎている。 やっと書きはじめる。少々慌てギミ。間に合うかしら。

今月のお題は「オブジェクト指向」の予定。しばらくぶりに「初等Ruby講座」らしい内容になるかも。


2003年07月16日 [長年日記]

_ 眠い

今回は時差の影響がないなあと思ったら、今日になってやたら眠い。 原稿を書かねばならんのに、まずい...。

_ [ネット]ADSL開通

やっと開通した。アメリカに行っている間に前田さんに追い越されていた。

ADSLモデムと無線ルータをつないで家中どこでもネットワークだ。 会社よりも回線速度が速いというのはどういうことか(会社が遅いんです)。

これで引きこもれるぞ。


2003年07月17日 [長年日記]

_ [生活]引篭り

ADSLが開通したのを幸い、自宅で作業。そういえば今日は会社の創立記念日であったのに。

原稿はさっぱり進まないが、デバッグは進むという。これは一種の逃避行動か。

_ [Ruby]デバッグ

直したバグは以下の通り。

  • eval.c (rb_f_missing): no "local variable" in message if the name is not a valid local variable name (e.g. foo!). [ruby-dev:20641]

    foo!やfoo?のようなローカル変数ではない名前を持つメソッドでは "undefined local variable or method"ではなく"undefined method"というメッセージを出すように。

  • re.c (match_captures): rename from "groups".

    captureしないgroupがあるので名称変更。

  • eval.c (rb_clear_cache_by_class): check both klass and origin.

    原先生の懸案のバグをとうとう退治。無名クラスがGCされた後、 再び同じオブジェクトが無名クラスに割り当てられた場合にキャッシュが不整合になる。 以前GCでクラスを解放する時にrb_clear_cache_by_class()を呼ぶようにしたのだが、 originだけでなくklassの方もチェックする必要があった。

  • eval.c (ruby_init): set ruby_running to true after initialization.

    組み込みの場合、ruby_runningが0のままになる場合がある。 ruby_init()が終了する直前にruby_runningを1にしておけば、 組み込みでも問題はない。

_ [TV]ベン・ハー

夜中に衛星放送で映画『ベン・ハー』をやるという。 チャールトン・ヘストンの(1959)はどっかに録画してるよなあ、とか思っていたが、 なにげなくチャンネルをつけると無声映画版(パートカラー)であった。 ムービーデータベースで検索するとどうやら1925年版らしい。 なんと1907年版もあるとか。

ううむ、昔々の映画の割にはできが良い。 海戦シーンも、『エピソードI』にも引き継がれた戦車レースも健在だ。 時代(昭和元年!)を考えるとどうやって撮ったのだろうと不思議に思う。

『十戒』の戦前の版である『十誡』(1923)はかなりちゃちだと聞いたのだが。 こっちも見たいのだが、なかなか見かけない。 浜松にいた時にレンタルショップで見かけたので、あの時借りとけばよかった。


2003年07月18日 [長年日記]

_ 時差ぼけ

「今回の旅行は時差ぼけがないな、と思っていたら、4日くらいしてから調子が悪くなった」などと 話していたら、社長に

それって年取ると筋肉痛が遅れてでるのと同じ原理?

とか言われてしまった。ショック。確かに思い当たるフシはある。最近、体のあちこちが痛いし。

それはともかく、Linux Magazineの原稿を書かねばならない時期にさしかかっているのに 調子が悪くてなかなか進まないのだ。「真の〆切」*1は迫っているというのに。 最悪のタイミング。

*1 〆切には「表の〆切」、「裏の〆切」、「やばい〆切」などいろいろ種類があって、最悪なのが「真の〆切」である。これを過ぎると「落ちる」。


2003年07月19日 [長年日記]

_ [原稿]Linux Magazine

なんと、一日も欠かさずに書いていたつもりだったのだが、この日が欠けていることに、 今(2004-01-20)、気がついた。この日はたぶんLinux Magzineの原稿を書いていたはず。 テーマは「独習Ruby」。勢い余って1ページ分余計に書いてしまい、泣く泣く削る羽目に。


2003年07月20日 海の日 [長年日記]

_ [教会]松江

松江に出席。今日は人が少ないような。

土曜日に福岡に行った人々は大変な思いをしたと語っていた。 妹夫婦はそのまま旦那の実家に寄ったそうでお休み。

_ [OSS]SCO社長

いまや「オープンソースの敵」と見なされているSCOであるが、 社長のMcBride氏は日本語が堪能であるらしい。

調べると

関西での宣教の経験があり、関西弁を話す。19歳の息子も日本で宣教師として働いている

だそうだ。どうやら彼もまた末日聖徒ということだ。 うむ、同じ宗教を信じていても社会的な立場が違うこともあるということだな


2003年07月21日 振替休日 [長年日記]

_ [家族]温泉解放日

今日は玉造温泉旅館協同組合の温泉解放日で、加盟15旅館の大浴場を無料で解放するというイベントがあった。

ここに引っ越してきてもう6年になるのだが、 年に1度2日間だけ無料解放するこのイベントに参加したことはなかった。 今年はちょうど予定がなにもなかったので、家族みんなで温泉に入ることにする。

しかし、

  • 玉井別館
  • 有楽
  • 白石屋

と3件入ったところで、のぼせてくる。このペースでは15件全部に入るには、 あと5年はかかるな。

しかし、歩いて温泉旅館のはしごができる環境というのは幸せな気がする。

_ [Ruby]デバッグ

自宅がADSLになったので気楽にCVSコミットができるようになったのは良いが、 調子に乗ってバグが残ったままコミットしてしまったのが数件。すいません。

で、直したバグのリスト。

  • numeric.c (num_equal): should not use rb_equal().

    a <=> b がnilの時には、==もnilを返すように。 [ruby-dev:20759]での斎藤さんの指摘を受けて

  • string.c (rb_str_equal): should return nil for non string operand to conform comparable convention. [ruby-dev:20759]

    同上。to_strがない場合にはfalseでなくnilを返すように。

  • lib/tmpdir.rb: new library to get temporary directory path, using GetTempPath on Win32 environment.

    Win32環境ではGetTempPathというAPIがあるそうなので、それを使う。 「これでWindowsでは/tmpがない」という苦情に対応できるか。 もっとも、セキュリティ的に大丈夫かという不安は残る。

  • lib/tempfile.rb: now uses tmpdir.rb.

    新しく作ったtmpdir.rbを使うように。

  • lib/cgi/session.rb, ib/drb/unix.rb: ditto.
  • string.c (rb_string_value_cstr): check null byte in the string before retrieving C ptr. accessed via macro StringValueCStr.

    StringValueCStrというマクロを使うとstringが\0を含んでいるかどうかチェックする。

  • file.c: use StringValueCStr to retrieve paths to system calls.
  • file.c (sys_fail2): raise error for two operand system calls such as rename, link, symlink. (ruby-bugs PR#1047)

    2引数のシステムコールで両方のパスを表示するように。 allocaを使うのは不用意だろうか。


2003年07月22日 [長年日記]

_ [映画]『ガタカ』

録画しておいたBSで放映された映画を見る。

遺伝情報で将来が決定され、新たな社会差別が起きている近未来、 遺伝的にハンディキャップを負っている主人公が、 チェックを逃れつつ、宇宙を目指す、 というお話。

あまりにひんぱんな血液検査とか、あまりにも遺伝情報だけに依存した社会とか、 この映画の道具立てはかなり非現実的ではあるが、 考えてみれば世の中の差別なんてその根源はどれも非合理なものばかりである。 部落差別しかり、ナチの優生学しかり。 そういう観点からはこの非現実性はかえって含蓄があるかもしれない。

人権問題として闘うとかいう話でなく自分の夢を実現したいだけ(経歴詐称は犯罪だけど)、 というのも共感できる。

ただ、私ってばこういう「嘘をついてて、ばれそうになる」という黄金のパターンがどうしても駄目で、 嘘が発覚しそうになるたびになんかむずむずしてじっとしていられなくなる。 ロビン・ウィリアムズの『ミセス・ダウト』も同じ理由で駄目。

妻には「自分の嘘じゃないんだし、そういうものと思って見てればいいじゃない」と言われて、 確かにもっともなのだが、生理的に駄目なのだ。 彼女がジェットコースターが生理的に駄目なのと同じでどうしようもない。

私は詐欺師にはなれそうもない。マーケティングも辛いかも。

_ [映画]『アベンジャーズ』

同じく録画しておいたもの。 60年代のテレビシリーズのリメークとのこと。

イギリス人ってこうなのね、という誤った先入観を助長するような映画。

イギリス人は

  • まずなによりお茶を好み
  • 車にもティーメーカーが備えつけている
  • 晴天を信じず、常に傘を持つ
  • 紳士ぶるのを忘れない

たぶん自虐ネタだと思うんだけど、自信がない。

ところで印象に残ったのは「イギリスの科学はァッ世界一ィィィッ」という点だ。 いや、そんな台詞は出てこないんだけど(それは漫画です、しかもドイツだし)。

多くの映画では、舞台となる国が特別な技術を開発するものだ。

  • 『アベンジャーズ』ではイギリスが気象兵器
  • 『シュリ』では韓国が特殊な高性能爆弾
  • 『ゴジラ』では日本(人)がオキシジェン・デストロイヤー
  • 『ウルトラ6兄弟対怪獣軍団』ではタイ人の少年がハヌマーンに

なんか選び方にバランスを欠くが、それはそれとして。 やはり映画にもナショナリズムが現れるものらしい。 自国が優れているというのは制作者にも観客にも心地が良いに違いない。

それよりショーン・コネリー、出演映画を選べよ。

_ [Ruby]機能追加

Feature Freezeしたんじゃなかったのと思いつつ、 こういうことをしてしまうのが私の性格のいいかげんさというか、 「優しい独裁者」の特権というか。

  • const_missing

    定数が無かった時に呼び出すメソッド。引数は定数名。 デフォルトではNameErrorをあげる。

  • END手続き中のexit

    ENDまたはat_exitで追加した手続きの中でexitが呼ばれた場合、 そのexit statusが用いられる。複数の手続きがexitを呼んだ場合、 最後に実行したもの(最初に登録されたもの)が用いられる。

もうすぐ1.8.0 preview4を出します。


2003年07月23日 [長年日記]

_ [Ruby]今日のChangeLog

1.8.0 preview4のリリースを明日に控え、コミットが盛んだ。 ドタバタした印象を与えるが、最終リリースではないのでこれで良いのだ。 XP的には「短期リリース」ということなのだろう、きっと。

私によるもの

  • string.c (rb_str_split_m): the receiver may be empty string.

    "".split(/\t/, 1)は[]を返すべきであった。

  • string.c (rb_str_lstrip_bang): strip NUL along with white spaces. [ruby-talk:76659]

    lstripはNUL('\0')も削る。strip, rstripも同様。

わたなべさんによるもの

  • file.c (DOSISH): better Cygwin support.

咳さんによるもの

  • lib/erb.rb: import erb-2.0.4b1.

なかださんによるもの

  • ext/io/wait: imported.
  • lib/mkmf.rb (log_src, checking_for, create_header): Logging.message is printf like format.
  • ext/iconv/iconv.c (check_iconv): check if Iconv instance.
  • ext/iconv/iconv.c (iconv_convert): stringify argument.

田中哲さんによるもの

  • ext/iconv/iconv.c (iconv_failure_initialize): limit inspect message. [ruby-dev:20785]
  • ext/iconv/iconv.c (rb_str_derive): share with original string if possible. [ruby-dev:20785]

2003年07月24日 [長年日記]

_ [Ruby]今日のChangeLog

今日がリリースだというのにがんがんコミットがある。全部で27エントリ。

多い順に

  • 中田さん(8件)
  • ゆうぞうさん(7件)
  • わたし(6件)
  • うささん(3件)
  • わたなべさん(2件)
  • Michal Rokos(1件)

新たに増えたライブラリ

  • lib/webrick
  • openssl
  • pathname

_ [Ruby]1.8.0 preview4

約束通り、日本時間夕方5時にリリース。

良好な反応が返っているようだ。

_ [日記]Matzにっき

私はircにはボットを常駐させて、ログを1日1回メールで読んでいるわけだが、 中にはかなり面白いネタがあることもある。

私のこの日記をbabelfish(機械翻訳)にかけて読もうという人がいて、彼が得たものが

Village discrimination, eugenics of Nazis
 weather weapon
 with advanced bomb ' Godzilla whose Korea
 ultra 6 sibling anti- monstrous beast corps
The home country is superior

この間の映画の感想を翻訳したものだ。

不完全に訳されたものだけ読むと、私ってなんて物騒な人間なのだろうか。

いや、詐欺師とマーケティングを並べてしまう時点で、日本語で読んでも物騒かも。

_ [Ruby]Language features and cross-pollination

上記のIRCログから。

Keroによるblogの最新エントリ。 「いかに言語が人を幸せにするか」ということへのKeroの意見。

まあ、私の意見の別表現と言えないこともないのだが、上手に表現してあるよなあ。

Keroは最初にiPAQにRubyをポートした人物。オランダ人。LL2で直接会ったことあり。

_ [家族]親子活動

娘たちの通う小学校では、年に一度(あれ二度だっけ?)「親子活動」と称して 親子が参加するPTA主催の活動が行われる。

先日は次女の親子活動であったが、今日は長女である。 なんでも今回は「肝試し」なのだそうだ。うーむ。 あのお、夜の学校ってば怪談の絶好の舞台で、大人でも恐いんですけど。

...結局子供のほうが平気だったらしい。

私が通ってた学校は1000人以上児童がいる大規模校だったので、こんな活動は無かったよなあ。 一学年200人以上いたからやってたら収拾がつかなかったであろう。田舎の学校のメリットか。

保護者もこの小学校の卒業生が多く、なかば同窓会感覚。外様の私はちょっと疎外感。

_ [Ruby]1.8.0御礼

まだ正式リリースになっていないので、少々気が早いのですが、 1.8.0の開発に直接、間接を問わず協力してくださったすべての方に感謝します。

具体的な名前を挙げることはしませんが(「私の名前がないっ」と気にする方が出ないよう)、 バグを見つけてくださった方、パッチを送ってくださった方、コミッターの皆さん、 ドキュメントを書いてくださっている方、その他すべての皆さんに感謝の気持ちを送ります。

ありがとうございます

ささやかですが、1.8.0が正式リリースされました暁にはご笑納くださいませ。


2003年07月25日 [長年日記]

_ [Ruby]お中元

私もRubyを作りはじめて10年、ときどきイヤなこともありましたが、 基本的に楽しいので続けてこられました。Rubyが広く使われるようになって、 「使っています」、「最近勉強を始めました」などと言われることも増えましたし、 海外を含めたくさんの人から「すばらしい言語をありがとう」とも言われました。

それはそれで満足していたのですが、 今日になってgreenteaさんから お中元が届きました。驚きです。

長生きはするもんです。ありがとうございました。

追記: greeneaさんの名前が間違ってました(nが落ちてた)。どうもすいません。

追記2: ああっ、だからgreenteaさんだってば。

_ [OSS]セキュリティ甲子園

以前も話題にした経済省による「セキュリティ甲子園」だが、 インターネットWatchの記事によると

 しかし開催発表後、セキュリティ技術の不正利用の側面を強調した理解や、犯罪の誘発を懸念する受け止め方がなされるなど、イベント実施に対して懸念が存在する状況であると主催者側が判断。これに対して、「本来の趣旨について誤解が生じかねない状況のまま競技会を開催することは、高校生等を対象とすることに鑑みても望ましくない」との判断に至り、開催の1年間延長を決定したという。

ということで延期が決定したらしい。

いろんな意味で期待していた身としてはちょっと残念。しかし、告知には

来年度の実施に当たっては、例えば、与えられた制約条件の中で最高の性能を発揮するプログラムをオープンソースで開発するコンテストなど、技術の悪用が強調されにくいような形で若く有為な才能を発掘するスキームとなるよう、政府・大学・研究機関・民間の専門家による検討を改めて行っていくことと致します。

とあるので、むしろ良い方向への変化が期待できる。1年後を楽しみにしたい。

しかし、経済省、最近フットワークが軽いな。良いことだ。


2003年07月26日 [長年日記]

_ [言語]Water

CNET Japanの記事によれば、 アメリカの新興企業ClearMethodsが XML処理用プログラミング言語である「Water」を発表したとある。 正確にはWaterの新処理系Steam*1が発表されたということのようだ。

昨年、LL2に参加した時にClearMethodsの人たちに会った。Waterは

  • XMLベースの文法
  • オブジェクト指向
  • 拡張可能な言語仕様

が素晴らしく、XMLプログラマはXMLの文法だけですべてが処理できる、のだそうだ。 書籍の出版も決まっているそうだ(Addisonだったかな。もう出た頃か)。

私が会った人は(もう名前忘れちゃったけど、たぶんCEOのMichael Plushc)、 もう典型的なアメリカのベンチャー系ビジネスマンって印象で、 Rubyの開発者ってことでつかまっちゃったんだけど、 「うちの言語は素晴らしい」とか 「日本でビジネス展開したいから(NaClと)提携したい」とか、 「でなかったら、誰か紹介してくれ」とか、 押しが強くて勘弁してって感じ。

なんとなく「Xiとどこが違うの」などと思ったけど、なにも言わないでいた。

で、プログラミング言語としてのWaterについてだが、正直あまり関心が持てなかった。 理由は、なにより「XML文法の言語が正しいアプローチとは思えない」という点が大きい。

もちろん、eRubyの嬉しさから類推して、

  • XMLの中に動的な処理を埋め込める
  • XMLから浮き上がらない

言語が嬉しい局面はあるだろうなとは思うが、

  • そういう局面は限定的
  • 逆にロジックがXMLの中に埋没しそう
  • なによりXML文法ではコードが気軽に書けない

ということで魅力を感じない。

あと、

  • フリーの処理系がないので簡単に試せない
  • 45日間のお試し処理系はあるけどそれでは十分でない
  • 処理系はJava Runtimeがないと動かない

というような点も私としては障害になる。

結局、LL2でのDan Sugalski(Parrot開発者)の発言、

フリーの処理系のない言語はだめ。
LL1で発表があったCurlのこと、今年は聞かないじゃないか。

に私も同意してしまう(Curlがどうなったかよくわからないんだけど)。

まあ、考えてみれば、言語関係のビジネスは死屍累々で、 生き残ってるのはマイクロソフトとボーランドだけ(いや、ボーランドはもう言語屋じゃないか)。 よっぽどのことがない限り、あるいはよっぽどのことがあっても、手を出すもんじゃない。

教訓: 言語はビジネスにならない

教訓2: 言語設計者の生活は厳しい

*1 しかし、Steamだからといって温泉マークってのはどうかと思う

_ [機械]CD-ROMドライブ

ひさしぶりにCD-ROMを読もうと思ってドライブに入れるとディスクの回転が途中で止まってしまう。 どうやらドライブがおかしいらしい。故障か。

まだ1年はたっていないと思うのだが、保証書あったかな。


2003年07月27日 [長年日記]

_ [教会]松江

もうしばらくは松江に出席できる。今日は人数もまあまあ。 しばらく顔を見てなかった人も何人か来ていらっしゃる。

先日バプテスマを受けた人の按手礼があった。

_ [言語]PHP

PHPってのは大層人気がある言語だ。最近よく聞かれるキーワードであるLAMP、

  • L - Linux(OS)
  • A - Apache(Webサーバ)
  • M - MySQL (DBMS、ここがPになってPostgreSQLを指すことも)
  • P - Perl, Python, PHP(スクリプト言語、ここがRになることはまだない)

の末尾のPはもはやPerlでなくPHPを指すことの方が多いようだ。

しかし、言語屋あるいは言語設計者の目から見ると、なぜこの言語が人気があるのかがわからない。 しかし、なにが原因でないかは分かる。

  • 言語仕様ではない

    PHPの言語仕様ってのはCに似てるってのはよく言われるけど、 実際にはPerlをより悪くしたような仕様だ。 この言語仕様が優れているからPHPを使うって人がいたら、その人は変人だ。

  • 性能ではない

    最近になって性能はずいぶん向上したみたいだけど、ながらくPHPの性能はひどいものだった。 しかし、性能がひどい頃からそれなりに人気があったと思う。 ということは、性能が良いからPHPが選ばれたわけではない。

となると考えられるのは以下のふたつだ。

  • ライブラリ

    PHPの添付ライブラリは盛り沢山だ。 もしかしたら、インストールしたら欲しいものが全部あるっていうのは人気の原因かもしれない。 しかし、このライブラリのできが良いかというと、 かならずしもそうではないようだ。たとえばデータベース関係のライブラリの仕様はばらばらな上に、 DBI相当も存在しない。もっともPEARっていうライブラリ集ががんばっているらしい。

  • コミュニティ

    いや、PHPコミュニティについてはなにも知らないのだけど、 コミュニティは言語の魅力の重要な要素である。 もしかしたら、PHPコミュニティは素晴らしいのかも知れない。

というわけで、引き続き「PHPの魅力」については研究の余地があると考えている。


2003年07月28日 [長年日記]

_ [機械]CD-ROMドライブ(その2)

やはり複数の環境で動作確認しないと故障と断言してはいかんだろう、と思い、 本当に久しぶりにWindowsをブートしてみた。何ヶ月ぶりだろう。

すると動くではないか、なんと、悪いのはドライバであったか。

じゃあ、カーネルをupgradeしたときにドライバにバグが混入したのだろうな、 しかたないなあ、と思って普段の環境に戻したのだが、なんと

動くではないか

こういうリセットすれば動くとかいう「マジック」な対応は好きじゃないんだが。 「コンピュータの機嫌が悪くなったのでリセット」ではまるで素人ではないか。

ところで、久しぶりに使ったWindowsはやっぱり使いにくいOSであった。 どうも私とは相性が悪いみたい。慣れてないってことだとは思うんだけど。

_ [言語]PHP(その2)

PHPについて書いたら、いくつか反応をいただけた。ありがたい。

トラックバックしていただいたishinaoさんのものが 一番詳細のようだ。

まとめるとPHPの良い点というのは

  1. HTMLに埋め込める
  2. DBアクセスライブラリが標準
  3. Apacheモジュールのできが良い
  4. ドキュメントのできが良い

というあたりだろうか。(1),(2)あたりはRubyでもeRubyやDBI/Rubyで対応できているのだが、 標準というところが大きいのだろうか。Rubyも1.8.1あたりではDBI/Rubyを標準添付にしようか。

ところで、「オブジェクト指向でないから」という意見をいただいたが、 これは理解できない。理解できないだけで否定するわけではないが。

PHPにもオブジェクト指向機能があることを考えると、 この意見の意味は「純粋オブジェクト指向言語でないから」という意味だと思うのだが、 私自身はその方が良いと思ったことは一度もない(まあ、Rubyの作者としては当たり前なんだけど)。 世の中にはそうでない方が良いと感じる人もいるらしいことは前から知っているけれども、 それがなぜなのかはまだ知らない。実に興味深い。

ところで、世の中のプログラミング言語には

  • 悪口や愚痴しか聞かないけど、よく使われるもの
  • ほめる人とけなす人の両方がいるもの
  • もっぱらほめる人が多いもの

がある。Perl、PHPやC++は最初のもののような気がする。 「よく使われる」ってところが重要で、これがないと「消え行く言語」になってしまう。 2番目の典型例はLispかな。 RubyやPythonは3番目かなあ。 言語のどのような特徴がこれらを引き起こしているかも今後ぜひ考察していきたい。

追記: Pythonはちょっと2番目入ってるかも。 そういえば、OSCONのDave ThomasのRuby in a Dayチュートリアルの最中にGuido van Rossumが登場して、

Rubyコミュニティの連中はPythonについて誤解を広めている

と文句したそうだ。心当たりはないんだけど。でも、その場に居合わせたかったなあ。 どう考えても、見ものだったはず。

_ [言語]「悪口しか聞かない割によく使われる」

頻繁に使われるからこそ欠点も見えてくる」 というのはもっともで、その辺を意識して

「よく使われる」ってところが重要

って書いたわけです。だから私は「悪口しか聞かない割によく使われる」とは思ってません。

しかし、

  • 悪口を言いたくなるのにやっぱり使う心理
  • 悪く言われる言語の欠点は無くすことができるか
  • 悪口を言いたくならないようなよく使われる言語が存在できるか

などには興味があります。


2003年07月29日 [長年日記]

_ [OOP]オブジェクト指向は難しい

昨日、オブジェクト指向の部分でつまづいていますというツッコミをいただきました。 人によって「オブジェクト指向」のつまづき方はそれぞれだと思うので、 誰にでも分かるという説明は実は困難なのですが、最初のきっかけになる解説を試みようと思います。 これより先は書籍なりを参照してください。

Rubyで最小限覚えないといけないオブジェクト指向の基本概念は以下の通りだと思います。

  • 「値」はすべて「オブジェクト」と呼ぶ
  • 「オブジェクト」の「メソッド」を呼べる。「オブジェクト」は「メソッド」が呼ばれると自分に合わせた処理を行う。
  • 「オブジェクト」は「クラス」に所属する。
  • 「オブジェクト」が持つ「メソッド」は(原則的に)その所属する「クラス」で決まる。

ね、そんなに難しくないでしょ。

あと、ドキュメントを読むために「継承」を理解した方が良いかもしれません。

  • 「クラス」は親となるクラスである「スーパークラス」を持つ。
  • ある「クラス」に所属する「オブジェクト」が持つ「メソッド」は、そのクラスで定義されたものと、スーパークラスで定義されたものを(先祖までさかのぼって)合わせたものだ。

それからRubyにはMix-inがありますから、これも押さえておきましょう。

  • 「メソッド」などをまとめる単位として「モジュール」がある
  • 「クラス」は「モジュール」をincludeできる(これをMix-inと呼ぶ)
  • includeされた「モジュール」の「メソッド」は「スーパークラス」同様、「クラス」に受け継がれる

ですから、文字列のクラスであるStringクラスには、長さを求めるsizeメソッドなどが定義されており、 スーパークラスであるObjectクラスから引き継いだobject_idメソッドなども持ちます。

さて、ではオブジェクト指向のメリットはなにか、ということですが、大きく分けると

  • オブジェクトが自分に合わせた処理を選ぶので、プログラマが選択する必要がない。つまり、 自分で値と処理の適切な組み合わせを選ぶ

    str = "abc"
    string_size(str) #=>3
    ary = [1, 2, 3, 4]
    array_size(ary)  #=>4
    string_size(ary) #=> error!!

    という「非オブジェクト指向」と、言語が勝手に選択してくれる

    str = "abc"
    str.size         #=>3
    ary = [1, 2, 3, 4]
    ary.size         #=>4

    という「オブジェクト指向」の嬉しさの違いです。

  • 機能がクラス単位で整理されるので理解しやすい。 つまり、Perlのリファレンスマニュアルのように数百の関数がフラットに並ぶのと比べると、 Rubyのリファレンスマニュアルのように文字列の機能はStringクラスに、 すべてのオブジェクトに共通の機能はObjectクラスに分類されている方が、 整理されていると感じられます。
  • 継承によって機能の拡張が行いやすい(時がある)。 つまり、既存のクラスとほとんど機能が同じだが微妙に違うクラスを作りたい時には、 既存のクラスを継承して、微妙に違う部分だけ追加したり、書き換えたりするだけで、 新しいクラスを作れるというもの。これを「差分プログラミング」と呼ぶ。

「差分プログラミング」はさほど重要ではないのですが、 オブジェクト指向を解説した書籍では必要以上に強調される傾向があります。

まあ、最初の一歩としてはこんなもんでしょうか。


2003年07月30日 [長年日記]

_ [OOP]オブジェクト指向は難しい(その2)

昨日の「オブジェクト指向は難しい」について、 ツッコミ、リンク、Trackbackなどいろいろな反応をいただく。

で、考えたのが、「オブジェクト指向が難しいと思われる原因は、難しいというイメージそのもの」ではないかと。

「オブジェクト指向」のもっとも重要な概念は通常のプログラミングにも登場している。 たとえば、Cで

FILE *f = fopen(path, "r");

という呼び出しは「pathにあるファイルをオープンして、ファイルオブジェクトを得る」という処理そのものだ。 別にオブジェクト指向は必要ない。CのFILE*にはfprintf()やfclose()などのいくつかの「メソッド」がある。

つまり、通常の非オブジェクト指向言語におけるプログラミングでも、 「オブジェクト」という概念は存在していて、無意識のうちに使っているはずなのだ。 このことは別に目新しいことでもなんでもない。K&Rにも「オブジェクト」という用語が使われている。

もっとも多くの言語には「オブジェクト」でない「値」もある。 またCの例を出すと、構造体はオブジェクトではない。代入によってコピーが発生するからだ。 BASICの文字列もオブジェクトではない。

だから、オブジェクトな値(リファレンスあるいはポインタ値)とオブジェクトでない値が混在している言語より、 すべての値がオブジェクトであるRubyのようなオブジェクト指向言語の方が覚えることは少ないはずだ。

ほら、やっぱり「オブジェクト指向は難しくない」。

ただ、問題が残っている。ひとつは従来型プログラミングしか学んでいない人にとっては、 「単なる値」という考え方の方になじんでおり、リファレンスの方は十分に理解されていないらしいのだ。 世の中に「ポインタ解説本」が登場する理由でもある。 つまり、ふたつの考えのうち、ひとつが消えて単純になったはずなのに、残ったのは苦手な方だったと。

なんて不幸な。

やはり、早いうちにLispやRubyやPythonなど、「すべての値がオブジェクト」型の言語を身に付けておくべきではないかと。逆よりも幸福になれそうだ。

オブジェクト指向で2番目に重要な概念も通常のプログラミングに登場している。 2番目に重要な概念とは「動的結合」あるいは「多態(ポリモルフィズム)」である。

harukiさんのツッコミにもあるように、 非オブジェクト指向言語にも引数のデータ型に応じて適宜処理を行ってくれる関数があるものもある。 私が知っているのはLispだが、BASICなどもにあったような気がする。 オブジェクト指向言語と呼ばれるものは、そのような手続きを自分で定義できるようになっただけだ。

ほら、やっぱり「オブジェクト指向は難しくない」。

「多態」を理解していれば「継承」も難しくないはずだ。 現実世界にも結構ある関係だし。

もっとも、あまりに現実世界のモデルにこだわりすぎて(「ほ乳類」と「犬」とか)、 実際のプログラミングにどう使ったらよいのかわからないという点はあるかもしれない。 「差分プログラミング」同様、オブジェクト指向解説書の罪と呼べるかもしれない。 『オブジェクト指向スクリプト言語Ruby』では、私も同じ罪を犯しているけど。

ただ、Rubyのようなオブジェクト指向言語を使っていてもっとも困る点は、 ドキュメントを探すのが面倒という点だ。

あるオブジェクトのメソッドについて知りたい時、

  • そのオブジェクトのクラスを調べ
  • そのクラスのドキュメントを読み
  • なければスーパークラスを調べ
  • 見つかるまでObjectクラスまでさかのぼり
  • まだなければincludeされているモジュールを順に探す

という手順を踏まなければならない。はっきりいって苦痛だ。なんらかの支援が必要だ*1

Eiffelにはshortとかflatとかいうツールがあり、前者はクラスの仕様だけを抽出し、後者はクラスの継承関係を展開してくれる。これでドキュメントを探し回る苦痛が軽減される。

Rubyにはriとかrefeとかいうツールがあり、ドキュメントを検索してくれる 人間が自分で探すことを比べれば、はるかに楽だ。

%ri each
The method named `each' is not unique among Ruby's classes and modules:
     Array#each, Dir#each, Hash#each, IO#each, Range#each, String#each,
     Struct#each 
%ri each Array#each
------------------------------------------------------------- Array#each
     arr.each {| item | block } -> arr
------------------------------------------------------------------------
     Calls block once for each element in arr, passing that element as a
     parameter.
        a = [ "a", "b", "c" ]
        a.each {|x| print x, " -- " }
     produces:
        a -- b -- c --


%refe each_line
IO#each_line String#each_line StringIO#each_line
% refe IO#each_line
IO#each_line
--- each([rs]) {|line| ... }
--- each_line([rs]) {|line| ... }

    IO ポートから 1 行ずつ読み込んで繰り返すイテレータ。IO ポートはリー
    ドモードでオープンされている必要があります(open参
    照)。

    行の区切りは引数 rs で指定した文字列になります。rs の
    デフォルト値はシステム変数 $/ の値です。

    rs に nil を指定すると行区切りなしとみなします。
    空文字列 "" を指定すると連続する改行を行の区切りとみなします
    (パラグラフモード)。

    self を返します。

*1 しまった。これは来月のLinux Magazineの記事のネタだった。発売前に書いてしまった

_ [生活]大当たり

会社から帰宅する時、かなりくたびれていたせいか、自宅直前で 対向車をよけようとして、ガードレールに車をぶつけてしまった。 左後ろのドア周辺にかなり大きな傷がついた。ショック、がっかり。

元々打たれ弱い人間なので、失敗するとかなり落ち込んでしまう。

暗い気持ちで自宅にたどりつくと、心当たりのない荷物が届いている。

なになにNTT-X? これってgooやってるところだよね。

手紙が入っていた。

まつもとゆきひろ様

この度は「gooユーザアンケート」にて、ご協力をいただきまして誠にありがとうございます。

厳正なる抽選の結果「Sonyバイオ」が当選しましたので、送付させていただきました。 今後も、ポータルサイトgooをよろしくお願いします。

草々

なんと、そんなアンケートに答えたことも忘れていたが、VAIO U101当選だそうだ。

びっくり。今まで長いこと生きてきて懸賞なんて当たったことがないのに。 良いことと悪いことが同時に来たのでかなり混乱している。

さて、このVAIO U101をどうしたものか。 今のマシンより速いCPUと大容量のディスクを積んでるんだよな。 こんなに小さいのに。

でも、日常使うにはキーボード小さすぎるんだよな。 少々贅沢な悩み。


2003年07月31日 [長年日記]

_ [機械]VAIO U101

新しいオモチャ。

とりあえずLinuxがインストールできるかどうかも分からないので、 しばらくWinXPのまま使っている。 といっても、とても使い物にならないキーボードなので、 Webを見たりとかそれくらい。

無線LANの設定とかが分からず悩む。 MACアドレスはどうやって得るのかとか、 なぜ「接続不可」と言われるのかとか、 そう言われているのにインターネットにアクセスできるのはなぜとか。

ドキュメントはたくさんあって、いろいろ教えてくれるような気がするのだが、 勘が働かないせいもあって欲しい情報がどこにあるのか見つけることができない。

でも、とりあえず動かないソフトがない、できないことがない、というのは 嬉しいことなのかもしれない。

これからどうするか。

VMwareをインストールするか、Linuxに切り替えるか、Cygwinを入れるか、 家族のマシンにしてしまうか。


最新 追記