http://jp.rubyist.net/?KansaiWorkshop28
行ってきましたRuby勉強会。6回目。(テンプレート化)
5時起き生活に切り替えて3日目、まだ早寝の習慣が身に付いてくれないので、睡眠時間が足りず一日中ぼーっとした感じが抜けなくて、全体的に発表と自分の距離が遠い感じがしてところどころ聞けてなかったり、逆に集中してたりと変な感じでした。
これで濃い発表がばんばんくる回とかだったらまずかったのですが、そんな事はなく助かった感じです。
今回は、
- エラトステネスの嵐―Rubyの集合演算を活用する by こなみさん
- git - 分散バージョン管理システム by 舘野祐一さん
- Ruby 初級者向けレッスン 第 22 回 by okkez さん
というラインナップ。
エラトステネスの嵐―Rubyの集合演算を活用する by こなみさん
最初に提示した素朴な実装から、だんだんと効率の良いものに書き換えていくという筋立てがおもしろくて、Rubyで集合お扱う時の触りも勉強できるお得感がありました。
アルゴリズムにはあまり興味が持てなくて研究室でやらざるを得ない状況になってはじめてちゃんとやったのだけど、本を読んでもやっぱりピンとこない。そういう人にとってはこうやって実例で改善していく仮定を見るのこそアルゴリズムを勉強するうえで重要だなと感じました。
あと、ベンチマークの取り方とか、プロファイルの使い方をはじめてちゃんとしった知った気がします。今までは必要なときにコピペですませていたので。
git - 分散バージョン管理システム by 舘野祐一さん
gitかわいいよ、git。
gitの魅力をすばらしくうまく表現した内容。gitは大好きだけど、それをうまく言語化できないので、gitを知らない人にもgit良いかもと思わせる舘野さんはすごい。というか僕が言語化が苦手すぎるのがまずいのか。
gitの使い方については僕はかなり適当な知識しかもってなくて、使えてるから良いやから出れていない。なので、こうやって正確な知識を得て、それを伝えてくださる人がいるのは非常に助かります。(自分で調べる気ないのかよ)今回もかなり勉強になって、git力が結構あがったのではないかと思います。
githubについてもここ最近watch以外の行動を出来てなかったのが、こんなにおもしろいんだよといわれてモチベーション上がって触りたくなってきました。
ホワイトボードのRubyが好評で作った甲斐がありました。(暇つぶしだったという噂も)
Ruby 初級者向けレッスン 第 22 回 by okkez さん with モリさん
irbのお話。irb全然活用できてなかったことに気づきました。設定ファイルとか書いた事無いし、単純な使い方しかできてませんでした。irbも実は深いなぁ。
演習問題は、前半はさらっとやって、計算100つくったり、設定ファイル書いたりしていました。この段階で頭がバッテリー切れを起こしていたので、あまり集中できてなくて真面目にできてなかったのが失敗。
irbの結果の非表示は
>> 1 + 1 => 2 >> conf.echo = false >> 1 + 1 >> conf.echo = true => true
という感じみたいです。直感的で良いですね。on/offならもっと直感的だったんだけど、そこは仕方ないか。(offとやってエラーがでた)
計算100は氏久さんみたいなスマートな実装は出来なかったので、とりあえず動くものを。irb全然関係無くなってしまったのはご愛嬌。
tapを使ってみたんだけど、なんだかかゆいところに手が届く感じで気に入りました。
class Hundred def initialize(difficulty) @difficulty = difficulty @correct = 0 @error = 0 end def question case @difficulty when 1 "%d %s %d = " % [rand(10), [:+, :-, :*].choice, rand(10)].tap {|a, op, b| @ans = a.send(op, b) } when 2 "%d %s %d = " % [rand(100), [:+, :-, :*, :/].choice, rand(100)].tap do |a, op, b| unless b == 0 || a < b || a % b != 0 @ans = a.send(op, b) else retry end end end end def answer(ans) if ans == @ans @correct += 1 '正解' else @error += 1 '不正解' end end def result(start) "正解 :#{@correct}\n" + "不正解:#{@error}\n" + "時間 :#{Time.now - start} sec" end end if $0 == __FILE__ puts '計算 100 開始' print '難易度を選択してください。1:かんたん 2:むずかしい > ' difficulty = gets.chomp.to_i case difficulty when 1 print '1:かんたんを開始します' when 2 print '2:むずかしいを開始します' else puts '1か2を選択してください' exit 1 end print ' plese enter > ' gets h = Hundred.new difficulty start = Time.now 100.times do |i| print h.question puts h.answer gets.chomp.to_i puts if (i+1) % 10 == 0 puts "#{i+1}問突破" puts end end puts h.result start end