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 とか読んでだいたい使い方はわかったが、 ちと思案中。