最新 追記

Matzにっき


2006年02月01日 [長年日記]

_ [本] 『4086301636』

4086302365

2巻まで読んだ時点であまりポジティブでない評価を書いた『よくわかる現代魔法』だ が、気になったので既刊5巻まで読んでみた。

  • 『4086301636』(1)
  • 『4086302365』(2)
  • 『4086302047』(3)
  • 『4086302217』(4)
  • 『4086302365』(5)

まあ、予想外の現れ方をする業界用語を楽しむという点では、「にやり」くらいしかで きないのだが、最後まで読んでみたらストーリーが予想外に面白かった。うーむ。

いや、最初は「私が書いた方が面白いのでは」などという不遜な考えが頭をよぎったのだが、やはりプロの仕事を甘く見てはいけない。

ちなみに面白かった用語。

  • 「コード」
  • 「ガーベージコレクター」
  • 「ゴーストスクリプト」
  • 「jini」
  • 「TIMTOWTDI」

全部、ちょっと(あるいは全然)違った意味に使われているのがミソ。あ、「TIMTOWTDI」だけは本来の意味のままか。タイトルにしか使われなかったけど。

なお、Rubyは登場しません、残念ながら。JavaやCやPerlは出るのに。

_ [言語] ActiveState To Spin Out

Spam分類技術のためにSophosに買収されたActiveStateが、本来の領域であるスクリプト 言語の技術をベンチャーファンドに買われて、 Sophosから独立した、という話。

いや、暗澹たる言語ビジネスに一条の光明って感じですな。 Sophosの傘下にいたときも Komodoを開発したりと頑張りつづけたのが評価されたに違いない。

うんうん、よかった、よかった。


2006年02月02日 [長年日記]

_ [OSS] Rast高速化パッチ

Thinkpad入院中に全文検索データベースを壊してしまった(FAT32ファイルシステムだっ たのがいけなかったのかなぁ)ので、再構築しようと思ったが、 morqにたまった15万通 のメールにインデックスを張ろうとすると、いつまでたっても処理が終わらない。

業を煮やしてRastメーリングリストに流れていた高速化パッチを当てた。すると、今ま で1通の処理に1秒くらいかかる上に、 syncのタイミングで数分から十数分も待たされ ていたのが、1通あたりの処理は数十倍、sync待ち時間を数秒で済むようになった。

すばらしい。

これくらいスケールしないと大量データは扱えないだろう。

_ [PC] レノボ、Core Duoを搭載したThinkPad X60 / T60を発表

あーあ、出ちゃったよ。X41より軽くてX32よりパワフルなのが。

Intel Core Duoだってさ。バッテリーが公称で4.5時間はちょっと短いかも。まあ、実際 にはそんなにバッテリーが必要なことは滅多に無いんだけど。でも、長いと飛行機の中 とかで安心して作業ができるよね。

しかし、今のX31で不満があるわけではないので、後1,2年はこれを愛用しようと思う。 それからその時点での最新あたりを購入すればよいよね。もう、日常生活に必要なCPUパ ワーは余ってるんだよね、きっと。

たぶん、それより前にディスク容量が足りなくなると思うが(今、40Gが80%)、 Thinkpad は簡単にディスク交換できるし。

ここまでCPUが高速になると、これからはCPUパワーを消費するために新しいアプリケー ションが必要になるのではないだろうか。たとえば、全文検索やインデクシング、自然 言語処理などが考えられるけど、本命はそんなに簡単に思いつかないものかもしれない 。

現代の言語屋はもともとCPUをあまり消費しないタイプの人間だしね。


2006年02月03日 [長年日記]

_ [Ruby] ruby_class削減

メソッド定義の対象となるクラスを指すruby_classと、定数参照の対象となるクラスを 指すruby_cbase(その実態はruby_cref)は、非常に似通っている。というか、このふたつ って本来は統一した方がわかりやすいんじゃないだろうか。きっとユーザーもそれを期 待してると思うし。

ということで、統一する。今回はruby_classを全削除して、 ruby_cbaseに置き換えるこ とにする。

で、思い立ったら30分で作業が終了してしまった。今まで10年以上これらスタック と格闘してきたのは一体なんだったんだろう。

というわけで、1.9ではスタックを3本削減。残るは以下の5本。

  • prot_tag
  • ruby_frame
  • ruby_scope
  • ruby_cref
  • ruby_dyna_vars

これらも手を入れる余地はありそうな気がする。たとえばprot_tagを一つ一つジャンプ しながらチェーンするのではなく、目的の場所までいっきにジャンプするとか。 ruby_dyna_varsをリンクではなく各レベルごとの配列にするとか。

_ [OSS] Rastが遅いわけ

昨日の高速化パッチは高速なんだけど、どうやらN-GramのインデックスになっているBDBの更新に問題があるようで、検索結果に大きな漏れがある。morqのようなタイプのメールリーダーでは検索以外にメールに到達する方法が無いので、漏れは致命的だ。

しばらくソースを眺めてみたが、かなり大規模な修正で、どこに問題があるのか発見することはできなかった。

しかたがない。このパッチは当面断念しよう。

で、パッチを当てる前のRastのソースを眺めてみる。とりあえず遅いのはsyncする部分のようなので、そのへんを重点的に。

まず、明示的なfflush(3)とBDBのsyncはおそらく不要なので外すことにする。 stdioの方はfseek(3)を呼んでいるのでそのタイミングでflushされているはずだし、 BDBの方も明示的にsyncする理由はなさそうだ。BDB自身に任せた方が賢いsyncをしてくれるだろう。

次にソースをよく読むと、データファイルの書き出しで、各N-Gramごとに fseek+fread+fwriteを繰り返している。

デバッガで実行してみると、 syncの遅さはどうやらここに由来しているようだ。プロファイラまで動かせると確実なんだが、 Rubyで書いてあるmorqからRast部分だけのプロファイルを取る良い方法を知らないのだ。

というわけで、できればここをページ単位での書き出しにしたいところ。

だが、なかなか良いアイディアが思いつかない。

いっそ、現在の「BDBによるインデックス+データファイル」という構成から「全部QDBM」にしてしまうってのはどうだろうか(QDBMS好き)。

Curiaを使えば、データ容量の問題もさほどではなさそうに思うし、素朴に要素ごとにfeek+read+writeするよりは、 (ページングしてるから)速度的にも、(圧縮してるから)容量的にも有利だと思うんだけど。

でも、確かRast設計段階でこのアイディアはボツにされたんだよな。ま、単なる「上司の思いつき」だったので、その時は強くは出なかったんだけど。自分が作業するわけじゃないから、当事者の意見の方が重要だしね。

でも、担当者が忙しい今のうちに、こっそり試してみるか*1

はっ、...もう2月か。原稿の〆切が近づいているぞ。もうちょっと先まで我慢したほう がよいか。

追記:

後でQDBMのソースを読んだら、DepotやCuriaはデータ圧縮してなかった。容量的な利点 は無いようだ。

*1  ここに書いたら全然「こっそり」じゃないなあ

_ 英会話

教会の宣教師による英会話を手伝ってくる。

今日は「英語によるスキット」。我々の班(6名)は、即興で「三匹の子豚」を演じたの だった。急だったわりには全員ノリノリだったという。

確かに結構楽しかった。

_

降ってきたよ。7時前に帰宅したときには降ってなかったのに、 7時10分に英会話に出発 しようとしたら、わずか20分ほどで地面が真っ白になっていた。

明日の温泉は大丈夫かな。寒い方が風情が出るけど。

そして、明日こそは安来苑の温泉に入ろう。古くからインターネット接続完備の温泉旅 館として(知る人には)知られている安来苑では過去数回宴会を行っているのだが、私は いずれもハックに熱中していて、温泉に入りそこねているのだ。

明日こそは。明日の「Ruby温泉ミーティング」こそは。

_ コンピュータは難しすぎて使えない

今日になってからFirefoxを始めとするいろいろなプログラムが起動に失敗して coredumpするようになる。どうもフォントに問題があるらしい、と気がつくまでずいぶんかかった。

strace付きでFirefoxを起動して、フォントファイルの読み込みあたりで落ちていることでようやくわかった。その後、fc-cacheも落ちるので、これもstrace付きで実行させ、原因がttf-arabeyesというTrueTypeフォントであることを突き止めた。

そういえば何日か前にdselectでチェックを入れたような気がする。

もともと不要だったので、さくっと削除。やっと通常通りに動作するようになった。しかし、こんな問題が起きるようでは、まだまだ「コンピュータは難しすぎて使えない」ものだよなあ。普通の人がこんな問題に直面したら、対処しようがないじゃん。

答え: 「普通の人」はDebianを使いません。

ま、それは冗談としても。うちの妻のマシン(OSS貢献者賞でもらった日立のPrius)は、ネットワークが接続しているのに、「サーバーが見当たりません」というエラーをしばしば出す。どうやら、DNSがおかしいように思うのだが、ネットワークの仕組みはわかっていても、 Windows XPの仕組みがわからないので直しようがない。ネットワークの「修復」を行うと再接続をして、一時的には状況は改善するのだが、すぐに再発してしまう。

Debianでそんな問題起きたことがない(あるいは問題と意識する前に復旧できる)んだけどなあ。


2006年02月04日 [長年日記]

_ 参観日

午前中、長女の中学校の参観日だということで参加する。

普通の授業ではなく、ホームルームのような感じ。人権とか同和とか書いてあったので、どんな授業をするのか、と思ったが、その実態は一言で言うと「欠点も見ようで長所になる」というようなものか。

こういう活動をリフレーミングというらしい。このフレームは「フレーム問題」のフレームだな、きっと。

で、資料としてリフレーミング辞書なる紙が配られた。「頑固」が「自分の意見をしっかり持っている」などとポジティブに言い換えられた単語が並んでいる。これに基づいて生徒たちが自分と同じ班の人たちの「良い点」を探していた。なかなか興味深い活動ではある。私が中学生のころはこんな活動絶対にしなかったよなあ。

このリフレーミング辞書を逆方向に写像すると「悪口製造機」になるのは、思っていてもやってはいけないことなのだろう。

_ 『コンピュータ技術者になるには』

で、途中通りかかった中学校の図書コーナーには、さまざまな職業に対して『〜になるには』という書籍が並んでいた。若いうちからいろいろな職業になることを考えるのは良いことだ。私でも事情がわかる業界について何冊か眺めてみる。

『コンピュータ技術者になるには』という書籍では、結局は「コンピュータを好きなこと」くらいしか書いてないのだが、いろいろな会社の技術者にインタビューをしていて、コンピュータ技術者の生活実態がわかるのは良いことかもしれない。

ただ、取り上げられている会社が「コンパック」(HPに買収された)、「ロータス」(IBMに...)など、今は無き会社ばかりなのが、時代の移り変わりの速さを感じさせる。

『ウェブデザイナーになるには』という本では、 (株)オン・ザ・エッヂ社長の堀江貴文さんの写真が長髪で微笑んでいた。これも時代の移り変わりを感じさせる。

_ [Ruby] Ruby温泉ミーティング2006春

安来苑で開かれたRuby温泉ミーティング2006春に参加してきた。

4時からチェックインということで、4時すぎに会場に到着。さっそく温泉に入る。こ の旅館には何度も来ているのだが、そのたびにハックしてたり、話し込んだりしていて 、入浴したことがないのだ。今回こそは。

堪能した。

末娘が生まれてからはなかなか温泉に行く機会もなくて(歩いていけるのに)、久しぶり な気がする。

その後、食事と宴会。それぞれの料理には小さな鍋がついていた。私はカモ鍋だったの だが、苦手な食材(特に名を秘す)が入っていたため、イノシシ鍋と交代してもらう。

あとはあちこちで話し合いを進めたり、雑談したり。剣神ドラゴンクエストのプレイが 行われたり。

その後、サイボウズラボの竹迫さんが(主に)リクルーティングのプレゼン。いや、気前 のいい親会社があると違うなあ。負けじと(株)ネットワーク応用通信研究所の発表も行 われたが、施設や資本で見劣りがするのは否めない。温泉や豊かな環境やRuby三昧な仕 事は提供できるけど。

あと、私や前田くんやかずひこくんと仕事ができます、とか。うれしい人はかなり限定 されそうだけど。

それから、松江だけでなく東京でも募集しているので、生越さんや、ゆうぞうさんとも 仕事ができます。これも、うれしい人は限定されそうだけど。

さて、その他、目についたことを箇条書きに

  • Rubyリファレンスマニュアル改善計画。 題して「もうマニュアルが劣っているとは言わせない」計画。 ...嘘です。今、私が勝手に命名しました。
  • 本家高橋メソッドスライド作成実況。 「今、我々は歴史を目撃した」。 今回はOpenOffice.orgで結構苦労して作ってました。
  • classboxのアイディア初公開。 初めて口に出して説明しました(でも聞いたのは二人だけ)。
  • 1.9改善計画。
    • I18Nは早々に入れる。

      でも、まだこなれてないところがたくさんあるからなあ。一番気になるのはMarshalのフォーマットだがすっきり「非互換で構わない」という結論が。その他、正規表現の連携、文字コード変換・推測などもあるのだが、その辺も含めて1.9に取り込んで試すことに。

    • gcは入れない。

      いろいろやってみたが、今よりも劇的に性能を改善できるものは無いため。

    • 2/14にはCVSリポジトリにYARVブランチを取り込む。

      でも、ささだくんが酔った上での発言だったらしいぞ。

個人的には非常に楽しかった。他の皆さんも参加を後悔しないくらい楽しんでいただけただろうか。


2006年02月05日 [長年日記]

_ [教会] 断食安息日

のどかな日曜日。聖餐会ではいろいろな人の経験をうかがった。知らなかったけどびっくりするような経験をしている人とか、ちょっといい話とか。

私も最後に短い証詞をした。

そういえば今月は話者が全員男性だったな。


2006年02月06日 [長年日記]

_ [原稿] 日経Linuxとオープンソースマガジン 2006年4月号

温泉ミーティングなどですこし取り掛かりが遅くなったが、原稿を書きはじめる。今月の〆切は8日。

オープンソースマガジンのテーマはオープンソースライセンス。 GPLv3のドラフトが発表されたので、それを枕にいろんなライセンスの話を。でも、GPLv3の個別の内容までには触れていない。どちらかというと以前この日記に書いたフリーソフトウェアライセンス診断のような感じか。

日経Linuxの方は多重継承。なんか最近多重継承への否定的な意見を何度か見かけたのがきっかけ。どうもいろいろ誤解があるようで、しかも、その一部は自分がきっかけになっているような気がする。 Mix-inを持ち上げるために素の多重継承の危険性を述べたら、それを根拠に多重継承一般が否定されたり。

日経の連載では以前にも継承について扱ったことがあったが、もう一度解説することにする。

_ [原稿] るびま 13号

そういえば、今日がるびま 13号の〆切であった。

今月の言語探訪はDylan。Apple Computerが設計した動的言語である。これが非常に面白い。広まらなかったのが残念だ。

なんか、ヘンな言語ばっかり紹介してるな。


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

_ [原稿] 日経Linux

「オープンソースマガジン」と「るびま」はほぼ完了。「るびま」の原稿はshiroさんからチェックをもらって、事実誤認に気がつく。公開前に気づいてよかった。

それに対して「日経Linux」は難産である。分量が多い(OSMは2ページ、るびまも紙なら2ページくらいなのに対して、日経Linuxは8ページ) のもあるが、内容が難しい。編集の人からも「やや難しめなのでもうちょっとやさしく」と注文を受けたばかりというのに。

で、例によって泥縄ではあるが、改めて継承について勉強する。 Webを見ると、私が『オブジェクト指向スクリプト言語』に書いた言葉が独り歩きしているのを発見する。

古い番組の言葉を借りれば「継承は最後の武器だ」ということでしょうか。

これをもって、私が継承を使わないようにと言っているかのように読んだページ(たいていは古いものだが)いくつもあった。実際にはそのすぐ後には

結局は使うんですけど。:-)

とあるのは無視らしい。また、

...無理して継承を使う必要はありません。 is a 関係に対してだけ継承を使うべきでしょう。継承関係はスーパークラスの内部構造にまでアクセスできる依存度の高い関係であることを忘れないでください。

とも書いたんだけどなあ。

あと、多重継承についても否定的に書いたように読まれている。古い文章ではあるが、ちゃんと読んでもらうってのは難しいなあ。

_ 日本国民全員にプログラマになってほしい

Windowsの新しいプラットフォームについて語る、マイクロソフト執行役 デベロッパー&プラットフォーム統括本部長の鈴木 協一郎氏。

−マイクロソフトはVisual Studio Express Editionを,1年間の限定ながら無償配布しました。その目的はどこにあるのでしょうか。

私は日本国民全員にプログラマになってほしいと考えています。今以上にソフトウエア開発業界が発展するために,新しい才能がこの業界に入ってきてほしいと思っています。少しでもソフトウエア開発に興味を持っている人たちに対して道具を無償提供することで,この分野に入ってくるきっかけを作りたいと考えています。

私も国民全員がプログラマになってほしいと思っている。 Visual Studio Express Editionの無償提供がどれくらい有効かはわからないけど。


2006年02月08日 [長年日記]

_ 妻の誕生日

である。同い年になった。

原稿が忙しくてなかなかよくしてやれないが、なんとか時間をとって贈り物を購入。

日ごろの感謝の気持ちを伝えたい。贈り物の選定がちょっと安直だったかもしれないが。

おめでとう。

_ [OSS] 日本政府はさっさとオープンソース振興から手を引いてしまえ

VA Linuxの佐渡さんのインタビュー。「オープンソースから手を引け」ではなく、「オープンソース振興から手を引け」というのが肝。

あいかわらずセンセーショナルな引用のされ方をする発言の佐渡さんだが、あれって狙ってやってるのかな。計算してやってそうな気がするけど、素ならそれはそれですごいことだ。

要旨としては「オープンソースはもう当たり前になりつつあるから、わざわざ振興する必要はない。むしろ、官に依存する体質を生むからよくない。支援は違う形で」ということだと思う。

まあ、官による支援は「ばらまき型」になりがちで、それでは自助自立が成立しないということについてはわからないでもない。「官がやるべきこと」、「民間に任せること」についてもっと深い議論が進むことを望む。

ここで私自身が「こうあるべきだ」と言えればかっこいいんだけど、そこまでの見識はないんだよなあ。

「スタートアップが大変だから、そこはなんらかの支援があった方が良い」、「経済的支援危険は限定されるべきだが、死んでしまうプロジェクトが多いから、プロジェクト継続支援も必要」くらいは考えつくけど、それって官がやるべきなのか、どうか。現時点では民間にはそんな余裕はないのも事実だけれども。

追記

ミラクルのよしおかさんが、この件について論じておられる。その続きである「OSSにとってどのような支援策が必要とされているか」についてもぜひ読みたい。

_ [OSS] 良書

以下の二冊は私の宝物である。

  • 『オブジェクト指向入門(Bertrand Meyer)』
  • 『Common Lispオブジェクトシステム - CLOSとその周辺 -』 bit 1989年1月号別冊

今回改めて見返してみると、内容が全く古びていない。前者はまだ入手可能なようだが、後者は雑誌の別冊なだけに入手困難だろう。 bit誌そのものが休刊だし。

復刊ドットコムで頼んでなんとかなるものだろうか。

あと、

  • 『オブジェクト指向のプログラミング(Brad Cox)』

もお薦めなんだが、これは出版社(トッパン)そのものが手を引いてるしな。


2006年02月09日 [長年日記]

_ デベロッパーズサミット

朝から雪であった。っていうか、雪国でもないのに一晩に20cmも降るのはやめてほしい。

気まぐれから二便を予約していたのだが、どうも夕べの東京→出雲便の最終が欠航だったらしく、帰りとなる始発もまた欠航が決まっていた。うむ、ラッキーである。渋滞が心配なので珍しく高速を使う。500円。

空港についたらキャンセル待ちの人が40人くらいいるそうな。 MD-87ではそんなに待たれても乗れないだろう。ちっちゃい飛行機だしな。

東京は曇り。暖かい。同じ国とは思えない。

のんびりとデブサミ会場に向かっていたらずいぶん遅くなってしまう。ずいぶん場違いな会場だな。

会場についてから知人と話す。オライリーの人とか、アスキーの人とか、日本Rubyの会の人とか、Sunユーザー会の人とか。田舎に住んでるわりには知人が多いな。

あと、高橋さんのセッションに出る。銀座で新調したというジャケットが素敵。レポートはこちら。

で、私も参加するパネル「飛び込め! オープンソースプロジェクト」。プロジェクト運営とか、参加のコツとかそういう話。パネラがLinuxカーネルよりのせいか、そういう話が多かった。カーネルメーリングリストとか恐そうだよな。私はコメンテーターというよくわからない立場なので、気が向いた時に適当なことをしゃべったのだが、お客さんには満足していただけたのだろうか。ちょっと不安なものが。

懇親会後、宿へ。大浴場に入って、露天につかって、マッサージチェアに座って、すっかりくつろいだが、原稿書きが待っているのだった。

〆切は延ばしてもらった。「〆切を守る」が今年の目標なんだけどなあ。二ヶ月続けて延ばしてもらってる。昨年はもっとずっとマシだったのに。


2006年02月10日 [長年日記]

_ デブサミ2日目

今日はやることはないので、会場をふらふらと。後はRubyの会のブースや講師控室で原稿書いてた。

完了しないまま時間切れ。松江へ。

_ 「サミット」

summitを辞書で引くと以下の通り。

summit
いただき, 頂上; 絶頂, 極点, 極致; 首脳級; 首脳会談[外交], サミット.

頂上って意味なんだから、「developers' summit」では頂点級の開発者がともに集い、開発について語り合うイベントであるべきではないのだろうか。 Linux Kernel Developers' Summitはそんな感じだよね。招待されないと出席できないし。

今回のデブサミは名の知れた講師から話は聞けるけど、講師同士の交流ってのはそれほどでもない。ま、そんなイベントに(商業的に)どんな意味がって気もするけど。

「講師同士の交流」といえば、JAOOが思い出される。これは講師同士の交流を主目的としたイベントではないのだけれど、いつも良い雰囲気があり、結果的にコネクションを広げることができるすばらしいイベントである。出席した講師からの評判もおおむね良いようだ。私は二度しか参加したことはないけれども、招待してもらえさえすれば何度でも行きたい。

そういえばDHHとはじめて会ったのもJAOOだった。当時彼は学生でまだRubyを使ってなかったけど。

ということで、サミットを名乗る以上、来年のデブサミではそういうことも(すこしは)考慮したらいいんじゃないかな。主眼にする必要はないだろうけど。


2006年02月11日 建国記念の日 [長年日記]

_ 実家へ

早朝までかかって日経Linuxの原稿を仕上げた。で、午前中には送信。今度は届くはず。

B0009MUDUG

昼からは米子の実家へ。ひさしぶりにのんびりとした時間を過ごした。普段は他の兄弟の家族もいっしょなので、楽しいが、ややにぎやかすぎ。というか、子供が多いと子守りばかりになるしねえ。

今回はやや静かだった。いや、親族で一番手がかかる末娘は健在なのだが。

昼食後は、母親お薦めの『皇帝ペンギン』を鑑賞。 ..のはずだったが、ほぼ徹夜の私は寝入ってしまう。息子は結構感動していた。後でいろいろ教えてくれた。

「ペンギンは20日間も歩きつづけるんだよ」とか、「アザラシはペンギンを食べちゃうんだ」とか、「母親ペンギンが食われちゃうと、自動的にヒナも死んでしまう」とか。

自然の厳しさを感じる。

_ 『i』

母親が新車を買っていた。三菱の『i』だ。

後ろからみると『R2』に、前からみると『Smart』に似てるような。フロントノーズが極端に短い。「まるでエンジンがないみたいだ」と思ったら、ほんとにエンジンがなかった。リアエンジンとは驚いた。

あとはキーレスエントリがものめずらしかった。鍵持ってないとエンジンがかからないのね。


2006年02月12日 [長年日記]

_ [教会] 松江

この日記はいつも書くのが遅れちゃうわけだが、何日か経つとその日何があったのかすっかり忘れちゃうことがたまにある。

この日がそんな日だ。

教会に行って、ごく普通の日曜日の活動をしたことは覚えているけど、この日何か特別なことがあったかどうかあまり覚えていない。

ちゃんと書け、ということか。

_ バリアフリー

それでも覚えていることがないわけじゃない。

来週バプテスマ(洗礼)会があるのだが、受ける方はちょっと足に不自由がある方だ。でもって、20年以上前に建てられたこの教会はあまりバリアフリーのことを考えていないので、足が不自由な人にはちょっとしんどいかも。

いっそ、もうちょっと新しい米子の教会でやるかなあ。


2006年02月13日 [長年日記]

_ [Ruby] Why Ruby?

Pragmatic Programmersのひとり、Andy HuntがなぜRubyを選んだか、という話。

When people ask me what attracts me to Ruby, I have two answers:

First, more than any other language I’ve used, it stays out of your way. You don’t have to spend any effort “satisfying the compiler” as you would in C++, or even Java. These languages have an awful lot of noise and verbosity. You get used to it of course, but it’s pretty wearing over time.

Second, I can type in an absurd amount of code in Ruby and have it work the first time. Not 2-3 passes resolving any syntax issues, not 4-5 passes tracking down a bug or two. It just works. Ruby’s not perfect, by any means, it’s got dark corners to the language just like every other language. But it has a lot fewer of them. For the great majority of projects, the great majority of the time, it just works.

その理由はふたつ。「(コンパイラを満足させるのではなく)やりたいことを記述できる」から。もうひとつは「書いたらそのまま動く(ことが多い)」から。

魔法があるわけでもない。「ただ役に立つから」というのはPragmatic Programmersらしい判断基準だと思う。

追記

じゃあ、同じくらい便利そうなPythonはというと、

So I thought I’d take a look at Python and other emerging languages in that space, but none of them really grabbed me. Python in particular was a dissapointment; it seemed to have all the features I wanted and good library support, but the language always felt kinda clunky. There were odd bits of “oh, that’s for historical reasons” that showed through. Maybe it’s just personal taste, but I didn’t like it.

だって。なんとなく分かるような気がする。なんでだかPythonって私のあってほしいような言語じゃないんだよな。逆にPythonファンにとってはRubyが「なんか違う」言語なんだろうか。

_ [Ruby] WebプログラマはRailsに乗るべきか?

安藤さんにとりあげてもらえるのは幸いなことだ。昨年から今年にかけてRubyは(Railsのおかげで)キャズムを越えたような気がする。

ま、「生き残る言語」の仲間には入れてもらえたようだけれど、「今後も一線の言語」に残るためにはまだまだ努力が必要そうだが。

_ [言語] Language Design Is Not Just Solving Puzzles

PythonのデザイナーGuido van Rossumが「Python的でない」ので、複数行lambdaのアイディアを(再び)拒否した、という話。

言語デザインがパズルよりも難しいという点には同意する。また、複数行lambdaが現在のPythonの方針にうまくフィットしないというのも解る気がする。

でも、Haskellのインデントでダメな理由はよく分からないな。

Haskell は Python と同様にインデントでブロック構造をあらわすことが出来ます。インデント表記から明示的表記への変換規則は以下の通りです。
  1. where, let, do, of の後にブロックの開始を示す { を挿入する。
  2. その後、同様にインデントされた行はブロック内の式とみなし、 先頭に ; を挿入する。
  3. インデント量が減少した行にでくわすと、その行の先頭にブロックの終了を示す } を挿入する。

_ [OSS] 第7回アジアOSSシンポジウム

なるイベントに参加する。今回は招待側にチケットを用意してもらえるので大変ラクチンだ。いつもはチケットの手配が面倒なのよ。

ところで会場はマレーシアはクアラルンプールなのだが、ここの電源事情はどうなのだろう。ちょっと調べてみるとBfプラグの240Vのようなのだが。 Googleで調べた範囲内では、BやらB3やらCやらも「使える」と書いてあるページもあるし。

Cプラグは持ち歩いてるんだが、Bfはないなあ。買うと結構するしなあ。

伝聞情報では会場はネット接続に不自由するらしい。どうやってコネクションを確保するか。

あと、最大の懸念はスライドの用意。20日が〆切。


2006年02月14日 バレンタインデー [長年日記]

_ バレンタインデー

妻と娘からチョコレートをもらう。最近、甘いものはあまり好きではなくなったのだが、心がこもったものはうれしい。というか、娘の作ったトリュフが意外においしいのに感動した。妻からもらった市販品よりおいしいんじゃないか。

作ってる最中は粘土細工にしかみえなかったのに(失礼)。

_ 機械は人狼を見つけられるかな

Bayesian Filterの原理を使って人狼を発見できるか、という話。

ふむ、これは面白い。まあ、相手も知恵があるし、 Spamより発言を制御するのは簡単なので、完全には見つからないだろうが、それでも怪しい人を見つけるのに役に立つかも。

こういうパターン検出はいろんな分野に応用できそう

_ [言語] C#への期待。アンダースからの返答

C#のデザイナ、Anders Hejlsbergによるセッション。面白そうだなあ、参加したかったなあ。こういう時に田舎暮らしの不自由さを感じる。

面白いのはここ。

言語を設計してみたい人へのアドバイスはあるか?

ある。それは「そんなことはやめなさい」ということだ(笑)。

ふーん、この点については私とは真逆だな。私はどんどんやればいいと思っている。おそらくその言語は広く使われることはないだろうけど、それによって学べることは貴重だと思うので。

しかし、「やめなさい」という人が以下のようなことを言うのは「ズルい」と思う。

言語設計のおもしろさは、「言語の設計は、芸術と科学の組み合せである」というところにある。一方では主観的・直感的な判断が必要になる。例えば、言語を使用する開発者にとって、その言語が易しいものなのか、コーディングしやすいのかといったこと。またもう一方では客観的・厳密な判断も必要だ。例えば、その仕様が言語として妥当か、そのコンパイラを実装するうえで妥当かといったことである。

これまでいろいろなプログラミング言語を見てきたが、芸術性の面では良いが、科学の面では良くないといったパターンや、またその逆のパターンもある。この2つをうまく両立させなければならないところに、言語設計者としての妙技があるのだと思う。

これじゃ、「こんな面白いことはあなたたちにはもったいない」と言ってるようにしか聞こえない(笑)。

ところで、上記の彼に意見については私も同意する。 C#とRubyとどっちのバランスがどうか、という話はしないことにしよう。


2006年02月15日 [長年日記]

_ [原稿] オープンソースマガジン・ゲラ

ゲラ修正。提出。なんかあんまり面白くないなあ。

_ [Ruby] 小人さん

Rubyはメソッド呼び出しのときに、クラス階層をメソッドを探して、見つかればメソッドキャッシュに格納する。ここで見つからなければ、見つからなかったという情報もキャッシュに載せておけば失敗についても何度も探索する必要がなく、 method_missingを多用するプログラムが高速化する、かも、と考えた。

で、じゃあ原稿も一段落ついたし、ハックしてみるかとソースを見たら、なんともうできていた。びっくり。小人さんの仕事か。

cvs annotateの結果を見るかぎり、やったのは7年前(!)の私のようだ。

_ [OSS] 「仕事でオープンソース・ソフトを開発したければ有名人になれ」,Seasar2開発者のひが氏

まあ、同感だ。

ひが氏によると,オープンソース・ソフトの開発者に共通した悩みは「開発の時間が取れないこと」。たいていは,休日や仕事が終わったあとにオープンソース開発を行うことになる。一方,ソフトウエアをユーザー企業に安心して使ってもらうためには,そのソフトウエアがデイ・ワークで開発されている必要がある。ユーザー企業は,24時間サポートなどによる安心感を求めるからだ。

ところが「(開発者が所属する)企業がオープンソース活動を仕事として認めてくれることは基本的にない」(ひが氏)。オープンソースの世界でどんなに有名になっても,企業は興味ないからだ。この問題を解決するには,プロダクトと自分自身の知名度をアップさせる必要がある。要するに自分が「有名人になる」(同氏)のである。そうすれば,企業側にとっても“広告塔”としての意味が生まれ,中途/新入社員が採りやすくなるというメリットが生じる。ただし,「有名人を目指すことはあくまで手段であり,目的ではない」と同氏は釘を刺す。

まあ、確かに「Rubyの開発者」として認知されることで、普段からRubyの開発していられるようになったものなあ。

前の会社のときには時間はとられるくせに、認めてはもらえないから完全に二重生活。


2006年02月16日 [長年日記]

_ [原稿] 日経Linux・ゲラ

「多重継承」がテーマ。いつもながら日経は上手に書き換えてくれる。おおむね私の元原稿よりもよくなっているのがすごいところだ。ときどき「こんなこと書いたっけ」と思うこともあるけど。

で、今回はかなり煮詰まった状態で書いたので、ゲラ段階で再度修正することが多かった。普段は分量の調整がメインなんだけど、今回はいつもより本文の修正が多かった。それだけ難しいということなんだろうか。

「日経Linuxの中では難しいので、もうちょっとやさしめに」という注文をもらってたんだけどなあ。個人的には最終的な文章の出来は気に入っているが、みなさんに喜んでもらえるかどうかは別だ。

_ [言語] Otaku, Cedric's weblog: Python going extinct?

先日の「Language Design Is Not Just Solving Puzzles」を受けて、 Pythonは進化の袋小路に進んでしまうのではないかと心配する話。

Pythonが変化に対して慎重なのは広いユーザベースを考えると当然だし、基本的に良いことだと思うけれども、変化が少ないと「わくわく感」は少なくなるよね。仕事として使ってるぶんにはそんなの関係ないわけだけど。

で、Rubyはというと、少なくとも1.9ではいつまでも変化を続けようと思う。というか、変化しようすることそのものが大切だと思っているのだ。

もちろんその代償はあるだろうけど、私が引き受けるぶんは喜んで引き受けようと思う。みんなが次々と新文法を提案したがることとか。どうもfragileな言語だと思われてるらしい。

気になる互換性については、1.8はいつまでも(基本的に)同じです、で勘弁してもらおう。

_ [OSS] 競争に打ち勝つための最新武器--オープンソース

3年前ならともかく、いまではあまり珍しくない論調。

参考までに。


2006年02月17日 [長年日記]

_ ご当地バカ百景

よくわかるのは今住んでる島根県と育った鳥取県なのだが、まあ、「くすっ」と笑えるくらいか。

しかし、宍道湖七珍の「すもうあしこし」ってなんだったっけ。

  • す - スズキ
  • も - モロゲエビ (別名テナガエビ)
  • う - ウナギ
  • あ - アマサギ
  • し - シジミ
  • こ - コイ
  • し - シラウオ

...だったかな。Googleするとトップはうちの会社の人だった。

_ [OSS] OSSにとってどのような支援策が必要か?

よしおかさんによる。人財という話になっているようだ。まあ、そうかも。

コネクションは重要だ。が、そのコネクションを上手に活用するのはもっと重要だ。

私は幸い日本のオープンソース界ではたぶんトップレベルのコネクションを持っていると思うのだが、あんまり活用しきれてないなあ。

マレーシアで時間があったら、よしおかさんとそういう話もできるといいな。

_ [Ruby] 定数探索ルール変更

1.9で定数探索のルールを変更した。1.8までの定数探索ルールは

  1. 自クラス
  2. ネスト上外側のクラス(トップレベルを除く)
  3. スーパークラス...Objectまで

だが、これはスーパークラスの定数とスーパークラスの定数がどちらが優先かよくわからない、とか、ネストの外側の定数参照はレキシカルな参照に見えるが実はそうじゃない、とか、あまり気に入らないと思っていたのだ。

新しいルールは以下の通り。

  1. 自クラス
  2. スーパークラス(Objectを除く)
  3. ネスト上外側のクラス

本当はもっと単純なルールにしたかったのだが、結局前と同じくらい複雑になっている。いろいろな局面でもっとも便利なルールを考えていたらこうなってしまった。

このルールの(2)でObjectを除いているのは、 Objectがグローバルな定数の置き場所になっているため。グローバル定数よりはよりスコープの狭いネストの外側の定数を優先したかったため。ネストの一番外側はObjectと決まっているので、このルールで見えるべき定数は全部見える。

探索順序が変わっただけで、探索範囲は減っていないから、定数の名称が重複しない限り問題は発生しない。

標準添付のライブラリの範囲内で問題が起きたのは以下の二ヶ所。

webrick/httpservlet/cgihandler.rb:

class CGIHandler < AbstractServlet
  Ruby = File::join(::Config::CONFIG['bindir'],
                    ::Config::CONFIG['ruby_install_name'])
  Ruby << ::Config::CONFIG['EXEEXT']
  CGIRunner = "\"#{Ruby}\" \"#{Config::LIBDIR}/httpservlet/cgi_runner.rb\""

ここではトップレベルのConfigとWEBrick::Configが混在している。 5行目を以下のように書き換えた。

CGIRunner = "\"#{Ruby}\" \"#{WEBrick::Config::LIBDIR}/httpservlet/cgi_runner.rb\""

よりわかりやすい方向に矯正されたと思う。

もうひとつはresolv.rb:

class A < Resource
  ClassHash[[TypeValue = 1, ClassValue = ClassValue]] = self

ここの「ClassValue = ClassValue」が問題の箇所。これはネストの外側の定数を自クラスにコピーしている、と読むらしい。

以下のように書き換えた

class A < Resource
  TypeValue = 1
  ClassValue = IN::ClassValue
  ClassHash[[TypeValue, ClassValue]] = self # :nodoc:

こちらもより明確になったのではないだろうか。大差ないけど。

ついでに、load()のwrap modeにおいて正しい順序で定数探索するようにした。 1.8ではwrapを行うanonymous moduleの優先順位が高すぎる。 1.9でもメソッドの探索順位は直ってないわけだが...。

これは将来Classboxを導入した時にwrap modeをClassboxで実装すれば根本的に解決するように思う。Classboxっていろいろ使えるな、魔法のようだ。効率良く実装できれば世界が変わるかも。


2006年02月18日 [長年日記]

_ [教会] 掃除

教会の掃除当番。片付けて、掃除機かけて、ゴミ捨てて、イスを並べる。きれいになった。家族総出でやればそんなに時間はかからない。

世間的には大家族らしいので。

_ [Ruby] 多重継承言語としてのRuby

Rubyはフル機能の多重継承を持たずMix-inしかないので、世間的には単純継承言語(+α)と認知されていると思う。

が、世間での認知はともかく、Mix-inが多重継承の一形態である以上、実質的に多重継承的な使い方が出来ることは厳然たる事実だ。

多重継承のある言語としてRubyを見ると

  • インスタンス変数が全クラス階層で共有される
  • privateメソッドとpublicメソッドの名前空間が同じ

という二点はかなり痛い。

前者は継承に参加する全クラス(モジュール)間で名称に衝突があってはいけないことを意味する。単純継承言語ではこの条件はあまり厳しくない。スーパークラスへのラインは一本しかないので調整が難しくないからだ(にも関らずSmalltalkではインスタンス変数はクラスごとに独立だったはず)。しかし、多重継承言語では継承してくるクラス(群)が独立で調整が効かない場合があるので、この制限は厳しい。この点ではクラス名を明示する必要があるC++や名称変更機能があるEiffelの方がはるかに優れている。

っていうか、クラスをモジュールとして考える(OOSC的)立場からは C++ってかなり良い言語なんじゃないかなあ。MeyerはC++大嫌いみたいだけど。

意外なことにCLOSでは(少なくとも標準のMOPでは)スロットの名称重複は継承優先順位の高いものだけが優先になり、解消の余地がない。

後者は局所的なサブルーチンとして使おうと思ったprivateメソッドがよそのクラスのpublicメソッドと名称が重複していた場合、現状では上手な解決策がないことが問題だ。 Rubyには原始的なaliasとundefがあるが、この問題はこれらでは解決できない。

で、だ。

どちらの問題にも解決のアイディアはあるのだが、効率と互換性の両方に懸念があるのだな。

詳細は後日。

_ [Ruby] Rails' Ridiculous Restrictions, a Rant

Joel on Softwareサイトの掲示板への投稿。 Railsの気に入らない点について。

書いた人は「a Hack」さんで、あちこちで誤解されているようだがJoelではない。

気に入らない点は以下の通り。

  1. RDBのメタデータ(外部キーなど)を見ないので、テーブル間の関連は別の場所(Rubyコード)で記述する必要がある。
  2. 修正するたびにリスタートしなければならない
  3. マニュアルがひどい
  4. varchar(40)に80文字データを入れても知らんぷり
  5. 知られざるルールが多い
  6. 設定コードがあちこちに分散している

ただし、「気に入らない」と文句を言いながらも、その実は「I only say all this because Rails is the first framework worth criticizing.」であるとも述べている。

これに対して、DHH本人が反応している。こまめだね、彼も。

  1. 外部キーは関連を表現するのに十分でない。不完全な情報に頼るよりは明示的に記述したほうがよい
  2. 勘違いだと思う。development modeを知らない
  3. 同意する。(http://www.railsmanual.orgというサイトがあるとの情報あり)
  4. バリデーションも明示的に行われるべき
  5. 同意する。まとめるのに協力がほしい
  6. 設定コードは一ヶ所にまとめるべき。誰かが間違っていたら、直せるよう指摘してあげてほしい

2006年02月19日 [長年日記]

_ [教会] 娘のお話

教会。今日は司会。なんと娘がお話をするということで、私の方が緊張してしまう。

で、何人かの兄弟姉妹に混じって、娘もお話した。かなり緊張していたみたいだが、それでも立派に最後まで話してた。

お父さんは感動したよ(親馬鹿)。

私自身が彼女の年代のときにそんな話ができたかというと、できなかったような気がするしなあ。あんまり覚えてないけど。

あ、小学校高学年のときに緊張しすぎて訳がわからないことを口走ったような気がする。

イヤなことを思い出した...。記憶を封印しよう。

とはいえ、『ちびギャラリー』から引用というのは... えーと、なんというか...とってもユニークだね。

普通、聖書からとか引用するもんなんだがな。別に駄目じゃないけど。でも、ラノベからだったらどうしようかと思ったよ。

_ [教会]バプテスマ会

通常の集会終了後に、バプテスマ会。松江の教会に新たな仲間が。ようこそ。

宣教師によるピアノの演奏とか、とてもすばらしかった。彼は音楽大学を休学中だとか。道理で上手だと思った。

しかし、ただ上手というだけでなく心が動くものがあった。


2006年02月20日 [長年日記]

_ [会社] お客さま

会社にいても、私に来客があることなんかあまりないんだけど、今日は珍しく二件もあった。

一件はうちの会社の見学。転職したい、かも、という話。

私のチームはできる人若干名募集中なのだが、家族のこととかいろいろあるから、どうするのかな。ま、うちの会社についてわかってもらえたのではないかと。

二件目は韓国からの見学者。なんでも本日、韓国企業と島根の企業とのマッチングを行うイベントが行われたらしいのだが、その一環で韓国政府の関連組織の人がうちを見学したいとか。

社長と私とでどんなことをしているかとかを簡単に紹介した。それなりに感心してもらえたようだ。

それにしても、韓国語ってよく聞くと分かるような、やっぱり分からないような。

_ [Ruby] るびマっ 13号

本日公開。今回も内容は盛り沢山。これを続けているってだけでもRubyコミュニティはすばらしい。

  • 0013 号 巻頭言
  • Ruby の歩き方
  • Rubyist Hotlinks 【第 13 回】 関将俊さん
  • RubyOnRails を使ってみる 【第 6 回】 テストの書き方
  • qwikWeb の仕組み 【第 2 回】 qwikWeb のプラグインを作ってみよう
  • あなたの Ruby コードを添削します 【第 3 回】 dbf.rb
  • 標準添付ライブラリ紹介 【第 7 回】 net/http
  • Rubyist のための他言語探訪 【第 6 回】 Dylan
  • プログラマーのための YAML 入門 (探索編)
  • YARV Maniacs 【第 7 回】 YARV 命令セット (4) 分岐
  • 世界の Rubyist
  • 書籍紹介『Ruby プログラミング基礎講座』
  • 読者プレゼント
  • RubyNews
  • RubyEventCheck
  • 編集後記

2006年02月21日 [長年日記]

_ 「Matzにっき」が壊れた

どうもデータが吹き飛んだようだ。日曜、月曜のエントリが消滅していた。「日記はありません」と表示された方、原因はそれです。

バックアップから復旧したが、日曜ぶんのエントリはそこにもなかった。

しかたがないので、FEEDBRINGERのRSSから本文を抽出し、少々マークアップを追加することで復旧した。

そうか、RSSに全文を入れておくと世界中に日記のバックアップがあることになるのね。

_ [OSS] 「有名」になること

トラックバックを頂いた。

だから、上司にアピールするという点では、「有名度」というのはあまりいい指標ではないと思う。目指すべきは「認知度」である。

まあ、ただ単に名が知られているだけでは意味がないので、認知度という単語を持ってくる弾さんの言語感覚は私より鋭い。

しかし、こうして見ると「立ち位置の違い」がはっきり出て面白い。

もともとは理解のない上司の下にいたひがさんは、上司の理解を得るために「有名になること」を手段として利用した。

理解のある上司(NaCl井上社長)の下にいる私は、 NaClが「広告塔」として私を「利用」できるために「有名になること」を選んだ。

よしおかさんは有名になることよりも「ビジネスにすること」を選んだ。これはよしおかさんの得意分野がデータベースとかOSとか、企業が手を出しやすい領域であったことと無関係ではないと思う。私の領域であるプログラミング言語じゃそうはいかない。死屍累々だもの。

で、弾さんは有名になることそのものには価値がないと感じた。これは弾さん自身がすでにテレビ出演*1などによって十分「有名」で、かつ、どちらかというと有名であることが必ずしも利益につながっていないからではないだろうか。また、彼の「有名さ」はその他の人のものと違ってオープンソースプログラマとしての業界内での認知ばかりでなく、主に(現ライブドア元CTOとして)一般の人への知名であることも見逃せない。

自分がそうなったらと思うと同情を禁じえない。私(たち?)の目指す「有名」はあくまでも業界内での「有名」であって、それ以上のものではない。

テレビ出演? 勘弁してほしい。

*1  島根県では放映してないので拝見したことはない

_ テレビ出演

「勘弁してほしい」というその舌の根も乾かないうちにナンだけど、テレビに出た。もっとも、日曜の早朝7:30のローカル番組なんて見てる人なんて100人くらいしかいないんじゃないかと思うけど。

私自身さえ録画を忘れて見てなかったくらいだし(ダメじゃん)。

というわけで、社長から録画DVDを借りて今日はじめて見た。

私の登場は20秒くらい。台詞はなしで。


2006年02月22日 [長年日記]

_ reddit.com日本語版

Paul Grahamからメールが来た。 Summer Foundersプログラムの卒業生が作った reddit.comの日本語版が出来たから、見てくれないかと。

どうも、ブックマークに近いのだが、「好き」「嫌い」を入力して訓練することでお薦めとか出してくれるようだ。こういうのはデータの数が重要なので、いろんな人が参加して、どんどんURLを登録してくれるといいと思う。

一番感動したのは登録が簡単なこと。AJAXを使っているせいもあるが、今までいろんなサイトで見た中で一番簡単だったんじゃないだろうか。

見たらshiroさんがさっそく登録していた。

_ [OSS] 「有名」になること(2)

たださんからトラックバックをもらった。

並みの自意識は持っているので、名刺を出すときにちょっとドキドキするわけなんだが、一度も気づかれたことはない。今日行ったところなんてブログ屋さんなのに、ビタイチ反応なしである。

いや、ブログ屋で、たださんに気がつかないっていうのはどうかしてると思うけど。

弾さんのフォローにもあったけど、とにもかくにも有名になることに意味なんてない。的確な分野で認知されれば十分なのだと思う。で、そういう意味では、たださんは十分有名だと思いますよ。

で、

まつもとさんが、NaClの「広告塔」としてどれくらい機能しているのか、興味があるな。対費用効果とか。たとえばNaClはけっこうCOBOL仕事もやっていると聞いたことがあるけど、そっち方面には広告効果はないよね、たぶん。一方で、広告塔が有効に機能する仕事もあるとは思うけど、じゃあそれが NaClにとってどれくらいメリットをもたらしているんだろう?

とのこと。実は、恐いので数値化はしないでいるのですが、首になってないところをみると、

  • それなりにペイしてる
  • 合理化の対象にならないくらいには、
    • 役立ってる
    • コストが気にならない

ということではないかと勝手に想像してます。

メリットは

  • 求人会社に広告を打つよりは安く、良い求人が集まる
  • 「まつもとがいるから」と仕事が来る(いや、ホントに)
  • 会社のポジションを説明しやすい(ただ、オープンソースを利用しているだけの会社じゃないんですよ)

などなどですが、これをどうとらえるか、ですよね。幸い、経営陣はポジティブに評価してくれているようです。

_ 風邪ひいた

昨日あたりから調子が悪い。一昨日の晩、マレーシアのスライド仕上げるのに夜更かししたからか。今日は早く休もう。未踏のスライド準備できてないんだけど...。

(関係者を不安にさせるようなことを言う)

_ [Ruby] private問題

で、風邪でぼーっとしてる頭でつらつらと考える。

モジュールを気軽にincludeした時に、そのモジュールが定義しているpublicなメソッドが取り込まれることは問題ない。その機能(メソッドの集合)が欲しいからincludeするわけだから。

しかし、内部的に使われるだけのprivateなメソッドが重複してしまうことは避けたい。重複を避けるために妙なprefixを付けるのもイヤだし、とはいえ、気軽にprivateが使えないのもイヤだ。

これを改善するにはRubyの挙動を以下の二点について変更すればよい。問題はその変更による影響がメリットを上回るか、だ。

まず、privateメソッドがpublicメソッドを(意図せず)上書きしてしまった場合に対応するために、 publicメソッドを探している時に、privateメソッドを見つけたら、そこで失敗せずにさらにスーパークラスを探索するようにする。

これはメソッド探索ルーチンに、今publicメソッドを探しているか、 privateメソッドを探しているかの情報を与えてやれば良い。変更は簡単だろう。この点は今までエラーになっていたものがエラーでなくなるだけなので変更による影響は少ない。

しかし、privateメソッドが、publicメソッドまたは別のprivateメソッドで上書きされてしまう問題は上記の変更では対応できない。

で、どうするかというと、「関数形式(レシーバを省略した形式)で呼び出したメソッドの探索は、メソッドが定義されているクラスを始点とする」という変更を加える。すると、関数的に呼び出されているメソッドの定義はサブクラスにより上書きされないことになるので、オーバーライドの心配が無くなる。

この変更では「外から呼び出されたくはないが、サブクラスで上書きしたい」要望が (もしあったとしたら)難しくなることが欠点である。そのような要望はあまりないような気がするが、言語はどのように使われるか分からないから、「ない」と断言するのも難しい。

「明示的にselfをレシーバとして指定した場合には、privateも呼び出せる(しかし、探索はオブジェクトのクラスからはじめる)」のような回避策が必要になるかもしれない。

あるいは、積極的な対応はせず「そういう使い方にはprotectedを使ってほしい」というのも手だろうな。

もうひとつの欠点は、メソッドの呼び出しセマンティクスが複雑になることだ。今の「メソッドを呼び出す、しかしpublic/protected/privateという可視性がある」というモデルも十分複雑なのに、それ以上複雑にする意味があるのか。

個人的にはあるような気がしているのだが。


2006年02月23日 [長年日記]

_ 体調不良・スライド

昨日に引き続き、風邪。

午前中はまるまる寝込んでしまう。朝食を食べ、子供たちを学校に送りだしてから午後二時まで寝ていた。

その後、起き出して、やっとスライドの準備を。話の流れは考えていたので、割と短い時間に書き上げたが、なんかあんまりすっきりしない。

_ 父親の誕生日

今日は父親の誕生日である。皇太子の誕生日でもあるそうで、子供のころ「いつか天皇誕生日になる」と聞かされたような記憶がある。

で、当の本人は母と一緒に東京に出かけている。退職してのびのびとやっているように見える。

いつか、私が退職したら、生活の苦労なく思う存分ハックできたらいいなあ。 縁側で猫とひなたぼっこしながら。

あ、今とあんまり変わらないか。


2006年02月24日 [長年日記]

_ 平成17年度上期未踏ソフトウェア創造事業 千葉PM 成果報告会

昨日よりは体調がいい。飛行機に乗って、東京へ。

会場は思ったよりも品川駅から遠い。たまに東京に出ると思いっきり歩かされる。都会人の方が運動してるよな、どう考えても。

いろいろ発表が面白かったが、まとめると以下のような感じか。

  • Java陣営とRuby陣営でくっきりカラーが違う、面白い
  • Javaの経験がないので、Java系の発表のうれしさがよくわからなかった。 あ、でもTuigwaaは別。Javaコード出てこないし、プレゼンが明確でよかった。
  • 私のプレゼンは 面白くなかった。準備が足りないのと、集中力にかけたのとで、 特にRuby2.0の機能(スライド20〜22枚目辺り)について、 十分に語れなかった。 呼んでくれた人に申し訳ない。

あと、千葉先生のキャズムねたは興味深かったが、それについての考察は「後で書く」。

スライドはこちら

_ [Ruby] Ruby2.0への布石

スライドにも書いたし、

  • Mix-inの改善
  • privateメソッド

について実装を試してみる。

前者はrepeated inheritanceを許すため、現在行われているMix-inの重複チェックを外すこと。つまり、同じモジュールを複数回includeしたら、今後は複数回ancestorsに登場する。これにより、Mix-inの挙動がシンプルになり予想しやすくなる。 Mix-inのTraits的扱いがやりやすくなる。十分に実際にはTraits的にするためには、 renamingなどでもう少し改善が必要。

後者はprivate問題への対応。が、メソッドキャッシュがからむと思ったほどうまく動かず、時間切れ。

_ 『4274066304』

今回持っていった書籍がこれ。特に帰りの飛行機では意に反して最前列だったため、PCが開けられず、しょうがないのでずっとこれを読んでた。

書いてあることはどれも正しいし、この本は一読の価値がある。

しかし、読めば読むほど気分が悪くなるのはなぜだろう。「正しいことを言われると腹が立つ」ということなんだろうか。それともなにか別の原因が?

少なくとも気圧の関係で耳が痛くなったこととは無関係だと思う。


2006年02月25日 次女誕生日 [長年日記]

_ 次女誕生日・買い物

次女の誕生日。本人のたっての希望で米子(日吉津)のジャスコに買い物に行く。買い物好きの次女は、「今日はこの店がいい」のだそうだ。好みがうるさい。

いろいろ悩んだ揚げ句、気に入ったものが買えたらしい。

息子はムシキングのゲームを楽しんでいた。なんだかいいカードが入手できたのだそうだ。誰にでも分かるジャンケンとカードを組み合わせるとはデザイナーはなかなか考えたなあ。

食事をしたり、アイスクリームを食べたり、さんざん楽しんだ後、帰宅。

病み上がりなので少々くたびれた。

夜は教会へ。バプテスマ会。2週続けてなんて珍しい。


2006年02月26日 [長年日記]

_ [教会] 定例集会・監査

普通の集会。神権会はレッスン担当がお休みなので急遽代理が立った。急なのでちょっとかわいそう。女性はうちの妻が教えていた。その間私は末娘を子守りしながら。

集会終了後、2005年度下期の監査。無駄にお金を使ってないか、不正が行われていないかチェック。問題なし。ただ、ピンク電話の中の現金が予想以上に残っていたので、それは口座に戻す必要あり。

帰宅。今日もくたびれた。


2006年02月27日 [長年日記]

_ [Ruby] private問題、その後

メソッドキャッシュの件でひっかかっていた部分を取り除いて動くようにしてみた。なかなか快適に動く。

しかし、実際に既存のプログラムを動かしてみると、関数形式で呼び出していてもオーバーライドされることを期待しているコードはかなり多い。これらに全部「self.」を付けるというのもしんどい話だなあ。

うーん、関数として呼ばれる(外部に見えない)手続きという機能はぜひ実現させたいのだがな。今回の修正コードは別に捨ててもかまわないんだけど、アイディアは捨てたくない。

いっそ「_local」という名前のメソッドはローカル(スーパークラスも見ない、オーバーライドもされない)ということにするか。これでも動かなくなるコードはあるが(rssとか動かない)、「private全部捨て」よりはマシか。

もうちょっと考えてみよう。

_ 復刊ドットコム

先日来、復刊希望をウォッチしているが、なかなか票が伸びない。明示的に宣伝するのにも少々ためらいがあるが、いい本が手に入らないのも悲しいことだ。

共感して下さる方は投票を。

投票しても復刊されるとは限らないんだけど、希望にはなる、かも。


2006年02月28日 [長年日記]

_ Joelが腹立たしいわけ

2月24日のエントリに「書いてあることはどれも正しいし、この本は一読の価値がある。しかし、読めば読むほど気分が悪くなるのはなぜだろう。」と書いたわけだが、もうちょっと考えてみた。

あの時にも考えたように「正しいことを指摘されると腹が立つ」というのが一つ。もうひとつは彼の文章にはプログラミングに対する愛が感じられないのがもう一つ。彼自身もプログラミングする人のはずなんだけどな。

そして、最後にもっとも大きな理由は、私自身が彼に揶揄される立場だということだろう。たとえば、私は彼の言うアーキテクチャ宇宙飛行士のあらゆる属性を備えているし、オープンソースに対するややナイーブな立場もそうだ。

してみると腹が立つのも当たり前か。

感情は制御して、良いことを学ぶことにしよう。

_ [Ruby] Ruby2.0への一歩

Gimiteさんにもらったアイディアが当初思ったよりも有意義かもしれないと思えてきた。

localというvisibilityを導入して、関数形式でメソッドが呼ばれたときは「localメソッドを探索(そのクラスのみ)→見つからなかったらその他のメソッドを探索」というのは…効率が悪くなるから駄目でしょうか?

基本的な部分は「private問題」で行った実装と共通なので、そのまま流用する。割と簡単に実装できた。

試してみる。

ふむ、なかなかいい感じだ。後方互換性も高い。ちょっと試してみよう。

また、以前検討していたBasicObjectも導入してみた。こちらもちゃんと動いている。以前試した時にはあまり使えない印象だったが、最近、定数の検索順序を変更したのが、うまくいったみたい。

ただ、まだバグが残っているのでもうちょっと試してからコミットしたい。


最新 追記