has_one :throughを作ってて、一応、基本的な使いかたに関しては動くようになったと思う。本家のRevision 5642から分岐したリポジトリをhttp://svn.yugui.jp/svn/has_one_through/trunk/に置いてある。(注: 2007-07-12現在サーバー停止中)
残りの仕様が固まって、それを実装したら本家にパッチを投げる。
has_one :throughパッチを作ってる訳だけれども。いや、今日は本棚の整理で手一杯だったけど、昨日は作ってた。
ruby-debug便利過ぎ。最初から-rdebugして起動するとフックのせいで無茶苦茶遅い訳だけれども、ruby-debugならブレークしたいところに"debugger"と書いておけばそこまではさくっと走ってくれる。主に想定してるのはRailsアプリケーションっぽいけれども、ARそのもののユニットテストでも、最初にDebugger.start; require 'ruby-debug'しておけば動いてる。
あとの問題は、本家の人達になんて言ったら必要性をアピールできるんだろうということ。
通じるのかな。むー。
私も腐女子の端くれとして、どんなものでもカップリングを与えられればストーリーを紡ぎ出す思考回路は持っているわけで。それは何かと困るのでできるだけ日常的な概念はヤオイから切り離すようにしているのだけれど。
うっかり脳内で繋がってしまった。TDDが。もうダメだ。三角測量で変わっていく実装に対するAssertionの嫉妬とか、そんなストーリーが。実装はどう考えても誘い受けです。
日経ソフトウエア2007年1月号に記事を書かせていただきました。いろんなプログラミング言語からその言語の特徴的なところを学んでみようというようなお話の中で、Rubyを担当してます。
日経ソフトウエアの大森さんには最後にはまる1日お付き合いいただいて記事を書いて、なんとも大変御迷惑をお掛けしました。で、大森さんと話して「Rubyに学ぶ『Ruby on Railsの正体』」たらいうどうにもタイトルで気を引こうとする気満々なタイトルになっていますけれど。
Rubyは本当に、昨今のある程度知られた言語たちに比べて真新しい点というのはないと思うんです。言語機能に関してはまつもとさんが常々おっしゃってるとおり「C言語で実装してある処理系の間であれができるこれができるというのを競っても意味がない」ですし。構文もどこかで見掛けたようなのを細かくチューニングしているに過ぎないわけです。殊に、この特集の中でJavaScriptやEiffelと並べられると非常に弱い。でも、チューニングするにあたって、やはりRubyの個性が出てきている筈で、私がRubyを習得するにあたり「こいつ本物のアホだ(褒め言葉)。普通こんなんやらない」と思ったような点をひねくり回してRubyの個性をできるだけ描写しようとしてみました。
Rubyはなー、本当にブロックの終わりがendであることとメソッドがオブジェクトでないこと以外は極めて普通だと思う。逆に、なんで他の手続き型/オブジェクト指向/動的強型付言語はRubyじゃないんだろう。Rubyからその普通じゃない2点を除くとGroovyになるのかもしれないけど。じゃあ、なんで他の言語はGroovyじゃないんだろう。
それより、この特集の見どころはまつもとさんによる総論「複数のプログラミング言語を学ぶ意義」だと思うのですよ。あとは、知ってる人は知ってるでしょうけれども、Design by Contractは大事なのでEiffelも。
Django勉強会Disc 1に行ってきた。
Djangoはまだよく分からないので「寺子屋」で黙々と写経してた。とりあえず、Generic Viewはいいな。
Django AMFのソースを見て、初めてPythonのソースを美しいと思ったよ。少しだけ文化が身についてきたか。
もうね、endとかいらなくね? というのは嘘だけど。RubyはRubyで。
懇親会では、Djangoも含めて最近のTable - Classマッピングをするフレームワークは既存のデータベースを活かして業務アプリを組むには窮屈という話にもなった。でも、私の考えではそれはRDBMSがまだ未熟なんだよ。Dateたんの本では、ViewとTableはもっと透過的でなければいけないって書いてあるし。私がRailsのmigrationにviewをサポートする語彙があるべきと言ってる理由もそれ。viewに透過的に書けるDBMSは良いとしてtriggerでサポートできるならtriggerの設定までして、ORMより上の層からはviewとテープルの区別が付いてはいけない。
開発の速さ優先の態勢であることはリビジョン管理システムを使わない理由にはならんでしょ。と思った経験を思い出したのでメモ。
リビジョン管理システムがあればこそ、いつでも戻れる安心感を背景に大胆に変更してさくさく開発できるのだ。
開発の種類が影響するのは、RCSを使うのか、Subversionか、はたまたSVKか、そういうところ。使わないという選択肢はありえない。
はてなのバトル漫画考はおもしろいな。
インフレを必然とせずに、バトル漫画のある意味理想であるところの「なんとなく勝ってるよう見えるほうが勝ち」という描写を合理化すると「言葉による闘争」になるのかもしれない。
まぁ、『LOVELESS』の魅力はそこじゃないんだけどさ。『妖精事件』はまんま巡礼の物語だったけれども、私からみるとがゆんの魅力は登場人物が何かを追い求める巡礼者であることだ。草灯があやし過ぎるのは勿論魅力だけれども。
ちなみに、『ジョジョ』は20代後半〜30代のプログラマさんと話すには必須の話題なので、設定はある程度聞き覚えてるけれども読んだことはない。「これが俺のスタンドだ」で笑えないと色々困るじゃないですか。
id:yuki_neko_nyanさんやid:moroさんが言う「仮実装に対するマーカーが欲しい」というのは実際の開発に置ける利便性という意味では分からないではないんだけど、捉え方は私の考えとは違う。
つまり、こういうことだ。
ABD飲み会を12月3日にやります。 はぶさんをお招きしてABDを中心にデータベースモデリングについて語る飲み会です。
ABDが気になって仕方がない我々Rails系Webアプリケーション開発者は、常々、はぶさんにABDのあれやこれやを聞きたいなぁと思っていたわけですが、はぶさんが「飲み会にでも呼んでくれれば話すよ」といってくださったので開催となったわけです。
ABDの適用範囲がどのあたりなのかはまだ探求段階ですが、多分Webアプリケーションだけということはなくて、非Webな業務アプリケーションは少なくとも部分的に含まれるでしょうし。T字型が好きな方も、ABDが好きな方も、関心のある方はどうぞご参加ください。
GraphvizをずっとGraphizだと思っていた。
フランクフルト学派とコペンハーゲン学派が何故かごっちゃになってる。
この季節はどこの店も高いなぁ。困る困る。
それはそうと、ホワイトボードとプロジェクタがあって、人数分の電源と無線LAN完備の居酒屋ってどこかにないかね。プログラマたちが喜んで通うこと請け合い。無線LANは最近たまにあるけど、なんで居酒屋にはホワイトボードがないのだ。世の中間違っとる。
締め切られてしまった。申し込んだつもりだったんだが。ここしばらく、個人開発とかその他で頭がいっぱいだったからなー。
昨日もろはしさんに指摘してもらったときにすぐチェックすればよかったんだが。
ま、いいや、開発の時間が足りなかったし。また来月よろしくおながいします。

ktkr!
Rubyにはコード片を表すオブジェクトが複数ある。Method, UnboundMethod, Procである。Continuationは少し違うけど、実行コンテキストを記憶しているオブジェクトという意味では近いものがあるか。『Ruby Way』にはこういういろいろがあることについて「驚くほどのことではありません」と書いてあるけれども私は驚いた。で、これらが微妙に違うのだ。困ったもんだ。いや、便利なのかもしれないが。
それで今回はこれらの概要を眺めてみたいと思う。
中秋の頃に書いた原稿を公開してなったのを発見したので公開してみる。
--
なんか、懐かしい夢を見た。私の、今思い出したばかりという脚色されてる可能性も高い記憶を頼りにするなら、この夢は幼児期から繰り返し、数回見ている夢の1つ。ストーリーは2つあって、前半は今は覚えてない。後半は天動説的なモチーフによって外惑星を、なぜが外惑星のみを配置した太陽系儀を構成していくような夢。途中から分析的思考がいくらか戻ってきて、夢の中でそれを行使した限りでは、そうだ、たしか、これはNHKスペシャル「地球大紀行」を見て、それに影響を受けて前半の夢の内容をもとにふくらませた夢なのだな。後半の冒頭部に、あの番組のナレーションがかぶってたしな。だとすると、見始めた時期はその辺だ。
それはさておき、夢の中で、途中から明晰夢化して、物語を追っているのとは別の思考の流れが評価したには、これは結構美しい物語なんだわ。いや、それでも夢の中の判断だから当てにならないけど。 明晰夢は久しぶりだな。
記事を書くにあたってRubyの変数スコープを考えれば考える程気持ち悪く思えてくる。
ダイナミックスコープは慣れれば後置修飾子以外はあまり困らないんだけど、やっぱりブロック変数が気持ち悪すぎる。それから、制御構文はスコープを導入しないのにブロックは導入して、class/defに至っては外側のスコープを継承しないっていうのが気持ち悪い。
まぁ、これは関数ベースの発想に毒され過ぎなんだけど。Rubyは第一にはオブジェクト指向であって、非オブジェクト的構造化言語の性質は(Kernelモジュールとかで)シミュレートされているだけだし、関数型言語の性質はほんのり残ってるだけ。関数型っていう意味であればPythonのほうがまだ近いよね。
Rubyはクラスベースのオブジェクト指向言語なんだから、classやdefが特権的であって、そこでまったく新しいスコープが入るのはまぁ、わからんでもない。でもなー、クラス定義中のローカル変数をメソッドが参照できるとやっぱりうれしいんだけどなー。いや、define_methodとかClass.newはなしの方向で。
どうにも気持ち悪いから同じコードをとりあえずGaucheとHaskellで書いてみたらすっきりした。しばらくGaucheの人になります。
ところで、pythonistaとかrubyistのgauche(scheme)版の単語はなんて言うんだろ?
メインマシンに使ってるTS-jade 915Gをちょっといじってみた。
いや、正直な話、Java VMは大好き。Javaの構文は、RubyやSmallTalkやC#を見るとはもう少し何とかならんかと思ってしまうけれど。でも、Tiger以降のAnnotationを活用する記述は好きだしなー。何より、Java VMよりの(Javaとしては)低水準のレイヤーをごりごり書くのは楽しいし。
そうして考えてみると、Windowsも、徹底してGUIを使おうとする指向の割にAppleと比べると洗練されてないのが嫌いなだけ。cygwin入れれば大概の不満はなくなるし。Win32 APIは手に馴染んでるから違和感ないし。COMは好きだ。COMは。
私の不満は結局皮一枚。肉より下は、気に入ってる。