1 月 19
Hard Core Ruby
Image by rbieber via Flickr

Rubyは便利だけど遅い.

実行が遅い分,プログラムを書くコストは下がるので,それはトレードオフだが,それでもRubyのプログラムをできるだけ速く動かしたい時はそのプログラムの性能を評価する必要があります.

参考にしたのは,
まつもと直伝 プログラミングのオキテ 第13回 プログラムを高速化する

まつもと直伝 プログラミングのオキテ 第18回 プログラムを高速化する(その2)

詳しいことは上記のページを見れば丁寧に説明してあります.

基本的には

$ time ruby hoge.rb

でかかる時間が測定できる.値が結構変わるので,何回かやっていい値で評価するのがいい.
で、どの辺で時間を食ってるのか、ボトルネックを知るためには

$ time ruby -rprofile hoge.rb

で,見れます.

でもこれよりも,

$ ruby-prof hoge.rb

のほうが測定が早くできてよいみたい.

ubuntuであれば

$ sudo apt-get install ruby-prof

でインストールできます.

詳しいことは上記のサイトを見てもらうのがよいので省略.

Reblog this post [with Zemanta]
1 月 15

subetter
こないだ,twitterにくだらないギャグをpostするプログラムを書いたので,今度は他の人からの投稿を受け付けて,ギャグリストに追加するプログラムを書きました.

これで誰でも思いついたくだらないギャグをsubetterに言わせることができます.

進化したsubetter

ついでに,ギャグをテキストファイルに保存するのはなんかかっこ悪いので,MySQLにも入れることにしました.いずれMySQLに完全に移行したいですが,まだ両方やってます.

まだいくつか問題があって,MySQLにそのままじゃ入れられない文字の処理とか,全然よく分かってないのでその辺から修正しなきゃと思っています.

プログラムはこんな感じ.

require('rubygems')
gem('twitter4r','0.3.0')
require('twitter')
require "mysql"

flag = 0
msg = nil

my = Mysql::new("localhost", "user", "passwd", "db_name")

client =Twitter::Client.new(:login => 'subetter',:password => 'passwd')

client.messages(:received).each do |msg|
#メッセージのテキストを取得,改行文字を省く
joke = msg.text
joke = joke.strip

#メッセージの送り主を取得
user_name = msg.sender.screen_name

que = "SELECT * FROM jokes WHERE joke='" + joke + "'"
res = my.query(que)
res.each do |row|
flag = 1
end
#p flag

if flag == 0
sql = "INSERT INTO jokes VALUES ('','" + user_name + "','" + joke + "')"
#mysqlにギャグを登録
my.query(sql)
#テキストファイルにもギャグを登録
file = open("/home/jun/Dropbox/cyg/work/ruby/twitter/jokes.txt", 'a')
file.puts joke
file.close
else
flag = 0
end
end

exit