«前の日記(2007年08月30日) 最新 次の日記(2007年09月01日)» 編集

Matzにっき


2007年08月31日 [長年日記]

_ 有機化学美術館・分館:ナノチューブを溶かす意外なもの - livedoor Blog(ブログ)

ナノチューブと言うのは丈夫な素材で、強いうえに溶剤にも溶けない。 が、意外なものに溶ける、という話。

あらゆる溶媒を受け付けないナノチューブを溶かしてしまう「魔法の液体」は、実はコンビニで150円も出せば容易に入手できます。その液体の名はなんとサントリーの緑茶「伊右衛門 濃いめ」です。

どうやら学生が溶けないことを実証するため、いろいろやっているうちに 意外にも溶けたということのようだ。 世の中、分からないことの方が多いということを実感させる。

_ [Ruby] 思っているよりもずっとずっと人生は短い。- Rubyバブル

Seasarのひがさんのエントリから派生した会長のお言葉。

まあ、多少は仕方ないんじゃないでしょうか。そもそも「たのしさ」なんて訳の分からない物差しを持ち出して喜んでいながら冷静な評価を期待するのは虫がよすぎるでしょうし。

幸せになるユーザが増えるのを歓迎し、不幸になるユーザが増えるのを防ぎつつ、ハードランディングに備えて。

ていうか、Ruby自体はバブルにはならなさそうな。良くも悪くも。

そうかなあ。Railsほど前面に立ってないけれども、 バブルは確実にあると思う。バブルの大きさは小さいのかもしれないけど。

でなきゃ、私のところにこんなに講演の依頼が来たり、 NaClに分不相応な仕事が舞い込んだりしないと思うし。

で、現状が中身のない(あるいは薄い)風船であることを自覚した上で 中身を詰める努力を継続していった方がよいと考えている。 それを思ってのRubyアソシエーションだったり、 NaClといろんな会社との提携だったりするわけだし。

たぶん、バブルが崩壊しても、私にはあまりダメージはなさそうなんだけど。 もともと「お金」とは距離を置いてるし。

でも、最近上向いてきた収入が下がることは避けられないかなぁ。

_ [Ruby] Superators Add New Operators to Ruby

「<---」とか「++-」とか、元々Rubyには存在しない演算子を作り出すライブラリ。

「パーザーを書き換えるのか、しかし、Yaccのパーザーは簡単じゃないよな」と思ったのだが、 実際には演算子の組み合わせで実現するようだ。

つまり、

foo ++- bar

は、もともと

foo.+(bar.-@().+@())

と解釈されるので、この組み合わせで指定したメソッドが起動するように それぞれの演算子を再定義してやるということ。

なるほど。思いつきもしなかった。脱帽。

_ [Ruby] err.the_blog.find_by_title('Full of Ambition')

ブロックからSQLを生成するライブラリAmbitionについて。

User.detect { |u| u.name == 'Jericho' && u.age == 22 }

のようなコードからSQLを生成できる。

Mockオブジェクトを使って、式からSQLを生成するようなライブラリは Squirrelのような ものが以前からあったが、どうしても以下のような制限があった。

  • 「&&」や「!」のような再定義できない演算子が使えない
  • Mockオブジェクトを含む式の評価順序に気を使わなければならない
  • 結果として「Ruby文法を使ってSQLっぽい表現をするDSL」になってしまう

一方、AmbitionはRubyを使って条件指定すると、それがそのままSQLになる というもの。たとえば、

User.first
"SELECT * FROM users LIMIT 1" 

User.select { |m| m.name != 'macgyver' }
"SELECT * FROM users WHERE users.`name` <> 'macgyver'" 

User.select { |u| u.email =~ /chris/ }.first
"SELECT * FROM users WHERE (users.`email` REGEXP 'chris') LIMIT 1" 

User.select { |u| u.karma > 20 }.sort_by(&:karma).first(5)
"SELECT * FROM users WHERE (users.`karma` > 20) 
 ORDER BY users.karma LIMIT 5" 

User.select { |u| u.email =~ 'ch%' }.size
"SELECT count(*) AS count_all FROM users 
 WHERE (users.`email` LIKE 'ch%')" 

User.sort_by { |u| [ u.email, -u.created_at ] }
"SELECT * FROM users ORDER BY users.email, users.created_at DESC" 

User.detect { |u| u.email =~ 'chris%' && u.profile.blog == 'Err' }
"SELECT users.`id` AS t0_r0 ... FROM users 
 LEFT OUTER JOIN profiles ON profiles.user_id = users.id 
 WHERE ((users.`email` LIKE 'chris%' AND profiles.blog = 'Err')) 
 LIMIT 1" 

これはすごいぞ。で、これをどうやって実現しているかというと ParseTreeを使って 構文木を解析して、そこからSQLクエリを生成しているのだった。

頭いい。

でも、YARVで構文木って手に入るんだっけか。

_ [Ruby] ITmedia エンタープライズ:EMEA地域でRuby on RailsとC#の利用が拡大

EMMAって初めて聞いたけど「Europe」、「Middle East」、「Africa」の略らしい。 なんか広すぎて(世界の半分はカバーしてる)共通項がありそうな気がしないんだけど。

ま、いずれにせよ、Ruby on RailsとC#(ってフレームワークと言語を並べるのは不適切なような)が 人気が出ているという調査結果には、素直に喜んでおこう。


«前の日記(2007年08月30日) 最新 次の日記(2007年09月01日)» 編集