第29回 Ruby/Rails勉強会@関西
投稿者 okkez
行ってきました。
ちょっと睡眠不足気味だったので各セッションの記憶はあまりなかったりします。
なので今回は行ったという記録のみ残しておきます。
投稿者 okkez
行ってきました。
ちょっと睡眠不足気味だったので各セッションの記憶はあまりなかったりします。
なので今回は行ったという記録のみ残しておきます。
投稿者 okkez
日本Rubyの会 公式Wiki - 第28回 Ruby/Rails勉強会@関西
行ってきました。
いろいろやってたらあまり聞けなかった。残念。
かわいいよ git かわいいよ。
今、作ってる某課題の管理はこれでやってみようかなぁ。
git-svn の使い方とか調べたい。
今回は irb について。
演習の後半は irb 関係ない感じでいきました。
演習の解答例は wiki にアップしたのでそちらを参照してください。
とりあえず、うちの ~/.irbrc です。refe2 のところはあまりうまく動かない。 まともに実装しようとすると bitclust を require してごにょごにょする必要があったりなかったりする。
#!/usr/bin/ruby
# ri を使えるようにする
# 例.
# irb> String.ri
# irb> ri String # same as above
# irb> String.ri 'reverse'
# irb> ri 'File.new'
def ri(*args)
puts `ri #{args.join(' ')}`
end
class Module
def ri(meth=nil)
if meth
if instance_methods(false).include? meth.to_s
puts `ri #{self}##{meth}`
else
super
end
else
puts `ri #{self}`
end
end
end
# refe2 も使えるように
module Kernel
def r(*args)
puts `refe2 #{args.join(' ')}`
end
private :r
end
class Module
def r(meth = nil)
if meth
if instance_methods(false).include? meth.to_s
puts `refe2 #{self}##{meth}`
else
super
end
else
puts `refe2 #{self}`
end
end
end
IRB.conf[:EVAL_HISTORY] = 1000
# タブ補完を有効にする
require 'irb/completion'
# simple prompt
IRB.conf[:PROMPT_MODE] = :SIMPLE
# ヒストリーを有効にする
require 'irb/ext/save-history'
IRB.conf[:SAVE_HISTORY] = 1000
IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-save-history"
# サブ irb の設定
IRB.conf[:IRB_RC] = lambda{|_|
IRB.conf[:IRB_RC] = lambda{|conf| conf.prompt_mode = :DEFAULT }
}
require 'pp'
require 'yaml'
投稿者 okkez
行ってきた。@京都女子大学
最初ネットワークに全くつながらなくて、ust 配信に失敗してた。 なので、内容の方があまり聞けなかった。
途中から真剣に聞いたけど、わかりやすい説明で非常によかった。
Matz のバランスボール写真が素敵だった。多分次のるびまの著者近影はアレになると予想。
あと、あゆさんの営業活動が素晴らしかった。
オブジェクト指向。
ポリモルフィズムの説明のところが、やっぱり引っかかった。
初級者レッスンに対するアンケートの回答は全部読んでいるので、次回以降改善されるかもしれません。
京都大学でも聞いたのであとで書く。
投稿者 okkez
添削しようと思って、日本Rubyの会 公式Wiki - 第26回 Ruby/Rails勉強会@関西 にトラックバックをしているサイトを見たけど、みんなそれぞれなりに上手に書いてるなぁと思った。
回答例は 日本Rubyの会 公式Wiki - Ruby勉強会@関西-15 を見てもらうことにしよう。
投稿者 okkez
日本Rubyの会 公式Wiki - 第26回 Ruby/Rails勉強会@関西 に行ってきた。
当日の資料とかログとかは wiki に上がってるのでそちらを参照。ここでは個人的な感想とか。
Rails 使わなくても web アプリケーションは作れるよねって話。
フレームワークだけでもいっぱいある。
特に nginx + Thin cluster と Rack が気になった。 Rails 2.1 で Rack 対応が入るらしい。
自宅サーバで動かしているアプリの構成を考え直したい。
詳細は、資料とログを参照してください。
とりあえず、あの資料をまとめ直してブログで記事にしようと考え中。
諸事情であまり聞いてなかったけど、受けてて嫉妬。 lingr のチャットも盛り上がってたし。
今回は相方にほとんど喋ってもらうようにしたけど、アンケートによるとあまり評判は良くなかったみたい。 まあ、別に一般のお客さんがメインの対象では無いのでこれはこれでアリだと思う。
演習問題の解答例はなんとか一週間以内に出したいところ。
あと、資料をあれ以上詳しくするのは負荷的な意味で無理。無限に時間があるならいくらでも詳しくしてもいいけど。
るりまの打ち合わせを前田さん、青木さん、yhara さん、西山さん、sheepman さんと自分の五人でやった。 まわりの人に無理言って配慮してもらったので、ちゃんと実のある話ができた。懇親会の参加者のみなさんありがとうございました。
決まった内容は、後日MLに流れるはずなので議事録担当な yhara さんに期待。
懇親会終了後は、ちょっとカフェでお茶して帰りました。
投稿者 okkez
行ってきた。
Gauche が楽しい。Scheme ってこんなに素敵なものだったなんて!なんでもっと早く勉強しなかったんだろう。
SICP と Gauche を同時に進めるのはいいアイデアだと思うので今後もずっと同日開催を続けてほしい。
以下、個人的なKPT(感想込み)
投稿者 okkez
コードを書いて晒してくれていたのは上記の人たち。
# 公式サイトにトラックバックしてくれてた中から抜粋しました
今回はその中から特に添削希望してたっぽい上二つを添削します。
# 例によって趣味が出てます。
ここでは添削後のコードを示しますので、添削前のコードはリンク先を参照してください。
ちなみに今回は時間の都合でログ解析の添削はやりません。あしからずご了承ください。
char_count = 0;
word_count = 0;
line_count = 0;
chars = Hash.new(0)
words = Hash.new(0)
File.open("text.txt") do |f|
f.each do |l|
char_count += l.size
l.scan(/./m) {|c| chars[c] += 1 }
l.strip.scan(/\w+|[^\s\w]+/) do |w|
words[w] += 1
word_count += 1
end
end
line_count = f.lineno
end
word_max_size = words.map{|w, n| w.size }.max
puts "文字数 #{char_count}"
puts "単語数 #{word_count}"
puts "行数 #{line_count}"
puts "文字出現頻度(文字 頻度(%) 回数)"
puts chars.sort_by {|c, n| -n }.map{|c, n|
sprintf("%-10s %4.2f%% %5d", c.dump, 100 * n/char_count.to_f, n)
}.join("\n")
puts "単語出現頻度(単語 頻度(%) 回数)"
puts words.sort_by {|w, n| -n }.map{|w, n|
sprintf("%-*s %4.2f%% %5d", word_max_size, w, 100 * n/word_count.to_f, n)
}.join("\n")
添削ポイント * printf を使う意味が少ないところでは使わないようにした * puts の方が短いため * 出現頻度のところで一つずつ printf してたのをやめた * リストを作ったならできるだけリストのまま処理した方がわかりやすいため * 単語出現頻度の方でレイアウトが崩れていたのを修正した * 正規表現も直そうかと思ったけどやめておいた(\Wを使えば済んだ?)
def words(str)
str.join.sub(/^\W+/, "").split(/\W+/)
end
str = ARGF.readlines
puts "#{str.size} lines."
puts "#{words(str).size} words."
puts "#{str.join.size} characters."
###
words = Hash.new(0)
str.join.sub(/^\W+/, "").split(/\W+/).each do |i|
words[i] += 1
end
puts words.sort_by{|k, v| v}.map{|k, v|
sprintf("%8d: %s", v, k)
}.join("\n")
###
chars = Hash.new(0)
(0x00..0x7e).each{|c| chars[c.chr] = 0 }
str.join.split(//).each do |c|
chars[c] += 1
end
chars.sort_by{|c| c[0][0] }.each_with_index{|c, idx|
printf("%6d %6s", c[1], c[0].dump)
puts if (idx + 1) % 8 == 0
}
添削ポイント * 分けて実行するのが面倒だったので一つのファイルにまとめました * 直す所が少なくて困りました * 比較的スコープが長い一文字変数はやめた * ゴルフしてた? * 文字別の所で登場回数ゼロの見えない文字も結果に表示する様にした * printf を使わずにやりたかったけど面倒だったのでやめた
投稿者 okkez
コードを書いて晒してくれていたのは上記の人たち。
# 公式サイトにトラックバックしてくれてた中から抜粋しました
今回はその中から特に添削希望してたっぽい上二つを添削します。
投稿者 okkez
こんな感じで進みました。
正直、まだ javascript は全然分かりませんが、雰囲気は理解できたようです。
そろそろ、この成果を活かしてコードを書いてみたいものです。
投稿者 okkez
いつも通りみんなの集合時間より早く行って簡単な打ち合わせ。
日本Rubyの会 公式Wiki - 第23回 Ruby/Rails勉強会@関西
よくも悪くも講義?って感じだった。 最後の方の内容が面白かっただけに尻切れとんぼっぽくなったのが残念。
やっぱり 30min ではわからなかった Monad
参加者大半おいてけぼり??
merb, capmping, ramaze の紹介。前二つはストヤン経由で聞いてたけど結局試してなくてごめんなさい。
今度、試す。
おもしろかった。久しぶりに燃えるセッションだった。 # って自分こんなにリフレクション好きだったっけ?
すごく勉強になった。要復習。
これくらいの濃さのセッションが毎回あるといいのだけど。
自分のセッション。
初級者レッスンと言いつつ、るりまの宣伝乙。 演習問題もリファレンスを見てやってもらう前提だったのでこんなものかと。
演習問題の最後に、使うかもしれないメソッド一覧を載せたのは良かったらしい。Keep
そう言えば、自分が発表する場合の時間の読み方がかなり正確になってきた気がする。