日本Rubyの会 公式Wiki – 第45回 Ruby/Rails勉強会@関西
約1年ぶり2回目の参加です。行きは暑さで汗だくになり、帰りは夕立でズブ濡れになる素敵な一日でした。
RubyでFM音源を鳴らそう
今回の勉強会参加のお目当て。DXなんちゃらってヤマハのFMシンセが実家にあったなー。
FM音源は音の波形を数学的に作り出すので、PCM音源に比べてメモリに優しい音源。
気になってた音が出る仕組みについては、Rubyで作った音の波をwaveファイルに書き出して再生されているようでした。
PCM音源もメモリに乗せた音のサンプルファイルを鳴らすので、ソフトウェアで音を鳴らすにはファイルを再生する方式が主流?
なんとなく仕組みがわかったことで、CUIで操作するプリミティブなソフトウェアシンセを作りたくなりました。
デバッガでデバッグしない
コードリーディングにデバッガを使うというのは目鱗でした。思えばコード読むとき脳内で同じようなことしてた。
Emacsのmulti-term上でrdebugを試してたんですが、ステップ実行中に該当ファイルを別ウィンドウに開いてくれてフリンジに印までついて超便利でした。
これからバリバリ活用しよう。
NoSQL をRubyで実践するための n個 の方法
RubyでMongoDBを使う方法。MongoDBのMongoとは「huMONGOus」らしいです。マッドマックスなDBですね。
何を勘違いしてたのか、KVSやNoSQLってメモリ上で扱うものだとばかり思ってました。
調べたところ永続化もできるようです。この分野の勉強を怠ってたことを激しく後悔。
Ruby初心者向けレッスン -イテレータを使う –
Array, Hash, Range等数え上げることができるオブジェクトに使えるイテレータについて。
Rubyでは、繰り返しはすべてイテレータで済ますのでforは使わないですよね。
ちなみに好きなイテレータはmapです。使い分ける派。
[1,2,3,4,5].map(&:to_s)
users.collect(&:name)
練習問題があり、おさらいができて楽しめました。
自分の回答は以下
2-1
nまでの階乗を求める方法。
いろんなLisp本でやったせいか階乗=再帰で解くものと考えてしまいましたが、Rubyではかなり単純化できますね。
2-2
アラビア数字がkey,漢数字がvalueなハッシュをつくる。
numbers = "零 一 二 三 四 五 六 七 八 九 十 十一 十二 十三 十四 十五"
Hash[numbers.split.each_with_index.map(&:reverse)]
最近、Rubyのメーリングリストで見かけたHashの生成方法を応用。
回答例でも似たようなものが紹介されていました。
2-3
シンボルの配列を文字列化してキャピタライズ化してソート。
syms = [:tokyo, :kyoto, :osaka, :kobe, :matsue, :sendai]
syms.map(&:to_s).map(&:capitalize).sort
できるだけブロックを使わないのが俺のジャスティス。
2-4
二重階乗を求めるメソッド。
def doublefactorial(n)
(1..n).select(&(n.odd? ? :odd? : :even?)).inject(:*)
end
三項演算子を使って短く美しく。
2-5
「エラトステネスのふるい」を使って2からnまでの素数を求めるメソッド。
def sieve_of_eratosthenes(n)
result = []
(2..n).each do |n|
unless result.any?{|x| n % x == 0 }
result << n
end
end
result
end
「エラトステネスのふるい」がわからなかったのでwikipediaのページを斜め読み。
期待する素数の配列は求められますが、篩えてないし計算量が多すぎですね。
2-6
二項分布を生成するメソッド。
SICPで似たような問題をやった気がしたけど、時間切れ。
新発見もあり有意義な勉強会でした。運営の皆様、他の参加者の皆様お疲れ様でした。