僕なんかついでにこっちも買ってしまいますよ」といって、これまたその正方形の隣で正方形にうず高く積み上げられた山からエッセンシャル版を取り上げてレジに並んで買っている。いらねぇとは言い難い雰囲気なので借りることにしたら次の日に本屋のカバーにくるまれたそれを貸してくれた。修道女フィデルマを読んでいたのでとりあえずそこらに置いておいた。翌日、家に帰ってすっかりそれを忘れていたので、あれカバーが付いているが(おれは本屋のカバーは手触りが悪いので嫌いだから、基本的に不要と断るか、仮につけられてしまった場合は速攻で捨てる。子供はそれほどラノベとか読まんし、というか判型も変だし、と一瞬悩んだ。思い出して、読み始めたらあっという間に読み終えた。夏海)それにしても頭の良い作者だなぁと、その発想に感心しまくり。後書きで「自分のことだと勘違い」とか書いているところをみると、少なくとも高校生向けに書いたのではないようだが、ビジネスマン向けだけで100万部が出るとは思えないから、老若男女、誰でも読めるようには考えているのだろう。専門家の通訳ね(専門家の閾値がずいぶんと下がったような気がするが、おそらく実際に下がっているのだろう。そこを見極めたというのも要点だな)。メタな構造がおもしろい。文体が内容に即していて、なるほどなぁ、こういう文章表現を使えば良いのか、などえらく感心する。惇生)で、なぜこちらも一緒に出るのか、そこはちょっと不思議な気はする。・というわけで、同工異曲の女子マネージャが、コビー7つの習慣を読むというのをこねくり回してみたが、おれにはだめだ。ASR再パッケージング雪見酒さんから、swinがバージョンダウンしているとメールを頂いたので、調べたらライブラリを作成するスクリプトを間違えていた(というか、もう少し複雑なのだが、どちらにしてもミスはミス)ので、修正。迷宮のRuby角さんから『メタプログラミングRuby』を頂いた(レビューに参加したから)ので、紹介します。Perrotta(どうでも良いけど、ペロッタって、日本語の語感としては相当ユーモラスな気がするのだけど。ペロッタが居るならばグリッタが居てもおかしかないし、二人合わせてペロッタとグリッタとか)というイタリアで彼女と猫と暮らしている人らしい。題名の通り、本書はRubyでメタプログラミングするための方法を説明したものです。したがって、Rubyのクラスとオブジェクトとメソッドとあれやこれやがどういうつながりになっていて、何を使えば何が起きるかがいろいろ書いてある本です。この本はいろいろ仕掛けがしてあって、そこがうまい。うまいというのは、読みやすく、わかりやすく、おもしろい、という意味。角さんの翻訳がうまい具合にくだけていて日本語としてもリズミカルで良い感じだというのがそれに大きく貢献している。全体は1つの大きな物語からできている。アノニマスな「あなた」はある会社に雇われたRubyプログラマだ。ビルはメンターにして相棒(ペアプログラミングするので文字通り)で、教えたがりで、変なやつだ。この会社にはレガシーなRubyコードがあり、それはレガシーなコーディング、つまり非メタプログラミングでコードされている。メタプログラミングを使わないコードというのは冗長だ。したがって保守しにくい。「あなた」のミッションはビルと一緒に、そいつをいかしたコードに直していくことだ。これまたアノニマスな上司というのがいる。いう上司かというと(P.133)「動くじゃない。」上司が認めてくれた。彼女は、トップレベルのスコープにmonthly_sales()メソッドや変数target_salesなどが散らばっているのが気に入らないらしい。「こんな感じのDSLになるといいのだけど。」上司はそういってキーボードに手をかけて、猛烈にコードを書き始めた。DSLにsetup命令を追加するよう依頼してきた。200end新しいDSLではeventとsetupを自由に組み合わせられる。これまでどおりにeventを実行するが、直接にsetupを実行する。上記のテストファイルでredflag.rbを実行すると以下が出力される。ビルの逃亡(略)というように、その場で仕様(いきなり山のほうが空より高い)を例示してクイズを出して逃げていく上司なのだ(この箇所では)。この回ではビルまで逃げ出していく。Anonymousクラブでディナーを取ることになっているからだ。そこで、「あなた」は自分でクイズを解かなければならない。上のsetupだのeventだのを実装することになる。(もちろん、読者はここで自分の解決策を作るべきだが)、解答案が提示され、どのような仕組みで実現したかが説明される。頭のなかでビルの声が響いている。オビ=ワン・ケノービのようだ。「トップレベルのインスタンス変数@eventsと@setupsは変装したグローバル変数のようなもんだ。●もっと良いDSLグローバル変数(と頭のなかのビルの声)を排除するには、「共有スコープ(119)」を使う。(コード)というように、リファクタリングフェーズとなる。(119)というのは、そのテクニック(魔術と呼ばれる)が説明されたページだ。このような魔術は、全部で34個あって、付録C『魔術書』にまとめられている。いうように、ある日が始まり、ビルと二人で提示された問題を眺め(ビルが提示する場合もある。――「C#にもすばらしい機能があったのは事実だ。......「usingってカッコいいよね!」ビルが大声でいう。あなたは同意してうなずく。「じゃあ、usingのRubyバージョンを書いてみてよ」彼はそう言って、ニヤニヤ笑っている。テストケースを見せてくれた。p.109――ここでもテストケースがあることに注目したいところ)、ビルがその問題を解くために必要となるRubyの仕組みを解説し、そしてコードがあり、会話があり、またコードという具合だ。この紹介で本書の雰囲気はわかってもらえただろうか?これはプログラミングの本であり、技術解説書であり、(ジョエルの本やポールグレアムの本のような)ハッカースタイルのユーモアにくるまれたソフトウェア開発の一つのあるべき環境の提示である。Perrotta/角征典)RubyKaigiに行くのならあせってクリックしなくとも、28(土)の12:00からサイン販売会があるのでそこで買うのも良いかも(隣になぜかおれもいる)。これ書いている時点では書影がなくてつまらないので、おまけ。BOF終了後の歓談会メモTechEDのBOF終了後、@ayuminに先導されて焼肉屋へ行く。@ironshay、@ayumin、@shinjkとおれ。非常に快適な4人組であるが、店を選ぶ。以下、メモというわけではなく(おれの英語理解度は30%程度なのでまさに当たるも八卦の占いの宣託を聞いているが如し)、おれの考えも混ぜ込んでいる。ヘブライ語ヘブライ語というのも(アラブ諸国の言葉がそうだというのは知っている。一応、別口として扱うべきなのか、それともヘブライ語からアラビア語が生まれた(ユダヤ教からイスラム教が生まれたのと同様に)のか、右から左へ綴るので、技術書を読むと、右から左の本文と左から右へのリストが交互に出てきて、混乱してしまうよ(冗談だと思うが)とか。人口イスラエルには700万人が住む。市場が成立する規模じゃない。ヘブライ語じゃなくて英語が必要だ。一億を超える人がいるなんて。TechEDで驚いた。プレゼンターが日本語で話していて、会場の連中も日本語を話している。いうか、英語が通じないよ。Friedman)DLRは、その下のCLRによって実行される。CLRはその下のBLRによって実行される。BLRはその下のALRによって実行される。その直下はALUだと思う。4世代目イスラエルのデベロッパーも4世代目を待つらしい。MVCが、Railsの影響下にあるのはわかるね(Strutsではなく)。Railsの影響下の製品を出荷する時点で、Railsは遥か先へと歩を進めている。追いつくことはできないだろうな。ASP.NETの2つのフレームワークおれの目下の関心ごとである、WebFormとMVCの選択について訊く。WebFormは10年の歴史がある(4世代目のあれだ)。それはそれとしてAjaxやJavaScriptを組み込むことを考えてみよう。MVCのほうはシンプルだ。Shayの発音シャイさんなのか、シェイさんなのか訊いたら、本当はシャイだが英語じゃシェイなんで皆そう呼ぶと教えてくれたような気がするのだが、おれの聞き取り能力だと、必ず最後に「気がする」がつくところがよくないなぁ。赤と黒スタンダールもそうなんだが、赤と黒というと、レミゼラブルの革命歌(それにしてもうまくパスティーシュしている)を思い出す。Miserables)赤は、若者の血の色。黒は、老人の怒りの色。開発者会議のこと参加してないので、中田さんから教えてもらう。うささんがx64に専念したい(かどうかはわからない)ので、MS-Win32のサポートをやめるつもり。(おれの予想としては、16ビットハイブリッドが足を引っ張っているから面倒というのがあるのではなかろうか。・拡張ライブラリからの取り方ClassBoxの導入(Binding部が未定なので、発表内容とは変わるかも。JRubyとのすり合わせとか)LazySweepGC(trunk導入済み)ほかにもあったと思うが思い出せないのでまとめが欲しいな、とのこと。開発者会議のこと(続)アジェンダを見ろと。2日目この日は、JRubyKaigiでLTやった。発表資料なんか最後まで走りきれなかった。走りきれなかったといえば、大場さんのRAVAデモ(jrubyの上でravaを動かして、その上でjrubyを動かして、その上ででravaを動かして、というのを12単衣にして、美しき日本のRubyというのを示すということに最終的にはなるはずのもの)が、まったくそこまでたどり着けなかったのが残念というか、観ていると余裕たっぷりに時間を使っているので予定調和としてデモまでたどり着かないのかと思った。後で聞いたら実際に動く(JRubyはクラスが不足しているから無理だけどfibは動く)というか動かすようにするためにravaのrequire循環参照のバグを潰さなければならなくてひどい目にあったとか。その成果物のrava。あとは、えんどうさんのquine(特にエンディングの5分間実行にかかる大作)はすげぇなぁとか、akrさんのプレゼンは相変わらずおもしろいなぁとか。akrさんのプレゼンで、やたらと時間を気にしているので、最後の最後によほど重要なことを言うのだろうと思ってwktkしていたのだが、はて、なんだったのだろうか。集めたネタをすべて見せたいというような単純な話ではないと思うのだが。forkするとファイルハンドルが子プロセスに受け継がれるからopen-fork-closeの順で記述すると子プロセスの処理時間に引っ張られる可能性があるとか。非同期シグナル(EINTRの話だと思う)の話は最初から省略とか書いてあったように見えたし。feofの話はどうもおれも引っかかったか引っかかっているのを見たことがある気がした。最後はユースケース重要というまとめかな(確かに最後が重要だったようだ。事例を集めるとか他の言語はどのような仕様となっているかとか)。後でゆうぞうさんと、httpsでのgets+sysreadは、もともと1行目のconnectに対する応答を受信しない限り(というか、受信してこちらがリクエストを送らない限り)、後続のデータは来ないので問題とはならないのではないかとかいう話をする。proxyのプロトコルについてはその通りだけど、まあ相手次第だからかも(特に例が例だし)、とか。[確かに良い例は出ないですねぇ。何となくやってしまいそうな気はしますが。[JRubyKaigi登壇ありがとうございます。スライド公開しました。[最後まで見られなかったのは残念ですが、おもしろいLTだったと思います。RubyKaigi3日目スタッフのみなさんありがとうございました。来年で一区切りなのか、と思うと感慨も湧く。メモリ使用量のprofilerのセッションは、動作を示す資料と、効果を示す資料が入っているのが大きいのだな、と思った。NArrayもその意味では同じか。AOTも地味におもしろかったが、さてどういう方向へ進むのだろうか。LLVMのは、rubiniusとの比較についての質問が強烈な印象。BigDecimalは掛け算の高速化の話が聴くまではわかっていなかったのでおもしろかった。計算量を減らすのが高速化っていうのはそれはそうだなと聴けば納得。昼休みは高橋さんのバナナの叩き売りのような(話芸という意味で)じゅんく堂セッション。言えば、まったく買う気がなかったWave本を高橋さんの説明があまりにおもしろそうなので買ってしまった。ほとんど役に立たないけれど、プロトコルの説明とかもしかしたら役に立つかもとかいうような(いざ、書こうとすると思い出せない)いい加減な説明なのにネットワークプログラマの食指を動かさせるには十分。サービス概要、APIからオープンソースWaveサーバーまで――リアルタイムWebの最前線(あんどうやすし)午後は企画部屋。予想より参加者が多くてちょっと驚くが、そうなるとUSBメモリ1個で回覧というのは無理があると思い知る。setup.rbを完全に失念していたのは手痛かった(予定が崩れるとパニックになるのはいかにもまずい)。進め方については反省点が多い。全体としては早めというよりもこまめに観て回るべきとか、手元については栞をはさんでおくべきだったとか、いろいろ。・setup.rbがextの下のextconf.rbを認識しない問題。extにcdするとちゃんと認識する。・ext生成中の謎エラー(再実行の都度止まる場所が変わる)ほぼ同じ環境のはずなのに、差が出るというのが不思議だが、さっぱりわからない。disable-win95の意味がわかったこととか。[arton道場の参加者です。[デバッガ走らすとこまでもうちょっとですね。いうか、至らないところが多くてすみませんでした。tDiaryの更新3.0に更新。本当に、日記そのものについては何もいじらずに移行できる作り方に感銘を受ける。本当にUTF-8になっているのか見てみたり。