ruby 周り
比較的ヒマなのと、リハビリを兼ねて Ruby をいじってみる。 fedora もいつのまにか 12 になってる。 fedora 11 では update しても ruby は 1.8.6 のまま。 1.8.7 または 1.9.1 では高速化しているというが、 1.9.1 使うと古いパッケージが動かない。 1.8.7 ならなんとかいけるか。 rails は使ってないので私には関係ないもんね。 ていうかもう、jawiki の解析に1週間かかるのをどげんかせんといかんと思う。 最適化して、一番内側のループちょっといじっただけで倍くらい速くなるならしたい。 ruby のバージョンアップもね。
fedora も upgrade したくないわけではないのだが。
ま、とりあえず fedora 11 の update から。
まだ少し予算があるから一台 poweredge 安いの買って fedora 12 入れてみるか。 fedora のバージョンアップに合わせて poweredge をこつこつ買うってのも良いよね。
ruby 1.9.1 にするのはいろんなパッケージが対応してからで良いよね。
メモリはやはり4GBあらまほしけれ。 fedora の update にかかる時間が全然違うっぽい。
% cumulative self self total time seconds seconds calls ms/call ms/call name 66.62 3919.32 3919.32 2 1959660.00 2562660.00 Kernel.open 8.48 4418.15 498.83 44022878 0.01 0.01 IO#gets 6.31 4789.16 371.01 2814690 0.13 0.17 Object#xmldecode 4.67 5064.00 274.84 30847 8.91 24.42 Array#each 2.82 5230.01 166.01 3469 47.86 72.67 Array#sort 2.04 5350.00 119.99 11258760 0.01 0.01 String#gsub! 1.09 5413.92 63.92 3873461 0.02 0.02 Array#[] 0.99 5471.94 58.02 3470 16.72 243.02 Hash#each_pair 0.93 5526.88 54.94 4056750 0.01 0.01 Time#gm 0.76 5571.55 44.67 4056026 0.01 0.01 Fixnum#+ 0.72 5614.10 42.55 4056750 0.01 0.01 Float#< 0.72 5656.65 42.55 4056750 0.01 0.01 Time#- 0.69 5697.22 40.57 2512900 0.02 0.02 Fixnum#== 0.68 5737.30 40.08 1747299 0.02 0.02 Array#<< 0.64 5775.08 37.78 1676033 0.02 0.02 Hash#[]= 0.51 5805.31 30.23 1672479 0.02 0.02 Fixnum#<=> 0.45 5831.56 26.25 1564378 0.02 0.02 Hash#include? 0.27 5847.69 16.13 16922 0.95 1.44 Array#include? 0.26 5862.75 15.06 12786 1.18 1.18 Array#join 0.16 5871.98 9.23 513294 0.02 0.02 Hash#[] 0.06 5875.40 3.42 349011 0.01 0.01 Fixnum#< 0.03 5877.33 1.93 69 27.97 27.97 GC.start 0.03 5879.21 1.88 39393 0.05 0.05 String#+ 0.03 5880.94 1.73 11267 0.15 0.15 Mysql#quote 0.01 5881.47 0.53 14169 0.04 0.06 Class#new 0.01 5881.89 0.42 24355 0.02 0.02 Fixnum#to_s 0.00 5882.14 0.25 3764 0.07 0.07 Mysql#query 0.00 5882.37 0.23 10407 0.02 0.02 Array#initialize 0.00 5882.58 0.21 12786 0.02 0.02 Array#empty? 0.00 5882.74 0.16 3759 0.04 7.44 Object#userfunc 0.00 5882.85 0.11 3762 0.03 0.03 Hash#initialize 0.00 5882.96 0.11 3759 0.03 0.03 Array#size 0.00 5883.06 0.10 7518 0.01 0.01 Fixnum#% 0.00 5883.12 0.06 3759 0.02 0.02 Array#uniq! 0.00 5883.16 0.04 3759 0.01 0.01 Hash#empty? 0.00 5883.17 0.01 1 10.00 10.00 Kernel.require 0.00 5883.17 0.00 7 0.00 0.00 Class#inherited 0.00 5883.17 0.00 1 0.00 0.00 Hash#size 0.00 5883.17 0.00 11 0.00 0.00 Kernel.singleton_method_added 0.00 5883.17 0.00 2 0.00 0.00 IO#close 0.00 5883.17 0.00 1 0.00 0.00 Fixnum#/ 0.00 5883.17 0.00 6 0.00 0.00 IO#write 0.00 5883.17 0.00 1 0.00 0.00 Mysql#initialize 0.00 5883.17 0.00 3 0.00 0.00 IO#puts 0.00 5883.17 0.00 2 0.00 0.00 Time#now 0.00 5883.17 0.00 1 0.00 0.00 Time#strftime 0.00 5883.17 0.00 1 0.00 0.00 File#initialize 0.00 5883.17 0.00 2 0.00 0.00 Time#initialize 0.00 5883.17 0.00 10 0.00 0.00 Hash#default 0.00 5883.17 0.00 1 0.00 0.00 Mysql#close 0.00 5883.17 0.00 2 0.00 0.00 Fixnum#* 0.00 5883.17 0.00 1 0.00 0.00 Mysql#new 0.00 5883.17 0.00 131 0.00 0.00 Module#method_added 0.00 5883.17 0.00 1 0.00 5883170.00 #toplevel
ruby -r profile の結果。 これはどう解釈すればいいんだ。 Kernel.openとgetsはファイル読み込みだから、これが時間かかるのは仕方ないよな。 どうしろと。
ふむ。gsubにけっこう時間がかかっているようだ。 Rubyじか書きよりパッケージを使った方が良いらしいから、
require 'cgi'
して、CGI.unescapeHTML を代わりに使ってみる。
ruby をソースからビルドしたせいで mysql-ruby も入れ直し。
http://rubyforge.org/frs/download.php/51087/mysql-ruby-2.8.1.tar.gz
を拾ってくる。
ruby extconf.rb --with-mysql-config=/usr/lib/mysql/mysql_config
とか。mysql-devel 必要。
levenshtein がうまくビルドできなくていらいら。
ruby build.rb
とかやってもなんかだめ。 build.rb 読んで system とかでやってる辺りを手作業でうだうだやったらできた。
ダンプ全体を読ませるのは無茶だが、 page要素ごとに分解して xml パーザに読ませちゃどうかと思った。 nokogiri とか libxml-ruby などが速いらしい。 nokogiri tutorials とか読んでだいたい使い方はわかったが、 ちと思案中。