ぐんまRuby会議01へ行ってきました。
出発
午前中は家の用事などがあり、時間の余裕が無かったので、新幹線で行きました。
人生初の2階建て新幹線『E4系 Maxたにがわ』に乗りました。2階の窓から外を眺めていると、すれ違う『こまち』や『はやぶさ』のパンタグラフが丸見えで面白かったです。「パンタ丸見えアングル」です。
旅路
高崎駅から会場までは2kmくらいあったのですが、せっかく初めて降り立つ地なので歩いて向かいました。
途中、踏切があったのでカメラを構えていたら、湘南色の上越線が来たので撮影しました。帰宅後に息子に見せたら好評でした。
基調講演
最初は『初めてのRuby』の著者 yugui さんの基調講演でした。
家に IA-64, MIPS, RISC, Power その他多数のアーキテクチャのマシンを揃えて、それぞれのマシンで Ruby をビルドしているそうです。
「Ruby は今は WEB を主戦場にしているが、今後、様々な分野で活躍すると思われる。その時に備えて、いろいろな環境で動かせるように確認しておく必要があるのだ」とおっしゃっていましたが、正直それは建前で、変態なだけなんじゃないかなと思いました。でも、最後まで話を聞いてみると、決して変態だけではないという事が分かりました。本気で理想の世界を目指して取り組んでいらっしゃるようでした。(参考:ぐんまRuby会議01で発表した)
招待講演1 「プログラマー」 須藤功平さん
「プログラミングでつまづく人を少なくしたい。ではそのためにはどうすべきか」
「問題を”回避”しないこと。バッドノウハウをドキュメントに書いて回避するなどしていると、やはりつまづく人は絶えない」
「根本的な原因を直す事が大事」
「そのためにはソースコードがなければならない」
「そこでフリーソフトウェアですよ」
あえて OSS と言わずにフリーソフトウェアとおっしゃっていたのは、自由ソフトウェアの哲学からなのでしょうか。
質疑応答での咳さんとの絡みが面白かったです。Ruby コードの感想戦 【第 2 回】 WikiRの続きを読んでいるかのようで、須藤さんと咳さんの仲の良さが伝わってきました。
招待講演2 「サラリーマン」 大場光一郎さん
ロールプレイングゲームの内容を軸に、サラリーマンプログラマーとしてどのように生きてきたかというお話でした。
「就職先はコードが書ければどこでも….良くない!」
群馬の中心で愛を叫んだけもの
群馬でフリーランスエンジニアをやっている方2人のお話。
発注元の割合が「地元2:東京8」くらいで、リアルで東京に行かなければならないときに大変とのことでした。
LT
「アーティスト」関 将俊さん
「一度それを見ちゃったら、その後はそれを使うしか考えられないような、かつ、普通は思いつかないようなモンがカッコイイ。そういうのを作って見せびらかすためのものが、オレにとってのオープンソースだZE」って感じでカッコ良かったです。
「自由ソフトウェア GnuPG と Gnuk Token」g新部 裕さん
「お前ら、オープンソースって言うな!自由ソフトウェアだ!覚えとけ!」って感じで怖かったけど、カッコ良かったです。
「みんなで使おう!愉快に書けるWebアプリケーションフレームワーク Padrino」こしば としあき(@bash0C7)さん
「Padrino Blog Tutorialを見れば簡単に使い始められるので、みんな使いましょう!ついでに、開発にも参加しちゃいましょう!」というアピールでした。
「群馬vs東京」五十嵐邦明(@igaiga555)さん
「群馬と東京は人口が17倍も違う。勉強会をやろうにも、東京で50人集まるようなものでも、群馬だと3人だったりするのがキツい。東京はイベントが成立するための閾値が低い。そういう東京に、経験値稼ぎのためにやってきた」確かに、よほどニッチなテーマでも、数名は集まりそうですね。東京。密度は世界トップレベルでしょうし、ヘタしたら世界で一番、勉強会を開きやすい都市なのかもしれません。
「Ruby本から読み解くRuby考古学」斎藤ただしさん
『オブジェクト指向スクリプト言語 Ruby (ASCII SOFTWARE SCIENCE Language)』が出版されるまでのいきさつなどを語って下さいました。「俺たちは Matz の夢の中で生きてるんだ!」熱かったです。
「Rubyが私にくれたもの」寺嶋章子(@shokolateday)さん
「プログラムは思うように動かない、書いたように動く。という論理的な考え方は子育てにも生かされている。現在、Rails で保育園SNSを作ってます」保育園SNS、期待しています。休憩時間に2人のお子さんが乱入して来ましたが、大変可愛かったです。
ゆRuby Beyond
guRuby の方々は普段『初めてのRuby』を写経されているそうです。
このセッションでは著者の yugui さんを交えて、会場全員で写経を行いました。
対象は「9.6 Rubyの黒魔術」です。
当日、質疑応答で yugui さんのコメントが色々あったので、拾えた範囲でソースのコメントに書きました。
9.6.1 eval 族
# -*- coding: utf-8 -*- # 文字列評価 b = binding # 読者に binding とは何か?と思わせるために、b=binding を入れた while code = gets p eval(code, b) end
# -*- coding: utf-8 -*- # コンテキストのすり替え class CybernetedAndroid def initialize(name) @name = name end end proc = Proc.new { p self p @name } proc.call dicey = CybernetedAndroid.new("dicey1") dicey.instance_eval(&proc) dicey = CybernetedAndroid.new("dicey2") CybernetedAndroid.class_eval do def save; puts "saved" end end # do .. end と { } について # 返値を代入したい時には { } にしている dicey.save
なんか「手元に tk が入ってないー!」とかって声があちこちから聞こえたんですが、みなさん Ruby1.8 を使ってるんですかね?
# -*- coding: utf-8 -*- # 言語内 DSL require 'tk' TkLabel.new { text "Hello, World" bg "red" pack } TkButton.new { text "Close" command {exit} pack } Tk.mainloop
9.6.2 method missing
# -*- coding: utf-8 -*- class Reporter def method_missing(method_name, *arguments) puts "メソッド #{method_name} が次の引数で呼ばれました" arguments.each{|arg| puts arg} end end reporter = Reporter.new reporter.report reporter.emargency 1,2
9.6.3 set_trace_func
これ、pry で実行したら大変な事になりましたw
# -*- coding: utf-8 -*- # 最後に頼りになるのは debugger set_trace_func proc {|event, file, line, id, binding, classname| printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname } 1 + 1
9.6.4 継続
# -*- coding: utf-8 -*- require 'continuation' if RUBY_VERSION >= '1.9' 1.upto(10) do |i| if i == 3 $cont = callcc{|continuation| continuation } end print i, ' ' end $cont.call(nil) if $cont # call の引数に nil を入れるのはなぜ? # callcc の返値になるので、無限ループしなくなるという仕組み # callcc の cc とは current continuation の事 # 『プログラミング言語 SCHEME』を参照
質疑応答
Q: 他の黒魔術は?
A:この章には書いてないけど、ruby の黒魔術について語るなら、send メソッドの存在を忘れてはならぬぞよ
Q:『初めての Ruby』の次に取り組むべき本は
A: リファレンスマニュアルでも読んだらいいんじゃないですかね。もしくは幸福の王子本
※幸福の王子本というのはdRubyによる分散・Webプログラミングの事ですかね