第 26 回 Ruby/Rails 勉強会

第26回 Ruby/Rails勉強会@関西
レベル高すぎてほとんど理解できなかったんだけれども、ものすごい刺激は受けたしキーワードは沢山もらったのでこれからぐぁんばる。本当に行っただけの価値はあった。

Ruby off Rails

ストヤンさんの発表。Railsなしならどう書く?な内容。

  • Thin
  • sequel
  • ebb
  • Rack
  • Ramase

などなど。Rackが凄い面白かった。
http://rack.rubyforge.org/
server plugin interface って感じ。lambdaを貼付ける感じで作る。海外の発表者の方はオマケで面白いブツを入れてくる人が多いけどストヤンさんもそういうタイプの人みたい。
http://www.freehugscampaign.org/
こんなのが出てた ^^

Ruby on Rails で作られたアプリを動かす5つの方法

okkez さん

いろんなサーバでの設定方法とベンチマーク紹介。
CGIがかわいそうなほど遅かった上に信頼性でも微妙だった。見た感じ他はドングリの背比べだった。それでも使ってる人からするとやはりその違いは大きいみたい。WEBrickが思っていたより速いという結果は驚いた。
起動コマンドに手が馴染んでるから、という理由でokkezさん個人的にはMongrel pushだった。無理に使いにくい工具使うより手に馴染んだ工具を選ぶって凄く職人チックで感心した。自分の環境見たらいつの間にかmongrelになっていた。いじった覚えないんだけど。。。

Rubyで快適に連投する11の方法

ujihisa さん
視点が面白い上に、「俺は何をやりたくて、こうした」というのがものすごくハッキリしていて理解しやすかった(その目標が連投なんだけどww)。巧い。数秒の手間を惜しむ。開発時間と使用時間の和を最小化。

おまじないがいっぱい。voodoo programing。

たまたま最近OpenCourceWareを聴き始めたんだけど、uuuuというので勉強会をやってるって教えてもらった。行きたい。ちょっと会社から遠いけどなんとか行ってみたいな感じ。というか行く。

初心者向けレッスン

自分はこれのために来たようなもんだ。適当においとくと添削してもらえるのかな?

問題1 なべあつ(?)問題

3 の倍数と 3 の付く数字で ……
3 の倍数と 3 の付く数でアホになる
5 の倍数で鶏になる

(1..100).each {|i|
  if i % 3 == 0 || i.to_s =~ /3/
    puts "Aho"
  elsif i % 5 == 0
    puts "Cook-a-doodle-doo"
  else
    puts i
  end
}



追記:
大バカ・・。15の倍数の時は両方出さなきゃだめか。添削してもらう前で良かった。

(1..100).each { |i|
  msg = ""

  msg << "Aho " if i % 3 == 0 || i.to_s =~ /3/
  msg << "Cook-a-doodle-do" if i % 5 == 0
  msg << i.to_s if msg == ""

  puts msg
 #system("say #{msg}") or exit
}

macのsayコマンド使って遊んでたらsystem()を連投(!)すると C-cがsystemのプロセスに飛んでしまう。C-z&killしながら困ってたら会場でid:hitode909さんに教えてもらった。 or exitすれば良いとのこと。

(1..100).each {|i|
  if i % 3 == 0 || i.to_s =~ /3/
    mess = "say Aho"
  elsif i % 5 == 0
    mess = "say cock-a-doodle-doo"
  else
    mess = "say "+i.to_s
  end
  system(mess) or exit
}

なるほど。勉強になりました。

問題2 99 Bottles of Beer on the Wall

速攻で書いたらサスゲに汚い。

def _(n)
  return n if n >0
  return "No more"
end

def btl(n)
  return "bottle" if n == 1
  return "bottles"
end

100.step(0, -1) { |i|
  output = ""

  before = _(i)
  after  = _(i- 1)
  bottle_bfr = btl(before)
  bottle_aft = btl(after)

  thirdline = i==0? "There are no more to pass around\n":
                    "Take one down and pass it around\n"

  phrase1 = "#{before} #{bottle_bfr} of beer "
  phrase2 = "#{after} #{bottle_aft} of beer "

  puts phrase1 + "on the wall"
  puts phrase1
  puts thirdline
  puts phrase2 + "on the wall"
  puts ""
}
問題3 石取りゲーム
turn = gets.to_i
n = rand(90) + 10

def compute(n)
  if (n % 4) - 1 ==0
   puts "It's not fair!"
   while rand(3) != 0
     puts "no, i won't let you get..."
     gets
   end

   puts "OK, OK,....."
   return rand(3)+1
  end
  (n-1) % 4
end

while n > 0
  print "remain #{n} : "
  case turn
  when 0
    nget = compute(n)
    if nget > n then nget = n end
    puts "my turn : I took #{nget}"
  when 1
    begin
      print "your turn : "
      nget = gets.to_i
    end until (1 <= nget && nget <= 3)
  end
  turn = 1 - turn
  n -= nget
  if n == 0
    if turn == 1
      puts "I lose"
    else
      puts "I win!!"
    end
  end
end

ゴネる、の部分ってこんで良いんだろうか?