昨日に引き続き。とはいえ、やっぱりRubyをいじってたり。
午後は少し離れた公園へ。動物との触れ合いで癒される。 トリとかブタとかウマとかウシとかイヌとかヒツジとかヤギとかラマとか..(以下ずっと続く)。
その後、併設されている温泉に。 ここ湯の川温泉は日本三大美人の湯のひとつとして知られているらしい。 もっとも温泉に入ったくらいで美人になるなら苦労はないわけだが。
そういえば、土曜日には市立図書館で新しくLOGOの本を借りてきたのだった。
『Logo - 人工知能へのアプローチ』(ISBN 4-8443-0150-0)
昭和59年の本だからもう絶版だろう。図書館でも閉架になってたし。
この本によれば、Logoでは制御構造も自分で定義できる。 たとえばwhileの定義は以下の通りである。
to while :cond :comm if not run :cond [stop] run :comm while :cond :comm end
ちょっとだけ解説すると、toからendまでが関数定義。 stopは関数実行を停止する手続き、runはevalに当たる。 今回はループを末尾再帰で実現している。 この本が使っているLogo処理系(Gourd Logo for PC-98)では、 末尾再帰の最適化は行っていないらしく、 「条件がなかなかfalseにならないと「**複雑過ぎて実行できません**」というエラー・メッセージが出る場合がある」のだそうだ。
この例を見て、ちょっと違和感があった。ひとつはスコープの問題である。 すでに述べたようにrunはeval相当なのだが、評価される環境(or 束縛)が与えられていない。 とすると、ローカル変数などはどうやって参照されるのか。 グローバル変数しか存在しなければスコープの問題は存在しないが、 再帰が許される(かつ本質的な)Logoではそれはありえない。
数分悩んだ後、ひらめいた。「そうか、ダイナミックスコープか」。
最近、ダイナミックスコープの言語にお目にかかることは滅多にないので(例外はemacs lispか)、 存在そのものを忘れていた。歴史的にはLispは(少なくともインタプリタ処理系では)、 ダイナミックスコープが当たり前だったのだが、SchemeやCommonLisp以来すっかりスタティックスコープの言語になってしまっている。 ダイナミックスコープなら外側のローカル変数もごく自然に見える。 変数名の重複にだけ気をつければ良い(そういう意味ではcondやcommのようなありふれた引数名は良くない)。
もうひとつ気になったのは、評価のタイミングである。 whileは制御構造を実現する関数なので、引数を事前に評価しては意味がない。 一方、「to」は普通の関数定義方法であり、 特別に「この関数は引数を評価しない」などと指定していない。
これは関数の呼び出し方で解決されていた。whileの条件式や本体は [ ] でくくる必要があり、 LogoではこれはLispの (quote ) と同じ意味であった。 Lispがspecial-form, macro, fsubrなどで実現されいたものを、 明示的にリストとして渡すことで実現していたのだった。Tclと同じだな。
例外は少ないが、決してユーザに優しいわけではないような気がする。 これも時代を反映していたのだろうか。
今回のRuby講習会は
になっている。
今回は初級コースの1日目。プログラミング経験の全くない人はいなかったが、 それでもかなりばらつきがあり、なかなか難しい。 体験コースでの経験に基づき、例題を多めにしてみたが、 それでも難しすぎる例題や、逆に面白くない例題などがあり、 「完璧」とは言えなかったように思える。 簡単な問題だと人によっては瞬殺されちゃうし、 アルゴリズムから考えないといけないような問題ではフリーズしちゃうし。
それでも、10時から16時まで、昼1時間の休憩をはさんで5時間のコースをよく耐えたよなあ、みんな。 お疲れさまでした。
正直、講師もすっかり疲れてしまって、夜お風呂に入りながら寝てしまった。 息子と一緒に入っていたのだが、気がついた時には湯船で取り残されていた。 起こしてくれよぉ。
明日は、かずひこくんが講師で私はヘルプに回るの予定なので、 もうちょっと楽かな。
関西オープンソース2004の講演から。
村上氏は,もともと著作権は,著者ではなく印刷業者などの流通業者を保護するために作られたと指摘する。
<中略>
しかし,これまで流通業者が所有してきた大量複製の手段がインターネットにより万人に開放され,著作物を届けるために必ずしも資本や流通業者が必要ではなくなった。そのため,現在様々な矛盾が発生している。例えば,音楽家は自分の演奏を自由にインターネットで配信することはできない。流通業者が “既得権者”となり,著作物の配布を妨げるような状況が起きている。村上氏は「300年にわたる著作権制度のパラダイム・シフトが進行している」と表現する。「このような状況下でいたずらに知的財産権を強化することは既得権者を保護することになる」(村上氏)
そーなんだよー。でも、既得権者は権利を持っている強い存在だけに、 発言力も影響力も政治力も持ってるんだよー。彼らに新しい状況への適合を「強制」するにはどうすればよいか。
日本でもNoSoftwarePatents.comのような活動を開始すべきか。いや、特許だけじゃないけど。
ヤフー、メール検索を手がける企業を買収--デスクトップ検索に本腰 - CNET Japan
以前、話題になった検索ベースのメールリーダーBloombaを作っているStata LabsがYahooに買収されたと言う話。 検索メールリーダーが注目されているという点では嬉しいニュースだが、
Yahooにとって、買収の目的はあくまでもStata Labsの基本技術を手に入れることのようで、同社はBloombaの販売を継続しないとしている。
というのは、Bloombaユーザにとって嬉しくないニュースだろう。
いや、いつまでたってもmorqをリリースできない私には偉そうなことは言えないんだけど。
Morqの現状
素敵なマシン。ぜひRubyをこの上で走らせたいものだ。 商品が出たあかつきにはポーティング用にコントリビュートされないかしら?
時差ボケか、あるいは疲れか。一回休み。
東京泊。朝イチで仙台へ移動。意外と近いのね。
実は東北は始めてである。 学生時代は北関東にいたんだけど、「南東北」とか自称していたのにも かかわらず、東北方面に移動する機会はついぞなかった。 一番北で「袋田の滝」(茨城・福島県境)くらいか。
就職してから北海道に行く機会はあったんだけど(今年も旭川に行ってるし)、 東北はなかなか縁がなくて。
で、今回は、情報化月間の一環で仙台講演を依頼された、というわけ。 「世界が認めたRuby〜エンタープライズに広がるアジャイル開発手法」 なんてテーマで話をしたのだが、 私が「エンタープライズ」とか「アジャイル」とか語るのはどうよ、 と自分でも思わないでもないので、やや自虐的なネタが含まれたものになった。 いつものことか。
で、イベントの最後までいたら、新幹線の乗り換えなど思ったより時間がかかり、 羽田からの飛行機に乗り遅れた。数分遅かった。ぐすん。
しかも、何件問い合わせても、もうホテルがどこも一杯で泊まれず、しかたがないので 前から一度見てみたかったネットカフェで泊まることにする。
そもそもネットカフェがどこにあるのか というところから探さないといけない。 土地勘がないのでわざわざ秋葉原まで戻り、 某ネカフェに宿泊。
ネットワークが使えたのはありがたいのだが、 やはり狭い。前にカプセルホテルに泊まった時も そう思ったんだけど、ネタとしてはともかく 何度も泊まるようなもんじゃないよね。
動的型の言語でもisaとかinstanceofとかでクラスチェックをしちゃうと duck typingではなく、柔軟性も低いのでやめた方がよい というのは、そろそろ常識として定着してきたと思うけれども、 respond_toでメソッドを持っているかどうかチェックするのも duck typingとは言えない、という話。
このエントリの著者Rick DeNataleは、そういうのを「chicken typing」と呼んでいる。