第47回 Ruby/Rails勉強会@関西に行ってきた

第47回 Ruby/Rails勉強会@関西でいつものように京都女子大学へ。

おけいはん七条駅に着くと、いつもと違って女子大生がいない。*1
「女子大生いないよー」と tweet しかけて止めた。*2

Rubyist のための HTML5 入門 - Content models - by Sixeight さん

HTML5 ややこしい。
こんなにややこしいなら XHTML でも良かったんじゃ?

あと、HTML を手書きする人が減ってる現状を考えれば、ブラウザがもっと strict になってもいいと思うよ。

redmineとgitを建築プロジェクトに使ってみた by waku さん

これは非常に興味深い事例紹介。

  • バックアップになる
  • 公開鍵でアクセス制御
  • コマンドを 5つに絞る

↑だけで git できるのうらやましい。

RailsDevCon2010の報告 by アジャイルかわばた さん

cucumber の話が面白かった。

シナリオがちゃんと動かなくても気にしないとか。
単に仕様書かいたと思えば動かなくてもなんてことないなww

フリートークセッション by むりょうい さん

もうちょっと活発に議論っぽくなれば、もっとよかった。

何回かやれば、みんな慣れてくる?

Ruby初級者向けレッスン by こなみ先生

アシスタントの女子大生がドタキャン (>_<)

練習問題の詳細は配布資料を参照。

メソッドに可変長引数を渡したりする話
  • 練習1-1

こんな感じ?

def sum_all(*ary)ary.inject(&:+)end

sum_all 1, 2, 3, 4, 5   # => 15
  • 練習2-2

計算結果を型変換するのか、型変換した値で計算するのかが不明。

とりあえず後者でいく。

Ruby1.9 なら簡単

def sum_all(type = :float, ary)
  ary.map{|i|__send__(type == :int ? :Integer : :Float, i)}.inject(&:+)
end

sum_all [1, 2.5, 3, 4.5, 5]           # => 16.0
sum_all :int, [1, 2.5, 3, 4.5, 5]     # => 15

Ruby1.8 だと、どうすれば?

def sum_all(*ary)
  type = ary.first == :int ? :Integer : :Float
  ary.last.map{|i|__send__(type, i)}.inject(&:+)
end

sum_all [1, 2.5, 3, 4.5, 5]           # => 16.0
sum_all :int, [1, 2.5, 3, 4.5, 5]     # => 15
正規表現の話
  • 練習2-1

属性って ' で囲んでも良いんだっけ?

%r|<a\s.*?href=(["'])(.*?)\1.*?>(.*?)</a>|m

$2 が URL で、$3 が名前になる。

    • \s が改行にもマッチして便利*3
    • href 以外の属性は無視
    • "url" または 'url' (開始、終了のクオートが一致していること)
    • .*? は本当に便利
  • 練習2-2

前回も同じような練習問題あったなw

require 'open-uri'

def anchors(url, encode = Encoding::UTF_8)
  open(url, &:read).
    scan(%r|<a\s.*?href="(.*?)".*?>(.*?)</a>|m).
    map{|url,title|[url, title.encode(encode)]}
end

url = 'http://www.google.com'
open('google.utf8',  'wb'){|f|f.puts anchors(url)}
open('google.eucjp', 'wb'){|f|f.puts anchors(url, Encoding::EUC_JP)}
open('google.cp932', 'wb'){|f|f.puts anchors(url, Encoding::CP932)}

*1:休講だったらしい。

*2:ドタキャンが増えると困るから。

*3:あれ? バックスラッシュが入力できない。