復帰ポイントが溜まったので、交換すべく……(←違う)
が、レビューがつかないなぁ。久々なので気合入れて仕上げすぎたかな? まぁボチボチと、できることから再開しよう。
行ってきた。会場までたどり着けない自信満々だったので、まんたにさん→あゆさん→てったんという確実な経路を確保……と思ったけど、みんな待ち合わせに脱落しスギで、結局阪急六甲に一番乗り。
受付の準備をして、資料の印刷を手伝って、昼飯食って、受付を手伝って、タイムキーパー。はぁはぁだよ。いやしかし、素晴らしく見晴らしのいい会場だねぇ。 ありがとうございます >> てったん。
まつもとさんはさすがにプレゼンうまいなぁ。時間配分もうまくて、タイムキーパーなんていらない感じ。
Ruby1.9 については、ruby-dev が読んでておもしろいので、できるだけ目を通すようにしてたんだけど、 それでも知らない機能がいっぱいあった。
>> puts open("|cal", "r:UTF-8", &:read) 12月 2007 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 とか、 >> pr = ->(x){x * x} => #<Proc:0xb7c49200@(irb):3 (lambda)> >> pr.(3) => 9 とか。
-> は確かにフォントと傾き具合と催眠術でλに見えるなぁ。
質疑応答でちょっと聞いてみた。以下意訳。
immediate value の freeze は何事もなく self を返すのに、 frozen? が常に false なのはなぜ? freeze するとインスタンス変数の追加も出来なくなるけど、 immediate value の各値にフリーズの状態を覚えておく余地がない。 freeze がふつうに呼べちゃう方が問題かも?
とのこと(さっそく[ruby-dev:32610]で取り上げてくださっている :-)。何でこんなこと聞いたかというと、
>> CONST1 = ["foo", "bar", "baz"].freeze
みたいなコードを書いて安心しちゃったりするけど、
>> CONST1.first.upcase!
とかは出来ちゃうよ?から始まって、要素もフリーズするには?
>> CONST1.each(&:freeze).all?(&:frozen?) => true
よしよし。
>> CONST2 = ["hoge", 1].freeze >> CONST2.each(&:freeze).all?(&:frozen?) => false
なんでー?となったから。しかし、1 とか false とかにインスタンス変数を持てるなんて知らなかったー。
>> class Fixnum; attr_accessor :foo; end >> 1.foo #=> nil >> 1.foo = :bar >> 1.foo #=> :bar >> 1.instance_variables #=> [:@foo] >> 2.instance_variables #=> []
へー。ActiveRecord で id に対応する Fixnum に attributes をキャッシュする、とか妄想したり。
(あとで書く)
何か懇親会場までみなさんを引率することになったんだけど、 最初 30 人ぐらいいた人たちが、三の宮の改札では半分以下になってたかも。 もしもはぐれて会場に着くのに苦労した、という人がいたらごめんなさい。 そのままはぐれちゃった人はいなかったよね?
久々の参加でもやっぱり端っこに座ってました。でも今日はみんなで串揚げを食いまくる会だったらしいので、問題なし。
最後は EXCELSIOR CAFFE でお茶してお終い。 okkez さんと、Symbol を作りまくると to_i で Bignum を返すようなものができるのか?を効率悪く確認。
>> s = "a" >> loop{sym = s.next!.to_sym; break s unless Fixnum === sym.to_i}
みたいな。まぁ Debian は強い子なので、これぐらいではくたばらなかったよ。 途中で止めちゃったけど、Symbol.all_symbols.size で見る(←これまた時間かかりまくり)と、1733nnnn ぐらいまでは作られてた模様。まだまだ Fixnum の範疇だなー。