RubyConf2008 3日目

いよいよ最終日。
明日の飛行機は早朝なので忘れないうちに、シャトルの手配と Express-Checkout の手配をしておきました。

  • Matz Q&A

今年はじめて RubyConf に参加してるひともけっこういるからか、去年やその前などとさほど変わらない質問も。質疑の詳細は、いずれ公開される irc ログを参照してください。
卜部さん、レオさん++。

JavaScript でいい言語なんだけど、duplicate なコードが悲しいよね、ということでクライアント(ブラウザ)で Ruby を動かせるようにしてみましたというお話。

    • 最初に試したのは JRuby (アプレットで使うのはセキュリティとかめんどい)
    • Silverlight (当時はまだ使えないレベルだった)
    • HotRuby (興味深い)
    • 最終的に rubyjs を採用 (JS を生成する Rubyコンパイラ、ObjectSpace からコードを取得し、ParseTree で JS に変換みたいな)

発表者の以前のエントリ。

MysteryCoder: Write your javascript in ruby with rubyjs
http://mysterycoder.blogspot.com/2008/06/write-your-javascript-in-ruby-with.html

上記エントリのなかでも使っていますが、Kernel#` を書き換えて JavaScriptリテラル表記にしていますね。
その他、ふつーに UnitTest が動いたりします。ブラウザ上で実行してました。

Yet another Ruby to JS compiler として Red というものも紹介。出力の JS が rubyjs よりも読みやすく、コミュニティが活発だそうです。でもメタプログラミングには弱いとか?

Sam Ruby の代打で Dave Thomas と David Balack が講演してました。Dave が話して、David がコメントするといった、なんとも豪華なセッションです。
スクリーンには、左右にシェルをふたつ表示して、Ruby1.8 と 1.9 の irb を表示しつつ、1.9 の特徴を淡々と紹介していきました。

01:36 ko1_: まつもとさん以外が紹介すると説得力が高い

www


{sort: "desc", limit: 10} #=> {:sort => "desc", :limit =>10}
a = 1
b = "cat"

proc = lambda do |a|
  a *= 99
end

puts proc.call(2)
puts a
puts b

# 1.8
198
2
198

# 1.9
198
1
198
    • ブロックパラメータ
proc = lambda {|x, y=1, z| p x, y, z}

# 1.9
proc.call(10, 20)
=> [10, 1, 20]

proc.call(10, 20, 30)
=> [10, 20, 30]
    • Fiber の話

(snip)


    • Enumerator の話
a = [1, 2, 3, 4, 5]
enum = a.to_enum
enum.each{|x| p x * 10}
enum.select{|x| x > 3}

enum = a.enum_for(:each_cons, 2)
enum.find{|x,y| x == 3}
=>[3,4]

enum.to_a
[[1,2],[2,3],[3,4],[4,5]]


animals = %w{and bee cat dog}
counts  = [4, 2, 8, 1]

e1=animals.to_enum
e2=counts.to_enum

loop do
  puts "#{e1.next} #{e2.next}"
end


enum = Enumerator.new do |y|
  y << ...
  y << ...
  y << ...
end

enum.each{...}
enum.sort{...}



string ="ant"
string.each_char.with_index do |char, index|
  ...
end
    • to_proc
map{|a| a.hoge} # = map(&:hoge)

[1,2,3].inject(&:+)
[1,2,3].inject(:+)
[1,2,3].inject(100, :+)  # => 106
    • 鬼車

(snip)

    • Character Encodings
"cat"[1]

# 1.8
97
# 1.9
"a"

String#size
String#bytesize

Jim Weirich と Joe O'Brien? の寸劇。
まずいコードを Jim が指摘していくという展開ですが、コミカルすぎて説明不能...。あとで動画みてください。 (^^;


お馴染みの Seattle.rb の面々が順番に最近やったことを披露。デバイスを制御してみたり、scheme を実装して RESTful な F/W にしてみたり、XPathCSSセレクタが使えるxml/htmlパーサーをつくってみたり、とか。


最後に The History of Seattle.rb ということで、Ryan Davis をはじめとした面々の昔の写真が暴露されてましたww

P1130723





今年は、並列実行の話が多いですね...
そして、発表のかなりの時間 (半分ないし半分以上) をかけて、背景、というか問題意識を話す傾向が強いです。このセッションではアクターの話を前半ずっとしてました。

あまりよくわからなかったので (かなり早口で意識も朦朧としてたので...)、Dramatis 自体の内容はこちらを見てください。 <(_ _)>

dramatis - Dramatis - Dramatis
http://dramatis.mischance.net/

興味深かったのか、質疑はかなり活発でした。


  • そして...

以上をもって RubyConf2008 終了です。
とくに最後に全体セッションもなく、3トラックばらばらに gdgd な終了です。そのまま帰路につくひと、PC に向かうひと、集って話してるひとなど、いろいろです。1つの会場では、延々と交代しながら発表をしているようでした。アナウンスはなかったけど、隠れ RejectConf があったのでしょうか!?


夕食はまつもとさんと David Black、Jim Weirich らの集りに便乗 (ぎゅうぎゅうに...) させてもらい、ホテルからちょっと離れたレストランへ。シーフードと巨大なステーキを堪能しました。時差とカンファレンス疲れのせいもあり、次第に日本人組はひとりまたひとりとツブれていましたww

自分も明日ちゃんと起きて空港に向かえるか心配でしたが...なんとか。 (^^;