第23回 Ruby/Rails勉強会@関西に参加

日本Rubyの会 公式Wiki - 第23回 Ruby/Rails勉強会@関西
http://jp.rubyist.net/?KansaiWorkshop23


他のLL言語も使ってみようかと年末からRubyを学習し始めたけど、これが非常に楽しい。完全に遊びなので楽しくて当たり前だけど。(別にPHPが嫌だという訳でもない。いい塩梅なLL版Javaという感じでこれはこれで好き。しかし名前空間が無いのはやっぱ困るし、スレッドで遊ぼうと思ったらそれも無いしなあ。)

という訳で、割と近所だったので参加してきた。

初級者向けレッスンという、簡単なお題が与えられてプログラムするコーナーの回答。拡張とか一切考えてないのでクラスも使わないしマジックナンバーベタ書き。もっとRubyらしいコードというのがありそうだが、とりあえずこんな感じ。(時間内には終らなかった・・・。)

  • 課題1. 九九の表
s = "  |"
1.upto(9) {|x| s += sprintf("%3d", x)}
s += "\n--+"
1.upto(9) {s += "---"}
s += "\n"
1.upto(9) do |y|
  s += sprintf("%2d|", y)
  1.upto(9) do |x|
    s += sprintf("%3d", x * y)
  end
  s += "\n"
end
print s
op = %w[+ - * /][rand(4)]
r = (0..9).to_a.sort_by {rand}
c = (0..9).to_a.sort_by {rand}
a = " #{op}|"
c.each {|x| a += sprintf("%3d", x)}
a += "\n--+"
0.upto(9) {a += "---"}
a += "\n"
q = a
r.each do |y|
  h = sprintf("%2d|", y)
  a += h
  q += h
  c.each do |x|
    a += (sprintf("%3d", x.send(op, y)) rescue "   ")
  end
  a += "\n"
  q += "\n"
end
print q + "\n\n" + a
  • 課題3. カラーチャート
s = ""
n = 1
File.open("rgb.txt") do |f|
  f.each_line do |line|
    r, g, b, name = /^(\d+)\s+(\d+)\s+(\d+)\s+(.+)$/.match(line).to_a.values_at(1, 2, 3, 4)
    nl = (n % 5 == 0 ? "<br/>" : "")
    s += sprintf("<div style=\"background-color: #%02x%02x%02x; width: 200; float: left;\">%s</div>%s\n", r, g, b, name, nl) if name && n += 1
  end
end
print s

勉強会は結構面白かったので、会場が近ければ毎回行こうと思う。


「純粋関数型言語Ruby(3) 30分でわかるMonad」by 氏久(ujihisa)さん、は、まあ全然分からないだろうと思ったけど、やはりさっぱりだった。あとでスライド落として見たけどやっぱ意味不明。(あとネコの画像が削除されていた。)ただ何だか面白そうなのでこれはもうHaskellにも手を出すか?などと思い『ふつうのHaskellプログラミング』をAmazonでチェックしたらマーケットプレイスで990円!!今買うしかない、と思い即購入したが、いつ読むかは未定。


Rails以外のWebアプリケーションフレームワーク」 by yhara さんでは、Rなるメソッドでクラスを返してそれを継承させるルーティング用クラスとか、変わったことをやってるCampingが気になった。といっても使ってみたいとかそういう事では一切なくて、作ってるwhytheluckystiffという人が気になる。ちょっと調べたらなんか凄いですこの人。

キツネとか。いい感じ過ぎる。下の本も欲しくなった。


Rubyのリフレクション」 by 大林さんは、下記エントリのような話のRuby版みたいなのがあって、それからリフレクションAPIについてコード例を見ながら説明。難しい。

しかしこれまで他の言語使ってて、「ここでリフレクションが必要」と思ったことって殆ど無い。作ろうとしている対象の、問題の本質的な部分のプログラミングの為にリフレクションが必要な事はほぼ無くて、例えばフレームワーク寄りな部分等では便利な事もあるだろうけど、何でもありになり過ぎて下手に多用するのは怖い。奥の手という感じ。リフレクション使わないと書けなくなりそうだったら、そこまでのどこかで何か間違ってるような気がしてくる。まあModule#instance_methodsなんかは普段ちょっとirbでメソッド調べたりする時に便利だと思けど、Module#define_methodなんかもどんどん使った方がRubyっぽいのか・・・?ちなみにRailsActiveRecordとかリフレクション塗れらしいけど、メソッドが「生える」という表現は初めて聞いた。

さて、ちなみにマーケットプレイスに出ていた『ふつうのHaskellプログラミング』は状態"可"(最低)で、50ページ以上に渡って書き込みあり、とのことだが逆に楽しみだったり。というのも、先日、これもマーケットプレイスで安く出ていたのでとりあえず買っといたSICPも、スヌーピーのステッカーとか書き込みとかあっていい感じだったので。(まだ読み始めてない。少し覚悟が必要。)基本的に、不潔でなければ書き込みとかあってもそれはそれで面白いと思う。