ぐんまRuby会議へ行ってきました

ぐんまRuby会議01へ行ってきました。

出発

午前中は家の用事などがあり、時間の余裕が無かったので、新幹線で行きました。
人生初の2階建て新幹線『E4系 Maxたにがわ』に乗りました。2階の窓から外を眺めていると、すれ違う『こまち』や『はやぶさ』のパンタグラフが丸見えで面白かったです。「パンタ丸見えアングル」です。

E4系Maxたにがわ

旅路

高崎駅から会場までは2kmくらいあったのですが、せっかく初めて降り立つ地なので歩いて向かいました。
途中、踏切があったのでカメラを構えていたら、湘南色の上越線が来たので撮影しました。帰宅後に息子に見せたら好評でした。

湘南色の高崎線

基調講演

最初は『初めてのRuby』の著者 yugui さんの基調講演でした。
家に IA-64, MIPS, RISC, Power その他多数のアーキテクチャのマシンを揃えて、それぞれのマシンで Ruby をビルドしているそうです。
「Ruby は今は WEB を主戦場にしているが、今後、様々な分野で活躍すると思われる。その時に備えて、いろいろな環境で動かせるように確認しておく必要があるのだ」とおっしゃっていましたが、正直それは建前で、変態なだけなんじゃないかなと思いました。でも、最後まで話を聞いてみると、決して変態だけではないという事が分かりました。本気で理想の世界を目指して取り組んでいらっしゃるようでした。(参考:ぐんまRuby会議01で発表した

様々なアーキテクチャでRubyをビルドするというyuguiさん

招待講演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プログラミングの事ですかね


カテゴリー: イベント パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です