GW前半

GW前半ですが、全く普段の週末と変わらない過ごし方をしております。
REMPでやれる作業を進めようかと運営関係者が閲覧できる管理画面などを作っておりました。最初はPadrinoのadminで作ろうと考えたのですが、結局スクラッチしました。

f:id:hideack:20130429163659p:plain

利用状況や再生されている動画のランキングやログインアクティブ数などをとれる様にして便利。あとは本体のチューニングもしていったり新機能出したりしていって、もっとたくさんの人に使ってもらえる様にしたい。

Youtube動画を連続再生できるREMPのその後(5) – Sqale利用事例に掲載されました!

REMPが動いているホスティングサービスSqale利用事例ページにREMPとストーリーボードが紹介されました。

f:id:hideack:20130427152912p:plain

REMPはこちらから。

ActiveRecordで結果を単純な配列を得る(特定のカラムの)

特定のカラムを指定して検索した結果は素直にすると、

Visitlog.select([:normalize_count]).where(:group_id => 3, :visitor => '123')
=> [#<Visitlog normalize_count: 0.0833333>, #<Visitlog normalize_count: 0.0833333>,...]

となるのだけど、これを [0.08333, 0.0833, ...] といった具合の配列で得たい場合、ActiveRecordにpluckというメソッドがあるのでそれを利用すればよかったことをやっと知った...。

Visitlog.where(:group_id => 3, :visitor => '2457892').pluck(:normalize_count)
=> [0.0833333, 0.0833333, ...]

mapしたりする方法とか散見したのだけど、この方法がスマートですね。

Ruby gem 'parallel' で並列処理

ふたまわり位遅れてますが、gemライブラリのparallelを使うと並列処理が簡単に書けて便利。
例として、とあるグループ別に記録されている訪問ログに対して各訪問者別の処理をする場合、以下の様な具合でかける。

require 'parallel'
processor_count = Parallel.processor_count #CPUコア数取得
Group.select(:id).each do |group|
visitors = Visitlog.select(:visitor).uniq.where(:group_id => group.id)
Parallel.each(visitors, in_threads: processor_count) do |visitor|
visitor_process(group.id, visitor.id)
end
end

Parallel.each の箇所で引数の in_threads で与えられた数だけスレッドが作られて適宜実行される。この場合、各訪問者に対して行われる処理は独立なのでこの書き方で大丈夫ですね。

3月に読んだ本

いろいろ読んだのだけど、読了したのは8冊。読みかけて止めてる本もいくつかあったりするのですが、正確に読了と言えるのはこの数になってしまう。
今月も、相変わらず水木しげる関連のエッセイを2冊読んだ。


hideackの本棚 - 2013年03月 (8作品)
WEB+DB PRESS Vol.73
設樂洋爾
読了日:03月09日


powered by booklog